#!/bin/sh ## set this to name of outgoing interface outif="eth0" ## Delete old handles if they exist tc qdisc del dev $outif handle 10: parent 2:1 2>/dev/null tc qdisc del dev $outif handle 20: parent 2:2 2>/dev/null tc qdisc del dev $outif handle 30: parent 2:3 2>/dev/null tc qdisc del dev $outif handle 2: parent 1:1 2>/dev/null tc qdisc del dev $outif handle 1: root 2>/dev/null ## Token bucket filter outgoing traffic to maximum upload rate (minus a bit ## for ethernet overhead) tc qdisc add dev $outif root handle 1: tbf rate 124kbit latency 50ms burst 4096 mpu 64 ## But first prioritise traffic, so interactive packets get sent before ## normal traffic which is sent before bulk traffic. This pays attention ## to IP TOS fields. tc qdisc add dev $outif parent 1:1 handle 2: prio bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 ## Then for each traffic class, make sure all streams in that class ## progress roughly equally. So no 1 stream can starve another. tc qdisc add dev $outif parent 2:1 handle 10: sfq perturb 10 tc qdisc add dev $outif parent 2:2 handle 20: sfq perturb 10 tc qdisc add dev $outif parent 2:3 handle 30: sfq perturb 10 echo "Current QoS configuration for $outif:" tc qdisc ls dev $outif