Framework Desktop Ethernet on Ubuntu Server LTS: What Went Wrong and How It Was Fixed

Overview

Hardware: Framework Desktop Max+ 395 (128 GB RAM)
OS: Ubuntu Server 24.04.3

The system exhibited intermittent Ethernet instability. While the network interface appeared operational at first, sustained traffic caused severe degradation and eventual connection failure. The issue manifested as kernel-level transmit buffer exhaustion rather than a simple connectivity or configuration problem.

Symptoms

  • Ethernet link came up normally (carrier, DHCP, routing all appeared correct)
  • Short tests (single pings, brief downloads) worked
  • Sustained traffic caused instability:
    • Download speeds fluctuated sharply (e.g., ~5 MB/s → ~17 MB/s → 0 MB/s)
    • Long-lived TCP connections were terminated by the remote endpoint
    • Large downloads repeatedly failed
  • Kernel-level errors appeared during testing

Observed Failure Output (Sanitized)

ping -c 100 gatway_ip

64 bytes from gatway_ip: icmp_seq=1 ttl=64 time=1.59 ms
64 bytes from gatway_ip: icmp_seq=2 ttl=64 time=1.11 ms
64 bytes from gatway_ip: icmp_seq=3 ttl=64 time=1.13 ms
64 bytes from gatway_ip: icmp_seq=4 ttl=64 time=1.12 ms
64 bytes from gatway_ip: icmp_seq=5 ttl=64 time=1.13 ms
64 bytes from gatway_ip: icmp_seq=6 ttl=64 time=1.13 ms
64 bytes from gatway_ip: icmp_seq=7 ttl=64 time=1.04 ms
64 bytes from gatway_ip: icmp_seq=8 ttl=64 time=1.07 ms
64 bytes from gatway_ip: icmp_seq=9 ttl=64 time=1.13 ms
64 bytes from gatway_ip: icmp_seq=10 ttl=64 time=1.12 ms

ping: sendmsg: No buffer space available
ping: sendmsg: No buffer space available
ping: sendmsg: No buffer space available
ping: sendmsg: No buffer space available

14 packets transmitted, 10 received, 28.5% packet loss

Initial Attempted Fix (HWE Kernel)

The system was updated following common guidance:

sudo apt install --install-recommends linux-generic-hwe-24.04

This ensured the latest hardware enablement stack was present. While Ethernet functioned at a basic level, the instability under sustained load persisted. The issue was not that Ethernet failed entirely, but that the kernel exhausted transmit buffers during continuous traffic.

MTU Investigation (False Lead)

MTU mismatches were investigated due to failures occurring during WAN transfers. MTU tuning did not resolve the issue. Failures occurred even during local gateway traffic and manifested as kernel send failures rather than fragmentation problems.

Root Cause

The system was operating with:

  • Ubuntu HWE generic kernel
  • Realtek out-of-tree DKMS Ethernet driver (r8125)

This combination caused instability under sustained load, leading to transmit queue starvation and kernel buffer exhaustion.

Kernel Verification

To verify the running kernel during troubleshooting, the following commands were used:

uname -r
uname -a
cat /proc/version
ls -1 /boot/vmlinuz-*

During the failure state, the system was running an HWE generic kernel.
After remediation, the system was confirmed to be running:

6.14.0-1017-oem

Corrective Actions

  1. Migrated to the OEM kernel:
    sudo apt install linux-oem-24.04
    sudo reboot

  2. Removed the out-of-tree DKMS driver:
    sudo dkms remove r8125/9.011.00 --all

  3. Enabled the in-tree driver:
    sudo rm /etc/modprobe.d/blacklist-r8169.conf
    sudo update-initramfs -u
    sudo reboot

  4. Prevented regression:
    echo “blacklist r8125” | sudo tee /etc/modprobe.d/blacklist-r8125.conf
    sudo update-initramfs -u
    echo “r8169” | sudo tee /etc/modules-load.d/r8169.conf

  5. Disabled Energy Efficient Ethernet (EEE):
    sudo ethtool --set-eee enp191s0 eee off ← change enp191s0 to your Eth name

  6. Preferred Ethernet over wireless using route metrics:
    Ethernet metric: 100
    Wireless metric: 600

Result

After migrating to the OEM kernel (6.14.0-1017-oem) and using the in-tree Ethernet driver, sustained transfers stabilized, kernel buffer exhaustion ceased, and connections were no longer terminated. Wireless networking now functions strictly as a fallback.

