[Openib-windows] ipoib dhcp patch
Fab Tillier
ftillier at windows.microsoft.com
Mon Jan 22 10:48:53 PST 2007
I mean the draft. I guess if the OFA members decide that the IPoIB
draft is useless and do something else for DHCP, that's fine. The IPoIB
draft can serve as a starting point, though.
The current code does have problems, and as far as I know it only works
if the DHCP server is serving addresses directly on the IB subnet, and
is running on Windows (that's the only configuration I ever tested it
in).
I agree the goals should be proper interop with DHCP servers, no matter
what OS the DHCP server runs on or whether the DHCP requests are being
served across a IB to Eth router/gateway.
-Fab
From: Tzachi Dar [mailto:tzachid at mellanox.co.il]
Sent: Monday, January 22, 2007 10:43 AM
To: Fab Tillier; Anatoly Lisenko; Yossi Leybovich;
openib-windows at openib.org
Cc: Tzahi Oved
Subject: RE: [Openib-windows] ipoib dhcp patch
Hi Fab,
Can you point us to the ipoib dhcp spec? I thought there was only a
draft that no one was using.
I guess that a full solution will also have to work with the Linux
implementation.
In any case the current code changes has some problems: 1) It changes
the size of the packet but doesn't change the size in the ip header.
(this can be easily fixed) 2) it bases the request identifier on the
guid + qp_num. As we don't have a mechanism for keeping the same QP
number one might get a different ip after restarting the driver. This
one is harder to resolve.
Thanks
Tzachi
________________________________
From: Fab Tillier [mailto:ftillier at windows.microsoft.com]
Sent: Monday, January 22, 2007 7:27 PM
To: Anatoly Lisenko; Tzachi Dar; Yossi Leybovich;
openib-windows at openib.org
Cc: Tzahi Oved
Subject: RE: [Openib-windows] ipoib dhcp patch
Hi Anatoly,
When you have the DHCP server on the eth side, I assume it is
communicating with the IB hosts through your IB to Ethernet gateway.
Your gateway should perform conversion of DHCP packets to/from the IPoIB
DHCP format, and can't just forward the Ethernet DHCP packets unchanged.
See the IPoIB spec for what things need to work on DHCP.
Also, instead of disabling DHCP support, how about fixing it so
that it send properly formed packets (as per IPoIB spec) and then
convert them to the OS so that the OS is happy with them. You can use
netmon on the host to snoop the network traffic and look at the DHCP
packet as it's given from the OS to the IPoIB driver and from the IPoIB
driver to the OS.
Disabling the DHCP packet conversion makes the DHCP packets on
the wire not compliant to the IPoIB spec.
-Fab
From: openib-windows-bounces at openib.org
[mailto:openib-windows-bounces at openib.org] On Behalf Of Anatoly Lisenko
Sent: Monday, January 22, 2007 3:53 AM
To: Tzachi Dar; Yossi Leybovich; openib-windows at openib.org
Cc: Tzahi Oved
Subject: [Openib-windows] ipoib dhcp patch
Hi,
I saw that ipoib interface fail to get automatic ip address when
DHCP server run on eth side.
This caused by changing DHCP packet fields at
__send_mgr_filter_dhcp().
I run ethereal on eth side and it show that the DHCP packet from
ipoib arrive damaged.
I think this cause DHCP server to ignore this packet.
But if DHCP server run on IB side than ipoib then interface
success to get automatic ip.
This work because in __recv_dhcp() ipoib change all DHCP packet
fields like in the DHCP packet arrived from ETH side.
I attach patch that disable all changes to DHCP packets:
1. All changed related to DHCP placed into #ifdef
IPOIB_DHCP_HACK ... #endif
2. IPOIB_DHCP_HACK isn't defined.
Index: ulp/ipoib/kernel/ipoib_port.c
===================================================================
--- ulp/ipoib/kernel/ipoib_port.c (revision 570)
+++ ulp/ipoib/kernel/ipoib_port.c (working copy)
@@ -2089,7 +2089,9 @@
dhcp_pkt_t *p_dhcp;
uint8_t *p_option;
uint8_t *p_cid = NULL;
+#ifdef IPOIB_DHCP_HACK
ib_gid_t gid;
+#endif
uint8_t msg = 0;
IPOIB_ENTER( IPOIB_DBG_RECV );
@@ -2168,12 +2170,15 @@
("Failed to find required
Client-identifier option.\n") );
return IB_INVALID_SETTING;
}
+#ifdef IPOIB_DHCP_HACK
if( p_dhcp->htype != DHCP_HW_TYPE_IB )
{
IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR,
IPOIB_DBG_ERROR,
("Invalid hardware address type.\n") );
return IB_INVALID_SETTING;
}
+#endif //#ifdef IPOIB_DHCP_HACK
+
break;
/* message from DHCP server */
case DHCPOFFER:
@@ -2186,6 +2191,8 @@
("Invalide message type.\n") );
return IB_INVALID_PARAMETER;
}
+
+#ifdef IPOIB_DHCP_HACK
p_eth->type.ip.prot.udp.hdr.chksum = 0;
p_dhcp->htype = DHCP_HW_TYPE_ETH;
p_dhcp->hlen = HW_ADDR_LEN;
@@ -2216,6 +2223,8 @@
status = ipoib_mac_from_guid(
gid.unicast.interface_id, (mac_addr_t*)&p_cid[3] );
p_cid[HW_ADDR_LEN + 3] = DHCP_OPT_END; //terminate
tag
}
+#endif //#ifdef IPOIB_DHCP_HACK
+
IPOIB_EXIT( IPOIB_DBG_RECV );
return status;
}
@@ -3160,8 +3169,10 @@
dhcp_pkt_t *p_ib_dhcp;
uint8_t *p_option, *p_cid = NULL;
uint8_t msg = 0;
+#ifdef IPOIB_DHCP_HACK
size_t len;
ib_gid_t gid;
+#endif //#ifdef IPOIB_DHCP_HACK
IPOIB_ENTER( IPOIB_DBG_SEND );
@@ -3236,6 +3247,7 @@
case DHCPRELEASE:
case DHCPINFORM:
/* Fix up the client identifier option */
+#ifdef IPOIB_DHCP_HACK
if( p_cid )
{
/* do we need to replace it ? len eq ETH MAC
sz 'and' MAC is mine */
@@ -3295,6 +3307,8 @@
p_ib_dhcp->htype = DHCP_HW_TYPE_IB;
p_ib_dhcp->hlen = 0;
cl_memclr( p_ib_dhcp->chaddr,
sizeof(p_ib_dhcp->chaddr) );
+#endif //#ifdef IPOIB_DHCP_HACK
+
break;
/* Server messages. */
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20070122/369c281d/attachment.html>
More information about the ofw
mailing list