2

The issue

After installing Fedora 30 (KDE) on my laptop my router would crash shortly after I connected to it. This happened both when I connected through wired Ethernet and Wi-Fi. Fortunately, the router logs gave a clue as to why this was happening. I would get warnings like this:

kern.err kernel: [ 116.293427] ipq806x-gmac-dwmac 37200000.ethernet eth0: len 1675 larger than size (1536)

Followed by:

daemon.warn dnsmasq[2721]: reducing DNS packet size for nameserver 92.220.228.70 to 1280

For the first message I found a post on the OpenWrt forum with other people experiencing the same issue. It turns out that a bug in the switch driver causes the kernel to panic whenever it receives packets larger than the default MTU (1500), aka "jumbo frames".

Nobody else in that thread got the second warning, but I assume it's relevant in my case.

When I was using Fedora 29 I never experienced this, and all other devices on the network connect without any issues. So some bug must have been introduced in Fedora 30.

What I have observed

I have tried a couple of things to see if I can connect to the router without causing the warnings and crash. I'll list them below.

Wi-Fi, with NetworkManager enabled

Able to connect, but results in warnings and crash. ifconfig outputs an MTU of 1500.

Wi-Fi, with NetworkManager enabled and MTU set to 1500 in KDE System Settings

Able to connect, but results in warnings and crash. ifconfig outputs an MTU of 1500.

Wi-Fi, with NetworkManager disabled and connecting manually

$ sudo wpa_supplicant -B -iwlp18s0 -cwpa.conf -Dnl80211

$ sudo dhclient wlp18s0

Works fine! Results in no warnings and no crash. ifconfig outputs an MTU of 1500.

Wired Ethernet, with NetworkManager enabled

Able to connect, but results in warnings and crash. ifconfig outputs an MTU of 1500.

Wired Ethernet, with NetworkManager enabled and MTU set to 1500 in KDE System Settings

Able to connect, but results in warnings and crash. ifconfig outputs an MTU of 1500.

Wired Ethernet, with NetworkManager disabled and connecting manually

I just plug the cable into the port and run the following command:

$ sudo dhclient enp19s0

Works fine! Results in no warnings and no crash. ifconfig outputs an MTU of 1500.

Finding the cause

I want to find the cause for this bug so I can report it upstream, and would really appreciate if someone more experienced with debugging could help me out.

EDIT: Dolan ran Wireshark on the laptop to look for the large packets. Wireshark did not find the laptop transmitting any jumbo frames, but it found that the laptop received fragmented IP packets. When reassembled, these packets would of course be larger than 1500 bytes. Possibly the router received a packet over 1500 bytes and fragmented it before forwarding it to the laptop, or possibly a fragmented packet triggered bad behaviour in the router's network driver.

The IP packets in question were DNS results. The DNS result types were related to DNSSec: DNSKEY and RRSIG. The DNS requests and responses were sent immediately before NetworkManager's captive portal test (HTTP request for http://fedoraproject.org/static/hotspot.txt). It seems plausible these DNS requests are what changed between the Fedora 29 and Fedora 30 installs.

Dolan was looking for some straightforward workaround for the Fedora 30 laptop, but currently feels they have spent enough time on this issue and might try using a different distribution (maybe an older stable release) on their laptop :-).

  • @sourcejedi Yes, I mean when it receives frames larger than 1536 bytes. I did try to set the MTU manually to 1500 under system settings in KDE, but it appears that the setting is being ignored since the router still receives jumbo frames. I suspect this has something to do with network manager; connecting to my wireless network manually with wpa_supplicant works just fine. – Dolan May 12 at 8:45
  • If you want my experienced suggestion, you should not take the OpenWrt crash messages for granted - there's clearly some bug, so its not certain that the message about exceeding the MTU is not also a bug :-). I have edited your question to match your comment. Feel free to re-edit if I have mis-understood you. – sourcejedi May 12 at 9:23
  • @sourcejedi Ok, so then it makes sense to check whether the MTU gets set above 1500. It seems like just a few jumbo frames get transmitted, and I would have to get lucky to catch the MTU set to above 1500 with for example: ip addr show | grep wlp18s0. When I ran that command I always got MTU 1500 back. Do you have any suggestions for how I can do that? – Dolan May 12 at 12:42
  • I would be surprised if something is yanking the MTU setting up and down. Anyway, if it's not a kernel bug, I think you should be able to capture the outgoing packets using Wireshark on your laptop, and sort by frame size. You might have to make sure you capture on "all interfaces", because if you try to capture on an interface that is "down", it probably won't let you. I.e. this should let you mostly rule out a bug in NetworkManager . – sourcejedi May 12 at 12:50
  • It might be possible for some program to send packets larger than the MTU if it really wanted to, by using a raw packet socket, (not sure but it seems plausible), however that should still show up in Wireshark. – sourcejedi May 12 at 12:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.