Static Multicast Routing Daemon
SMCRoute is a daemon and command line tool to manipulate the multicast routing table in the UNIX kernel. Both FreeBSD and Linux kernels are supported, but it may work on other systems as well.
SMCRoute can be used as an alternative to dynamic multicast routing daemons like mrouted or pimd when (only) static multicast routes should be maintained or no proper signalling exists.
The full documentation of SMCRoute is available in the manual pages, see smcrouted(8), smcroutectl(8), and smcroute.conf(5).
Problems? See the Multicast HowTo for help!
Features
- Full IPv4 and IPv6 support
- Configuration file support, /etc/smcroute.conf
- Configuration include support,
/etc/smcroute.d/*.conf - Support for restarting and reloading the
.confonSIGHUP - Support for seamless reload and update on
SIGHUP, i.e., established multicast flows are not disturbed by reloading the configuration or adding/removing outbound interfaces to existing routes - On Linux, late-arriving interfaces (WireGuard, 6LoWPAN, late-binding
bridges, …) auto-activate via netlink without needing
SIGHUP - Routes that name an interface that does not yet exist are queued on
a pending list, viewable with
smcroutectl show pending - VIFs and MIFs are allocated on demand for interfaces referenced by
smcroute.conforsmcroutectl, so hosts with many unrelated interfaces no longer exhaust the kernel’s 32-slot table - Source-less on-demand routing, a.k.a. (*,G) based static routing
- Support for ranges, (S/LEN,G) and/or (S,G/LEN), or (S/LEN,G/LEN), be careful though since this expands to multiple kernel routes
- Source specific group join support
- Optional built-in mrdisc support, RFC4286 (IPv4 only)
- Support for multiple routing tables on Linux
- Client with built-in support to show routes and joined groups, with
optional JSON output (
smcroutectl -j show) for monitoring agents - Interface wildcard matching,
eth+matcheseth0, eth15
Why a Daemon?
One common question is why SMCRoute must be a daemon, why not just a
simple tool, like ip route for unicast routes? The answer is that to
be able to add multicast routes a program must connect to the multicast
routing socket in the kernel, when that socket is closed, which is done
automatically when a UNIX program ends, the kernel cleans up all routes.
Origin & References
SMCRoute was originally written by Carsten Schill. Later on Julien Blache, Todd Hayton and Micha Lenk picked up development for Debian.
Since 2011 Joachim Wiberg heads development at GitHub. Notable
additions over the years include a configuration file, seamless reload
on SIGHUP, source-less on-demand (*,G) routing, TTL scoping, lazy
VIF/MIF allocation, and Linux netlink-driven activation of routes
whose interface arrives after the daemon starts.
Issue tracker and GIT repository available at GitHub.
- Repository
- smcroute-2.6.0.tar.gz, MD5, SHA256
- ChangeLog
- Issue Tracker
- Debian packages
- Ubuntu packages
See also the OpenHub page, the Freshcode page, or the now dormant Free(code) page.