Hi,
I'm trying to modify the Wondershaper script so achieve the following.
1. Prioritize traffic to the few IP addresses.
2. Everyone else should get a fair amount of bandwidth
The problem I am facing is when I run this script is that the bandwidth
seems to get halved. I tried to apply this script to a site where the
upstream and downstream were fully saturated. I immediately saw backlogs in
the 'everyone else' class but it seems like they were getting only 256 down
and 256 up. I thought perhaps the the class was combining the upstream and
downstream traffic but when I increased the INCOMING_BW and OUTGOING_BW to
1024, I didn't see any increase. There still seemed to be only around
256kbps of traffic coming in and around 256kbps of traffic going out.
Any help on this would be much appreciated.
#!/bin/bash
# Set the incoming and outgoing bandwidth here.
INCOMING_BW=512
OUTGOING_BW=512
UL_DEV=eth0
DL_DEV=eth1
# clean existing down- and uplink qdiscs, hide errors
tc qdisc del dev $UL_DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DL_DEV root 2> /dev/null > /dev/null
# install root CBQ
echo Installing Root CBQ
tc qdisc add dev $UL_DEV root handle 1: cbq avpkt 1000 bandwidth 100mbit
tc qdisc add dev $DL_DEV root handle 2: cbq avpkt 1000 bandwidth 100mbit
# shape everything on $UL_DEV at $OUTGOING_BW speed, $DL_DEV at $INCOMING_BW
echo Creating Classes
tc class add dev $UL_DEV parent 1: classid 1:1 cbq rate ${OUTGOING_BW}kbit
allot 1500 prio 5 bounded isolated
tc class add dev $DL_DEV parent 2: classid 2:1 cbq rate ${INCOMING_BW}kbit
allot 1500 prio 5 bounded isolated
tc class add dev $UL_DEV parent 1:1 classid 1:10 cbq rate 128kbit allot 1600
prio 1 avpkt 1000
tc class add dev $DL_DEV parent 2:1 classid 2:10 cbq rate 128kbit allot 1600
prio 1 avpkt 1000
tc class add dev $UL_DEV parent 1:1 classid 1:20 cbq rate 128kbit allot 1600
prio 2 avpkt 1000 bounded
tc class add dev $DL_DEV parent 2:1 classid 2:20 cbq rate 128kbit allot 1600
prio 2 avpkt 1000 bounded
tc class add dev $UL_DEV parent 1:1 classid 1:30 cbq rate 128kbit allot 1600
prio 3 avpkt 1000 bounded
tc class add dev $DL_DEV parent 2:1 classid 2:30 cbq rate 128kbit allot 1600
prio 3 avpkt 1000 bounded
tc class add dev $UL_DEV parent 1:1 classid 1:40 cbq rate 128kbit allot 1600
prio 3 avpkt 1000 bounded
tc class add dev $DL_DEV parent 2:1 classid 2:40 cbq rate 128kbit allot 1600
prio 3 avpkt 1000 bounded
tc class add dev $UL_DEV parent 1:1 classid 1:50 cbq rate 128kbit allot 1600
prio 3 avpkt 1000 bounded
tc class add dev $DL_DEV parent 2:1 classid 2:50 cbq rate 128kbit allot 1600
prio 3 avpkt 1000 bounded
# Low priority class for P2P and other traffic that we don't like
tc class add dev $UL_DEV parent 1:1 classid 1:60 cbq rate
$[1*$OUTGOING_BW/10]kbit allot 1600 prio 8 avpkt 1000
tc class add dev $DL_DEV parent 2:1 classid 2:60 cbq rate
$[1*$OUTGOING_BW/10]kbit allot 1600 prio 8 avpkt 1000
# Everyone else goes into this
tc class add dev $UL_DEV parent 1:1 classid 1:80 cbq rate
$[9*$OUTGOING_BW/10]kbit allot 1600 prio 5 avpkt 1000
tc class add dev $DL_DEV parent 2:1 classid 2:80 cbq rate
$[9*$INCOMING_BW/10]kbit allot 1600 prio 5 avpkt 1000
echo Classes Created
# all get Stochastic Fairness:
echo Adding SFQ to all classes
tc qdisc add dev $UL_DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DL_DEV parent 2:10 handle 10: sfq perturb 10
tc qdisc add dev $UL_DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DL_DEV parent 2:20 handle 20: sfq perturb 10
tc qdisc add dev $UL_DEV parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev $DL_DEV parent 2:30 handle 30: sfq perturb 10
tc qdisc add dev $UL_DEV parent 1:40 handle 40: sfq perturb 10
tc qdisc add dev $DL_DEV parent 2:40 handle 40: sfq perturb 10
tc qdisc add dev $UL_DEV parent 1:50 handle 50: sfq perturb 10
tc qdisc add dev $DL_DEV parent 2:50 handle 50: sfq perturb 10
tc qdisc add dev $UL_DEV parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev $DL_DEV parent 2:60 handle 60: sfq perturb 10
tc qdisc add dev $UL_DEV parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev $DL_DEV parent 2:80 handle 80: sfq perturb 10
# start filters
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.1.1 flowid 1:10
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.1.2 flowid 1:10
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.1.3 flowid 1:10
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.1.4 flowid 1:10
# To speed up downloads while an upload is going on, put ACK packets in 1:10
as well
tc filter add dev $UL_DEV parent 1: protocol ip prio 8 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:10
# More filters lower priority
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.2.1 flowid 1:20
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.2.2 flowid 1:20
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.2.3 flowid 1:20
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.2.4 flowid 1:20
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.2.5 flowid 1:20
tc filter add dev $UL_DEV parent 1: protocol ip prio 1 u32 match ip dst
192.168.2.6 flowid 1:20
# rest is 'non-interactive' ie 'bulk' and ends up in 1:80
tc filter add dev $UL_DEV parent 1: protocol ip prio 5 u32 match ip dst
0.0.0.0/0 flowid 1:80
tc filter add dev $DL_DEV parent 2: protocol ip prio 5 u32 match ip dst
0.0.0.0/0 flowid 2:80
_______________________________________________
LARTC mailing list
[email protected]
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc