[syslinux] EFI: PXE: "My IP is 0.0.0.0"

Gene Cumm gene.cumm at gmail.com
Wed Jul 8 11:47:09 PDT 2015


On Mon, Jul 6, 2015 at 6:04 AM, Patrick Masotta <masottaus at yahoo.com> wrote:
>
> What I've found:
> (from older to newer hardware)
>
> 1) There's not "any" SB protocol present (Elitebook 8460p/2560p)

The only solution for these is to use our own stack (likely full
TCP/IP like lwIP) and connect to the Net GUID
(EFI_SIMPLE_NETWORK_PROTOCOL).  Does the handle for Pxebc contain a
Net?  I found out that my EFI shell on VMware VMs can also handle
output redirection like:

guid > fs0:\efi-guid.txt
dh > fs0:\efi-dh.txt
dh bd >> fs0:\efi-dh.txt

fs0 being the EFI boot partition on the hard drive of the VM.

> 2) SB protocols are loaded under a different that LoadeImage's DeviceHandle,
> while Pxebc is loaded under the LoadeImage's DeviceHandle. (Elitebook 8470p/2570p)

a) Hunt for a Sb.
b) use Net

> 3) SB protocols and Pxebc are loaded under the LoadeImage's DeviceHandle (VMware Workstation 10).

a) use Sb on Pxebc handle
b) use Net

> About MNPSb; even when it presents the same interface than all the Service Binding protocols
> remember we have to create a child of the particular matching protocol and those do not have
> the same interface.

Correct, different interface but it seems dominantly the same EFI_HANDLE.

> I kept testing my patch and so far it proved to work in a multi-NIC environment:
> I've set a VMware EFI client with 2 NICs connected to the same network,
> using the VMware  DHCP server and Serva as proxyDHCP.
> Setting a MAC filter in Serva I forced the client not receiving PXE redirection parameters
> alternative on NIC_1 or NIC_2; the client always booted correctly from the NIC that received the
> full set of PXE parameters. It seems to work.

This sounds positive for cases 2&3 but still leaves #1 high and dry.

> It would be really interesting if the HP guys having this issue can give it a try...
>
>
> Please see the new code at
> https://github.com/ppatpat/syslinux/blob/master/efi/main.c
>
> Patched:
> efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *table) {}
> efi_create_binding(EFI_GUID *bguid, EFI_GUID *pguid) {}

Debating if this hunting should be more persistent so we don't go
hunting at every binding.  It shouldn't affect large files but could
affect lots of tiny files if we're hunting every time.  If it's to be
more persistent, a table of known GUIDs to match to a handle should be
stored.

-- 
-Gene


More information about the Syslinux mailing list