[ofw] patch: allow dhcp to work also when the guids are not matchedby the GUID to Mac algorithm
Tzachi Dar
tzachid at mellanox.co.il
Sun Mar 8 05:00:44 PDT 2009
Applied on 2016.
Thanks
Tzachi
________________________________
From: ofw-bounces at lists.openfabrics.org
[mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Tzachi Dar
Sent: Monday, March 02, 2009 4:03 PM
To: ofw at lists.openfabrics.org
Subject: [ofw] patch: allow dhcp to work also when the guids are
not matchedby the GUID to Mac algorithm
This patch allows DHCP to also work with an arbitrary GUID.
Please note that this patch doesn't change the client identifier
that is being transferred on the wire.
What it does is change the client identifier that is being
passed to windows. Instead of passing the Mac address that we have been
able to create from the GUID, it passes the GUID itself (which is always
unique). Please note that for guids that didn't pass our algorithm we
used to pass a number that could change from time to time. Now we pass
the GUID itself which remains after reboots.
Patch was tested on 2003 and 2008.
One thing that I have found out was that in the function
__send_mgr_filter_dhcp there was one case in which windows was sending
us a client id which is not in the format that we have expected. I'm not
sure if our handling of this is correct, and I have marked this with an
assert to see if it ever happens.
Thanks
Tzachi
Index: ipoib_port.c
===================================================================
--- ipoib_port.c (revision 4004)
+++ ipoib_port.c (working copy)
@@ -2219,7 +2219,6 @@
dhcp_pkt_t *p_dhcp;
uint8_t *p_option;
uint8_t *p_cid = NULL;
- ib_gid_t gid;
uint8_t msg = 0;
IPOIB_ENTER( IPOIB_DBG_RECV );
@@ -2340,18 +2339,14 @@
* accesses to the contents.
* Recover CID to standard type.
*/
- cl_memcpy( &gid, &p_cid[7], sizeof(ib_gid_t) );
- p_cid[1] = HW_ADDR_LEN +1;// CID length
- p_cid[2] = DHCP_HW_TYPE_ETH;// CID type
- status = ipoib_mac_from_guid( gid.unicast.interface_id,
p_port->p_adapter->params.guid_mask, (mac_addr_t*)&p_cid[3] );
- if (status == IB_INVALID_GUID_MASK)
- {
- IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_ERROR,
- ("Invalid GUID mask received, rejecting it") );
- ipoib_create_log(p_port->p_adapter->h_adapter,
GUID_MASK_LOG_INDEX, EVENT_IPOIB_WRONG_PARAMETER_WRN);
- status = IB_SUCCESS;
- }
- p_cid[HW_ADDR_LEN + 3] = DHCP_OPT_END; //terminate tag
+
+ CL_ASSERT(sizeof(ib_net64_t) == 8);
+
+ p_cid[1] = sizeof (ib_net64_t) + 1;// CID length
+ p_cid[2] = DHCP_HW_TYPE_ETH;// CID type
+ RtlMoveMemory( &p_cid[3], &p_cid[15], sizeof (ib_net64_t) );
+ RtlFillMemory(&p_cid[11], 12, 0);
+ p_cid[sizeof (ib_net64_t) + 3] = DHCP_OPT_END; //terminate
tag
}
IPOIB_EXIT( IPOIB_DBG_RECV );
return status;
@@ -3613,6 +3608,7 @@
}
else
{
+ ASSERT(FALSE); // Do we ever reach here? does it work
correct?
p_cid[2] = DHCP_HW_TYPE_IB;
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20090308/22efb124/attachment.html>
More information about the ofw
mailing list