ipxe and isc dhcpd have different meanings of the value of the secs field, and that's leading to the secondary dhcp server responding in a time frame where they normally wouldn't.
The reason the secs field grows faster than the actual number of elapsed seconds is that ipxe (where the pxe rom for qemu booting with seabios comes from) abuses (in their own words) the field to convey debug information, rather than the actual amount of time passed:
so a value of "4" means the packet count is 1, not that 4 seconds have gone by.
It also uses shorter timeouts than the PXE standard calls for:
* The PXE spec indicates discover request are sent 4 times, with
* timeouts of 4, 8, 16, 32 seconds. iPXE by default uses 1, 2, 4, 8.
So the value of "4" in the header means it's either the first or second dhcp discover request (I can't tell if the counting starts at 0 or 1), and 1 second later we see the second, which is marked 10, which is 2 << 2 | 0x2, meaning it's the second (or 3rd?) transmission and that it's seen an offer before.
ipxe and isc dhcpd have different meanings of the value of the secs field, and that's leading to the secondary dhcp server responding in a time frame where they normally wouldn't.
The reason the secs field grows faster than the actual number of elapsed seconds is that ipxe (where the pxe rom for qemu booting with seabios comes from) abuses (in their own words) the field to convey debug information, rather than the actual amount of time passed:
https:/ /github. com/ipxe/ ipxe/blob/ 74d90b33f8490ad cee2026ece18d84 11d93b6a39/ src/net/ udp/dhcp. c#L1129
so a value of "4" means the packet count is 1, not that 4 seconds have gone by.
It also uses shorter timeouts than the PXE standard calls for:
* The PXE spec indicates discover request are sent 4 times, with
* timeouts of 4, 8, 16, 32 seconds. iPXE by default uses 1, 2, 4, 8.
https:/ /github. com/ipxe/ ipxe/blob/ 74d90b33f8490ad cee2026ece18d84 11d93b6a39/ src/config/ dhcp.h# L22
So the value of "4" in the header means it's either the first or second dhcp discover request (I can't tell if the counting starts at 0 or 1), and 1 second later we see the second, which is marked 10, which is 2 << 2 | 0x2, meaning it's the second (or 3rd?) transmission and that it's seen an offer before.