Parcourir la source

[intel] Use autoloaded MAC address instead of EEPROM MAC address

The i350 (and possibly other Intel NICs) have a non-trivial
correspondence between the PCI function number and the external
physical port number.  For example, the i350 has a "LAN Function Sel"
bit within the EEPROM which can invert the mapping so that function 0
becomes port 3, function 1 becomes port 2, etc.

Unfortunately the MAC addresses within the EEPROM are indexed by
physical port number rather than PCI function number.  The end result
is that when anything other than the default mapping is used, iPXE
will use the wrong address as the base MAC address.

Fix by using the autoloaded MAC address if it is valid, and falling
back to reading the MAC address directly from the EEPROM only if no
autoloaded address is available.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown il y a 9 ans
Parent
révision
a937615151
1 fichiers modifiés avec 4 ajouts et 4 suppressions
  1. 4
    4
      src/drivers/net/intel.c

+ 4
- 4
src/drivers/net/intel.c Voir le fichier

@@ -232,16 +232,16 @@ static int intel_fetch_mac ( struct intel_nic *intel, uint8_t *hw_addr ) {
232 232
 	DBGC ( intel, "INTEL %p has autoloaded MAC address %s\n",
233 233
 	       intel, eth_ntoa ( mac.raw ) );
234 234
 
235
-	/* Try to read address from EEPROM */
236
-	if ( ( rc = intel_fetch_mac_eeprom ( intel, hw_addr ) ) == 0 )
237
-		return 0;
238
-
239 235
 	/* Use current address if valid */
240 236
 	if ( is_valid_ether_addr ( mac.raw ) ) {
241 237
 		memcpy ( hw_addr, mac.raw, ETH_ALEN );
242 238
 		return 0;
243 239
 	}
244 240
 
241
+	/* Otherwise, try to read address from EEPROM */
242
+	if ( ( rc = intel_fetch_mac_eeprom ( intel, hw_addr ) ) == 0 )
243
+		return 0;
244
+
245 245
 	DBGC ( intel, "INTEL %p has no MAC address to use\n", intel );
246 246
 	return -ENOENT;
247 247
 }

Chargement…
Annuler
Enregistrer