ipfw on bridge connecting vlans

Victor Gamov vit at otcnet.ru
Sat Oct 27 15:16:22 UTC 2018


Hi All

I have some misunderstanding how ipfw work with VLAN and bridge

I have following config


         bridge2
       ------------
      /      |     \
     /       |      \
    /        |       \
vlan200  vlan300  vlan400
(igb0)    (igb0)   (igb1)


=====
net.link.bridge.ipfw: 1
net.link.bridge.allow_llz_overlap: 0
net.link.bridge.inherit_mac: 0
net.link.bridge.log_stp: 0
net.link.bridge.pfil_local_phys: 0
net.link.bridge.pfil_member: 0
net.link.bridge.ipfw_arp: 1
net.link.bridge.pfil_bridge: 0
net.link.bridge.pfil_onlyip: 0

net.link.ether.ipfw=1
=====


I need to allow some multicast from some vlans, block other multicast 
and forward allowed multicast into other vlans

For example.  Allow 239.0.0.10 received via vlan200 but block the same 
239.0.0.10 if it comes via other vlan.  Then bridge 239.0.0.10 into vlan400


The simplest ipfw rules for this example:

=====
table blockit create type iface
table blockit add vlan200
table blockit add vlan300
table blockit add vlan400

1000 allow ip from any to any via igb0
1002 allow ip from any to any via igb2

1100 deny ip from any to any mac-type 0x0806 via bridge2
1102 allow ip from any to any via bridge2

2000 allow ip from any to 239.0.0.10 in via vlan200

4000 allow ip from any to 239.0.0.10 out via vlan400

9000 deny ip from any to any via table(blockit)

65000 allow ip from any to any
=====


My expectations are follows:

1. ethernet packet tagged as VLAN-200 arrives igb0. This packet has igb0 
as 'recv'.  Packet checked by ipfw now so I need
1000 allow ip from any to any via igb0
1002 allow ip from any to any via igb2

2. ethernet packet untagged and checked by ipfw. This packet has vlan200 
as 'recv' Packet pass 2000.
If dst-239.0.0.10 comes from vlan300 it blocked by 9000

3. IP-packet comes through if_bridge and checked by ipfw. ARP packet 
blocked by 1100.  Other packets pass via bridge2 by 1102

4. IP multicast packet copied to all bridge members and checked by ipfw 
on all outgoing interfaces: packet pass 4000 on vlan400, but blocked by 
9000 on vlan300.  So only one bridge-member has this packet.

5. ethernet packet tagged as VLAN-400 and checked by ipfw. Packet pass 
by 4000

6. tagged packet out via igb2 and checked by ipfw. packet pass by 1002


Can somebody explain me how tagged multicast packet goes via bridge and 
passed into IPFW and correct my previous packet path?


Thanks!

--
CU
Victor Gamov


More information about the freebsd-net mailing list