Upgrade 3CX to v18 and get it hosted free!

QoS Linux with HFSC

Author image

HFSC

HFSC is a method to prioritize traffic with iptables and tc. Make sure your kernel supports HFSC.

I successfully use this script, which brought me dramatically improved latency while up- and downloading simultaneously via a 1024/128 adsl line (in Germany). I tried the same with HTB before, and it didn’t work so well. I use a 2.6.10 kernel image on Debian Linux.


 #!/bin/sh
 #
 # SipShaper v0.01
 # VoIP Traffic Shaper for 1024/128Kbit/s ADSL Line
 #
 # Written by Udo Schacht-Wiegand (2005-04-03) 
 #
 # based on MYSHAPER from Dan Singletary (8/7/02)
 # http://www.nslu2-linux.org/wiki/HowTo/EnableTrafficShaping
 # and on phone-man's script
 # http://www.ip-phone-forum.de/forum/viewtopic.php?p=100371#100371
 # and on the (German) Linux Magazine 02/05 article p.28
 # 
 # Please mail comments and improvements to sipshaper at udo dot comlink dot org
 
 
 # Set your outgoing interface and upload rate (in kbit/s) here
 DEV=ppp0
 RATEUP=128
 
 RTPS=$(cat /etc/asterisk/rtp.conf|awk -F= '/rtpstart/ {print $2}')
 RTPE=$(cat /etc/asterisk/rtp.conf|awk -F= '/rtpend/ {print $2}')

 # Which ports should be prioritized (yes, I know that ssh is not VoIP ;-)
 VOIPPORTS="sip iax $RTPS:$RTPE ssh" 
 
 # Which servers should be prioritized (may be empty "")
 VOIPIPS="192.168.178.1 192.168.178.99"
 
 
 # end of configuration options
 
 ######################
 # show status and exit
 ######################
 
 if [[ "$1" = "status" ]
 then
         echo "[[qdisc]"
         tc -s qdisc show dev $DEV
 
         echo ""
         echo "[[class]"
         tc -s class show dev $DEV
 
         echo ""
         echo "[[filter]"
         tc -s filter show dev $DEV
 
         echo ""
         echo "[[iptables]"
         iptables -t mangle -L SIPSHAPER -v -x 2> /dev/null
         exit
 fi
 
 ######################
 # default: start it  #
 ######################
 
 # Reset everything to a known state (cleared)
 tc qdisc del dev $DEV root    2> /dev/null > /dev/null
 
 # Flush and delete tables
 iptables -t mangle --delete POSTROUTING -o $DEV -j SIPSHAPER 2> /dev/null > /dev/null
 iptables -t mangle --flush        SIPSHAPER 2> /dev/null > /dev/null
 iptables -t mangle --delete-chain SIPSHAPER 2> /dev/null > /dev/null
 
 ######################
 # stop it and exit 
 ######################
 
 if [[ "$1" = "stop" ] 
 then 
         echo "Shaping removed on $DEV."
         exit
 fi
 
 ######################
 # set up shaping
 ######################
 
 # add HFSC root qdisc
 tc qdisc add dev $DEV root handle 1: hfsc default 10
 
 # add main rate limit class
 tc class add dev $DEV parent 1: classid 1:1 hfsc sc rate ${RATEUP}kbit ul rate ${RATEUP}kbit
 
 # keep it simple: two classes only
 tc class add dev $DEV parent 1:1 classid 1:10 hfsc sc umax 1500b dmax 53ms rate 40kbit ul rate ${RATEUP}kbit
 tc class add dev $DEV parent 1:1 classid 1:11 hfsc sc umax 1500b dmax 30ms rate 80kbit ul rate ${RATEUP}kbit
 
 # add SIPSHAPER chain to the mangle table in iptables 
 iptables -t mangle --new-chain SIPSHAPER
 iptables -t mangle --insert POSTROUTING -o $DEV -j SIPSHAPER
 
 # Filter for voip packets
 tc filter add dev $DEV parent 1: prio 1 protocol ip handle 1 fw flowid 1:11 
 
 
 # VoIP ports as defined above
 for port in $VOIPPORTS
 do
         iptables -t mangle -A SIPSHAPER -p udp --sport $port -j MARK --set-mark 1 
         iptables -t mangle -A SIPSHAPER -p udp --dport $port -j MARK --set-mark 1 
 done
 
 # VoIP IPs as defined above 
 for ip in $VOIPIPS
 do
         iptables -t mangle -A SIPSHAPER -p udp --src $ip -j MARK --set-mark 1 
         iptables -t mangle -A SIPSHAPER -p udp --dst $ip -j MARK --set-mark 1 
 done
 
 
 
 echo SipShaper started on $DEV with ${RATEUP}kbit/s upload rate.
 
 echo -n "QoS activated for ports: " 
 for port in $VOIPPORTS
 do
         echo -n " $port"
 done
 echo "."
 
 echo -n "QoS activated for ip#  : "
 for ip in $VOIPIPS
 do
         echo -n " $ip"
 done
 echo "."
 
 #end

Comments are welcome.

See also


Article Reviews

Write a Review

Your email address will not be published. Required fields are marked *

Required Field. Minimum 5 characters.

Required Field. Minimum 5 characters, maximum 50.

Required field.There is an error with this field.

Required Field.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

There are no reviews for this article. Be the first one to write a review.
Get 3CX - Absolutely Free!
Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.