mirror of
https://github.com/ipxe/ipxe
synced 2026-04-16 03:00:10 +03:00
[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().
This commit is contained in:
@@ -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 ) );
|
||||
|
||||
@@ -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; */
|
||||
|
||||
Reference in New Issue
Block a user