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:

 #!/bin/sh

 TCOP="add"
 IPTOP="-A"

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

 #          +---------+
 #          | root 1: |
 #          +---------+
 #               |
 # +----------------------------+
 # |         class 1:1          |
 # +----------------------------+
 #   |           |           |
 # ~np~+----+~/np~      ~np~+----+~/np~      ~np~+----+~/np~
 # ~np~|1:10|~/np~      ~np~|1:20|~/np~      ~np~|1:30|~/np~
 # ~np~+----+~/np~      ~np~+----+~/np~      ~np~+----+ ~/np~
 #               |
 #      ~np~+--------+--------+~/np~
 #      |        |        |
 #   ~np~+-----+~/np~  ~np~+-----+~/np~  ~np~+-----+~/np~
 #   ~np~|1:100|~/np~  ~np~|1:101|~/np~  ~np~|1:102|~/np~
 #   ~np~+-----+~/np~  ~np~+-----+~/np~  ~np~+-----+~/np~
 
 # 1:10 is the class for VOIP traffic, pfifo qdisc
 # 1:20 is for bulk traffic (htb, leaves use sfq)
 # 1:30 is the class that interactive and TCP SYN/ACK traffic (sfq qdisc)
 
 # 1:20 is further split up into different kinds of bulk traffic: web, mail and
 # everything else.  1:100-102 fight amongst themselves for their slice of excess
 # bandwidth, and in turn 1:10,20 and 30 then fight for any excess above their
 # minimum rates.
 
 # which interface to throw all this on (DSL)
 IF=eth2
 
 # ceil is 75% of max rate (768kbps)
 # rate is 65% of max rate
 # we don't let it go to 100% because we don't want the DSL modem (Pairgain MegaBit Modem 300S)
 # to have a ton of packets in their buffers.  *we* want to do the buffering.
 RATE=576
 CEIL=640
 #RATE=450
 #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

 # 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

 # 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

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:

 #!/bin/sh

 TCOP="add"
 IPTOP="-A"

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

 #          +---------+
 #          | root 1: |
 #          +---------+
 #               |
 # +----------------------------+
 # |         class 1:1          |
 # +----------------------------+
 #   |           |           |
 # ~np~+----+~/np~      ~np~+----+~/np~      ~np~+----+~/np~
 # ~np~|1:10|~/np~      ~np~|1:20|~/np~      ~np~|1:30|~/np~
 # ~np~+----+~/np~      ~np~+----+~/np~      ~np~+----+ ~/np~
 #               |
 #      ~np~+--------+--------+~/np~
 #      |        |        |
 #   ~np~+-----+~/np~  ~np~+-----+~/np~  ~np~+-----+~/np~
 #   ~np~|1:100|~/np~  ~np~|1:101|~/np~  ~np~|1:102|~/np~
 #   ~np~+-----+~/np~  ~np~+-----+~/np~  ~np~+-----+~/np~
 
 # 1:10 is the class for VOIP traffic, pfifo qdisc
 # 1:20 is for bulk traffic (htb, leaves use sfq)
 # 1:30 is the class that interactive and TCP SYN/ACK traffic (sfq qdisc)
 
 # 1:20 is further split up into different kinds of bulk traffic: web, mail and
 # everything else.  1:100-102 fight amongst themselves for their slice of excess
 # bandwidth, and in turn 1:10,20 and 30 then fight for any excess above their
 # minimum rates.
 
 # which interface to throw all this on (DSL)
 IF=eth2
 
 # ceil is 75% of max rate (768kbps)
 # rate is 65% of max rate
 # we don't let it go to 100% because we don't want the DSL modem (Pairgain MegaBit Modem 300S)
 # to have a ton of packets in their buffers.  *we* want to do the buffering.
 RATE=576
 CEIL=640
 #RATE=450
 #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

 # 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

 # 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: Fri 01 of Mar, 2013 (02:51 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+