[syslinux] EFI: PXE: "My IP is 0.0.0.0"
Patrick Masotta
masottaus at yahoo.com
Thu Jun 25 01:55:27 PDT 2015
>>>
Looks like the patch mostly addresses the
initial search to find the right handle for
PXE. I think I found the remaining source of the
issue (the part that's generating the
handle->Configure() messages).
I'm trying to read through pieces of the EFI spec, gnu-efi API,
and a few other sources. I'm pretty
certain you'll see that the previous
patch/binaries are sending packets that
_should_ be sent on NIC1 out
NIC0.--
-Gene
<<<
Hi Gene
have you seen this thread?
http://www.syslinux.org/archives/2015-April/023436.html
continued here
http://www.syslinux.org/archives/2015-May/023443.html
Cao's patch try to solve the same multi-NIC issue you are dealing with;
Your approach detect's the right NIC at
pxe.c\net_parse_dhcp(void)
but it is also necessary to detect the right NIC again at
main.c\efi_create_binding()
as explained here.
http://www.syslinux.org/archives/2015-May/023453.html
Cao's patch fails doing this because it relies on certain assumptions on
handle "order" that are not correct.
I'm also trying to fix this bug but unfortunately I'm not having much time.
This is the approach I'm going to try:
1) detecting the right NIC at pxe.c\net_parse_dhcp(void) (as you do)
2) saving its associated MAC address.
3) at main.c\efi_create_binding() (let's consider the UDP case)
LibLocateHandle() returns the handles of the devices that publish a EFI
UDPv4 Service Binding Protocol GUID. Each device with a published EFI UDPv4
Service Binding Protocol GUID supports the EFI UDPv4 Protocol and may be available for use.
Considering a "Device Path Protocol" is attached to device handles then
I think parsing the Path Protocol of each returned handle we can detect the
"MAC Address Device Path" structure and get the associated MAC address.
The returned handle that has a MAC address matching the one previously saved at
pxe.c\net_parse_dhcp(void) should be the one that has to be used creating a child of
EFI UDPv4 Protocol.
I'm looking for a simpler way to do this but so far I haven't found it.
Best,
Patrick
More information about the Syslinux
mailing list