[ofw] [IPoIB][patch 3/3] Adding support to dell guid and user-define mask for guid generation - revisited

Alex Naslednikov xalex at mellanox.co.il
Mon Sep 22 09:09:26 PDT 2008


This patch reuses ipoib_mac_from_general_guid and contains important
bugfix
Signed-off by: Alexander Naslednikov (xalex at mellanox.co.il)
Index: D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_adapter.c
===================================================================
--- D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_adapter.c
(revision 3221)
+++ D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_adapter.c
(revision 3222)
@@ -121,7 +121,9 @@
 NDIS_STATUS
 ipoib_get_adapter_params(
 	IN				NDIS_HANDLE* const
wrapper_config_context,
-	IN	OUT			ipoib_adapter_t
*p_adapter );
+	IN	OUT			ipoib_adapter_t
*p_adapter,
+	OUT				PUCHAR
*p_mac,
+	OUT				UINT
*p_len);
 
 
 /* Implementation */
@@ -134,6 +136,8 @@
 	ipoib_adapter_t		*p_adapter;
 	ib_api_status_t		status;
 	cl_status_t			cl_status;
+	PUCHAR				mac;
+	UINT				len;
 
 	IPOIB_ENTER( IPOIB_DBG_INIT );
 
@@ -185,6 +189,17 @@
 		return IB_ERROR;
 	}
 
+	/* Read configuration parameters. */
+	status = ipoib_get_adapter_params( wrapper_config_context,
+		p_adapter , &mac, &len);
+	if( status != NDIS_STATUS_SUCCESS )
+	{
+		cl_obj_destroy( &p_adapter->obj );
+		IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
+			("ipoib_get_adapter_params returned 0x%.8x.\n",
status) );
+		return status;
+	}
+		
 	status = adapter_init( p_adapter );
 	if( status != IB_SUCCESS )
 	{
@@ -195,15 +210,23 @@
 		return status;
 	}
 
-	/* Read configuration parameters. */
-	status = ipoib_get_adapter_params( wrapper_config_context,
-		p_adapter );
-	if( status != NDIS_STATUS_SUCCESS )
+	ETH_COPY_NETWORK_ADDRESS( p_adapter->params.conf_mac.addr,
p_adapter->mac.addr );
+	/* If there is a NetworkAddress override in registry, use it */
+	if( (status == NDIS_STATUS_SUCCESS) && (len == HW_ADDR_LEN) )
 	{
-		cl_obj_destroy( &p_adapter->obj );
-		IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
-			("ipoib_get_adapter_params returned 0x%.8x.\n",
status) );
-		return status;
+		if( ETH_IS_MULTICAST(mac) || ETH_IS_BROADCAST(mac) ||
+			!ETH_IS_LOCALLY_ADMINISTERED(mac) )
+		{
+			IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_INIT,
+				("Overriding NetworkAddress is invalid -
"
+				"%02x-%02x-%02x-%02x-%02x-%02x\n",
+				mac[0], mac[1], mac[2],
+				mac[3], mac[4], mac[5]) );
+		}
+		else
+	{
+			ETH_COPY_NETWORK_ADDRESS(
p_adapter->params.conf_mac.addr, mac );
+		}
 	}
 
 	*pp_adapter = p_adapter;
Index: D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_driver.c
===================================================================
--- D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_driver.c
(revision 3221)
+++ D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_driver.c
(revision 3222)
@@ -484,13 +484,13 @@
 NDIS_STATUS
 ipoib_get_adapter_params(
 	IN				NDIS_HANDLE* const
wrapper_config_context,
-	IN	OUT			ipoib_adapter_t
*p_adapter )
+	IN	OUT			ipoib_adapter_t
*p_adapter,
+	OUT				PUCHAR
*p_mac,
+	OUT				UINT
*p_len)
 {
 	NDIS_STATUS						status;
 	NDIS_HANDLE
h_config;
 	NDIS_CONFIGURATION_PARAMETER	*p_param;
-	PUCHAR							mac;
-	UINT							len;
 	UINT                            value;
 	PIPOIB_REG_ENTRY                pRegEntry;
 	UINT                            i;
@@ -598,26 +598,8 @@
 			p_adapter->params.rq_depth /
p_adapter->params.rq_low_watermark;
 
 	p_adapter->params.xfer_block_size = (sizeof(eth_hdr_t) +
p_adapter->params.payload_mtu);
-	NdisReadNetworkAddress( &status, &mac, &len, h_config );
+	NdisReadNetworkAddress( &status, p_mac, p_len, h_config );
 
-	ETH_COPY_NETWORK_ADDRESS( p_adapter->params.conf_mac.addr,
p_adapter->mac.addr );
-	/* If there is a NetworkAddress override in registry, use it */
-	if( (status == NDIS_STATUS_SUCCESS) && (len == HW_ADDR_LEN) )
-	{
-		if( ETH_IS_MULTICAST(mac) || ETH_IS_BROADCAST(mac) ||
-			!ETH_IS_LOCALLY_ADMINISTERED(mac) )
-		{
-			IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_INIT,
-				("Overriding NetworkAddress is invalid -
"
-				"%02x-%02x-%02x-%02x-%02x-%02x\n",
-				mac[0], mac[1], mac[2],
-				mac[3], mac[4], mac[5]) );
-		}
-		else
-		{
-			ETH_COPY_NETWORK_ADDRESS(
p_adapter->params.conf_mac.addr, mac );
-		}
-	}
 
 	NdisCloseConfiguration( h_config );
 
