[syslinux] HP EFI binaries

Patrick Masotta masottaus at yahoo.com
Fri Aug 28 01:22:06 PDT 2015


Thanks Derrik; I got your efi-dh.txt

I've found this:

252: SimpleNetwork PXEBaseCode LoadFile DevicePath(0000:0000:0000:0000:0000:0000))
267: SimpleNetwork PXEBaseCode LoadFile DevicePath(065F36E00EE,0x1)/IPv4(0.0.0.0))
27C: SimpleNetwork PXEBaseCode LoadFile DevicePath(0000:0000:0000:0000:0000:0000))
291: SimpleNetwork PXEBaseCode LoadFile DevicePath(065F36E00EF,0x1)/IPv4(0.0.0.0))
2A6: SimpleNetwork PXEBaseCode LoadFile DevicePath(0000:0000:0000:0000:0000:0000))
2BB: SimpleNetwork PXEBaseCode LoadFile DevicePath(CDCD40CA5F0,0x0)/IPv4(0.0.0.0))
2D0: SimpleNetwork PXEBaseCode LoadFile DevicePath(0000:0000:0000:0000:0000:0000))
2E5: SimpleNetwork PXEBaseCode LoadFile DevicePath(CDCD40CA5F4,0x0)/IPv4(0.0.0.0))

23E: MTFTPv4ServiceBinding DHCPv4ServiceBinding UDPv4ServiceBinding UnknownDevice TCPv4ServiceBinding IPv4ServiceBinding ARPServiceBinding UnknownDevice EfiMtftp6ServiceBindingProtocolGuid IPv4Config EfiDhcp6ServiceBindingProtocolGuid EfiUdp6ServiceBindingProtocolGuid UnknownDevice EfiTcp6ServiceBindingProtocolGuid EfiIp6ConfigProtocolGuid EfiIp6ServiceBindingProtocolGuid ManagedNetworkServiceBinding EfiVlanConfigProtocolGuid SimpleNetwork HIIConfigAccess AdapterInfo(AdapterInfo)
 EfiFirmwareManagementProtocolGuid UnknownDevice UnknownDevice NetworkInterfaceIdentifier31 UnknownDevice DevicePath(0x0,0x0)/MAC(5065F36E00EE,0x1))
 UnknownDevice

268: MTFTPv4ServiceBinding DHCPv4ServiceBinding UDPv4ServiceBinding UnknownDevice TCPv4ServiceBinding IPv4ServiceBinding ARPServiceBinding UnknownDevice EfiMtftp6ServiceBindingProtocolGuid IPv4Config EfiDhcp6ServiceBindingProtocolGuid EfiUdp6ServiceBindingProtocolGuid UnknownDevice EfiTcp6ServiceBindingProtocolGuid EfiIp6ConfigProtocolGuid EfiIp6ServiceBindingProtocolGuid ManagedNetworkServiceBinding EfiVlanConfigProtocolGuid SimpleNetwork HIIConfigAccess AdapterInfo(AdapterInfo)
 UnknownDevice UnknownDevice NetworkInterfaceIdentifier31 UnknownDevice DevicePath(0x0,0x1)/MAC(5065F36E00EF,0x1))
 UnknownDevice

292: MTFTPv4ServiceBinding DHCPv4ServiceBinding UDPv4ServiceBinding UnknownDevice TCPv4ServiceBinding IPv4ServiceBinding ARPServiceBinding UnknownDevice EfiMtftp6ServiceBindingProtocolGuid IPv4Config EfiDhcp6ServiceBindingProtocolGuid EfiUdp6ServiceBindingProtocolGuid UnknownDevice EfiTcp6ServiceBindingProtocolGuid EfiIp6ConfigProtocolGuid EfiIp6ServiceBindingProtocolGuid ManagedNetworkServiceBinding EfiVlanConfigProtocolGuid SimpleNetwork HIIConfigAccess EfiFirmwareManagementProtocolGuid AdapterInfo(AdapterInfo)
 EfiDriverHealthProtocolGuid UnknownDevice UnknownDevice DevicePath(0x0,0x0)/MAC(8CDCD40CA5F0,0x0))
 NetworkInterfaceIdentifier NetworkInterfaceIdentifier31 

2BC: MTFTPv4ServiceBinding DHCPv4ServiceBinding UDPv4ServiceBinding UnknownDevice TCPv4ServiceBinding IPv4ServiceBinding ARPServiceBinding UnknownDevice EfiMtftp6ServiceBindingProtocolGuid IPv4Config EfiDhcp6ServiceBindingProtocolGuid EfiUdp6ServiceBindingProtocolGuid UnknownDevice EfiTcp6ServiceBindingProtocolGuid EfiIp6ConfigProtocolGuid EfiIp6ServiceBindingProtocolGuid ManagedNetworkServiceBinding EfiVlanConfigProtocolGuid SimpleNetwork HIIConfigAccess EfiFirmwareManagementProtocolGuid AdapterInfo(AdapterInfo)
 EfiDriverHealthProtocolGuid UnknownDevice UnknownDevice DevicePath(0x0,0x1)/MAC(8CDCD40CA5F4,0x0))
 NetworkInterfaceIdentifier NetworkInterfaceIdentifier31 


Then we have:

1) Handles 267,291,2BB,2E5 
correspond to the IPv4 PXEBaseCode protocols (one handle per NIC in your system).
one of these handles is used every time you boot syslinux.efi as NBP.

2) Handles 252,27C,2A6,2D0
idem before but for IPv6 (ignore them)

3) Handles 23E,268,292,2BC
correspond (among other things) to the Service Binding protocols we are looking for (UDPv4ServiceBinding)
(one handle per NIC in your system) 


The goal:
We must bind the UDPv4ServiceBinding handle that has a matching MAC with the PXEBaseCode used for
booting syslinux.efi


The problem:
It is supposed there's always a possible MAC match between PXEBaseCode and UDPv4ServiceBinding protocols,
but this does not happen in what I consider your faulty FW.
i.e.
if we consider 
PXEBaseCode            handle 267 -> MAC 0065F36E00EE
UDPv4ServiceBinding  handle 23E -> MAC 5065F36E00EE

You can see the MACs are "almost" identical but there's not match!
While 5065F36E00EE is a valid HP MAC, 0065F36E00EE is not.
something identical happens with the rest of handle pairs.

My code relies on a full MAC match in order to decide which UDPv4ServiceBinding to use.
Of course in your case you'll get an error; there's never a suitable UDPv4ServiceBinding available.
I do not know why on earth HP uses different MACs for the same hardware, they are even changing 
their MAC vendor signature!
I can only think you are running a test version of the FW where the different MAC signatures
are probably used at the DHCP/PXE server side to know what protocol is the client using for transfers
(just a shot in the dark guess).

Conclusion:
I think you should update your firmware. IMHO it does not make sense to mod Syslinux code in order to
catch this issue.

Best,
Patrick



More information about the Syslinux mailing list