#!/bin/sh -e # barbapapa <-> papadoc => HIGH bandwith # barbapapa <-> scrooge => LOW bandwith # # barbapapa --- mtc-linux1 --- papadoc # | # `-- scrooge # # Barbapapa: 192.168.10.200 # Papadoc: 217.8.32.4 # Scrooge: 217.8.32.8 INTERNAL_NET=217.8.32.8 EXTERNAL_NET=192.168.10.200 INTERNAL_INTERFACE=eth1 EXTERNAL_INTERFACE=eth0 UPLINK_SPEED=100Mbit SPEED_LIMIT=33600 tagg () { if [ "$1" = "add" ]; then CHAIN="ipchains -A input" else CHAIN="ipchains -D input" fi # TCP $CHAIN -i ${EXTERNAL_INTERFACE} -p tcp -s ${INTERNAL_NET} -d ${EXTERNAL_NET} -m 1 # barbapapa <-> scrooge $CHAIN -i ${INTERNAL_INTERFACE} -p tcp -s ${EXTERNAL_NET} -d ${INTERNAL_NET} -m 1 # scrooge <-> barbapapa # UDP # $CHAIN -i ${EXTERNAL_INTERFACE} -p udp -s ${INTERNAL_NET} -d ${EXTERNAL_NET} -m 1 # barbapapa <-> scrooge # $CHAIN -i ${INTERNAL_INTERFACE} -p udp -s ${EXTERNAL_NET} -d ${INTERNAL_NET} -m 1 # scrooge <-> barbapapa } # -------------------------- case "$1" in start) # Tagg all the trafic in and out of the internal/external interfaces tagg add # Attach the root QDisc to the interface tc qdisc add dev ${EXTERNAL_INTERFACE} root handle 1: cbq bandwidth ${UPLINK_SPEED} avpkt 1000 cell 8 tc qdisc add dev ${INTERNAL_INTERFACE} root handle 1: cbq bandwidth ${UPLINK_SPEED} avpkt 1000 cell 8 # ----------------------------------------------------------- # Generate class tc class add dev ${EXTERNAL_INTERFACE} parent 1:0 classid 1:1 est 1sec 2sec \ cbq bandwidth ${UPLINK_SPEED} rate ${SPEED_LIMIT} allot 1514 cell 8 weight 1 prio 5 \ avpkt 1000 bounded tc class add dev ${INTERNAL_INTERFACE} parent 1:0 classid 1:2 est 1sec 2sec \ cbq bandwidth ${UPLINK_SPEED} rate ${SPEED_LIMIT} allot 1514 cell 8 weight 1 prio 5 \ avpkt 1000 bounded # ----------------------------------------------------------- # Add filters tc filter add dev ${EXTERNAL_INTERFACE} protocol ip handle 1 fw classid 1:1 tc filter add dev ${INTERNAL_INTERFACE} protocol ip handle 1 fw classid 1:2 ;; stop) tagg del tc qdisc del dev ${EXTERNAL_INTERFACE} root tc qdisc del dev ${INTERNAL_INTERFACE} root ;; *) N=/etc/init.d/qos echo "Usage: $N {start|stop}" >&2 exit 1 ;; esac exit 0