cBPF Virtual Patch (single-thread)

A demonstation of a virtual patch between two nodes with an attached cBPF filter on one of the interfaces.

  • GitHub Link: https://github.com/packetcord/packetcord.io/tree/main/apps/l2_patch_cbpf
  • Topology File: topology_examples/l2_patch.json

Topology diagram

TOP

Steps

Build the project (all examples)

cd packetcord.io
mkdir build
cd build
cmake .. --fresh
make

Start the topology

Load the exampe topology project file.

Then, left click on the Patch container. Inside the Properties panel, set the Network App field to point to the location of the app: /home/ubuntu/packetcord/sdk/packetcord.io/build/apps/l2_patch_cbpf/l2_patch_cbpf_app

Save the file (overwrite or select new filename and/or new location), Validate, Generate and Launch the topology and open the container shell.

TOP

Inside the container, run the following commands:

cd /root
./l2_patch_cbpf_app

Result

Open the shells of Node A and Node B. Try to ping each other (172.16.111.1 and 172.16.111.2).

PING 172.16.111.2 (172.16.111.2): 56 data bytes
64 bytes from 172.16.111.2: seq=0 ttl=64 time=0.175 ms
64 bytes from 172.16.111.2: seq=1 ttl=64 time=0.330 ms
64 bytes from 172.16.111.2: seq=2 ttl=64 time=0.293 ms
64 bytes from 172.16.111.2: seq=3 ttl=64 time=0.319 ms

Let's also run iperf3 between Node A and Node B:

On Node B

iperf3 -s

On Node A

iperf3 -c 172.16.111.2
Connecting to host 172.16.111.2, port 5201
[  5] local 172.16.111.1 port 33200 connected to 172.16.111.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  98.4 MBytes   824 Mbits/sec   93    126 KBytes       
[  5]   1.00-2.00   sec   114 MBytes   952 Mbits/sec  208   96.2 KBytes       
[  5]   2.00-3.00   sec   105 MBytes   882 Mbits/sec  149    100 KBytes       
[  5]   3.00-4.00   sec   110 MBytes   919 Mbits/sec  160    106 KBytes       
[  5]   4.00-5.00   sec   108 MBytes   907 Mbits/sec  135   93.3 KBytes       
[  5]   5.00-6.00   sec   105 MBytes   879 Mbits/sec  130    100 KBytes       
[  5]   6.00-7.00   sec   112 MBytes   938 Mbits/sec  137   90.5 KBytes       
[  5]   7.00-8.00   sec   106 MBytes   887 Mbits/sec  135   93.3 KBytes       
[  5]   8.00-9.00   sec   110 MBytes   922 Mbits/sec  147   91.9 KBytes       
[  5]   9.00-10.00  sec   111 MBytes   928 Mbits/sec  161    103 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.05 GBytes   904 Mbits/sec  1455            sender
[  5]   0.00-10.00  sec  1.05 GBytes   903 Mbits/sec                  receiver

Terminate

Use the Destroy button to terminate the emulation.