Ethernet Dead on Fedora, and the Cable Was Fine All Along
My ethernet stopped working on Fedora. Cable was fine, driver was fine, kernel could see the link. NetworkManager just never made a profile for it.
Varun Agnihotri
Python, LLMs & Cybersecurity
Short version - if the tray icon shows a red X but
ip linksaysLOWER_UP, stop blaming the cable. There's no connection profile.
Plugged the ethernet in, got the red X on the network icon in the tray. No internet, nothing.
First guess was the obvious one - bad cable or a dead port. Took the cable over to a friend's Windows laptop and it worked perfectly there. So the cable is fine, and something on my side is the problem.
Checking what the kernel actually sees
Before touching any config, I wanted to know whether Linux even knew the adapter existed.
ip link show13: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
altname enp3s0f3u1u4u3c2
altname enx aabbccddeeffTwo things here that killed my "it's a driver problem" theory straight away.
UP and LOWER_UP together. UP just means the interface is
administratively enabled. LOWER_UP is the one that matters - it means the
driver is reporting a physical link, i.e. there is a cable plugged in and
there's signal coming down it. If the cable or port were dead I'd have seen
NO-CARRIER instead.
The other thing - enx aabbccddeeff as an altname. That naming scheme is
what Fedora uses for USB-attached network adapters, built off the MAC. So this
isn't a built-in NIC at all, it's a USB ethernet adapter. Didn't change the
fix, but good to know.
So: hardware fine, driver loaded, link detected. Which leaves userspace.
The actual problem
nmcli device statusDEVICE TYPE STATE CONNECTION
wlo1 wifi connected <my-wifi>
lo loopback connected (externally) lo
docker0 bridge connected (externally) docker0
eth0 ethernet disconnected --
p2p-dev-wlo1 wifi-p2p disconnected --There it is. eth0 is disconnected, and the CONNECTION column is --.
That -- is the whole bug. NetworkManager knows the device exists, it just
has no connection profile to activate on it. Nothing was broken, nothing was
misconfigured - there was simply no config at all, so NM sat there doing
nothing with a perfectly good link.
The fix
Made a profile for it:
nmcli connection add type ethernet ifname eth0 con-name eth0-wiredEthernet started working immediately, before I ran anything else.
I did also run this after:
nmcli connection up eth0-wiredThat did nothing. It was already up. New profiles get
connection.autoconnect=yes by default, so the moment connection add
created the profile, NetworkManager activated it on a device that was sitting
there available and waiting. The connection up was me not trusting that it
had worked.
Why there was no profile to begin with
Honestly, I don't know for sure.
Normally NetworkManager handles this itself - when it sees a wired device with
no matching profile, it creates a default one (the "Wired connection 1" you've
probably seen). That's the no-auto-default setting, and by default it's
empty, meaning auto-create is on for everything.
So something stopped that from happening here. Could be a leftover config drop
in /etc/NetworkManager/conf.d/, could be something about how the USB adapter
hotplugs and when NM notices it. I didn't chase it further because the machine
works and I had other things to do. If it happens again on a fresh plug-in
I'll dig in properly.
The bit worth remembering
Most of the time I've lost to network problems on Linux has been from skipping the diagnosis and jumping to the fix. Reinstalling drivers, adding kernel params, restarting NetworkManager over and over. This one was two commands of reading before anything got changed.
| What you see | What it means |
|---|---|
NO-CARRIER in ip link | Cable, port or adapter. Physical problem. |
LOWER_UP + no interface listed | Driver problem, kernel side. |
LOWER_UP + -- in nmcli | No profile. This post. |
LOWER_UP + profile, no IP | DHCP or IP config. Different rabbit hole. |