There is some code in the ip_mroute and ip6_mroute kernel modules to support running PIM-based multicast routing daemons. Currently, the implementation is unaware of FIBs and maintains a global routing table. I've posted a set of patches to phabricator which introduce per-FIB multicast routing tables for both IPv4 and IPv6; the first patch in the series is here, and the rest are linked from the "stack" tab: https://reviews.freebsd.org/D55236
The patches are somewhat large but are mostly just moving various objects into a per-FIB structure rather than having a bunch of global (per-VNET) state scattered around. The end result is that one can run an independent multicast routing daemon in each FIB on a system; the routing tables and multicast interface indices managed by each daemon are completely separate. I'd appreciate any review or testing. If anyone is interested in this project, please let me know. Thanks to Stormshield and Klara for sponsoring this work.
