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 1Show 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 1Expect 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 1Show 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 1Expect 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