[syslinux] EFI: PXE: "My IP is 0.0.0.0"
Patrick Masotta
masottaus at yahoo.com
Thu Jul 2 06:58:30 PDT 2015
OK there are problems.
From
https://sourceforge.net/p/edk2/mailman/message/31604654/
""In current EDKII implementation, all the network servicebinding protocols for a
NIC device are installed together on the NIC's device handle, so you can get all
of them when you have chosen a special NIC handle.""
Unfortunately there are PCs with UEFI implementations not following the former rule.
i.e. HP Elitebook 2570p (single NIC)
shell> dh
...
172: DevPath (..9,0x0)/MAC(FC15B4E81CAC,0x0))Net MNPSb ARPSb DHCPv4Sb TCPv4Sb IPv4Sb IPv4Config UDPv4Sb MTFTPv4Sb
...
184: DevPath (..00:0000:0000:0000:0000:0000))Load Net Pxebc
...
19D: DevPath (..v4(0.0.0.0,UDP,DHCP,0.0.0.0))Load Net Pxebc
...
shell> dh 172
Handle 172 (730D8A98)
Dpath (730D8E98)
ACPI Device Path for Acpi
HID PNP0A03, UID 0
Hardware Device Path for PCI
Function (0) Device (19)
Messaging Device Path for MAC
MAC (FC15B4E81CAC)
AsStr: 'PciRoot(0x0)/Pci(0x19,0x0)/MAC(FC15B4E81CAC,0x0)'
Net (730C5020)
MNPSb (722D0F40)
ARPSb (722C13A0)
DHCPv4Sb (722C4220)
TCPv4Sb (722A7330)
IPv4Sb (72DF2A20)
IPv4Config (722AF638)
UDPv4Sb (722A3EA0)
MTFTPv4Sb (7229B4A0)
D79DF6B0-EF44-43BD-9797-43E93BCF5FA8 (722A6318)
...
shell> dh 184
Handle 184 (722AE898)
Dpath (722ADA18)
ACPI Device Path for Acpi
HID PNP0A03, UID 0
Hardware Device Path for PCI
Function (0) Device (19)
Messaging Device Path for MAC
MAC (FC15B4E81CAC)
Messaging Device Path for IPv6
IPv6 (Not Available)
AsStr: 'PciRoot(0x0)/Pci(0x19,0x0)/MAC(FC15B4E81CAC,0x0)/IPv6(0000:0000:0000:0000:0000:0000:0000:0000,UDP,DHCP,0000:0000:0000:0000:0000:0000:0000:0000)'
Load (722BB7A8)
Net (730C5020)
Pxebc (722B0110)
shell> dh 19D
Handle 19D (72284598)
Dpath (72284618)
ACPI Device Path for Acpi
HID PNP0A03, UID 0
Hardware Device Path for PCI
Function (0) Device (19)
Messaging Device Path for MAC
MAC (FC15B4E81CAC)
Messaging Device Path for IPv4
IPv4 (Local IP: 0.0.0.0:0)
(Remote IP: 0.0.0.0:0)
(Protocol: 0)
(Source IP: DHCP)
AsStr: 'PciRoot(0x0)/Pci(0x19,0x0)/MAC(FC15B4E81CAC,0x0)/IPv4(0.0.0.0,UDP,DHCP,0.0.0.0)'
Load (72284728)
Net (730C5020)
Pxebc (722B0110)
The booting syslinux.efi receives DeviceHandle = 19D (IPv4); this handle has also attached to it the Pxebc Protocol
but it does not have attached the Service Binding Protocol UDPv4Sb (in this case under the handle 172 instead).
The HP 2570p is not really an old PC (~2013) then I can think if we continue using the "same handle" method we will have
problems PXE booting lot of UEFI PCs.
I think when we receive the image_DeviceHandle we must save it but also parse the associated DevicePath saving the MAC address too.
When looking for Pxebc Protocol we can use the image_DeviceHandle, next when ServiceBinding we need to detect
all the available SB handles of the required type, parse their DevicePath and take the one with a matching MAC.
Let me know if you see any alternative to MAC parsing considering this new info.
Best,
Patrick
More information about the Syslinux
mailing list