When trying to boot virsh qemu with fresh iPXE that is sending 00:00 as OPT61 client-arch-type (verified with wireshark, unfortunately tcpdump does not understand DHCPv6 very well) dhcpd returns (...)/default as bootfile to iPXE (as seen on screen1.png)
With modified dhcpd.conf:
if exists dhcp6.client-arch-type and option dhcp6.client-arch-type = 00:01 { option dhcp6.bootfile-url "tftp://[XXXXXXXXXXXXX:fa00::1]//00:01";
} elsif exists dhcp6.client-arch-type and option dhcp6.client-arch-type = 00:00 { option dhcp6.bootfile-url "tftp://[XXXXXXXXXXXXX:fa00::1]//00:00";
} elsif exists dhcp6.client-arch-type and option dhcp6.client-arch-type = 00:07 { option dhcp6.bootfile-url "tftp://[XXXXXXXXXXXXX:fa00::1]//00:07";
} else { option dhcp6.bootfile-url "tftp://[XXXXXXXXXXXXX:fa00::1]//default";
}
iPXE receives proper '00:00' filename (as seen on screen2.png)
It works without this fix only because of the sane defaults (pxelinux.0 for IPv4 and uefi_amd64 for IPv6), but the client-arch-type was always ignored - in this case when I tried to boot with regular BIOS on IPv6 it tried to load uefi_amd64 which regular bios does not understand (pxelinux.0 won't work either but that's another bug)
isc-dhcp from Xenial - 4.3.3-5ubuntu12.7
The relevant part of config, as generated by maas, looks like this (I've changed filenames to make things clearly visible):
shared-network vlan-5002 {
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//00: 01";
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//00: 00";
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//00: 07";
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//default" ;
subnet6 XXXXXXXXXXXXX::/64 {
# Bootloaders
if client-arch-type = 00:01 {
} elsif client-arch-type = 00:00 {
} elsif client-arch-type = 00:07 {
} else {
}
(...)
}
When trying to boot virsh qemu with fresh iPXE that is sending 00:00 as OPT61 client-arch-type (verified with wireshark, unfortunately tcpdump does not understand DHCPv6 very well) dhcpd returns (...)/default as bootfile to iPXE (as seen on screen1.png)
With modified dhcpd.conf: arch-type and option dhcp6.client- arch-type = 00:01 {
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//00: 01"; arch-type and option dhcp6.client- arch-type = 00:00 {
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//00: 00"; arch-type and option dhcp6.client- arch-type = 00:07 {
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//00: 07";
option dhcp6.bootfile-url "tftp:/ /[XXXXXXXXXXXXX :fa00:: 1]//default" ;
if exists dhcp6.client-
} elsif exists dhcp6.client-
} elsif exists dhcp6.client-
} else {
}
iPXE receives proper '00:00' filename (as seen on screen2.png)
It works without this fix only because of the sane defaults (pxelinux.0 for IPv4 and uefi_amd64 for IPv6), but the client-arch-type was always ignored - in this case when I tried to boot with regular BIOS on IPv6 it tried to load uefi_amd64 which regular bios does not understand (pxelinux.0 won't work either but that's another bug)