Hierarchy
Tests for HTB class hierarchy: verifies parent-child structure, rate shaping through multiple nesting levels, and dynamic reconfiguration of parent relationships.
Test HTB Hierarchy
Description
Configures a three-level HTB hierarchy and verifies that all classes are present and the parent chain is correct: classes 3,4 under class 2; class 2 under class 1; class 1 at root level.
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 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 80 set traffic control QDISC type htb class 1 ceiling percentage 100 set traffic control QDISC type htb class 2 bandwidth rate 60 set traffic control QDISC type htb class 2 ceiling percentage 80 set traffic control QDISC type htb class 2 parent 1 set traffic control QDISC type htb class 3 bandwidth rate 30 set traffic control QDISC type htb class 3 parent 2 set traffic control QDISC type htb class 4 bandwidth rate 30 set traffic control QDISC type htb class 4 parent 2 set traffic control QDISC type htb class 5 bandwidth percentage 20 set traffic control QDISC type htb default-class 5 set traffic control QDISC type htb match 1 class 3 set traffic control QDISC type htb match 1 ip destination port 8080 set traffic control QDISC type htb match 1 ip protocol tcp set traffic control QDISC type htb match 2 class 4 set traffic control QDISC type htb match 2 ip 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=1.13 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.129/1.129/1.129/0.000 ms
Step 4: Run the command traffic control show on DUT0 and check whether the output contains the following tokens:
class 1 class 2 class 3 class 4 class 5 (default)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 876 8 0 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 1:2 0 0 0 1:4 QDISC class 4 1:2 0 0 0 1:5 QDISC class 5 (default) 1:0 876 8 0 5:0 - htb 1:3 0 0 0 6:0 - htb 1:4 0 0 0 3:0 - htb 1:5 876 8 0
Step 5: Run the command traffic control show on DUT0 and check whether the output matches the following regular expressions:
class [34]\s+1:2 class 2\s+1:1 class 1\s+1:0Show output
Traffic control for interface 'eth0' - 'egress' mode ---------------------------------------------------------------------------------------- ID traffic control type parent bytes sent pkts sent pkts dropped ---------------------------------------------------------------------------------------- 1:0 QDISC htb root 1026 9 0 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 1:2 0 0 0 1:4 QDISC class 4 1:2 0 0 0 1:5 QDISC class 5 (default) 1:0 1026 9 0 5:0 - htb 1:3 0 0 0 6:0 - htb 1:4 0 0 0 3:0 - htb 1:5 1026 9 0
Test HTB Rate Shaping
Description
Configures a three-level HTB hierarchy (root -> class 1 -> class 2 -> classes 3,4) and verifies that TCP traffic on port 8080 is shaped to ~30 Mbps by class 3 and TCP traffic on any other port is shaped to ~30 Mbps by class 4. Counters are cleared between flows to confirm each class receives the expected traffic.
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 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 80 set traffic control QDISC type htb class 1 ceiling percentage 100 set traffic control QDISC type htb class 2 bandwidth rate 60 set traffic control QDISC type htb class 2 ceiling percentage 80 set traffic control QDISC type htb class 2 parent 1 set traffic control QDISC type htb class 3 bandwidth rate 30 set traffic control QDISC type htb class 3 parent 2 set traffic control QDISC type htb class 4 bandwidth rate 30 set traffic control QDISC type htb class 4 parent 2 set traffic control QDISC type htb class 5 bandwidth percentage 20 set traffic control QDISC type htb default-class 5 set traffic control QDISC type htb match 1 class 3 set traffic control QDISC type htb match 1 ip destination port 8080 set traffic control QDISC type htb match 1 ip protocol tcp set traffic control QDISC type htb match 2 class 4 set traffic control QDISC type htb match 2 ip 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.484 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.484/0.484/0.484/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 47274 connected to 10.0.0.1 port 8080 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 4.47 MBytes 37.5 Mbits/sec 121 29.7 KBytes [ 5] 1.00-2.00 sec 3.42 MBytes 28.7 Mbits/sec 67 25.5 KBytes [ 5] 2.00-3.00 sec 3.42 MBytes 28.7 Mbits/sec 65 24.0 KBytes [ 5] 3.00-4.00 sec 3.42 MBytes 28.7 Mbits/sec 51 29.7 KBytes [ 5] 4.00-5.00 sec 3.42 MBytes 28.7 Mbits/sec 56 22.6 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-5.00 sec 18.1 MBytes 30.4 Mbits/sec 360 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 3\s+1:2\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 19250349 12743 31 1:1 QDISC class 1 1:0 19249363 12734 0 1:2 QDISC class 2 1:1 19249363 12734 0 1:3 QDISC class 3 1:2 19249363 12734 0 1:4 QDISC class 4 1:2 0 0 0 1:5 QDISC class 5 (default) 1:0 986 9 0 5:0 - htb 1:3 19249363 12734 31 6:0 - htb 1:4 0 0 0 3:0 - htb 1:5 986 9 0
Note
Run traffic control clear at DUT0 to reset counters before the next flow.
Step 6: Initiate a bandwidth test from DUT0 to DUT1
admin@DUT1$ monitor test performance server port 1234 admin@DUT0$ monitor test performance client 10.0.0.1 duration 5 port 1234 parallel 1Expect the following output on
DUT0:Connecting to host 10.0.0.1, port 1234 [ 5] local 10.0.0.2 port 53404 connected to 10.0.0.1 port 1234 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 5.06 MBytes 42.5 Mbits/sec 169 24.0 KBytes [ 5] 1.00-2.00 sec 3.48 MBytes 29.2 Mbits/sec 43 26.9 KBytes [ 5] 2.00-3.00 sec 3.48 MBytes 29.2 Mbits/sec 54 25.5 KBytes [ 5] 3.00-4.00 sec 3.48 MBytes 29.2 Mbits/sec 35 33.9 KBytes [ 5] 4.00-5.00 sec 2.98 MBytes 25.0 Mbits/sec 56 35.4 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-5.00 sec 18.5 MBytes 31.0 Mbits/sec 357 sender [ 5] 0.00-5.00 sec 17.5 MBytes 29.4 Mbits/sec receiver iperf Done.
Step 7: Run the command traffic control show on DUT0 and check whether the output matches the following regular expressions:
class 4\s+1:2\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 19266017 12745 30 1:1 QDISC class 1 1:0 19266017 12745 0 1:2 QDISC class 2 1:1 19266017 12745 0 1:3 QDISC class 3 1:2 0 0 0 1:4 QDISC class 4 1:2 19266017 12745 0 1:5 QDISC class 5 (default) 1:0 0 0 0 5:0 - htb 1:3 0 0 0 6:0 - htb 1:4 19266017 12745 30 3:0 - htb 1:5 0 0 0
Test HTB Dynamic Reconfiguration
Description
Verifies that the parent of an existing class can be changed dynamically. Starting from the two-level hierarchy, class 5 is moved from parent 4 to parent 1. After the change, class 5 must appear under parent 1:1 instead of 1:4.
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 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 40 set traffic control QDISC type htb class 4 bandwidth percentage 30 set traffic control QDISC type htb class 5 bandwidth rate 20 set traffic control QDISC type htb class 5 parent 4 set traffic control QDISC type htb class 6 bandwidth percentage 10 set traffic control QDISC type htb default-class 6
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.751 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.751/0.751/0.751/0.000 ms
Step 4: Run the command traffic control show on DUT0 and check whether the output matches the following regular expressions:
class 5\s+1:4Show output
Traffic control for interface 'eth0' - 'egress' mode -------------------------------------------------------------------------------------- ID traffic control type parent bytes sent pkts sent pkts dropped -------------------------------------------------------------------------------------- 1:0 QDISC htb root 1116 10 0 1:1 QDISC class 1 1:0 0 0 0 1:4 QDISC class 4 1:0 0 0 0 1:5 QDISC class 5 1:4 0 0 0 1:6 QDISC class 6 (default) 1:0 1116 10 0 2:0 - htb 1:1 0 0 0 5:0 - htb 1:5 0 0 0 4:0 - htb 1:6 1116 10 0
Step 5: Modify the following configuration lines in DUT0 :
set traffic control QDISC type htb class 5 parent 1
Step 6: Run the command traffic control show on DUT0 and check whether the output matches the following regular expressions:
class 5\s+1:1Show output
Traffic control for interface 'eth0' - 'egress' mode -------------------------------------------------------------------------------------- ID traffic control type parent bytes sent pkts sent pkts dropped -------------------------------------------------------------------------------------- 1:0 QDISC htb root 0 0 0 1:1 QDISC class 1 1:0 0 0 0 1:5 QDISC class 5 1:1 0 0 0 1:4 QDISC class 4 1:0 0 0 0 1:6 QDISC class 6 (default) 1:0 0 0 0 3:0 - htb 1:4 0 0 0 5:0 - htb 1:5 0 0 0 4:0 - htb 1:6 0 0 0