Search:
     
3CX Phone System for Windows Download the Free Edition

QoS Linux with HFSC

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


Created by: udosw,Last modification on Wed 18 of Nov, 2009 [13:00 UTC] by bbarnett


Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - support@voip-info.org

Page Changes | Comments

 





Search: