#! /bin/bash # # Author: Eicke Friedrich # # QoS control script # # Interfaces eth0 and eth1 get two leaf classes: # x:10 default and x:11 p2p class # # RATE is the guaranteed bandwidth for a class # RATE_TOTAL is the speed of the link # Note: RATE_DEFAULT + RATE_P2P = RATE_TOTAL RATE_TOTAL=102400kbit RATE_DEFAULT=102300kbit RATE_P2P=100kbit # CEIL is the maximum bandwidth for a class CEIL_DEFAULT=102400kbit CEIL_P2P=200kbit # QUANTUM often needs finetuning esp. for extreme small or big classes QUANTUM_BIG=20000 QUANTUM_SMALL=1501 # BURST needs to be reset for a very small class to let it not overlimit to much BURST_SMALL=1501b case "$1" in start) echo -n "Starting QoS ... " tc qdisc add dev eth0 root handle 1:0 htb default 10 tc qdisc add dev eth1 root handle 2:0 htb default 10 tc class add dev eth0 parent 1:0 classid 1:1 htb rate $RATE_TOTAL ceil $RATE_TOTAL quantum $QUANTUM_BIG tc class add dev eth1 parent 2:0 classid 2:1 htb rate $RATE_TOTAL ceil $RATE_TOTAL quantum $QUANTUM_BIG tc class add dev eth0 parent 1:1 classid 1:10 htb rate $RATE_DEFAULT ceil $CEIL_DEFAULT prio 1 quantum $QUANTUM_BIG tc class add dev eth0 parent 1:1 classid 1:11 htb rate $RATE_P2P ceil $CEIL_P2P prio 5 quantum $QUANTUM_SMALL burst $BURST_SMALL cburst $BURST_SMALL tc class add dev eth1 parent 2:1 classid 2:10 htb rate $RATE_DEFAULT ceil $CEIL_DEFAULT prio 1 quantum $QUANTUM_BIG tc class add dev eth1 parent 2:1 classid 2:11 htb rate $RATE_P2P ceil $CEIL_P2P prio 5 quantum $QUANTUM_SMALL burst $BURST_SMALL cburst $BURST_SMALL echo "done" ;; stop) echo -n "Stopping QoS ... " tc qdisc del dev eth0 root tc qdisc del dev eth1 root echo "done" ;; restart) echo -n "Restarting QoS ..." $0 stop $0 start echo "done" ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0