#!/bin/sh # traffic shapping script, for use with iptables # # Installation: # Copy this script to /etc/rc.trafficshaping and edit the settings below. The # iproute2 package is required for /sbin/tc. # Usage: # /etc/rc.trafficshaping {start|stop|restart|show} ### Speeds in Kbps TC=/sbin/tc DNLD=4000 # DOWNLOAD Limit DWEIGHT=`expr $DNLD / 10` # DOWNLOAD Weight Factor ~ 1/10 of DOWNLOAD Limit UPLD=300 # UPLOAD Limit UWEIGHT=`expr $UPLD / 10` # UPLOAD Weight Factor WAN_INT=eth1 LAN_INT=eth0 ### tc_start() { # set rules for downloading $TC qdisc add dev ${LAN_INT} root handle 11: cbq bandwidth 100Mbit avpkt 1000 mpu 64 $TC class add dev ${LAN_INT} parent 11:0 classid 11:1 cbq bandwidth 100Mbit rate ${DNLD}Kbit weight ${DWEIGHT}Kbit allot 1514 prio 1 maxburst 10 avpkt 100 bounded $TC class add dev ${LAN_INT} parent 11:0 classid 11:2 cbq bandwidth 100Mbit rate ${DNLD}Kbit weight ${DWEIGHT}Kbit allot 1514 prio 8 maxburst 2 avpkt 1500 bounded $TC filter add dev ${LAN_INT} parent 11:0 protocol ip handle 4 fw flowid 11:1 $TC filter add dev ${LAN_INT} parent 11:0 protocol ip handle 6 fw flowid 11:2 # set rules for uploading $TC qdisc add dev ${WAN_INT} root handle 10: cbq bandwidth 10Mbit avpkt 1000 mpu 64 $TC class add dev ${WAN_INT} parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate ${UPLD}Kbit weight ${UWEIGHT}Kbit allot 1514 prio 1 maxburst 10 avpkt 100 bounded $TC class add dev ${WAN_INT} parent 10:0 classid 10:2 cbq bandwidth 100Mbit rate ${UPLD}Kbit weight ${UWEIGHT}Kbit allot 1514 prio 8 maxburst 2 avpkt 1500 bounded $TC filter add dev ${WAN_INT} parent 10:0 protocol ip handle 3 fw flowid 10:1 $TC filter add dev ${WAN_INT} parent 10:0 protocol ip handle 5 fw flowid 10:2 } tc_stop() { $TC qdisc del dev ${LAN_INT} root $TC qdisc del dev ${WAN_INT} root } tc_restart() { tc_stop sleep 1 tc_start } tc_show() { echo "${LAN_INT}:" $TC qdisc show dev ${LAN_INT} $TC class show dev ${LAN_INT} $TC filter show dev ${LAN_INT} echo "" echo "${WAN_INT}:" $TC qdisc show dev ${WAN_INT} $TC class show dev ${WAN_INT} $TC filter show dev ${WAN_INT} echo "" } case "$1" in start) echo -n "Starting bandwidth shaping: " tc_start echo "done" ;; stop) echo -n "Stopping bandwidth shaping: " tc_stop echo "done" ;; restart) echo -n "Restarting bandwidth shaping: " tc_restart echo "done" ;; show) tc_show ;; *) echo "Usage: $0 {start|stop|restart|show}" ;; esac exit 0