On Mon, Oct 14, 2024 at 04:37:42PM +0100, Richard W.M. Jones wrote: > On Mon, Oct 14, 2024 at 10:46:22AM -0400, Laine Stump wrote: > > On 10/14/24 5:35 AM, Richard W.M. Jones wrote: > > >On Mon, Oct 14, 2024 at 09:52:13AM +0100, Daniel P. Berrangé wrote: > > >> > > >>Urgh, I wonder if this is fallout from switching to NFT instead of iptables. > > > > > >I can list the firewall rules if you tell me what I'm looking for ... > > > > > >>IIUC, the NFT kernel maintainers didn't implement for checksum fixup rules, > > >>since they believe that all modern distros would have long ago fixed their > > >>bugs wrt mangled checksums. > > > > That's the first thing that came to my mind too - maybe RHEL5 > > *isn't* the only guest OS that has this problem. (I certainly hope > > that isn't the case :-/) > > > > There are two ways to test out this theory: > > > > 1) change the setting of "firewall_backend" in > > /etc/libvirt/network.conf to "iptables" and restart virtnetworkd > > > > (if that does work, then switch back to nftables, restart > > virtnetworkd, and test again just to make sure the issue wasn't > > caused by some out-of-place rule) > > I changed the setting between nftables and iptables a few times and I > can confirm that your theory seems to be correct. > > iptables => > > "5 bad udp checksums in 5 packets" message is NOT seen > > FreeBSD gets an immediate DHCPOFFER and boots quickly with network > > nftables => > > FreeBSD sends 5 DHCPDISCOVER messages > > "5 bad udp checksums in 5 packets" reappears > > FreeBSD does NOT see DHCPOFFER, although it does seem to remember > the offer from the previous boot, so it does get a network > connection in the end. > > > or > > > > 2) tell qemu to setup the virtio-net device to do its packet > > processing in userspace rather than the kernel. You do this by > > adding > > > > <driver name='qemu'/> > > > > to the <interface> section. > > This also works (with nftables). > > > >If I understand the trace correctly, the bad checksum originates on > > >the Linux host (the reply sent by dnsmasq). > > > > I need to try it again to verify, but my recollection is that (when > > you're using virtio-net with default settings) the checksums of DHCP > > packets in one direction or the other *always* show up in tcpdump as > > having bad checksums, but they still end up getting to the other end > > with a proper checksum. Sometime in the distant past I *may have* > > had it explained to me why this happens, but I don't recall now. > > Anyway, I'm just saying this so that you know the validity of the > > UDP checksum shouldn't be used as an indicator of whether or not > > things are "working". > > I have to say I also don't really understand what's happening here. > Isn't the Linux host sending DHCPOFFER? Why doesn't it set the UDP > checksum correctly and/or why would tcpdump report it wrongly if it is > setting it? Here are the original gory details https://lists.isc.org/pipermail/dhcp-hackers/2010-April/001835.html TL;DR: we have checksum offload running so the host doesn't fill in any checksums, but DHCP client then tries to validate the non-existant checksum. Boom. ith regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|