Daniel Platts
2002-Feb-09 11:41 UTC
Shaping multiple subnets that have same traffic types..
Hi All,
I have a box running as a bridge between our local network and the router
which services the connections to our two branch offices. I want to shape
the traffic going to the two branches, so that email and web surfing no
longer hog the connection. I''m not 100% sure about the filter matching
to
use for the shaping though because both branches have the same traffic
types, but are on two different subnets..
Branch 1 has a 64kbps link, while Branch 2 has 128kbps. The unusual figures
I''ve given for the ceilings below are alowing for the compression in
the
routers (runs an average of about 1.3:1)
Diagram:
Local Network
(172.16.1.0)
|
eth0
Linux Bridge/Shaper
eth1
|
Router
| |
/ \
64kbps 128kbps
172.16.2.0 172.16.3.0
The traffic classification I want is something like:
| root
(1:)
|
|
(1:1) 10Mbit
/|\
/ | \
/ | \
/(1:50)\
/ \
1:10 / \
1:20
/\
/\
/ \ /
\
2:10 / \ /
\ 3:20
| \
2:20 | | 3:10
And the tc setup script would be something like:
TC=/sbin/tc
$TC qdisc del dev eth1 root 2>/dev/null >/dev/null
$TC qdisc add dev eth1 root handle 1: htb default 50
$TC class add dev eth1 parent 1: classid 1:1 htb rate 10Mbit ceil 10Mbit
burst 8k
$TC class add dev eth1 parent 1:1 classid 1:10 htb rate 64k ceil 88k burst
4k prio 1
$TC class add dev eth1 parent 1:1 classid 1:20 htb rate 128k ceil 168k burst
4k prio 1
$TC class add dev eth1 parent 1:1 classid 1:50 htb rate 32k ceil 48k burst
2k prio 1
$TC class add dev eth1 parent 1:10 classid 2:10 htb rate 48k ceil 72k burst
2k prio 1
$TC class add dev eth1 parent 1:10 classid 2:20 htb rate 16k ceil 36k burst
2k prio 2
$TC class add dev eth1 parent 1:20 classid 3:10 htb rate 96k ceil 144k burst
2k prio 1
$TC class add dev eth1 parent 1:20 classid 3:20 htb rate 32k ceil 56k burst
2k prio 2
$TC filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst
172.16.2.0/24 flowid 1:10
$TC filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst
172.16.3.0/24 flowid 1:20
$TC filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst
172.16.2.0/24 match ip sport 3389 0xffff flowid 2:10
$TC filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst
172.16.2.0/24 match ip dport 515 0xffff flowid 2:10
$TC filter add dev eth1 parent 1:0 protocol ip prio 2 u32 match ip dst
172.16.2.0/24 match ip sport 80 0xffff flowid 2:20
$TC filter add dev eth1 parent 1:0 protocol ip prio 2 u32 match ip dst
172.16.2.0/24 match ip sport 110 0xffff flowid 2:20
$TC filter add dev eth1 parent 1:0 protocol ip prio 2 u32 match ip dst
172.16.2.0/24 match ip sport 3128 0xffff flowid 2:20
$TC filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst
172.16.3.0/24 match ip sport 3389 0xffff flowid 3:10
$TC filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst
172.16.3.0/24 match ip dport 515 0xffff flowid 3:10
$TC filter add dev eth1 parent 1:0 protocol ip prio 2 u32 match ip dst
172.16.3.0/24 match ip sport 80 0xffff flowid 3:20
$TC filter add dev eth1 parent 1:0 protocol ip prio 2 u32 match ip dst
172.16.3.0/24 match ip sport 110 0xffff flowid 3:20
$TC filter add dev eth1 parent 1:0 protocol ip prio 2 u32 match ip dst
172.16.3.0/24 match ip sport 3128 0xffff flowid 3:20
Does this look right ?? Have I got this completely wrong ??
My only question is about the filters - if I attach them all to the root,
then the first level filters are going to catch everything and I wont be
able to split the traffic types off into the different speed bands.. Is it
now possible to attach my 2nd level filters to the likes of 1:10 and 1:20
instead?? If so, then do I need to match the dst ip again or is that
unneccessary?
Apologies for the long post.
Regards,
Daniel.