2

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!

Trevor
  • 121
  • 1
  • 3

2 Answers2

1

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.

David Schwartz
  • 31,449
  • 2
  • 55
  • 84
  • thanks! That's what I also suspected, so why is all the traffic aimed at 169.254.1.1 going through lo instead of eth1? – Trevor Feb 28 '13 at 14:10
  • Because it's local traffic. – David Schwartz Feb 28 '13 at 14:36
  • it is not generally true indeed. if you ping some local IP - yes it goes to LO. however all local traffic that goes inside host with docker containers do NOT go to lo indeed. it depends of actual case not in general. – Alex Sep 29 '20 at 03:03
-1

Linux TCP/IP stack is very flexible one. See:

# — let's add dummy IP-address to Wi-Fi NIC
# ip ad ad 11.1.2.3/24 dev wlan0
# — Now chage its scope from 'local' to 'link'
# ip ro replace 11.1.2.3 dev wlan0 scope link table local

# — with tcpdump we can see now that's traffic to that dummy
# ex-local IP-address actually tries to go out of Wi-Fi NIC:

00:15:22.807607 ARP, Request who-has 11.1.2.3 tell 10.0.0.7, length 28
poige
  • 9,448
  • 2
  • 25
  • 52
  • Thanks, poige, but I don't understand what any of those lines are doing, much less, why. Sorry. – Trevor Feb 28 '13 at 14:20
  • @Trevor, comments added, and you can use `ip help`, `ip ad help` or `ip ro help` to become familiar with `ip` tool. Also, google for LARTC — Linux Advanced Routing & Traffic Control HOWTO. – poige Feb 28 '13 at 14:51