[LARTC] HTB and filters on many levels

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I'm using HTB with Linux 2.4.21, and have gotten a little problem
that I don't quite understand.  I'd be very glad if any of you
could help me tell what's wrong.

My setup is like this:

  ISP - [ eth0  'firewall machine'  eth1 ] - LAN

I'd like to split the traffic evenly between the firewall and the LAN,
and then prioritize traffic within those classes, similarly to the
example in the HTB User Guide.  I want something like this:

 qdisc root 1: htb default 2
	1:9 htb rate 240
		1:1 htb rate 120 ceil 240
			1:11 htb rate 20 ceil 80 prio 1
				filter: ssh, ack, etc
				11: pfifo
			1:12 htb rate 60 ceil 200 prio 2
				no filter
				12: pfifo
			1:13 htb rate 20 ceil 80 prio 3
				filter: direct connect
				13: pfifo
		1:2 htb rate 120 ceil 240
			1:21 htb rate 20 ceil 80 prio 1
				21: pfifo
			1:22 htb rate 60 ceil 200 prio 2
				22: pfifo
			1:23 htb rate 20 ceil 80 prio 3
				23: pfifo

I then use iptables -j MARK to set a '1' if the traffic comes from
eth1.  If not, it should end up in 1:2, and 1:1 and 1:2 should be able
to borrow from each other.

If I only have 1:1 and 1:2 and no filters at all, locally generated
traffic correctly ends up in 1:2.  Then I added these 7 lines, and
expected traffic to move down to 1:22.  However, when I run
'tc -s qdisc show dev eth0' I see that traffic runs through 1:0, but
'tc -s class show dev eth0' shows nothing.

tc class add dev eth0 parent 1:2 classid 1:21 htb rate 20kbit ceil 100kbit prio 1
tc class add dev eth0 parent 1:2 classid 1:22 htb rate 60kbit ceil 200kbit prio 2
tc class add dev eth0 parent 1:2 classid 1:23 htb rate 20kbit ceil 60kbit  prio 3
tc qdisc add dev eth0 parent 1:21 handle 121: pfifo limit 2
tc qdisc add dev eth0 parent 1:22 handle 122: sfq perturb 10
tc qdisc add dev eth0 parent 1:23 handle 123: sfq perturb 10
tc filter add dev eth0 parent 1:2 protocol ip u32 match ip dst 0.0.0.0/0 flowid 1:22

I have another setup which is almost identical to the example in the
User Guide, and that works great.  The kids got really happy that they
could play counterstrike while I was using direct connect.  Super!
I really want to split the bandwidth more evenly between the machines
though, which is why I created this two level setup.

What have I done wrong?  Why doesn't the filter on 1:2 move the
packets to 1:22?

Lots of thanks in advance!

My complete script looks like this.

#!/bin/sh

tc qdisc del dev eth0 root 2> /dev/null > /dev/null
tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null

tc qdisc add dev eth0 root handle 1: htb default 9

tc class add dev eth0 parent 1:0 classid 1:9  htb rate 200kbit ceil 200kbit

tc class add dev eth0 parent 1:9 classid 1:1  htb rate 120kbit ceil 200kbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 20kbit ceil 80kbit  prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 60kbit ceil 200kbit prio 2
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 20kbit ceil 80kbit  prio 3

tc qdisc add dev eth0 parent 1:11 handle 111: pfifo limit 2
tc qdisc add dev eth0 parent 1:12 handle 112: sfq perturb 10
tc qdisc add dev eth0 parent 1:13 handle 113: sfq perturb 10

tc class add dev eth0 parent 1:9 classid 1:2  htb rate 120kbit ceil 200kbit prio 0
tc class add dev eth0 parent 1:2 classid 1:21 htb rate 20kbit ceil 100kbit prio 1
tc class add dev eth0 parent 1:2 classid 1:22 htb rate 60kbit ceil 200kbit prio 2
tc class add dev eth0 parent 1:2 classid 1:23 htb rate 20kbit ceil 60kbit  prio 3

tc qdisc add dev eth0 parent 1:2 handle 120: pfifo limit 2
tc qdisc add dev eth0 parent 1:21 handle 121: pfifo limit 2
tc qdisc add dev eth0 parent 1:22 handle 122: sfq perturb 10
tc qdisc add dev eth0 parent 1:23 handle 123: sfq perturb 10

# To the firewall or LAN?
tc filter add dev eth0 parent 1:9 protocol ip prio 1 handle 1 fw classid 1:1
tc filter add dev eth0 parent 1:9 protocol ip prio 1 handle 2 fw classid 1:2


# To LAN

# TOS Minimum Delay (ssh, NOT scp) in 1:10:
tc filter add dev eth0 parent 1:1 protocol ip prio 10 u32 \
      match ip tos 0x10 0xff  flowid 1:10

# CS
tc filter add dev eth0 parent 1:1 protocol ip prio 10 u32 \
      match ip dport 27015 0xffff  flowid 1:10

# Diablo
tc filter add dev eth0 parent 1:1 protocol ip prio 10 u32 \
      match ip dport 6112 0xffff  flowid 1:10
tc filter add dev eth0 parent 1:1 protocol ip prio 10 u32 \
      match ip dport 4000 0xffff  flowid 1:10

tc filter add dev eth0 parent 1:1 protocol ip prio 10 u32 \
      match ip dport 22 0xffff  flowid 1:10

tc filter add dev eth0 parent 1:1 protocol ip prio 11 u32 \
	match ip protocol 1 0xff flowid 1:10

tc filter add dev eth0 parent 1:1 protocol ip prio 12 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

tc filter add dev eth0 parent 1:1 protocol ip prio 12 u32 \
      match ip dport 411 0xfffe  flowid 1:13

tc filter add dev eth0 parent 1: protocol ip prio 13 u32 \
   match ip dst 0.0.0.0/0 flowid 1:12


# To the firewall

# TOS Minimum Delay (ssh, NOT scp) in 1:21:
tc filter add dev eth0 parent 1:2 protocol ip prio 10 u32 \
      match ip tos 0x10 0xff  flowid 1:21

tc filter add dev eth0 parent 1:2 protocol ip prio 10 u32 \
      match ip dport 22 0xffff  flowid 1:21
tc filter add dev eth0 parent 1:2 protocol ip prio 10 u32 \
      match ip sport 22 0xffff  flowid 1:21

tc filter add dev eth0 parent 1:2 protocol ip prio 11 u32 \
	match ip protocol 1 0xff flowid 1:21

tc filter add dev eth0 parent 1:2 protocol ip prio 12 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:21

tc filter add dev eth0 parent 1:2 protocol ip prio 12 u32 \
      match ip dport 411 0xfffe  flowid 1:23

tc filter add dev eth0 parent 1:2 protocol ip prio 12 u32 \
   match ip dst 0.0.0.0/0 flowid 1:22

/Basic



[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux