#!/bin/bash RATEUP=500 DEV=eth1 if [ "$1" = "status" ] then echo "" echo "=====" tc -s qdisc ls dev $DEV echo "" tc -s class ls dev $DEV echo "=====" exit fi tc qdisc del dev $DEV root 2>/dev/null >/dev/null if [ "$1" = "stop" ] then exit fi #the qdisc tc qdisc add dev $DEV root handle 1: hfsc default 20 #root class and leaf classes tc class add dev $DEV parent 1: classid 1:1 hfsc \ sc rate ${RATEUP}kbit \ ul rate ${RATEUP}kbit #bulk traffic tc class add dev $DEV parent 1:1 classid 1:20 hfsc \ sc umax 1500b dmax 15ms rate $[5*$RATEUP/100]kbit \ ul rate ${RATEUP}kbit #low-latency class tc class add dev $DEV parent 1:1 classid 1:10 hfsc \ sc umax 1500b dmax 15ms rate $[95*$RATEUP/100]kbit \ ul rate ${RATEUP}kbit #sochastic fair queueing tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10 #TOS & ICMP tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 1:10 tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10 #ACKS tc filter add dev $DEV parent 1: protocol ip prio 1 u32 \ match ip protocol 6 0xff \ match u8 0x05 0x0f at 0 \ match u16 0x0000 0xffc0 at 2 \ match u8 0x10 0xff at 33 \ flowid 1:10