I have instrumented ipconfig, and determined that the ultimate source of the problem is that, for the case of multiple interfaces, ipconfig has a dependency on the kernel's probe order of the network interfaces.
For whatever reason, the -31 kernel probes the network devices in one order (e.g., ens3 then ens4), and the -57 kernel in the other order (ens4 first then ens3). The probe order of network devices (and PCI devices in general) is explicitly not defined, and so this is not a bug in the kernel itself; ipconfig is failing due to its dependency on a specific enumeration order. The issue in ipconfig is that it is using a single packet socket to attempt to multiplex packet traffic on multiple interfaces. Presuming that ens3 will answer DHCP and ens4 will not, for the case that works, the order ends up being something like: send DHCP request on ens3 send DHCP request on ens4 [ system gets DHCP response via ens3 ] try to receive DHCP reply sent by peer for ens3; this matches, and all is happy For the case that it fails, the sequence is roughly: send DHCP request on ens4 send DHCP request on ens3 [ system gets DHCP response via ens3 ] try to receive DHCP reply sent by peer for ens4; the reply is actually for ens3, so ipconfig throws it away (as the XID, et al, don't match what is expected for the ens4 DHCP request). This repeats until ipconfig gives up. As I said above, the issue is that ipconfig is trying to multiplex traffic for two interfaces on one packet socket. This is fine for sending, but for receiving on an unbound packet socket, there is no way to receive a packet sent to a specific interface. Packets are delivered to recvfrom/recvmsg in the order received. I note that ipconfig sets sll.sll_ifindex on the msghdr provided to recvfrom and recvmsg system calls; perhaps the author believed that this limits received packets to only packets received on that ifindex. This is not the case, and the sll_ifindex passed to recvfrom/recvmsg is ignored. I'm looking into whether or not there is an simple fix for this that will let ipconfig function without major rework to utilize one packet socket per interface. ** Tags removed: kernel-key ** Package changed: linux (Ubuntu) => klibc (Ubuntu) ** Changed in: klibc (Ubuntu) Status: Triaged => Confirmed ** Changed in: klibc (Ubuntu) Assignee: (unassigned) => Jay Vosburgh (jvosburgh) -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1652348 Title: initrd dhcp fails / ignores valid response To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/klibc/+bug/1652348/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs