~/Rev_

NO-CARRIER on a Good Cable: Fixing Link Autonegotiation

Reading interface flags before touching config: a NIC and switch that couldn't agree on speed, and the ethtool fix.

2026-04-28#CyberDen
work: Apr 2026 · Done · short · Linux, Networking, CyberDen

Symptom

I plugged the ThinkPad (Fedora) into an untagged access port on the lab switch, configured exactly like the one my main workstation uses. It showed "wired" briefly, then dropped.

ip link show enp0s31f6
# enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> ... state DOWN
nmcli device status
# ethernet  unavailable

Reading NO-CARRIER

NO-CARRIER means the NIC sees no physical link. The driver is loaded and the interface exists, so VLANs, IP addressing and routing aren't the issue yet. That leaves cable, port, or link negotiation.


Fix

Forcing the link to skip autonegotiation brought it up immediately:

sudo ethtool -s enp0s31f6 speed 100 duplex full autoneg off

The Intel NIC and the switch port were failing to negotiate. A forced speed works around that, but it isn't the end state. The next step is trying other cables and ports, and a forced 1000/full, to get gigabit back rather than living at 100 Mb/s.

ethtool forced speed
Forcing speed and duplex with autoneg off, then pings to the gateway and the hypervisor.

Bonus problems on the same night

  • **Error opening terminal: xterm-kitty** when running htop over SSH. The remote host doesn't have kitty's terminfo. Quick fix: export TERM=xterm-256color. Permanent fix: install kitty's terminfo on the remote, or use kitten ssh.
  • A frozen SSH session: Enter, then ~. kills it from the client side.

Lesson

Read the interface flags before touching configuration. NO-CARRIER tells you which layer to look at.


Sources: ThinkPad Ethernet Issue (28 Apr 2026)