Hello,
I'm using tc to limit the bandwidth of our wireless customers. I have a
working script, but I'm not happy with it. I'm trying to write a more
sophisticated script, but when I run it, it give me this error:
RTNETLINK answers: File exists
I have no idea what this error means or how to fix it. Here is a portion
of the script (the whole script shapes several interfaces):
IDEV='eth5'
TC='/sbin/tc'
IPS='/etc/sysconfig/shaper/shape.ips'
# high priority destination ports - I'll fill these in later (when this
# thing works)
HIGHPORT=
# low priority destination ports
LOWPORT=
$TC qdisc add dev $IDEV root handle 1: cbq bandwidth 1600Kbit cell 8\
avpkt 1000 mpu 64
$TC class add dev $IDEV parent 1: classid 1:1 est 1sec 8sec cbq\
bandwidth 1600Kbit rate 1500kbit allot 1514 maxburst 20 avpkt 1000\
prio 0 bounded isolated
cat $IPS | sed -e 's/#.*$//; s/^ *$//;' | while read IP RATE STATUS; do
if [ "x$IP" == "x" ]; then
continue
fi
# I use the last byte of the customer's IP's for the handle, which range
# from 76 to 135 ATM.
HANDLE="${IP##*.}"
# I get the error from the next line. Because it fails to create the
# qdisc all the rest fail too.
$TC qdisc add dev $IDEV parent 1:1 handle 1:$HANDLE cbq\
bandwidth 1600Kbit cell 8 avpkt 1000 mpu 64
$TC class add dev $IDEV parent 1:$HANDLE classid $HANDLE:\
est 1sec 8sec cbq bandwidth 1600Kbit rate ${RATE}kbit allot 1514\
maxburst 20 avpkt 1000 prio 1 bounded isolated
$TC class add dev $IDEV parent $HANDLE: classid $HANDLE:1\
est 1sec 8sec cbq bandwidth 1600Kbit rate ${RATE}kbit allot 1514\
maxburst 20 avpkt 1000 prio 2
$TC class add dev $IDEV parent $HANDLE: classid $HANDLE:2 est 1sec\
8sec cbq bandwidth 1600Kbit rate $[9*$RATE/10]kbit allot 1514\
maxburst 20 avpkt 1000 prio 3
$TC class add dev $IDEV parent $HANDLE: classid $HANDLE:3 est 1sec\
8sec cbq bandwidth 1600Kbit rate $[8*$RATE/10]kbit allot 1514\
maxburst 20 avpkt 1000 prio 4
$TC qdisc add dev $IDEV parent $HANDLE:1 sfq quantum 1514b\
perturb 15
$TC qdisc add dev $IDEV parent $HANDLE:2 sfq quantum 1514b\
perturb 15
$TC qdisc add dev $IDEV parent $HANDLE:3 sfq quantum 1514b\
perturb 15
$TC filter add dev $IDEV parent 1: protocol ip prio 16\
u32 match ip src $IP flowid $HANDLE:
$TC filter add dev $IDEV parent $HANDLE: protocol ip prio 10\
u32 match ip tos 0x10 0xff flowid $HANDLE:1
$TC filter add dev $IDEV parent $HANDLE: protocol ip prio 11\
u32 match ip protocol 1 0xff flowid $HANDLE:1
$TC filter add dev $IDEV parent $HANDLE: protocol ip prio 12\
u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16\
0x0000 0xffc0 at 2 flowid $HANDLE:1
for a in $HIGHPORT; do
$TC filter add dev $IDEV parent 1:0 protocol ip prio 14\
u32 match ip dport $a 0xffff flowid $HANDLE:1
done
for a in $LOWPORT; do
$TC filter add dev $IDEV parent 1:0 protocol ip prio 16\
u32 match ip dport $a 0xffff flowid $HANDLE:3
done
$TC filter add dev $IDEV parent 1:0 protocol ip prio 15\
u32 match ip dst 0.0.0.0/0 flowid $HANDLE:2
done
There are bound to other problems with this script, but until I can get
past the current one, I'm dead in the water. TIA
William Murphy
Network Administrator
Velocity Technologies, Inc.
_______________________________________________
LARTC mailing list
[email protected]
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc