[syslinux] EFI: PXE: "My IP is 0.0.0.0"
Gene Cumm
gene.cumm at gmail.com
Thu Jul 2 17:54:32 PDT 2015
On Thu, Jul 2, 2015 at 9:58 AM, Patrick Masotta <masottaus at yahoo.com> wrote:
> 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.
Lovely, the ServiceBindings are on a handle that resembles the NIC
while the Pxebc is IP-type specific. Looks like we should try to do a
ServiceBinding based on Pxebc but fall back to MAC-based searching,
saving all 3 handles, the image handle, Pxebc handle, and
ServiceBinding handle. Presumably the UDP and TCP handles _should_ be
the same...
--
-Gene
More information about the Syslinux
mailing list