HomePage » Network » LinuxTC


Traffic control (tc)


# remove previous rules
$TC qdisc del dev $DEV root 2>/dev/null

# create a root queuing discipline for our interface
tc qdisc add dev $DEV root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8

# create a class called 1:1
tc class add dev $DEV parent 1:0 classid 1:1 cbq bandwidth 100Mbit  \
  prio 8 allot 1514 cell 8 rate 100Mbit maxburst 20 avpkt 1000
# create a sub-class of 1:1 called 1:10 that is rate-limited to 105kbit
tc class add dev $DEV parent 1:1 classid 1:10 cbq bandwidth 100Mbit  \
  rate 105Kbit prio 1 allot 1514 cell 8 maxburst 20      \
  avpkt 1000 bounded
# create a sub-class called 1:20 that isn't limited, for locally generated traffic
tc class add dev $DEV parent 1:1 classid 1:20 cbq allot 1514 avpkt 1000 \
  rate 100Mbit bandwidth 100Mbit prio 2
# locally generated traffic should go to the appropriate sub-class
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
  match ip src $SERVERIP/32 flowid 1:20
# not sure if this is really needed... traffic from one interface to another?
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
  match ip dst $SERVERIP/32 flowid 1:20

# traffic to our lan (that didn't match earlier rules) should go to appropriate sub-class
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
  match ip dst $LIMITIPS flowid 1:10

# Mark traffic with a source port of 80 with the mark 1
$IPTABLES -A PREROUTING -i $DEV -t mangle -p tcp --sport 80 -j MARK --set-mark 1



An example of running config (courtesy of Ben Griffiths)
tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 100mbit
tc class add dev eth0 parent 1: classid 1:1 cbq rate 768kbit allot 1500 prio 5 bounded isolated
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dport 3306 0xfff flowid 1:1

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki