Yesterday I ran into a networking issue that looked trivial at first and turned out to be a great reminder of why debugging layer by layer still matters.
This post documents the failure, the investigation, and the real root cause.
The Symptom
- Ethernet Link: UP
- Speed: 100 Mbps, full duplex (ethtool <interface>)
- IP assigned via DHCP
- IP Routes look correct
- Firewall Flushed
- Interface up and running
Yet:
- I couldn’t ping the gateway (
192.168.0.1) - I couldn’t ping another host on the same subnet
pingimmediately returned:
Destination Host Unreachable
Classic “networking is broken” vibes.
First-Level Checks (Nothing Unusual)
I checked obvious things:
ip addr-> Ip was correct (192.168.0.3/24)ip route-> route to192.168.0.0/24present- Firewall -> disabled
- Interface state ->
UP
The Clue: Neighbor Table
Running:
ip neigh show dev enx207bd52aeb33
Got:
192.168.0.1 INCOMPLETE
This means:
- Kernel tried to resolve the gateway’s MAC address
- ARP resolution was never completed
Now, to confirm this ARP issue
Smoke Gun: Tcpdump
To confirm:
sudo tcpdump -i enx207bd52aeb33 -e -n arp
and ran ping 192.168.0.1 in another terminal
Result
0 packets captured
At this moment, I realised ARP request never left my machine.
If ARP were being transmitted, tcpdump would see it — even if the router were dead.
The Actual Issue: r8152
The Ethernet adapter was using the Realtek r8152 USB Ethernet driver:
driver: r8152
version: v1.12.13
You can check in your machine using:
ethtool -i <interface>
What happened internally was a TX-path deadlock:
- RX still worked (that’s why DHCP succeeded)
- TX queue was wedged
- Packets never made it to the USB layer
- No kernel errors
- No timeouts
- No warnings
From the kernel’s point of view, packets were “queued successfully”. From reality’s point of view, nothing was leaving the NIC.
This is one of the nastiest classes of bugs: silent failure.
The Fix
Out of curiosity, I tried resetting the driver:
sudo modprobe -r r8152
sudo modprobe r8152
Immediately:
- ARP packets appeared in tcpdump
- Neighbor entry moved to
REACHABLE - Ping to the gateway worked
- Network fully recovered