
+Peter Jones (sorry Peter)
On Tue, Aug 06, 2019 at 08:34:58AM +0200, Heinrich Schuchardt wrote:
iPXE uses the EFI simple network protocol to execute DHCP.
OK.
Can GRUB already do the same when the EFI_PXE_BASE_CODE_PROTOCOL is not present?
Yes. As of very recently (proper* DHCP support was only merged in March 2019, so is included in 2.04 release, prior to that it technically performed BOOTP).
SNP means you do your own networking - it gives you access to the raw (usually) Ethernet packets.
* proper as in "it now conceptually does the correct thing", not as in "I have extensively tested this".
What I do not understand about GRUB's grub_net_configure_by_dhcp_ack() is that it silently assumes IPv4 being used without even checking. This contradicts the definition of the PXE base code protocol in the UEFI standard:
Well, it would not surprise me if this function predates GRUB's UEFI support.
It actually gets even slightly messier when you look at what GRUB does when netbooting itself; it starts out using MNP (and hence IP addresses assigned by UEFI) to load its modules, switching to SNP once it loads efinet.mod.
EFI_PXE_BASE_CODE_PACKET DhcpAck is a union:
typedef union { UINT8 Raw[1472]; EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; } EFI_PXE_BASE_CODE_PACKET;
Should the check be done in grub_efi_net_config_real()?
Possibly. I've cc:d Peter since he's the last person I know who took a proper look at this.
Certainly, it would be useful if you could raise a bug on Savannah on the ipv4 assumption.
Best Regards,
Leif