On 4/4/25 13:47, Lexi Winter wrote:
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
Looks awesome. Thanks for working on this. Any idea what the overhead is
wrt packet forwarding rate? Any performance numbers comparing your
bridge access port feature vs vlan + bridge?
-Matthew