From 37a0aab4ff2c86f4d109d4cd479535be97d07a94 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 11 Aug 2009 20:19:53 +0100 Subject: [netdevice] Separate out the concept of hardware and link-layer addresses The hardware address is an intrinsic property of the hardware, while the link-layer address can be changed at runtime. This separation is exposed via APIs such as PXE and EFI, but is currently elided by gPXE. Expose the hardware and link-layer addresses as separate properties within a net device. Drivers should now fill in hw_addr, which will be used to initialise ll_addr at the time of calling register_netdev(). --- src/arch/i386/drivers/net/undinet.c | 4 ++-- src/arch/i386/interface/pxe/pxe_undi.c | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) (limited to 'src/arch/i386') diff --git a/src/arch/i386/drivers/net/undinet.c b/src/arch/i386/drivers/net/undinet.c index 6c28b247..0c7f6697 100644 --- a/src/arch/i386/drivers/net/undinet.c +++ b/src/arch/i386/drivers/net/undinet.c @@ -689,7 +689,7 @@ int undinet_probe ( struct undi_device *undi ) { if ( ( rc = undinet_call ( undinic, PXENV_UNDI_GET_INFORMATION, &undi_info, sizeof ( undi_info ) ) ) != 0 ) goto err_undi_get_information; - memcpy ( netdev->ll_addr, undi_info.PermNodeAddress, ETH_ALEN ); + memcpy ( netdev->hw_addr, undi_info.PermNodeAddress, ETH_ALEN ); undinic->irq = undi_info.IntNumber; if ( undinic->irq > IRQ_MAX ) { DBGC ( undinic, "UNDINIC %p invalid IRQ %d\n", @@ -697,7 +697,7 @@ int undinet_probe ( struct undi_device *undi ) { goto err_bad_irq; } DBGC ( undinic, "UNDINIC %p is %s on IRQ %d\n", - undinic, eth_ntoa ( netdev->ll_addr ), undinic->irq ); + undinic, eth_ntoa ( netdev->hw_addr ), undinic->irq ); /* Get interface information */ memset ( &undi_iface, 0, sizeof ( undi_iface ) ); diff --git a/src/arch/i386/interface/pxe/pxe_undi.c b/src/arch/i386/interface/pxe/pxe_undi.c index ddaae844..48c274b1 100644 --- a/src/arch/i386/interface/pxe/pxe_undi.c +++ b/src/arch/i386/interface/pxe/pxe_undi.c @@ -421,15 +421,11 @@ PXENV_EXIT_t pxenv_undi_get_information ( struct s_PXENV_UNDI_GET_INFORMATION undi_get_information->MaxTranUnit = ETH_MAX_MTU; undi_get_information->HwType = ntohs ( ll_protocol->ll_proto ); undi_get_information->HwAddrLen = ll_protocol->ll_addr_len; - /* Cheat: assume card is always configured with its permanent - * node address. This is a valid assumption within Etherboot - * at the time of writing. - */ memcpy ( &undi_get_information->CurrentNodeAddress, pxe_netdev->ll_addr, sizeof ( undi_get_information->CurrentNodeAddress ) ); memcpy ( &undi_get_information->PermNodeAddress, - pxe_netdev->ll_addr, + pxe_netdev->hw_addr, sizeof ( undi_get_information->PermNodeAddress ) ); undi_get_information->ROMAddress = 0; /* nic.rom_info->rom_segment; */ -- cgit v1.2.3-55-g7522