All pastes #458939 Raw Edit

Unnamed

public text v1 · immutable
#458939 ·published 2007-04-26 05:45 UTC
rendered paste body
#!/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