Hi I''m trying to use CBQ to limit the outgoing traffic from my
server. The server is colocated on a 10Mb lan, but only has a 64Kbit
bandwidth allocation.
I using kernel 2.4.14 and I am trying to set up a 64K bounded class,
with 4 unbounded-subclassess of 16, 32, 2 & 14K.
This is what I''m using:
iptables -t mangle -F PREROUTING
iptables -t mangle -N mark1
iptables -t mangle -F mark1
iptables -t mangle -A mark1 -j MARK --set-mark 1
iptables -t mangle -N mark2
iptables -t mangle -F mark2
iptables -t mangle -A mark2 -j MARK --set-mark 2
iptables -t mangle -N mark3
iptables -t mangle -F mark3
iptables -t mangle -A mark3 -j MARK --set-mark 3
iptables -t mangle -N mark4
iptables -t mangle -F mark4
iptables -t mangle -A mark4 -j MARK --set-mark 4
iptables -t mangle -N mark5
iptables -t mangle -F mark5
iptables -t mangle -A mark5 -j MARK --set-mark 5
# traffic classification
iptables -t mangle -A PREROUTING -p TCP --sport 20 -j mark1 # ftp-data
iptables -t mangle -A PREROUTING -p TCP --sport 21 -j mark2 # ftp
iptables -t mangle -A PREROUTING -p TCP --sport 25 -j mark5 # smtp-recv
iptables -t mangle -A PREROUTING -p TCP --dport 25 -j mark5 # smtp-send
iptables -t mangle -A PREROUTING -p TCP --sport 80 -j mark3 # http
iptables -t mangle -A PREROUTING -p TCP --sport 110 -j mark5 # pop3
iptables -t mangle -A PREROUTING -p TCP --sport 119 -j mark4 # news-server
iptables -t mangle -A PREROUTING -p TCP --dport 119 -j mark5 # newsfeed in.
iptables -t mangle -A PREROUTING -p TCP --sport 2401 -j mark5 # cvspserver
# Next line is highport traffic (mainly ftp-data again)
iptables -t mangle -A PREROUTING -p TCP --sport 1024:65535 --dport 1024:65535 -j
mark1
iptables -t mangle -A PREROUTING -p TCP -j mark5
iptables -t mangle -A PREROUTING -p UDP -j mark5
iptables -t mangle -A PREROUTING -p ICMP -j mark5
iptables -t mangle -A PREROUTING -j mark5
AVPKT=748
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt $AVPKT
## Setup Clases
tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 10Mbit rate \
10Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt $AVPKT
# 64kbit parent class
tc class add dev eth0 parent 10:1 classid 10:200 cbq bandwidth 10Mbit rate \
64Kbit allot 1514 weight 64Kbit prio 5 maxburst 20 avpkt $AVPKT \
bounded
# 16kbit
tc class add dev eth0 parent 10:200 classid 10:250 cbq bandwidth 10Mbit rate \
16Kbit allot 1514 weight 16Kbit prio 5 maxburst 20 avpkt $AVPKT
# 32k
tc class add dev eth0 parent 10:200 classid 10:251 cbq bandwidth 10Mbit rate \
32Kbit allot 1514 weight 32Kbit prio 5 maxburst 20 avpkt $AVPKT
# 2k
tc class add dev eth0 parent 10:200 classid 10:252 cbq bandwidth 10Mbit rate \
2Kbit allot 1514 weight 2Kbit prio 5 maxburst 20 avpkt $AVPKT
# 14k
tc class add dev eth0 parent 10:200 classid 10:253 cbq bandwidth 10Mbit rate \
14Kbit allot 1514 weight 14Kbit prio 5 maxburst 20 avpkt $AVPKT
# Setup queues
tc qdisc add dev eth0 parent 10:200 cbq bandwidth 64Kbit avpkt $AVPKT
tc qdisc add dev eth0 parent 10:250 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 10:251 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 10:252 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 10:253 sfq quantum 1514b perturb 15
# Setup filters
tc filter add dev eth0 protocol ip parent 10:0 prio 1 handle 4 fw classid 10:250
tc filter add dev eth0 protocol ip parent 10:0 prio 1 handle 3 fw classid 10:251
tc filter add dev eth0 protocol ip parent 10:0 prio 1 handle 2 fw classid 10:252
tc filter add dev eth0 protocol ip parent 10:0 prio 1 handle 1 fw classid 10:253
I get no errors when setting this up, but somehow my marked packets
are not making it into the queues.
# tc -s qdisc show
qdisc sfq 800f: dev eth0 quantum 1514b perturb 15sec
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 800e: dev eth0 quantum 1514b perturb 15sec
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 800d: dev eth0 quantum 1514b perturb 15sec
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 800c: dev eth0 quantum 1514b perturb 15sec
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc cbq 800b: dev eth0 rate 64Kbit (bounded,isolated) prio no-transmit
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
borrowed 0 overactions 0 avgidle 74799 undertime 0
qdisc cbq 10: dev eth0 rate 10Mbit (bounded,isolated) prio no-transmit
Sent 5302106 bytes 7589 pkts (dropped 0, overlimits 0)
borrowed 0 overactions 0 avgidle 466 undertime 0
What silly (or not so silly) mistake have I been making?
- Thanks in advance, Robert Collier.
--
Robert Collier
rob@lspace.org