Files
xdp-project-bpf-examples/tc-basic-classifier/README.org
Frey Alfredsson 9337d2ff8a Adding a basic TC eBPF Qdisc classifier example
This example demonstrates how to write a simple eBPF Qdisc classifier
that classifies flows depending on their destination TCP port. The
example script, runner.sh shows how you can use the eBPF Qdisc
classifier and implement the same functionality using u32. The script
creates two network namespaces called Left and Right, representing two
different hosts. The script then illustrates the classifiers in action
using iperf3 by starting clients on the Left namespace that connect to
iperf3 servers on the Right namespace. The Qdisc classifiers give TCP
ports 8080 and 8081 a high rate limit, while TCP port 8082 represents
all other traffic capped at 20 Mbps.

Signed-off-by: Frey Alfredsson <freysteinn@freysteinn.com>
2021-03-17 02:26:58 +01:00

67 lines
3.3 KiB
Org Mode

#+TITLE: eBPF Qdisc classifier example
This example demonstrates how to write a simple eBPF Qdisc classifier that
classifies flows depending on their destination TCP port. The example script,
runner.sh shows how you can use the eBPF Qdisc classifier and implement the same
functionality using u32. The script creates two network namespaces called
Left and Right, representing two different hosts, as seen in Figure 1. The
script then illustrates the classifiers in action using iperf3.
#+CAPTION: The figure depicts the network and classifier setup of the two network namespaces setup provided by the runner.sh script.
#+NAME: fig:Figure 1
[[./overview.png]]
The Left namespace loads a Qdisc classifier that rate-limit TCP ports 8080 and
8082 to get a higher rate than default traffic. The runner.sh script shows the
higher rate limits by connecting to both target ports and TCP port 8082 to
establish the default rate limit of 20 Mbps.
To run the application, choose either the "bpf" or "u32" parameters:
#+BEGIN_SRC bash
[root@bpfexamples]# ./runner.sh bpf
bash-5.0# ./runner.sh bpf
Starting setup
Starting iperf3
Connecting to host 172.16.16.20, port 8080
[ 5] local 172.16.16.10 port 56332 connected to 172.16.16.20 port 8080
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 9.51 MBytes 79.8 Mbits/sec 0 86.3 KBytes
[ 5] 1.00-2.00 sec 9.38 MBytes 78.7 Mbits/sec 0 112 KBytes
[ 5] 2.00-3.00 sec 8.95 MBytes 75.1 Mbits/sec 0 112 KBytes
[ 5] 3.00-4.00 sec 9.20 MBytes 77.2 Mbits/sec 0 112 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-4.00 sec 37.0 MBytes 77.7 Mbits/sec 0 sender
[ 5] 0.00-4.01 sec 36.5 MBytes 76.4 Mbits/sec receiver
iperf Done.
Connecting to host 172.16.16.20, port 8081
[ 5] local 172.16.16.10 port 45084 connected to 172.16.16.20 port 8081
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 4.92 MBytes 41.3 Mbits/sec 0 62.2 KBytes
[ 5] 1.00-2.00 sec 4.47 MBytes 37.5 Mbits/sec 0 62.2 KBytes
[ 5] 2.00-3.00 sec 4.66 MBytes 39.1 Mbits/sec 0 62.2 KBytes
[ 5] 3.00-4.00 sec 4.47 MBytes 37.5 Mbits/sec 0 62.2 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-4.00 sec 18.5 MBytes 38.9 Mbits/sec 0 sender
[ 5] 0.00-4.01 sec 18.3 MBytes 38.2 Mbits/sec receiver
iperf Done.
Connecting to host 172.16.16.20, port 8082
[ 5] local 172.16.16.10 port 33196 connected to 172.16.16.20 port 8082
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 2.94 MBytes 24.6 Mbits/sec 0 153 KBytes
[ 5] 1.00-2.00 sec 2.49 MBytes 20.9 Mbits/sec 0 153 KBytes
[ 5] 2.00-3.00 sec 2.17 MBytes 18.2 Mbits/sec 0 153 KBytes
[ 5] 3.00-4.00 sec 2.17 MBytes 18.2 Mbits/sec 0 153 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-4.00 sec 9.77 MBytes 20.5 Mbits/sec 0 sender
[ 5] 0.00-4.01 sec 9.14 MBytes 19.1 Mbits/sec receiver
iperf Done.
[root@bpfexamples]# ./runner.sh bpf
#+END_SRC