Policy

Tests for HTB classification using traffic policies. Verifies that rate shaping works with policy-based classification and that assigning traffic to a non-leaf parent class causes it to fall to the default class.

Test HTB Policy Rate TCP 8080

Description

Configures a two-level HTB hierarchy with traffic policy pre-classification and verifies that TCP traffic on port 8080 is shaped to ~30 Mbps by class 2 (child of class 1).

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address 10.0.0.2/24
set interfaces ethernet eth0 traffic control out QDISC
set interfaces ethernet eth0 traffic policy out CLASSIFIER
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'
set traffic control QDISC type htb bandwidth 100
set traffic control QDISC type htb class 1 bandwidth percentage 50
set traffic control QDISC type htb class 1 ceiling percentage 100
set traffic control QDISC type htb class 2 bandwidth rate 30
set traffic control QDISC type htb class 2 parent 1
set traffic control QDISC type htb class 3 bandwidth percentage 10
set traffic control QDISC type htb default-class 3
set traffic policy CLASSIFIER rule 1 selector SEL_TCP_8080
set traffic policy CLASSIFIER rule 1 set class 2
set traffic selector SEL_TCP_8080 rule 1 destination port 8080
set traffic selector SEL_TCP_8080 rule 1 protocol tcp

Step 2: Set the following configuration in DUT1 :

set interfaces ethernet eth0 address 10.0.0.1/24
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 3: Ping the IP address 10.0.0.1 from DUT0:

admin@DUT0$ ping 10.0.0.1 count 1 size 56 timeout 1
Show output
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.589 ms

--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.589/0.589/0.589/0.000 ms

Step 4: Initiate a bandwidth test from DUT0 to DUT1

admin@DUT1$ monitor test performance server port 8080
admin@DUT0$ monitor test performance client 10.0.0.1 duration 5 port 8080 parallel 1
Expect the following output on DUT0:
Connecting to host 10.0.0.1, port 8080
[  5] local 10.0.0.2 port 59214 connected to 10.0.0.1 port 8080
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  4.79 MBytes  40.2 Mbits/sec  156   26.9 KBytes
[  5]   1.00-2.00   sec  3.42 MBytes  28.7 Mbits/sec   57   35.4 KBytes
[  5]   2.00-3.00   sec  3.42 MBytes  28.7 Mbits/sec   79   26.9 KBytes
[  5]   3.00-4.00   sec  3.36 MBytes  28.1 Mbits/sec   61   24.0 KBytes
[  5]   4.00-5.00   sec  3.36 MBytes  28.1 Mbits/sec   53   26.9 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.00   sec  18.3 MBytes  30.8 Mbits/sec  406             sender
[  5]   0.00-5.00   sec  17.5 MBytes  29.4 Mbits/sec                  receiver

iperf Done.

Step 5: Run the command traffic control show on DUT0 and check whether the output matches the following regular expressions:

class 2\s+1:1\s+[1-9]
Show output
Traffic control for interface 'eth0' - 'egress' mode

--------------------------------------------------------------------------------------
 ID    traffic control        type         parent  bytes sent  pkts sent  pkts dropped
--------------------------------------------------------------------------------------
1:0    QDISC            htb                root      19255583      12747            34
1:1    QDISC            class 1            1:0       19254467      12737             0
  1:2  QDISC            class 2            1:1       19254467      12737             0
1:3    QDISC            class 3 (default)  1:0           1116         10             0
4:0    -                htb                1:2       19254467      12737            34
3:0    -                htb                1:3           1116         10             0

Test HTB Policy Assigns To Parent Class

Description

When a traffic policy assigns a packet to a parent class (a class that has children), the packet cannot be enqueued there because parent classes have no leaf qdisc. The packet must fall to the default class instead. This is expected expected HTB behavior.

Scenario

Step 1: Set the following configuration in DUT0 :

set interfaces ethernet eth0 address 10.0.0.2/24
set interfaces ethernet eth0 traffic control out QDISC
set interfaces ethernet eth0 traffic policy out CLASSIFIER
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'
set traffic control QDISC type htb bandwidth 100
set traffic control QDISC type htb class 1 bandwidth percentage 50
set traffic control QDISC type htb class 1 ceiling percentage 100
set traffic control QDISC type htb class 2 bandwidth rate 30
set traffic control QDISC type htb class 2 parent 1
set traffic control QDISC type htb class 3 bandwidth percentage 10
set traffic control QDISC type htb default-class 3
set traffic policy CLASSIFIER rule 1 selector SEL_TCP
set traffic policy CLASSIFIER rule 1 set class 1
set traffic selector SEL_TCP rule 1 protocol tcp

Step 2: Set the following configuration in DUT1 :

set interfaces ethernet eth0 address 10.0.0.1/24
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 3: Ping the IP address 10.0.0.1 from DUT0:

admin@DUT0$ ping 10.0.0.1 count 1 size 56 timeout 1
Show output
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.501 ms

--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.501/0.501/0.501/0.000 ms

Step 4: Initiate a bandwidth test from DUT0 to DUT1

admin@DUT1$ monitor test performance server port 5001
admin@DUT0$ monitor test performance client 10.0.0.1 duration 5 port 5001 parallel 1
Expect the following output on DUT0:
Connecting to host 10.0.0.1, port 5001
[  5] local 10.0.0.2 port 40400 connected to 10.0.0.1 port 5001
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  1.80 MBytes  15.1 Mbits/sec   76   14.1 KBytes
[  5]   1.00-2.00   sec  1.24 MBytes  10.4 Mbits/sec   45   12.7 KBytes
[  5]   2.00-3.00   sec  1018 KBytes  8.34 Mbits/sec   30   11.3 KBytes
[  5]   3.00-4.00   sec  1.24 MBytes  10.4 Mbits/sec   27   15.6 KBytes
[  5]   4.00-5.00   sec  1018 KBytes  8.34 Mbits/sec   34   15.6 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.00   sec  6.28 MBytes  10.5 Mbits/sec  212             sender
[  5]   0.00-5.00   sec  5.84 MBytes  9.80 Mbits/sec                  receiver

iperf Done.

Step 5: Run the command traffic control show on DUT0 and check whether the output matches the following regular expressions:

class 1\s+1:0\s+0
class 3 \(default\)\s+1:0\s+[1-9]
Show output
Traffic control for interface 'eth0' - 'egress' mode

--------------------------------------------------------------------------------------
 ID    traffic control        type         parent  bytes sent  pkts sent  pkts dropped
--------------------------------------------------------------------------------------
1:0    QDISC            htb                root       6425235       4272            43
1:1    QDISC            class 1            1:0              0          0             0
  1:2  QDISC            class 2            1:1              0          0             0
1:3    QDISC            class 3 (default)  1:0        6425235       4272             0
4:0    -                htb                1:2              0          0             0
3:0    -                htb                1:3        6425235       4272            43