[ofw] [Patch][IPoIB[IPoIB_NDIS6_CM] GUID2MAC translation changes
Alex Naslednikov
xalex at mellanox.co.il
Tue Sep 21 08:15:37 PDT 2010
Applied at 2940
From: Alex Naslednikov
Sent: Sunday, September 19, 2010 4:23 PM
To: ofw at lists.openfabrics.org
Subject: [ofw][Patch][IPoIB[IPoIB_NDIS6_CM] GUID2MAC translation changes
Guids supported by several new vendors can't be distinguished only by first 2 bytes.
This patch adds 3-rd byte of GUID to the translation table.
Signed-off by: Alexander Naslednikov (xalex at mellanox.co.il)
Index: ipoib/kernel/ipoib_xfr_mgr.c
===================================================================
--- ipoib/kernel/ipoib_xfr_mgr.c (revision 2934)
+++ ipoib/kernel/ipoib_xfr_mgr.c (working copy)
@@ -40,13 +40,37 @@
const ipoib_guid2mac_translation_t guid2mac_table[] = {
- {0x30, 0x48, 0xE7},
- {0x05, 0xAD, 0xE7},
- {0x18, 0x8B, 0xE7},
- {0x1A, 0x4B, 0xE7},
- {0x17, 0x08, 0xE7},
- {0x1E, 0x0B, 0xE7},
+ {0x00, 0x30, 0x48, 0xE7},
+ {0x00, 0x05, 0xAD, 0xE7},
+ {0x00, 0x18, 0x8B, 0xE7},
+ {0x00, 0x1A, 0x4B, 0xE7},
+ {0x00, 0x17, 0x08, 0xE7},
+ {0x00, 0x1E, 0x0B, 0xE7},
- {0x00, 0x00, 0x00},
+ {0x00, 0x03, 0xBA, 0xE7},
+ {0x00, 0x05, 0xAD, 0xE7},
+ {0x00, 0x0D, 0x9D, 0xE7},
+ {0x00, 0x11, 0x0A, 0xE7},
+ {0x00, 0x11, 0x85, 0xE7},
+ {0x00, 0x12, 0x79, 0xE7},
+ {0x00, 0x13, 0x21, 0xE7},
+ {0x00, 0x14, 0x38, 0xE7},
+ {0x00, 0x16, 0x35, 0xE7},
+ {0x00, 0x17, 0x08, 0xE7},
+ {0x00, 0x17, 0xA4, 0xE7},
+ {0x00, 0x18, 0x8B, 0xE7},
+ {0x00, 0x18, 0xFE, 0xE7},
+ {0x00, 0x19, 0xBB, 0xE7},
+ {0x00, 0x1A, 0x4B, 0xE7},
+ {0x00, 0x1B, 0x78, 0xE7},
+ {0x00, 0x1E, 0x0B, 0xE7},
+ {0x00, 0x22, 0x64, 0xE7},
+ {0x00, 0x23, 0x7D, 0xE7},
+ {0x00, 0x25, 0x90, 0xE7},
+ {0x00, 0x30, 0x48, 0xE7},
+ {0x00, 0x80, 0x5F, 0xE7},
+
+ {0x00, 0x00, 0x00, 0x00},
};
+
Index: ipoib/kernel/ipoib_xfr_mgr.h
===================================================================
--- ipoib/kernel/ipoib_xfr_mgr.h (revision 2934)
+++ ipoib/kernel/ipoib_xfr_mgr.h (working copy)
@@ -93,6 +93,7 @@
*/
typedef struct _ipoib_guid2mac_translation_
{
+ uint8_t first_byte;
uint8_t second_byte;
uint8_t third_byte;
uint8_t guid_mask;
@@ -400,26 +401,26 @@
uint32_t laa, idx = 0;
/* Port guid is in network byte order. OUI is in lower 3 bytes. */
- if( p_guid[0] == 0 )
- {
- if( p_guid[1] == 0x02 && p_guid[2] == 0xc9 )
+
+ if( p_guid[0] == 0 && p_guid[1] == 0x02 && p_guid[2] == 0xc9 )
{
status = ipoib_mac_from_mlx_guid( port_guid, p_mac_addr );
}
- else if( p_guid[1] == 0x08 && p_guid[2] == 0xf1 )
+ else if( p_guid[0] == 0 && p_guid[1] == 0x08 && p_guid[2] == 0xf1 )
{
status = ipoib_mac_from_voltaire_guid( port_guid, p_mac_addr );
}
- else if( p_guid[1] == 0x06 && p_guid[2] == 0x6a )
+ else if( p_guid[0] == 0 && p_guid[1] == 0x06 && p_guid[2] == 0x6a )
{
status = ipoib_mac_from_sst_guid( port_guid, p_mac_addr );
}
else
{
while( guid2mac_table[idx].second_byte != 0x00 ||
- guid2mac_table[idx].third_byte != 0x00 )
+ guid2mac_table[idx].third_byte != 0x00 ) //first byte can be equal to 0
{
- if( p_guid[1] == guid2mac_table[idx].second_byte &&
+ if( p_guid[0] == guid2mac_table[idx].first_byte &&
+ p_guid[1] == guid2mac_table[idx].second_byte &&
p_guid[2] == guid2mac_table[idx].third_byte )
{
status = ipoib_mac_from_guid_mask(p_guid, guid2mac_table[idx].guid_mask,
@@ -432,8 +433,8 @@
if( status == IB_SUCCESS )
return status;
- }
+
if( guid_mask )
return ipoib_mac_from_guid_mask( p_guid, guid_mask, p_mac_addr );
Index: ipoib_NDIS6_CM/kernel/ipoib_xfr_mgr.cpp
===================================================================
--- ipoib_NDIS6_CM/kernel/ipoib_xfr_mgr.cpp (revision 2934)
+++ ipoib_NDIS6_CM/kernel/ipoib_xfr_mgr.cpp (working copy)
@@ -41,36 +41,36 @@
const ipoib_guid2mac_translation_t guid2mac_table[] = {
- {0x30, 0x48, 0xE7},
- {0x05, 0xAD, 0xE7},
- {0x18, 0x8B, 0xE7},
- {0x1A, 0x4B, 0xE7},
- {0x17, 0x08, 0xE7},
- {0x1E, 0x0B, 0xE7},
+ {0x00, 0x30, 0x48, 0xE7},
+ {0x00, 0x05, 0xAD, 0xE7},
+ {0x00, 0x18, 0x8B, 0xE7},
+ {0x00, 0x1A, 0x4B, 0xE7},
+ {0x00, 0x17, 0x08, 0xE7},
+ {0x00, 0x1E, 0x0B, 0xE7},
- {0x03, 0xBA, 0xE7},
- {0x05, 0xAD, 0xE7},
- {0x0D, 0x9D, 0xE7},
- {0x11, 0x0A, 0xE7},
- {0x11, 0x85, 0xE7},
- {0x12, 0x79, 0xE7},
- {0x13, 0x21, 0xE7},
- {0x14, 0x38, 0xE7},
- {0x16, 0x35, 0xE7},
- {0x17, 0x08, 0xE7},
- {0x17, 0xA4, 0xE7},
- {0x18, 0x8B, 0xE7},
- {0x18, 0xFE, 0xE7},
- {0x19, 0xBB, 0xE7},
- {0x1A, 0x4B, 0xE7},
- {0x1B, 0x78, 0xE7},
- {0x1E, 0x0B, 0xE7},
- {0x22, 0x64, 0xE7},
- {0x23, 0x7D, 0xE7},
- {0x25, 0x90, 0xE7},
- {0x30, 0x48, 0xE7},
- {0x80, 0x5F, 0xE7},
+ {0x00, 0x03, 0xBA, 0xE7},
+ {0x00, 0x05, 0xAD, 0xE7},
+ {0x00, 0x0D, 0x9D, 0xE7},
+ {0x00, 0x11, 0x0A, 0xE7},
+ {0x00, 0x11, 0x85, 0xE7},
+ {0x00, 0x12, 0x79, 0xE7},
+ {0x00, 0x13, 0x21, 0xE7},
+ {0x00, 0x14, 0x38, 0xE7},
+ {0x00, 0x16, 0x35, 0xE7},
+ {0x00, 0x17, 0x08, 0xE7},
+ {0x00, 0x17, 0xA4, 0xE7},
+ {0x00, 0x18, 0x8B, 0xE7},
+ {0x00, 0x18, 0xFE, 0xE7},
+ {0x00, 0x19, 0xBB, 0xE7},
+ {0x00, 0x1A, 0x4B, 0xE7},
+ {0x00, 0x1B, 0x78, 0xE7},
+ {0x00, 0x1E, 0x0B, 0xE7},
+ {0x00, 0x22, 0x64, 0xE7},
+ {0x00, 0x23, 0x7D, 0xE7},
+ {0x00, 0x25, 0x90, 0xE7},
+ {0x00, 0x30, 0x48, 0xE7},
+ {0x00, 0x80, 0x5F, 0xE7},
- {0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
};
Index: ipoib_NDIS6_CM/kernel/ipoib_xfr_mgr.h
===================================================================
--- ipoib_NDIS6_CM/kernel/ipoib_xfr_mgr.h (revision 2934)
+++ ipoib_NDIS6_CM/kernel/ipoib_xfr_mgr.h (working copy)
@@ -93,6 +93,7 @@
*/
typedef struct _ipoib_guid2mac_translation_
{
+ uint8_t first_byte;
uint8_t second_byte;
uint8_t third_byte;
uint8_t guid_mask;
@@ -409,26 +410,25 @@
uint32_t laa, idx = 0;
/* Port guid is in network byte order. OUI is in lower 3 bytes. */
- if( p_guid[0] == 0 )
- {
- if( p_guid[1] == 0x02 && p_guid[2] == 0xc9 )
+ if( p_guid[0] == 0 && p_guid[1] == 0x02 && p_guid[2] == 0xc9 )
{
status = ipoib_mac_from_mlx_guid( port_guid, p_mac_addr );
}
- else if( p_guid[1] == 0x08 && p_guid[2] == 0xf1 )
+ else if( p_guid[0] == 0 && p_guid[1] == 0x08 && p_guid[2] == 0xf1 )
{
status = ipoib_mac_from_voltaire_guid( port_guid, p_mac_addr );
}
- else if( p_guid[1] == 0x06 && p_guid[2] == 0x6a )
+ else if( p_guid[0] == 0 && p_guid[1] == 0x06 && p_guid[2] == 0x6a )
{
status = ipoib_mac_from_sst_guid( port_guid, p_mac_addr );
}
else
{
while( guid2mac_table[idx].second_byte != 0x00 ||
- guid2mac_table[idx].third_byte != 0x00 )
+ guid2mac_table[idx].third_byte != 0x00 ) //first byte can be equal to 0
{
- if( p_guid[1] == guid2mac_table[idx].second_byte &&
+ if( p_guid[0] == guid2mac_table[idx].first_byte &&
+ p_guid[1] == guid2mac_table[idx].second_byte &&
p_guid[2] == guid2mac_table[idx].third_byte )
{
status = ipoib_mac_from_guid_mask(p_guid, guid2mac_table[idx].guid_mask,
@@ -441,7 +441,6 @@
if( status == IB_SUCCESS )
return status;
- }
if( guid_mask )
return ipoib_mac_from_guid_mask( p_guid, guid_mask, p_mac_addr );
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20100921/307a7fd4/attachment.html>
More information about the ofw
mailing list