#!/bin/sh ############################################################## # Variables TC=/usr/sbin/tc #-------- location of traffic control IPT=/usr/sbin/iptables #- location of iptables IF_DSL=eth0 #------- interface to dsl UP_RATE=6400 #------------ available bandwidth in kilobits/sec IP_SERVER=192.168.1.195 MODULES='xt_length sch_hfsc sch_ingress' ############################################################## # Load modules for i in $MODULES ; do insmod $i done ############################################################## # Manipulating qdiscs $TC qdisc del dev $IF_DSL root 2> /dev/null > /dev/null $TC qdisc del dev $IF_DSL ingress 2> /dev/null > /dev/null ### # set root default bucket $TC qdisc add dev $IF_DSL root handle 1: hfsc default 20 $TC class add dev $IF_DSL parent 1: classid 1:1 hfsc sc rate ${UP_RATE}kbit ul rate ${UP_RATE}kbit # rt $TC class add dev $IF_DSL parent 1:1 classid 1:10 hfsc rt m1 ${UP_RATE}kbit d 60ms m2 $((20*$UP_RATE/100))kbit # normal $TC class add dev $IF_DSL parent 1:1 classid 1:20 hfsc ls rate $((70*$UP_RATE/100))kbit ul rate ${UP_RATE}kbit # bulk $TC class add dev $IF_DSL parent 1:1 classid 1:30 hfsc ls rate $((10*$UP_RATE/100))kbit ul rate ${UP_RATE}kbit ################################################################## # drop existing mangle rules in POSTROUTING $IPT -t mangle -F POSTROUTING IPTMOD="$IPT -t mangle -A POSTROUTING -o $IF_DSL" ################################################################################## # server upload - bulk $IPTMOD -s $IP_SERVER -j CLASSIFY --set-class 1:30 # real-time $IPTMOD -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j CLASSIFY --set-class 1:10 $IPTMOD -p tcp --dport 22 -j CLASSIFY --set-class 1:10 $IPTMOD -p udp -m length --length :170 -j CLASSIFY --set-class 1:10 $IPTMOD -p tcp -m length --length :148 -j CLASSIFY --set-class 1:10 $IPTMOD -p icmp -j CLASSIFY --set-class 1:10 # everything else is normal traffic # tc qdisc del dev eth0 root # tc qdisc del dev eth0 ingress