Hi all. As part of a project on the Norweigan University of Science and Technology, I am trying to implement diffserv on a linux router. I have started using HTB as part of this, since I have read the documentation on it and find it easier to use than CBQ. But I ran into problems when I tried to implement the AF classes. To do this, I map each AF class to one HTB class. Now I need to attach a GRED queue to each of the HTB classes to implement the drop preferences. But GRED needs the skb->tcindex field from the dsmark qdisc to select the correct virtual queue. So I configured dsmark as the root qdisc, and HTB inside this. But now I can't use filters inside the HTB qdisc, because it is an internal qdisc. Is it anyway around this, or do I have to go back to using CBQ? I'd rather not, because it has given me some weird results earlier, and HTB works like a charm! My setup is something like this (_very_ incomplete code): tc qdisc add dev eth0 root handle 1: dsmark tc qdisc add dev eth0 parent 1:0 handle 2:0 htb tc class add dev eth0 parent 2:0 classid 2:1 htb tc class add dev eth0 parent 2:1 classid 2:10 htb tc class add dev eth0 parent 2:1 classid 2:20 htb tc class add dev eth0 parent 2:1 classid 2:30 htb tc class add dev eth0 parent 2:1 classid 2:40 htb 2 of these classes are for EF and BE. That is not a problem. The other 2 are for AF1x and AF2x. Now I need the GRED queue: tc qdisc add dev eth0 parent 2:20 handle 3:0 tc qdisc add dev eth0 parent 2:30 handle 4:0 The problem with this setup is as mentioned, to be able to filter the packets into the right htb class. I'm hoping anyone can help me with this. Øystein Løkås.