Index: D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_xfr_mgr.h
===================================================================
--- D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_xfr_mgr.h
(revision 3221)
+++ D:/Windows/MLNX_WINOF/ulp/ipoib/kernel/ipoib_xfr_mgr.h
(revision 3222)
@@ -431,53 +431,7 @@
 	return IB_SUCCESS;
 }
 
-/****f* IPOIB/ipoib_mac_from_hp_guid
-* NAME
-*	ipoib_mac_from_hp_guid
-*
-* DESCRIPTION
-*	Generates an ethernet MAC address given a HP port GUID.
-*
-* SYNOPSIS
-*/
-static inline ib_api_status_t
-ipoib_mac_from_hp_guid(
-	IN		const	net64_t
port_guid,
-		OUT			mac_addr_t* const
p_mac_addr )
-{
-	const uint8_t	*p_guid = (const uint8_t*)&port_guid;
 
-	/* Port guid is in network byte order.  OUI is in lower 3 bytes.
*/
-	ASSERT( p_guid[0] == 0x00 && p_guid[1] == 0x1a && p_guid[2] ==
0x4b);
-
-	p_mac_addr->addr[0] = 0;
-	p_mac_addr->addr[1] = 0x1a;
-	p_mac_addr->addr[2] = 0x4b; 
-	p_mac_addr->addr[3] = p_guid[5];
-	p_mac_addr->addr[4] = p_guid[6];
-	p_mac_addr->addr[5] = p_guid[7];
-
-	return IB_SUCCESS;
-}
-
-/*
-* PARAMETERS
-*	port_guid
-*		The port GUID, in network byte order, for which to
generate a
-*		MAC address.
-*
-*	p_mac_addr
-*		Pointer to a mac address in which to store the results.
-*
-* RETURN VALUES
-*	IB_SUCCESS
-*		The MAC address was successfully converted.
-*
-* SEE ALSO
-*	IPOIB
-*********/
-
-
 /****f* IPOIB/ipoib_mac_from_guid
 * NAME
 *	ipoib_mac_from_guid
@@ -505,53 +459,53 @@
 		if( status == IB_SUCCESS )
 				return IB_SUCCESS;
 		//otherwise, mask was invalid, getting back to standard
flow
+		if (status == IB_INVALID_GUID_MASK)
+		{
+			IPOIB_PRINT( TRACE_LEVEL_WARNING,
IPOIB_DBG_ERROR,
+			("Invalid GUID mask received, rejecting it") );
+		}
 	}
 			
 	if( p_guid[0] == 0 ) 
 	{
+		status = IB_INVALID_GUID;
 		if( p_guid[1] == 0x02 && p_guid[2] == 0xc9 )
 		{
 			status = ipoib_mac_from_mlx_guid( port_guid,
p_mac_addr );
-			if( status == IB_SUCCESS )
-				return IB_SUCCESS;
 		}
 		else if( p_guid[1] == 0x08 && p_guid[2] == 0xf1 )
 		{
 			status = ipoib_mac_from_voltaire_guid(
port_guid, p_mac_addr );
-			if( status == IB_SUCCESS )
-				return IB_SUCCESS;
 		}
 		else if( p_guid[1] == 0x30 && p_guid[2] == 0x48 )
 		{
-			status = ipoib_mac_from_supermicro_guid(
port_guid, p_mac_addr );
-			if( status == IB_SUCCESS )
-				return IB_SUCCESS;
+			//Supermicro GUID
+			status =ipoib_mac_from_general_guid(port_guid,
guid_default_mask, p_mac_addr);
 		}
 		else if( p_guid[1] == 0x05 && p_guid[2] == 0xad )
 		{
-			status = ipoib_mac_from_cisco_guid( port_guid,
p_mac_addr );
-			if( status == IB_SUCCESS )
-				return IB_SUCCESS;
+			//Cisco GUID 
+			status =ipoib_mac_from_general_guid(port_guid,
guid_default_mask, p_mac_addr);
 		}        
 		/* Port guid is in network byte order.  OUI is in lower
3 bytes. */
 		else if( p_guid[1] == 0x06 && p_guid[2] == 0x6a )
 		{
 			status = ipoib_mac_from_sst_guid( port_guid,
p_mac_addr );
-			if( status == IB_SUCCESS )
-				return IB_SUCCESS;
 		}
 		else if( p_guid[1] == 0x1a && p_guid[2] == 0x4b )
 		{
-			status = ipoib_mac_from_hp_guid( port_guid,
p_mac_addr );
-			if( status == IB_SUCCESS )
-				return IB_SUCCESS;
+			//HP GUID
+			status =ipoib_mac_from_general_guid(port_guid,
guid_default_mask, p_mac_addr);
 		}
 		else if( p_guid[1] == 0x18 && p_guid[2] == 0x8b )
 		{
-			status = ipoib_mac_from_dell_guid( port_guid,
p_mac_addr );
+			//DELL GUID
+			status =ipoib_mac_from_general_guid(port_guid,
guid_default_mask, p_mac_addr);
+		}
+		
 			if( status == IB_SUCCESS )
 				return IB_SUCCESS;
-		}
+		ASSERT(status != IB_INVALID_GUID_MASK);
 	}
 
 	/* Value of zero is reserved. */



More information about the ofw mailing list