Loopback with two (physical) ethernet interfaces
Imagine that you have an embedded device with two physical ethernet ports. You want to verify the functionality of both these ports in the manufacturing process, so you connect an ethernet cable between the ports, setup IP addresses and now what?
As Linux (actually the default network namespace) is aware of the both adapters and their IP/MAC-addresses, the system see no reason to send any traffic out. Instead, Linux will loop all traffic between the interfaces internally.
To avoid that and actually force traffic out on the cable, we have to make the adapters unaware of eachother. This is done by putting them into different network namespaces!
Hands on
To do this, all you need is to have support for network namespaces in the kernel (CONFIG_NET_NS=y) and the iproute2 [1] package, which both probably is included in every standard Linux distribution nowadays.
We will create two network namespaces, lets call them netns_eth0 and netns_eth1:
1ip netns add netns_eth0
2ip netns add netns_eth1
Move each adapter to their new home:
1ip link set eth0 netns netns_eth0
2ip link set eth1 netns netns_eth1
Assign ip addresses:
1ip netns exec netns_eth0 ip addr add dev eth0 192.168.0.1/24
2ip netns exec netns_eth1 ip addr add dev eth1 192.168.0.2/24
Bring up the interfaces:
1ip netns exec netns_eth0 ip link set eth0 up
2ip netns exec netns_eth1 ip link set eth1 up
Now we can ping each interface and know for sure that the traffic is actually on the cable:
1ip netns exec netns_eth0 ping 192.168.0.2
2ip netns exec netns_eth1 ping 192.168.0.1