[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: EFI_PXE_BASE_CODE_PROTOCOL
From: |
Leif Lindholm |
Subject: |
Re: EFI_PXE_BASE_CODE_PROTOCOL |
Date: |
Tue, 6 Aug 2019 09:44:14 +0100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
+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