patch-2.4.25 linux-2.4.25/arch/ppc/boot/simple/embed_config.c
Next file: linux-2.4.25/arch/ppc/boot/utils/mkbugboot.c
Previous file: linux-2.4.25/arch/ppc/boot/simple/clear.S
Back to the patch index
Back to the overall index
- Lines: 33
- Date:
2004-02-18 05:36:30.000000000 -0800
- Orig file:
linux-2.4.24/arch/ppc/boot/simple/embed_config.c
- Orig date:
2003-11-28 10:26:19.000000000 -0800
diff -urN linux-2.4.24/arch/ppc/boot/simple/embed_config.c linux-2.4.25/arch/ppc/boot/simple/embed_config.c
@@ -52,7 +52,7 @@
{
u_char *mp;
u_char eebuf[128];
- int i;
+ int i = 8;
bd_t *bd;
bd = *bdp;
@@ -64,11 +64,21 @@
/* All we are looking for is the Ethernet MAC address. The
* first 8 bytes are 'MOTOROLA', so check for part of that.
+ * Next, the VPD describes a MAC 'packet' as being of type 08
+ * and size 06. So we look for that and the MAC must follow.
+ * If there are more than one, we still only care about the first.
* If it's there, assume we have a valid MAC address. If not,
* grab our default one.
*/
- if ((*(uint *)eebuf) == 0x4d4f544f)
- mp = &eebuf[0x4c];
+ if ((*(uint *)eebuf) == 0x4d4f544f) {
+ while (i < 127 && !(eebuf[i] == 0x08 && eebuf[i + 1] == 0x06))
+ i += eebuf[i + 1] + 2; /* skip this packet */
+
+ if (i == 127) /* Couldn't find. */
+ mp = (u_char *)def_enet_addr;
+ else
+ mp = &eebuf[i + 2];
+ }
else
mp = (u_char *)def_enet_addr;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)