> Synopsis: PXE install of OpenBSD 7.3 (amd64) fails on Protectli
VP4650 & VP2420, with 'igc' Intel I225-V 2.5Gbps NICs
> Category: Network
> Environment:
System : OpenBSD 7.3
Details : OpenBSD 7.3 (GENERIC.MP) #3: Tue Jul 25 08:20:26 MDT 2023
Architecture: OpenBSD.amd64
Machine : amd64
> Description:
When attempting a PXE-boot install of OpenBSD 7.3 (or 7.2) on two
recent Protectli models, VP4650 and VP2420 (both with Intel I225-V
2.5Gbps NICs), the target machine loads the auto_install (BOOTX64.EFI)
file over tftp from the pxeboot server, and brings up the usual OpenBSD
boot> prompt, but then fails to load the OpenBSD install kernel via tftp
from the server:
probing: pc0 mem[636K 1883M 16K 7M 5M 76K 172K 700K 6M 5M 2060M]
disk: hd0* hd1* hd2* hd3* hd4*
>> OpenBSD/amd64 BOOTX64 3.63
boot>
cannot open tftp:/etc/random.seed: No such file or directory
booting tftp:/bsd: open tftp:/bsd: No such file or directory
failed(2). will try /bsd
boot> boot bsd.rd
cannot open tftp:/etc/random.seed: No such file or directory
booting tftp:bsd.rd: open tftp:bsd.rd: No such file or directory
failed(2). will try /bsd
boot>
The 'bsd' file it's looking for definitely does exist on my pxeboot
server, in the tftpd root dirirectory where it's supposed to be. I've
tried with 'bsd' symlinked to 'bsd.rd' on the server, and also with
'bsd' as an actual copy of bsd.rd (just in case symlinking was the
problem) and got the same result. I know the pxeboot/tftp server is
working, because the Protectlis are getting DHCP and loading the
auto_install (BOOTX64.EFI) file via tftp from the server. The server's
dhcpd.conf follows the example from
https://man.openbsd.org/man8/amd64/pxeboot.8 and I've done many
successful PXE installs of OpenBSD onto other machines using this same
server -- though most of my installs have been onto legacy BIOS machines
rather than UEFI, and so I had the server serving 'pxeboot' as the
auto_install file instead of 'BOOTX64.EFI' for those past installs.
My best guess is that OpenBSD's BOOTX64.EFI is lacking support for
the 'igc' Intel I225-V 2.5Gbps NICs used in these Protectli models...
I.e. the Protectlis' built-in iPXE software is able to get DHCP from the
pxeboot server, and pull the BOOTX64.EFI file over tftp, but then once
OpenBSD's BOOTX64.EFI takes over, it's seemingly unable to communicate
over the network to pull down the OpenBSD install kernel.
I ran a tcpdump on the pxeboot server, which showed the Protectli's
built-in iPXE fetching the 'auto_install' file (which is a symlink to
'BOOTX64.EFI' on the server), followed by some UDP packets, but then no
more activity whatsoever on the tcpdump after the point when the
Protectli brings up the BOOTX64.EFI boot> prompt. I'm not seeing the
request for the bsd kernel on the server's tcpdump at all:
root@pixie/tftpboot 57 # tcpdump -ni em1
tcpdump: listening on em1, link-type EN10MB
12:53:27.004863 0.0.0.0.68 > 255.255.255.255.67: xid:0x531e7443
secs:4 [|bootp]
12:53:27.004976 fe80::6662:66ff:fe22:1627 > ff02::2: icmp6: router
solicitation
12:53:27.005186 arp who-has 10.0.201.25 tell 10.0.201.1
12:53:27.130855 fe80::6662:66ff:fe22:1627 > ff02::2: icmp6: router
solicitation
12:53:27.381297 fe80::6662:66ff:fe22:1627 > ff02::2: icmp6: router
solicitation
12:53:27.882242 fe80::6662:66ff:fe22:1627 > ff02::2: icmp6: router
solicitation
12:53:28.002547 0.0.0.0.68 > 255.255.255.255.67: xid:0x531e7443
secs:8 [|bootp]
12:53:28.002741 10.0.201.1.67 > 10.0.201.25.68: xid:0x531e7443
secs:4 Y:10.0.201.25 S:10.0.201.1 [|bootp] [tos 0x10]
12:53:28.884155 fe80::6662:66ff:fe22:1627 > ff02::2: icmp6: router
solicitation
12:53:30.006332 0.0.0.0.68 > 255.255.255.255.67: xid:0x531e7443
secs:18 [|bootp]
12:53:30.008661 10.0.201.1.67 > 10.0.201.25.68: xid:0x531e7443
secs:18 Y:10.0.201.25 S:10.0.201.1 [|bootp] [tos 0x10]
12:53:30.008803 arp who-has 10.0.201.25 tell 10.0.201.25
12:53:30.008836 10.0.201.1 > 10.0.201.25: icmp: echo request
12:53:30.008926 arp who-has 10.0.201.1 tell 10.0.201.25
12:53:30.008945 arp reply 10.0.201.1 is-at 00:0d:b9:49:b1:81
12:53:30.009048 10.0.201.25 > 10.0.201.1: icmp: echo reply
12:53:30.962189 10.0.201.25.10880 > 10.0.201.1.69: 42 RRQ
"auto_install"
12:53:30.962907 10.0.201.1.12471 > 10.0.201.25.10880: udp 28
12:53:30.963049 10.0.201.25.10880 > 10.0.201.1.12471: udp 4
12:53:30.963297 10.0.201.1.12471 > 10.0.201.25.10880: udp 1436
12:53:30.963441 10.0.201.25.10880 > 10.0.201.1.12471: udp 4
12:53:30.963581 10.0.201.1.12471 > 10.0.201.25.10880: udp 1436
12:53:30.963729 10.0.201.25.10880 > 10.0.201.1.12471: udp 4
# ...followed by a few more udp lines like the ones above, and then
nothing more after the Protectli brings up the BOOTX64.EFI boot> prompt.
I also tested serving the OpenBSD 7.2 (instead of 7.3) install
kernel + BOOTX64.EFI files (BOOTX64 v3.62 instead of v3.63), and got the
same result.
And finally, I tested installing OpenBSD 7.3 from a USB disk onto
the Protectli VP4650, and everything worked fine (including network
connectivity while booted from the OpenBSD installer kernel on the USB
disk). So the problem only affects PXE-booting.
Here are dmesg lines about the 'igc' network interfaces on the
Protectli VP4650 (after doing the successful OpenBSD install from a USB
disk):
rex1# dmesg | grep igc
igc0 at pci1 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4
queues, address 64:62:66:xx:xx:xx
igc1 at pci2 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4
queues, address 64:62:66:xx:xx:xx
igc2 at pci3 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4
queues, address 64:62:66:xx:xx:xx
igc3 at pci4 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4
queues, address 64:62:66:xx:xx:xx
igc4 at pci5 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4
queues, address 64:62:66:xx:xx:xx
igc5 at pci6 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4
queues, address 64:62:66:xx:xx:xx
Please let me know if there's anything else I should try or other
info I can provide, or if my theory that BOOTX64.EFI lacks support for
this NIC is correct.
> How-To-Repeat:
Attempt PXE-boot install of OpenBSD 7.3 onto a Protectli VP4650,
VP2420, or other hardware with Intel I225-V (rev 3) 2.5Gbps NIC ('igc'
driver)
> Fix: Unknown