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=0.462 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.462/0.462/0.462/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 506 5 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 506 5 0 5:0 - htb 1:3 0 0 0 6:0 - htb 1:4 0 0 0 3:0 - htb 1:5 506 5 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 506 5 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 506 5 0 5:0 - htb 1:3 0 0 0 6:0 - htb 1:4 0 0 0 3:0 - htb 1:5 506 5 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=1.15 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.147/1.147/1.147/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 34306 connected to 10.0.0.1 port 8080 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 4.19 MBytes 35.2 Mbits/sec 62 36.8 KBytes [ 5] 1.00-2.00 sec 3.36 MBytes 28.1 Mbits/sec 62 24.0 KBytes [ 5] 2.00-3.00 sec 3.54 MBytes 29.7 Mbits/sec 53 28.3 KBytes [ 5] 3.00-4.00 sec 3.36 MBytes 28.1 Mbits/sec 67 26.9 KBytes [ 5] 4.00-5.00 sec 3.36 MBytes 28.1 Mbits/sec 66 22.6 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-5.00 sec 17.8 MBytes 29.9 Mbits/sec 310 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 19245603 12737 32 1:1 QDISC class 1 1:0 19244703 12729 0 1:2 QDISC class 2 1:1 19244703 12729 0 1:3 QDISC class 3 1:2 19244703 12729 0 1:4 QDISC class 4 1:2 0 0 0 1:5 QDISC class 5 (default) 1:0 900 8 0 5:0 - htb 1:3 19244703 12729 32 6:0 - htb 1:4 0 0 0 3:0 - htb 1:5 900 8 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 50342 connected to 10.0.0.1 port 1234 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 4.48 MBytes 37.6 Mbits/sec 94 26.9 KBytes [ 5] 1.00-2.00 sec 3.48 MBytes 29.2 Mbits/sec 55 31.1 KBytes [ 5] 2.00-3.00 sec 3.23 MBytes 27.1 Mbits/sec 62 32.5 KBytes [ 5] 3.00-4.00 sec 3.54 MBytes 29.7 Mbits/sec 64 31.1 KBytes [ 5] 4.00-5.00 sec 3.48 MBytes 29.2 Mbits/sec 65 21.2 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-5.00 sec 18.2 MBytes 30.6 Mbits/sec 340 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 19246269 12731 32 1:1 QDISC class 1 1:0 19246269 12731 0 1:2 QDISC class 2 1:1 19246269 12731 0 1:3 QDISC class 3 1:2 0 0 0 1:4 QDISC class 4 1:2 19246269 12731 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 19246269 12731 32 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.416 ms --- 10.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.416/0.416/0.416/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 506 5 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 506 5 0 2:0 - htb 1:1 0 0 0 5:0 - htb 1:5 0 0 0 4:0 - htb 1:6 506 5 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