I was asked to give some abstract, non-technical explanation for this drastic change to the previous patchsets':
There are conceptual issues with the always-unicast approach for some, maybe rare scenarios.
(One could argue on the technical level though whether we'd care about these issues - the bridge for instance doesn't and has a manual switch as a workaround to change to always-flood for specific bridge ports; and I generally wouldn't care for a Freifunk mesh network either but think I found a "better approach" for less overhead there)
Cheers, Linus
On Sun, Jun 21, 2015 at 03:36:16PM +0200, Linus Lüssing wrote:
The last round of multicast patches send to the batman-adv mailinglist to add support for the multicast optimizations in bridged scenarios, too, unfortunately had one major conceptual flaw: It could lead to packet loss. It's not sufficient to have the unicasting of reports implemented on bridge-nodes only. Nodes without bridges need to either unicast them, too or as done with this patch flood them uncoditionally.
The issue is described in detail here:
https://www.open-mesh.org/projects/batman-adv/wiki/Multicast-optimizations-l...
This patch substitutes and greatly simplifies the following patchset: "batman-adv: Unicasting multicast reports to querier-node only"
The reason for doing this is, that I think the disadvantages of this simpler approach noted in the wikipage above (e.g. report overhead in large mesh networks) can be better compensated by segmenting the IGMP/MLD domain via ebtables (drop all queries and reports coming out of bat0 or before entering bat0) and the "multicast_router" bridge port flag on bat0 (flood all multicast to this bat0 port, let batman-adv deal with the optimizations from here on). Segmenting the IGMP/MLD domain also has the nice advantage of being able to run a querier on every mesh node which therefore is a way more decentral approach.
Cheers, Linus
Changelog
v1:
- Removed query snooping and state
- Squashed all three patches into one
- Renamed "batadv_mcast_tvlv_ogm_handler_v1()" to *_v2()
- Added explicit icmpv6.h include
- Rebased on top of master
Old changelog of "batman-adv: Unicasting multicast reports to querier-node only" v6:
- compat: copied copyright headers from original upstream c files
- compat: unified ordering in compat c files: -> copyright header, then includes, then kernel specific functions
v5:
- Removed RFC tag: Needed exports got merged to net-next and are going to be available with Linux 4.2
- Redid compat solution - now fully backwards compatible down to 2.6.33
v4:
- excluded bridge part from this patchset, they should hopefully be added to net-next soon
- Added a compat solution (PATCH 3/3)
- Removed Kconfig-depends as by David's suggestion the needed parsing functions for MLD are going to be forced built-ins even if IPv6 is going to be built as a module
- Removed unused variable 'int ret' in batadv_mcast_is_report_ipv6()
- Adjusted to new folder structure
v3:
- Adding Kconfig-depends and #if's (so basically adding similar dependancy constraints as the bridge code has, except that there are no depends if batman-adv gets compiled without multicast optimizations) -> the case of IPv6=M and batman-adv=y is still impossible if multicast optimizations are enabled; but I don't see the practical demand for that either - people who use IPv6 as a module will probably also want to use batman-adv as a module
v2:
- various bugfixes (now runtime tested, too - should(tm) work)
- added netdev+bridge mailinglists