1

What I'm doing is connecting two docker containers using OVS-DPDK to test throughput between then (using sockperf or iperf3). For this, I've been suggested to use TAP interfaces.

What is expected is that container A passes/receives traffic from TAP0 and container B sends/receives traffic from the TAP1 interface. TAP0 must send traffic to TAP1 over userspace OVS-DPDK and vise versa.

But unfortunately, I can't get the traffic to go to the TAP interfaces.

Here is what I'm doing (based on this answer):

On the host OS:

sudo ./utilities/ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
sudo ./utilities/ovs-vsctl add-port br0 myeth0 -- set Interface myeth0 type=dpdk options:dpdk-devargs=net_tap0,iface=tap0
sudo ./utilities/ovs-vsctl add-port br0 myeth1 -- set Interface myeth1 type=dpdk options:dpdk-devargs=net_tap1,iface=tap1
sudo ./utilities/ovs-ofctl add-flow br0 in_port=1,action=output:2
sudo ./utilities/ovs-ofctl add-flow br0 in_port=2,action=output:1

It creates two TAP interfaces (shown in ifconfig) and two OVS-DPDK ports (myeth0 and myeth1)

Then I assign IP to the TAP interfaces:

sudo ip addr add 173.17.0.1/24 dev tap0
sudo ip addr add 173.17.1.1/24 dev tap1
sudo ip link set tap0 up
sudo ip link set tap1 up

And then run the docker containers:

docker run -it --rm --name=server -p 5201:5201 --entrypoint /bin/bash "networkstatic/iperf3"
docker run -it --rm --name=client --entrypoint /bin/bash "networkstatic/iperf3"

The traffic goes through docker created venth interfaces and nothing goes through TAP interfaces (As I check in ifconfig).

What is the correct way to connect two containers using OVS-DPDK and TAP interface in Linux?

EDIT:

Output of ifconfig:


tap0: flags=4931<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,MULTICAST>  mtu 1500
        inet6 fe80::3847:cbff:fe27:3c2e  prefixlen 64  scopeid 0x20<link>
        ether 3a:47:cb:27:3c:2e  txqueuelen 1000  (Ethernet)
        RX packets 16  bytes 2447 (2.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29  bytes 3545 (3.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tap1: flags=4931<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,MULTICAST>  mtu 1500
        inet6 fe80::2835:bcff:fe4c:4f0e  prefixlen 64  scopeid 0x20<link>
        ether 2a:35:bc:4c:4f:0e  txqueuelen 1000  (Ethernet)
        RX packets 12  bytes 1203 (1.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 2447 (2.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth8f1f04e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::50bf:f2ff:fed9:e03b  prefixlen 64  scopeid 0x20<link>
        ether 52:bf:f2:d9:e0:3b  txqueuelen 0  (Ethernet)
        RX packets 2047606  bytes 135148094 (135.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2717619  bytes 119774365333 (119.7 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethb6e1780: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::382b:e0ff:fe8f:afa0  prefixlen 64  scopeid 0x20<link>
        ether 3a:2b:e0:8f:af:a0  txqueuelen 0  (Ethernet)
        RX packets 2717563  bytes 119774357789 (119.7 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2047637  bytes 135151896 (135.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Mohammad Siavashi
  • 1,192
  • 2
  • 17
  • 48
  • In docker, if one needs to use TAP or TUN interface it has to be enabled with --device /dev/net/tun:/dev/net/tun. Hence please re-run your docker with modified argument as – Vipin Varghese May 26 '21 at 09:08
  • please note there is already RX and TX counters updated. You have also asked for my skype id which is already shared. Please feel free to contact me. – Vipin Varghese May 26 '21 at 09:08
  • I am yet to recieve your skype id to initiate a live debug – Vipin Varghese May 26 '21 at 10:00

0 Answers0