Linux – route packets through hardware loopback interface, not lo

hardwarelinuxloopbackroute

My embedded Linux board has 3 interfaces:

  • eth0 – For all outbound traffic
  • eth1 – A hardware loopback (traffic leaves board, but comes immediately back in the same port)
  • lo – Standard loopback interface

ifconfig reveals the following:

eth1      Link encap:Ethernet  HWaddr AA:BB:CC:DD:EE:FF  
          inet addr:169.254.1.1  Bcast:169.254.255.255  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Base address:0x8000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1561 (1.5 KiB)  TX bytes:1561 (1.5 KiB)

And, route yields:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
169.254.1.1     *               255.255.255.255 UH    0      0        0 eth1
A.B.C.96        *               255.255.255.240 U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         A.B.C.110       0.0.0.0         UG    0      0        0 eth0

I can ping the eth1 interface's assigned IP, like so:

PING 169.254.1.1 (169.254.1.1): 56 data bytes
64 bytes from 169.254.1.1: seq=0 ttl=64 time=0.143 ms
64 bytes from 169.254.1.1: seq=1 ttl=64 time=0.067 ms

But, all of the packets appear on the lo interface, not eth1, according to the ifconfig reported RX/TX counters.

Why? Is the traffic really ingressing and egressing the eth1 port, but being accounted under the lo interface? Or, is the traffic really all flowing through lo?

Thanks!

Best Answer

Local traffic doesn't go through Ethernet interfaces. Fundamentally, local traffic goes through the local interface. The OS has no idea that your eth1 interface has hardware loopback.