*/\r
#define MAX_BUNDLE_ID_LENGTH 32\r
\r
-\r
-#define IB_MTU 2048\r
+/* MLX4 supports 4K MTU */\r
+#define IB_MTU 4096\r
/*\r
* Header length as defined by IPoIB spec:\r
* http://www.ietf.org/internet-drafts/draft-ietf-ipoib-ip-over-infiniband-04.txt\r
ipoib_resume_oids(\r
IN ipoib_adapter_t* const p_adapter );\r
\r
+#define IPOIB_OFFSET(field) ((UINT)FIELD_OFFSET(ipoib_params_t,field))\r
+#define IPOIB_SIZE(field) sizeof(((ipoib_params_t*)0)->field)\r
+#define IPOIB_INIT_NDIS_STRING(str) \\r
+ (str)->Length = 0; \\r
+ (str)->MaximumLength = 0; \\r
+ (str)->Buffer = NULL;\r
+\r
+\r
+\r
#endif /* _IPOIB_DRIVER_H_ */\r
#include "ip_stats.h"\r
#include <ip_packet.h>\r
\r
+\r
#include <complib/cl_packon.h>\r
/****s* IPoIB Driver/ipoib_hw_addr_t\r
* NAME\r
{\r
const uint8_t *p_guid = (const uint8_t*)&port_guid;\r
uint32_t low24;\r
+ net16_t guid_middle;\r
\r
/* Port guid is in network byte order. OUI is in lower 3 bytes. */\r
ASSERT( p_guid[0] == 0x00 && p_guid[1] == 0x02 && p_guid[2] == 0xc9 );\r
\r
- if( (port_guid & CL_HTON64( 0x000000ffff000000 )) !=\r
- CL_HTON64(0x0000000200000000))\r
- {\r
+ guid_middle = (net16_t)((port_guid & CL_HTON64( 0x000000ffff000000 )) >>24);\r
+\r
+ if (guid_middle == 2) {\r
+ p_mac_addr->addr[0] = 0;\r
+ } else if (guid_middle == 3) {\r
+ p_mac_addr->addr[0] = 2;\r
+ } else {\r
return IB_INVALID_GUID;\r
}\r
-\r
low24 = ((uint32_t)cl_ntoh64( port_guid ) & 0x00FFFFFF);\r
\r
- p_mac_addr->addr[0] = p_guid[0];\r
p_mac_addr->addr[1] = p_guid[1];\r
p_mac_addr->addr[2] = p_guid[2];\r
p_mac_addr->addr[3] = (uint8_t)(low24 >> 16);\r
return IB_SUCCESS;\r
}\r
\r
+/****f* IPOIB/ipoib_mac_from_hp_guid\r
+* NAME\r
+* ipoib_mac_from_hp_guid\r
+*\r
+* DESCRIPTION\r
+* Generates an ethernet MAC address given a HP port GUID.\r
+*\r
+* SYNOPSIS\r
+*/\r
+static inline ib_api_status_t\r
+ipoib_mac_from_hp_guid(\r
+ IN const net64_t port_guid,\r
+ OUT mac_addr_t* const p_mac_addr )\r
+{\r
+ const uint8_t *p_guid = (const uint8_t*)&port_guid;\r
+\r
+ /* Port guid is in network byte order. OUI is in lower 3 bytes. */\r
+ ASSERT( p_guid[0] == 0x00 && p_guid[1] == 0x1a && p_guid[2] == 0x4b);\r
+\r
+ p_mac_addr->addr[0] = 0;\r
+ p_mac_addr->addr[1] = 0x1a;\r
+ p_mac_addr->addr[2] = 0x4b; \r
+ p_mac_addr->addr[3] = p_guid[5];\r
+ p_mac_addr->addr[4] = p_guid[6];\r
+ p_mac_addr->addr[5] = p_guid[7];\r
+\r
+ return IB_SUCCESS;\r
+}\r
\r
/*\r
* PARAMETERS\r
if( status == IB_SUCCESS )\r
return IB_SUCCESS;\r
}\r
- \r
+ else if( p_guid[1] == 0x1a && p_guid[2] == 0x4b )\r
+ {\r
+ status = ipoib_mac_from_hp_guid( port_guid, p_mac_addr );\r
+ if( status == IB_SUCCESS )\r
+ return IB_SUCCESS;\r
+ }\r
}\r
+\r
/* Value of zero is reserved. */\r
laa = cl_atomic_inc( &g_ipoib.laa_idx );\r
\r
sizeof(VOLTAIRE_GUID_PREFIX) );\r
}\r
\r
+\r
#ifdef __cplusplus\r
}\r
#endif\r