#!/bin/sh # description: Starts stops and restarts the basic shaping # chkconfig: 2345 90 35 TC=/sbin/tc addshaping () { $TC qdisc add dev $DEV root handle 1: htb default 90 # Setup parent class $TC class add dev $DEV parent 1: classid 1:1 htb rate $RATE # Add prio 1 queue (highest) $TC class add dev $DEV parent 1:1 classid 1:10 htb rate $RATE ceil $RATE prio 0 $TC qdisc add dev $DEV parent 1:10 handle 10: red limit 1052 min 132 max 263 burst 2 avpkt 128 bandwidth $RATE probability 1 # Add prio 2 queue $TC class add dev $DEV parent 1:1 classid 1:20 htb rate $RATE ceil $RATE prio 1 $TC qdisc add dev $DEV parent 1:20 handle 20: red limit 2624 min 328 max 656 burst 2 avpkt 256 bandwidth $RATE probability 1 # Add prio 3 queue (VoIP) $TC class add dev $DEV parent 1:1 classid 1:30 htb rate $RATE ceil $RATE prio 2 $TC qdisc add dev $DEV parent 1:30 handle 30: red limit 1052 min 132 max 263 burst 2 avpkt 128 bandwidth $RATE probability 1 # Add prio 4 queue (ICMP & TCP ACK) $TC class add dev $DEV parent 1:1 classid 1:40 htb rate $RATE ceil $RATE prio 3 $TC qdisc add dev $DEV parent 1:40 handle 40: red limit 5244 min 656 max 1311 burst 2 avpkt 512 bandwidth $RATE probability 0.01 # Add prio 5 queue (UDP) $TC class add dev $DEV parent 1:1 classid 1:50 htb rate $RATE ceil $RATE prio 4 $TC qdisc add dev $DEV parent 1:50 handle 50: red limit 6292 min 787 max 1573 burst 2 avpkt 768 bandwidth $RATE probability 0.01 # Add prio 6 queue $TC class add dev $DEV parent 1:1 classid 1:60 htb rate $RATE ceil $RATE prio 5 $TC qdisc add dev $DEV parent 1:60 handle 60: red limit 8392 min 1049 max 2098 burst 2 avpkt 1024 bandwidth $RATE probability 0.02 # Add prio 7 queue $TC class add dev $DEV parent 1:1 classid 1:70 htb rate $RATE ceil $RATE prio 6 $TC qdisc add dev $DEV parent 1:70 handle 70: red limit 10488 min 1311 max 2622 burst 2 avpkt 1024 bandwidth $RATE probability 0.02 # Add prio 8 queue $TC class add dev $DEV parent 1:1 classid 1:80 htb rate $RATE ceil $RATE prio 7 $TC qdisc add dev $DEV parent 1:80 handle 80: red limit 15732 min 1967 max 3933 burst 3 avpkt 1024 bandwidth $RATE probability 0.03 # Add prio 9 queue (lowest) $TC class add dev $DEV parent 1:1 classid 1:90 htb rate $RATE ceil $RATE prio 8 $TC qdisc add dev $DEV parent 1:90 handle 90: red limit 31460 min 3933 max 7865 burst 6 avpkt 1024 bandwidth $RATE probability 0.04 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x0 0xff flowid 1:90 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x8 0xff flowid 1:90 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x10 0xff flowid 1:90 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x18 0xff flowid 1:90 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x20 0xff flowid 1:80 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x28 0xff flowid 1:80 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x30 0xff flowid 1:80 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x38 0xff flowid 1:80 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x40 0xff flowid 1:70 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x48 0xff flowid 1:70 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x50 0xff flowid 1:70 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x58 0xff flowid 1:70 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x60 0xff flowid 1:60 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x68 0xff flowid 1:60 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x70 0xff flowid 1:60 $TC filter add dev $DEV protocol ip prio 4 u32 match ip tos 0x78 0xff flowid 1:60 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0x80 0xff flowid 1:50 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0x88 0xff flowid 1:50 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0x90 0xff flowid 1:50 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0x98 0xff flowid 1:50 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0xA0 0xff flowid 1:40 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0xA8 0xff flowid 1:40 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0xB0 0xff flowid 1:40 $TC filter add dev $DEV protocol ip prio 1 u32 match ip tos 0xB8 0xff flowid 1:30 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xC0 0xff flowid 1:20 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xC8 0xff flowid 1:20 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xD0 0xff flowid 1:20 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xD8 0xff flowid 1:20 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xE0 0xff flowid 1:10 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xE8 0xff flowid 1:10 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xF0 0xff flowid 1:10 $TC filter add dev $DEV protocol ip prio 0 u32 match ip tos 0xF8 0xff flowid 1:10 } removeshaping () { $TC qdisc del dev $DEV root handle 1: htb default 60 } case "$1" in 'start') DEV=eth0.50 RATE=2mbit addshaping touch /var/lock/subsys/shaping ;; 'restart') $0 stop $0 start ;; 'stop') DEV=eth0.50 removeshaping rm -f /var/lock/subsys/shaping ;; *) echo "Usage: $0 { start | stop | restart}" ;; esac exit 0