Key Takeaway

This issue was caused by a kernel and out-of-tree driver interaction under sustained load, not by MTU configuration or missing drivers. The correct fix was switching to the OEM kernel and the in-tree Ethernet driver.

2 Likes

For those wanting a one stop script to setup the Ethernet not just tshoot.

Copy paste this.

#!/usr/bin/env bash
set -euo pipefail

echo “=== RTL8126 / r8169 Ethernet Fix (Ubuntu 24.04 OEM) ===”

-------------------------

1) Ensure OEM kernel

-------------------------

echo “[1/8] Installing OEM kernel (if not already installed)…”
sudo apt update
sudo apt install -y linux-oem-24.04

-------------------------

2) Remove out-of-tree r8125 DKMS

-------------------------

echo “[2/8] Removing r8125 DKMS (if present)…”
sudo dkms remove r8125/9.011.00 --all 2>/dev/null || true

-------------------------

3) Ensure r8169 is not blacklisted

-------------------------

echo “[3/8] Ensuring r8169 is enabled…”
sudo rm -f /etc/modprobe.d/blacklist-r8169.conf

-------------------------

4) Prevent regression (blacklist r8125, force r8169)

-------------------------

echo “[4/8] Preventing regression…”
echo “blacklist r8125” | sudo tee /etc/modprobe.d/blacklist-r8125.conf >/dev/null
echo “r8169” | sudo tee /etc/modules-load.d/r8169.conf >/dev/null
sudo update-initramfs -u

-------------------------

5) Detect Ethernet + Wi-Fi interfaces

-------------------------

echo “[5/8] Detecting interfaces…”
ETH_IFACE=“$(ip -br link | awk ‘$1 ~ /^en/ {print $1; exit}’)”
WIFI_IFACE=“$(ip -br link | awk ‘$1 ~ /^wl/ {print $1; exit}’)”

if [[ -z “${ETH_IFACE}” ]]; then
echo “ERROR: No Ethernet interface found”
exit 1
fi

echo “Ethernet interface: ${ETH_IFACE}”
[[ -n “${WIFI_IFACE}” ]] && echo “Wi-Fi interface: ${WIFI_IFACE}”

-------------------------

6) Bring Ethernet up + install DHCP client (immediate connectivity)

-------------------------

echo “[6/8] Bringing Ethernet up and enabling DHCP…”
sudo ip link set “${ETH_IFACE}” up
sudo apt install -y isc-dhcp-client
sudo dhclient -v “${ETH_IFACE}” || true

-------------------------

7) Disable Energy Efficient Ethernet (EEE) (immediate; non-persistent)

-------------------------

echo “[7/8] Disabling EEE…”
sudo apt install -y ethtool
sudo ethtool --set-eee “${ETH_IFACE}” eee off || true

-------------------------

8) Make Ethernet persistent across reboot + prefer Ethernet over Wi-Fi

Use systemd-networkd for Ethernet (NetworkManager may mark it “strictly unmanaged”)

-------------------------

echo “[8/8] Configuring persistent DHCP + route metrics (Ethernet preferred)…”
sudo mkdir -p /etc/systemd/network

Ethernet: DHCP + RouteMetric=100

sudo tee “/etc/systemd/network/10-${ETH_IFACE}.network” >/dev/null <<EOF
[Match]
Name=${ETH_IFACE}

[Network]
DHCP=ipv4

[DHCPv4]
RouteMetric=100
EOF

Optional Wi-Fi metric=600 (ONLY if you want networkd to manage Wi-Fi too)

If you rely on NetworkManager for Wi-Fi, skip this and set metrics in NM instead.

if [[ -n “${WIFI_IFACE}” ]]; then
if ! ls /etc/systemd/network/“${WIFI_IFACE}”.network >/dev/null 2>&1; then
sudo tee “/etc/systemd/network/20-${WIFI_IFACE}.network” >/dev/null <<EOF
[Match]
Name=${WIFI_IFACE}

[Network]
DHCP=ipv4

[DHCPv4]
RouteMetric=600
EOF
fi
fi

sudo systemctl enable --now systemd-networkd
sudo systemctl restart systemd-networkd

echo “=== COMPLETE ===”
echo “Reboot recommended:”
echo " sudo reboot"
echo
echo “After reboot verify:”
echo " ip a show ${ETH_IFACE}"
echo " ip route | head"