hello,

over the last few days i have been doing a bit of work on VLAN filtering
for bridge(4), which i thought i'd mention here in case anyone is
interested.  the purpose of this is to extend the existing bridge VLAN
support to make it more generally useful.

the full changeset / diff is available at [0], including documentation
and basic ATF tests.

a summary of the new features:

- a bridge member's PVID may be configured using ifpvid:

        ifconfig bridge0 ifpvid ix0 20

  setting a PVID enables VLAN filtering on the member interface and
  restricts it to only send/receives frames on that specific VLAN.
  untagged incoming frames will be assigned to the correct VLAN.

- a bridge member's port type may be configured using iftype:

        ifconfig bridge0 iftype ix0 <access|trunk|hybrid>

  access ports may only send/receive untagged frames; trunk ports may
  only send/receive frames with a non-zero .1q tag; hybrid ports may
  send/receive either type of frame.

- for trunk and hybrid ports, the list of permitted VLANs may be set
  using +ifvlans/-ifvlans:

        ifconfig bridge0 +ifvlans ix0 100-599
        ifconfig bridge0 -ifvlans ix0 105,300

  the port will only be allowed to communicate on the VLANs in its
  access list (plus its PVID).

- the VLAN configuration for a port is displayed in ifconfig:

        member: test2a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 5 priority 128 path cost 2000 pvid 1 type 
trunk vlans 20

- when bridging between different port types (e.g. an access port and a
  trunk port), the bridge will add or remove .1q tags as required.

- an SVI for a particular vlan may be created on the bridge using
  vlan(4):

        ifconfig vlan20 create vlan 20 vlandev bridge0

  the SVI interface will send/receive traffic for that particular VLAN.

to make review a bit easier, my plan is to submit this as smaller
changesets of self-contained features.  to start with that's two minor
bug fixes:

https://github.com/freebsd/freebsd-src/pull/1639
https://github.com/freebsd/freebsd-src/pull/1637

and the first actual feature which is the ifconfig 'ifpvid' option:

https://github.com/freebsd/freebsd-src/pull/1634

if anyone has any comments/questions or would like to review this (or
even commit it!) do feel free - obviously, this requires a fair amount
of testing and i certainly wouldn't recommend using it in production
yet.  this is my first time writing any non-trivial kernel code, so it's
quite possible everything is completely wrong.

[0] 
https://github.com/freebsd/freebsd-src/compare/main...llfw:freebsd-src:lf/dev/bridge-1q

Reply via email to