QoS Linux

HTB

HTB is an alternative to CBQ (lower CPU usage & better help)

Here is a script to optimise one end of an IAX over SDSL link:

  1. !/bin/sh

TCOP="add"
IPTOP="-A"

if [ "$1" == "stop" ]; then
echo "Stopping..."
TCOP="del"
IPTOP="-D"
fi

  1. +---------+
  2. | root 1: |
  3. +---------+
  4. |
  5. +----------------------------+
  6. | class 1:1 |
  7. +----------------------------+
  8. | | |
  9. +----+ +----+ +----+
  10. |1:10| |1:20| |1:30|
  11. +----+ +----+ +----+
  12. |
  13. +--------+--------+
  14. | | |
  15. +-----+ +-----+ +-----+
  16. |1:100| |1:101| |1:102|
  17. +-----+ +-----+ +-----+

  1. 1:10 is the class for VOIP traffic, pfifo qdisc
  2. 1:20 is for bulk traffic (htb, leaves use sfq)
  3. 1:30 is the class that interactive and TCP SYN/ACK traffic (sfq qdisc)

  1. 1:20 is further split up into different kinds of bulk traffic: web, mail and
  2. everything else. 1:100-102 fight amongst themselves for their slice of excess
  3. bandwidth, and in turn 1:10,20 and 30 then fight for any excess above their
  4. minimum rates.

  1. which interface to throw all this on (DSL)
IF=eth2

  1. ceil is 75% of max rate (768kbps)
  2. rate is 65% of max rate
  3. we don't let it go to 100% because we don't want the DSL modem (Pairgain MegaBit Modem 300S)
  4. to have a ton of packets in their buffers. *we* want to do the buffering.
RATE=576
CEIL=640
  1. RATE=450
  2. CEIL=500

tc qdisc ${TCOP} dev ${IF} root handle 1: htb default 102
tc class ${TCOP} dev ${IF} parent 1: classid 1:1 htb rate ${RATE}kbit ceil ${CEIL}kbit

tc class ${TCOP} dev ${IF} parent 1:1 classid 1:10 htb rate 64kbit ceil ${RATE}kbit prio 1
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:20 htb rate 64kbit ceil ${RATE}kbit prio 2

tc class ${TCOP} dev ${IF} parent 1:20 classid 1:100 htb rate ${RATE}kbit
tc class ${TCOP} dev ${IF} parent 1:20 classid 1:101 htb rate ${RATE}kbit
tc class ${TCOP} dev ${IF} parent 1:20 classid 1:102 htb rate ${RATE}kbit

tc qdisc ${TCOP} dev ${IF} parent 1:10 handle 10: pfifo
tc qdisc ${TCOP} dev ${IF} parent 1:100 handle 100: sfq perturb 10
tc qdisc ${TCOP} dev ${IF} parent 1:101 handle 101: sfq perturb 10
tc qdisc ${TCOP} dev ${IF} parent 1:102 handle 102: sfq perturb 10

tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 4 handle 4 fw classid 1:100

  1. IAX2 prio 0.
iptables -t mangle ${IPTOP} PREROUTING -p udp -m udp --dport 4569 -j MARK --set-mark 0x1
iptables -t mangle ${IPTOP} PREROUTING -p udp -m udp --dport 4569 -j RETURN

  1. everything else goes into lowest priority (best effort).
iptables -t mangle ${IPTOP} PREROUTING -j MARK --set-mark 0x4
iptables -t mangle ${IPTOP} OUTPUT -j MARK --set-mark 0x4

NB The other end of this link is controlled by a Cisco - see QoS Cisco IOS

See Also


Go back to QoS: Quality of Service in VOIP Networks

Created by: oej, Last modification: Wed 13 of Apr, 2011 (02:30 UTC) by jaredwatkins


Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+

Page Changes | Comments

 

Featured -

Search: