tc class ceil inheritance tc class ceil inheritance linux linux

tc class ceil inheritance


If you want to limit traffic per ip then you can use this method (i`m using it to limit virtual servers bandwidth virtualized with openvz, but you can customize it by your requirements):

tc qdisc del dev venet0 roottc qdisc add dev venet0 root handle 1: htb default 10tc class add dev venet0 parent 1: classid 1:1 htb rate 1000mbit burst 15ktc class add dev venet0 parent 1:1 classid 1:10 htb rate 50mbit ceil 50mbit burst 15ktc qdisc add dev venet0 parent 1:10 handle 10: sfq perturb 10interface=eth0tc qdisc del dev $interface roottc qdisc add dev $interface root handle 1: htb default 10tc class add dev $interface parent 1: classid 1:1 htb rate 1000mbit burst 15ktc class add dev $interface parent 1:1 classid 1:110 htb rate 50mbit ceil 50mbit burst 15ktc qdisc add dev $interface parent 1:110 handle 110: sfq perturb 10

and then for each ipv4 address:

tc filter add dev venet0 protocol ip parent 1:0 prio 1 u32 match ip dst $IPADDRESS flowid 1:10tc filter add dev $interface protocol ip parent 1:0 prio 1 u32 match ip src $IPADDRESS flowid 1:110

For each ipv6:

tc filter add dev venet0 protocol ipv6 parent 1:0 prio 2 u32 match ip6 dst $ipv6/128 flowid 1:10tc filter add dev $interface protocol ipv6 parent 1:0 prio 2 u32 match ip6 src $ipv6/128 flowid 1:110

DS48236.vpsnet.com:~$ tc qdisc show

qdisc htb 1: dev eth0 root refcnt 2 r2q 10 default 10 direct_packets_stat 2630716qdisc sfq 110: dev eth0 parent 1:110 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 120: dev eth0 parent 1:120 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 130: dev eth0 parent 1:130 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 140: dev eth0 parent 1:140 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 150: dev eth0 parent 1:150 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 160: dev eth0 parent 1:160 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 170: dev eth0 parent 1:170 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 180: dev eth0 parent 1:180 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 190: dev eth0 parent 1:190 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 1110: dev eth0 parent 1:1110 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 1111: dev eth0 parent 1:1111 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 1100: dev eth0 parent 1:1100 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc htb 1: dev venet0 root refcnt 2 r2q 10 default 10 direct_packets_stat 0qdisc sfq 10: dev venet0 parent 1:10 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 20: dev venet0 parent 1:20 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 30: dev venet0 parent 1:30 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 40: dev venet0 parent 1:40 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 50: dev venet0 parent 1:50 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 60: dev venet0 parent 1:60 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 70: dev venet0 parent 1:70 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 80: dev venet0 parent 1:80 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 90: dev venet0 parent 1:90 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 110: dev venet0 parent 1:110 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 111: dev venet0 parent 1:111 limit 127p quantum 1514b divisor 1024 perturb 10secqdisc sfq 100: dev venet0 parent 1:100 limit 127p quantum 1514b divisor 1024 perturb 10secDS48236.vpsnet.com:~$

If you want to limit traffic per one interface then you need to modify:

For each ipv4 address:

tc filter add dev venet0 protocol ip parent 1:0 prio 1 u32 match ip dst $IPADDRESS flowid 1:10tc filter add dev $interface protocol ip parent 1:0 prio 1 u32 match ip src $IPADDRESS flowid 1:110

and do not create qdisc and class for venet0

So with one interface it will look something like:

interface=eth0tc qdisc del dev $interface roottc qdisc add dev $interface root handle 1: htb default 10tc class add dev $interface parent 1: classid 1:1 htb rate 1000mbit burst 15ktc class add dev $interface parent 1:1 classid 1:110 htb rate 50mbit ceil 50mbit burst 15ktc qdisc add dev $interface parent 1:110 handle 110: sfq perturb 10

For each ip:

tc filter add dev $interface protocol ip parent 1:0 prio 1 u32 match ip dst $IPADDRESS flowid 1:110tc filter add dev $interface protocol ip parent 1:0 prio 1 u32 match ip src $IPADDRESS flowid 1:110