Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Jun 2010 11:12:42 -0300
From:      Rafael Henrique Faria <rafaelhfaria@cenadigital.com.br>
To:        freebsd-net@freebsd.org, freebsd-pf@freebsd.org
Subject:   Unknown Behavior of PF+ALTQ on a Bridge
Message-ID:  <AANLkTim4F0iJvKfjCWJtAFkwYhOT4J_Yz3sZOiOdRPoj@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi.

I'm working on a Brige between a router Cisco 7200, and a 3Com 7900 switch.
I have several subnetworks, and I need to balance the bandwidth between the=
n.

The Brigde is running: "FreeBSD dell05 8.1-PRERELEASE FreeBSD
8.1-PRERELEASE #0: Tue Jun 22 13:59:17 BRT 2010
rafaelhfaria@dell05:/usr/obj/usr/src/sys/BRIDGE  amd64"

I have the following lines in /boot/loader.conf:
---
net.graph.maxalloc=3D512
net.graph.maxdgram=3D45000
net.graph.recvspace=3D45000
bridgestp_load=3D"YES"
if_vlan_load=3D"YES"
---

And my kernel is compiled with:
device          if_bridge
device          pf
device          pflog
options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_PRIQ
options         ALTQ_NOPCC
options         DEVICE_POLLING
options         HZ=3D1000
options         SHMSEG=3D16
options         SHMMNI=3D32
options         SHMMAX=3D2097152
options         SHMALL=3D4096
options         MAXFILES=3D8192

And the bridge configuration:
cloned_interfaces=3D"bridge0 vlan1"
ifconfig_bridge0=3D"addm bce0 stp bce0 addm bce1 stp bce1 up"
ifconfig_bce0=3D"polling up"
ifconfig_bce1=3D"polling up"
ifconfig_vlan1=3D"inet 200.x.x.x netmask 0xFFFFFF00 broadcast
200.x.x.255 vlan 1 vlandev bce1"

bce0 is connected to the Cisco 7200 ($wan_if in pf)
bce1 is conencted to the 3Com 7900 ($lan_if in pf)

And my sysctl for bridge:
dell05# sysctl net.link.bridge
net.link.bridge.ipfw: 0
net.link.bridge.inherit_mac: 0
net.link.bridge.log_stp: 0
net.link.bridge.pfil_local_phys: 1
net.link.bridge.pfil_member: 1
net.link.bridge.pfil_bridge: 0
net.link.bridge.ipfw_arp: 0
net.link.bridge.pfil_onlyip: 0
dell05#

Ok...

Now, the problem.

With the following queue:
altq on $lan_if bandwidth 33Mb hfsc queue { down_sub1, down_sub2,
down_sub3, down_sub4, down_def }
   queue down_sub1   bandwidth 8Mb priority 1 qlimit 300 hfsc (
realtime 3.20Mb upperlimit 22.40Mb )
   queue down_sub2   bandwidth 8Mb priority 1 qlimit 300 hfsc (
realtime 3.20Mb upperlimit 22.40Mb )
   queue down_sub3  bandwidth 8Mb priority 1 qlimit 300 hfsc (
realtime 3.20Mb upperlimit 22.40Mb )
   queue down_sub4  bandwidth 8Mb priority 1 qlimit 300 hfsc (
realtime 3.20Mb upperlimit 22.40Mb )
   queue down_def     bandwidth 128Kb hfsc ( default )

And with the following rules:
pass in  log quick on $lan_if from <sub1> to any keep state queue ( down_su=
b1 )
pass out log quick on $wan_if from <sub1> to any keep state queue ( up_sub1=
 )
pass in  log quick on $wan_if from any to <sub1> keep state queue ( up_sub1=
 )
pass out log quick on $lan_if from any to <sub1> keep state queue ( down_su=
b1 )

(..) for each <sub1-4> I have the pass rules like those.


With the full use of the link, only a small part of the traffic gets
into the correct queue.

queue root_bce1 on bce1 bandwidth 33Mb priority 0 {down_sub1,
down_sub2, down_sub3, down_sub4, down_def}
  [ pkts:          0  bytes:          0  dropped pkts:      0 bytes:      0=
 ]
  [ qlength:   0/ 50 ]
  [ measured:     0.0 packets/s, 0 b/s ]
queue  down_sub1 on bce1 bandwidth 8Mb qlimit 300 hfsc( realtime
3.20Mb upperlimit 22.40Mb )
  [ pkts:      53177  bytes:   50082785  dropped pkts:      0 bytes:      0=
 ]
  [ qlength:   0/300 ]
  [ measured:   364.5 packets/s, 2.81Mb/s ]
queue  down_sub2 on bce1 bandwidth 8Mb qlimit 300 hfsc( realtime
3.20Mb upperlimit 22.40Mb )
  [ pkts:      90724  bytes:   79670459  dropped pkts:      0 bytes:      0=
 ]
  [ qlength:   0/300 ]
  [ measured:   744.6 packets/s, 5.20Mb/s ]
queue  down_sub3 on bce1 bandwidth 8Mb qlimit 300 hfsc( realtime
3.20Mb upperlimit 22.40Mb )
  [ pkts:      38333  bytes:   37384626  dropped pkts:      0 bytes:      0=
 ]
  [ qlength:   0/300 ]
  [ measured:   285.2 packets/s, 2.35Mb/s ]
queue  down_sub4 on bce1 bandwidth 8Mb qlimit 300 hfsc( realtime
3.20Mb upperlimit 22.40Mb )
  [ pkts:      80385  bytes:   69021129  dropped pkts:      0 bytes:      0=
 ]
  [ qlength:   0/300 ]
  [ measured:   585.1 packets/s, 3.92Mb/s ]
queue  down_def on bce1 bandwidth 128Kb hfsc( default )
  [ pkts:     268756  bytes:  336423531  dropped pkts:    121 bytes:  81921=
 ]
  [ qlength:   0/ 50 ]
  [ measured:  1615.4 packets/s, 16.49Mb/s ]

watching the pflog interface, I can see that the pass rules are
working, no traffic is getting out of one of the rules (I have put an
"pass log all" to check this).

All the rules are working... but they aren't sending the traffic to
the specified queue.

If someone have a glue for this...
Any suggestion are welcome.

Thank's in advance.

--=20
Rafael Henrique da Silva Faria
Grupo de Sistemas e Redes

Servi=E7o T=E9cnico de Inform=E1tica
Faculdade de Ci=EAncias e Letras do Campus de Araraquara - UNESP



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTim4F0iJvKfjCWJtAFkwYhOT4J_Yz3sZOiOdRPoj>