Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Jul 2006 11:13:11 -0700
From:      "Adam M. Towarnyckyj" <>
To:        <>
Subject:   IPFW Dummynet Bridge Limiting
Message-ID:  <>

Next in thread | Raw E-Mail | Index | Archive | Help
Hey all,


            I have searched and searched and searched and can't seem to
come up with the answer to this little mystery I have going on here.
Maybe I could get some help from this large group of people who are much
smarter than I am. I have a FreeBSD machine running 6.1-RC that has
three NICs, two of which are acting as a bridge. It's a pretty standard
setup. What I am attempting to accomplish is bandwidth limiting using
dummynet over this bridge. Here's the network layout:


INTERNET ---- Core Router ---- Bridge (limiter) ---- Border Router ----
Customer Base


            The reason for the bridge between two routers is because we
also have our server farm between those routers. The customer base
consists of multiple routed networks and they all get public IPs. The
problem I'm having is that the bridge is not limiting any of the
customer IPs. I see packets flowing through the IPFW rules but they're
not being passed to the pipes. I will show the configuration
momentarily. The weird thing is, I am able to unplug the Border Router
from this whole setup and plug a laptop in to the bridge and set it up
so the laptop IP is limited. This setup works fine and I can limit the
laptop the way I expect the rest of the network to be. Here's my
configuration with the Border Router plugged in and the IP
being used in the "Customer Base":


---Kernel Config---

options         SMP                     # Symmetric MultiProcessor

options         IPFIREWALL              # Firewall support


options         IPDIVERT

options         DUMMYNET                # Traffic limiting

options         BRIDGE

options         HZ=3D1000                 # strongly recommended by

device          apic                    # I/O APIC













ifconfig_bridge0=3D"addm em0 addm em1 up"





firewall_script=3D"/etc/rc.firewall.bwmg"    # this just runs ipfw with
the rules supplied in custom_firewall below









        ether 00:04:23:cb:60:aa

        media: Ethernet autoselect (100baseTX <full-duplex>)

        status: active



        ether 00:04:23:cb:60:ab

        media: Ethernet autoselect (100baseTX <full-duplex>)

        status: active

lo0: flags=3D8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384

        inet netmask 0xff000000=20

bridge0: flags=3D8043<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

        ether ac:de:48:ce:fe:5c

        priority 32768 hellotime 2 fwddelay 15 maxage 20

        member: em1 flags=3D3<LEARNING,DISCOVER>

        member: em0 flags=3D3<LEARNING,DISCOVER>



-q flush

-q queue flush

-q pipe flush

add 1 allow all from any to any via lo0

add 2 deny all from any to

add 3 deny all from to any

add 4 skipto 65534 all from any to any via bge0

add 65534 allow all from any to any

add 100 pipe 100 config bw 100Kbit/s

add 10 pipe 100 all from any to recv em0


# ipfw show 10

00010      11430        925353 pipe 100 all from any to
recv em0


# ipfw pipe show 100

00100: 100.000 Kbit/s    0 ms   50 sl. 1 queues (1 buckets) droptail

    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000

BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes
Pkt/Byte Drp

  0 icmp     11434   925679  0
0   0


            I have tried many different configurations including
changing net.inet.ip.fw.one_pass to 0, changing the ipfw rule to recv
and xmit on BOTH devices of the bridge, changing the ipfw rule from all
to tcp and ip, and changing the rule from "any to" to
" to any" (recv and xmit on both interfaces). I've also
tried the kernel without IPDIVERT and with if_bridge. As I stated
before, the odd thing is that when I plug directly into it with an IP of (can't use the other one here) and modify the rules to
reflect the new IP, the limiting works just fine. I have a feeling this
is where the problem is, but I can't quite think of any reason why this
wouldn't work. Previously, I had a Linux machine running TC installed in
place of this machine but I personally prefer FreeBSD and feel ipfw is
easier to configure than tc. The Linux machine worked just fine.


            Could anyone possibly help with this little problem? I'm
stuck. Also, if I forgot to include any information, I apologize. I'm a
bit spacey when I write emails. Just let me know what I missed and I can
explain further. Thanks.



Want to link to this message? Use this URL: <>