[LARTC] PRIO qdisc with HTB
Tomas Simonaitis
haden@homelan.lt
Sat, 8 May 2004 18:22:13 +0300
Hi,
I'm trying to use prio qdisc with htb, however not the "usual" way (like for
example FairNAT).
Here is my idea:
Root has HTB shaping traffic to link speed -> then goes PRIO queues -> each
prio queue has HTB with sublasses for each user, should look like this:
1: htb qdisc
|
1:1 htb class
/|\
/ | \
10:1 10:2 10:3 prio queues
| | |
20: 30: 40: htb qdiscs
/ | \
20:1.... 30:1... 40:1... htb classes
Then, if I'm right, when there is traffic in prio qdisc 1 to fully load link,
users would get it distributed evenly but any low priority connections in
qdiscs 2,3... would starve. Which is exactly what I want.
Problem is, when I add filters to enqueue in HTB "below" prio qdisc, they
aren't working.
I'm tried to make simplified version first:
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 3000kbit
tc qdisc add dev eth0 parent 1:1 handle 10: prio
tc qdisc add dev eth0 parent 10:1 handle 20: htb
tc class add dev eth0 parent 20:0 classid 20:1 htb rate 3000kbit
tc qdisc add dev eth0 parent 10:2 handle 30: htb
tc qdisc add dev eth0 parent 10:3 handle 40: htb
tc class add dev eth0 parent 30:0 classid 30:1 htb rate 3000kbit
tc class add dev eth0 parent 40:0 classid 40:1 htb rate 3000kbit
tc filter add dev eth0 protocol ip parent 1: prio 0 handle 4 fw flowid 40:1
all packets are marked with 4, but none gets to 40:1
---------------------------------------------------------------
class htb 40:1 root prio 0 rate 3000Kbit ceil 3000Kbit burst 5439b cburst
5439b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 14505 ctokens: 14505
class htb 30:1 root prio 0 rate 3000Kbit ceil 3000Kbit burst 5439b cburst
5439b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 14505 ctokens: 14505
class htb 20:1 root prio 0 rate 3000Kbit ceil 3000Kbit burst 5439b cburst
5439b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 14505 ctokens: 14505
class prio 10:1 parent 10: leaf 20: [UNKNOWN]
class prio 10:2 parent 10: leaf 30: [UNKNOWN]
class prio 10:3 parent 10: leaf 40: [UNKNOWN]
class htb 1:1 root leaf 10: prio 0 rate 3000Kbit ceil 3000Kbit burst 5439b
cburst 5439b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 14505 ctokens: 14505
---------------------------------------------------------------
qdisc htb 40: r2q 10 default 0 direct_packets_stat 0
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc htb 30: r2q 10 default 0 direct_packets_stat 0
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc htb 20: r2q 10 default 0 direct_packets_stat 0
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc prio 10: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc htb 1: r2q 10 default 0 direct_packets_stat 7347
Sent 827649 bytes 7347 pkts (dropped 0, overlimits 0)
---------------------------------------------------------------
{setting flowid to 1:1 works as expected}
I can't find where my mistake lies,
any suggestions or pointers would be helpfull.