Page MenuHomeFreeBSD

if_bridge: exempt 224.0.0.0/24 from IGMP snooping
Needs ReviewPublic

Authored by namkhanh052005_gmail.com on Sun, Aug 9, 4:41 PM.
Tags
None
Referenced Files
F167145967: D58747.id183733.diff
Wed, Aug 19, 11:44 AM
F167125584: D58747.id183733.diff
Wed, Aug 19, 7:46 AM
Unknown Object (File)
Wed, Aug 19, 4:43 AM
Unknown Object (File)
Wed, Aug 19, 3:04 AM
Unknown Object (File)
Tue, Aug 18, 8:25 PM
Unknown Object (File)
Tue, Aug 18, 4:17 PM
Unknown Object (File)
Mon, Aug 17, 3:43 PM
Unknown Object (File)
Mon, Aug 17, 12:19 AM

Details

Reviewers
ivy
Summary

Neither the learn path nor the forward path excluded the link-local
224.0.0.0/24 block, which RFC 4541 §2.1.1 requires always be flooded and
never snooped. Under FreeBSD's own default (net.inet.igmp.sendlocal=1)
hosts do emit IGMP reports for groups in this range -- mDNS's
224.0.0.251, for instance -- so the bridge would learn state from one
reporting host and prune the group to that port alone, silently dropping it
for every other listener that had suppressed its own report under normal
IGMPv2 report suppression.

Fixed with two independent guards, one learn-side and one forward-side, so
MDB state carried over from a pre-fix kernel cannot prune control traffic
after an upgrade either.

Found by an edge-case suite in this series' companion repo, written after
the core ATF coverage was otherwise complete -- not by inspection or by
an ATF regression.

Depends on D58746

Test Plan

mdb_link_local_exempt ATF test: joining 224.0.0.251 creates no MDB
state, and an uninterested port continues to receive the traffic. A
29-check edge-case suite (two bugs found and fixed in the test script
itself) passes 29/29 after this fix. Full ATF regression 23/25 on
stable/14, +1 over D7. Re-confirmed against current main: all of this
series' own tests pass individually within a 36-test run. The 11
unrelated failures in that run are diagnosed as pre-existing userland
staleness on the test VM against upstream's own new VLAN-filtering
feature, not a regression from this series.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Warnings
SeverityLocationCodeMessage
Warningtests/sys/net/if_bridge_test.sh:CHMOD1Invalid Executable
Unit
No Test Coverage
Build Status
Buildable 75485
Build 72368: arc lint + arc unit