mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
67 lines
3.3 KiB
Org Mode
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
|