| SMCROUTE.CONF(5) | File Formats Manual | SMCROUTE.CONF(5) |
NAME
smcroute.conf —
smcrouted configuration file format
DESCRIPTION
The filesmcroute.conf is, strictly speaking,
not critical to the operation of smcrouted.
With no smcroute.conf present, the daemon
starts up and waits for commands from
smcroutectl(8),
allocating a VIF for each interface as it is first referenced. Any non-trivial
setup, however, requires an smcroute.conf.
On most systems the configuration file(s) are available in:
- /etc/smcroute.conf
- The traditional location, with all routes, group joins, and interfaces.
- /etc/smcroute.d/*.conf
- Recently an
includedirective was added tosmcroute.conf, which allows for including other files. By convention /etc/smcroute.d/ has been selected as the default in the bundled examplesmcroute.conf. See more about theincludedirective below.
smcrouted logs the success of
parsing each line and setting up a route. There is also a basic syntax
validator built-in, see
smcrouted(8) for
more information.
Static routes and group memberships are set up with
mroute and
mgroup. Optionally, routes can also follow
the group memberships hosts announce: the
upstream and
downstream flags on
phyint enable IGMP/MLD proxying, RFC 4605,
where smcrouted is the querier towards the
hosts and forwards what they join. The querier timers are global settings.
Static routes and proxying can be combined.
SYNTAX
This section details the syntax of each of the available configuration file directives. Comments start with “#” and run to the end of line. A line ending in a backslash continues on the next line. See the EXAMPLE below.global-query-intervalSEC- Seconds between the general queries sent as querier on a
downstreaminterface, 1 to 1024, default 125. Values below 10 are not recommended. Can be overridden per interface with thephyintoptionquery-interval. global-response-intervalSEC- Maximum response time hosts get for a general query, 1 to 1024, default 10. A longer time spreads the reports out. It is capped at the query interval of the interface.
global-last-member-intervalSEC- Seconds between the group specific queries sent after a leave, 1 to 1024,
default 1. The number of such queries is the
robustness. robustnessNUM- Tolerance to lost packets, 2 to 10, default 2. Also the number of queries in the startup burst.
router-timeoutSEC- Time to wait for a silent querier before taking over, the other querier
present interval, 1 to 1024. When unset it is calculated per interface,
RFC 3376 §8.5, from the interface's query interval:
Set it only to interoperate with devices that do not follow the RFC.
robustness * query-interval + response-interval / 2 router-alert on|off- IP option Router Alert on the queries sent, RFC 3376 §4.1.3 and RFC 3810 §5, on by default. Turn it off for hosts whose IP stack hard-codes the IP header length and drops packets with options, seen in industrial devices.
topology-query on|off- General query when a port of a bridge starts forwarding, on by default.
Link up, STP settling and a port added to the bridge all count. Hosts
behind the port are back in the bridge's multicast database within the
response interval instead of at the next periodic query, RFC 4541
§2.1.1. Sent only while
smcroutedis the querier, at most once a second per interface, followed by the startup burst. Applies to adownstreamthat is the bridge itself or a VLAN interface on top of it. Linux only. phyintIFNAME [] [enable|disable] [mrdisc] [upstream|downstream] [proxy-querier] [ttl-thresholdTTL]query-intervalSECsmcroutedmaps interfaces to virtual interfaces (VIFs), which the multicast routing stack actually employs. VIFs are allocated on demand, the first time an interface is referenced fromsmcroute.confor smcroutectl(8), so this directive is only needed when you want to set per-interface options such asttl-thresholdormrdisc, or to keep the interface allocated even though nomrouteormgroupline references it. VIFs are a limited resource — most operating systems support 32 in total — so on hosts with many interfaces only list the ones you actually need.mrdiscis an IPv4 specific feature flag to enable Multicast Router Discovery protocol, RFC4286, announcement. This standard is supported by some switch (and router) manufacturers and may be used instead of havingmgroupstatements for all possible multicast groups you may want to forward.upstreamanddownstreamset up IGMP/MLD proxying, RFC 4605.smcroutedacts as querier towards the hosts on eachdownstreaminterface, and as a host towards the router on theupstreaminterface, subscribing to what the downstream hosts have joined. Multicast from the upstream is forwarded to every downstream with a member for the group, multicast from a downstream to the upstream and to the other downstreams with members. Memberships are tracked per group and, for IGMPv3 and MLDv2 INCLUDE mode reports, per source, so source-specific multicast (SSM) works through the proxy. Source lists of EXCLUDE mode reports are ignored, as in RFC 5790. One upstream interface is supported. Staticmrouteandmgroupdirectives can be combined freely with proxying, and smcroutectl(8)show memberslists the current state. Adownstreaminterface without an address of the family sends its queries from the unspecified address, 0.0.0.0 or ::, RFC 4541 §2.1.1.1. Such proxy queries never win a querier election and stop as soon as a querier with an address is heard. Snooping switches accept them, which is what they are for. Hosts ignore MLD queries from ::.proxy-querierforces this even when the interface has an address, for a bridge that should only stand in until a real querier appears. Linux only.ttl-thresholdis a very useful setting to help implement "TTL scoping". I.e., the minimum TTL level a multicast stream must exceed for the kernel to consider it to be routed. The default value (1) means a TTL of 2 or higher is needed for a frame to be forwarded to the routing stack, otherwise it is considered link-local. See smcrouted(8) for more information on multicast scoping.query-intervaloverridesglobal-query-intervalon this interface, 1 to 1024 seconds. Note: allphyintdirectives must be read bysmcroutedbefore anymgroupormroutethat refer to them! Hence, either place allphyintdirectives in the mainsmcroute.confor, if /etc/smcroute.d/*.conf is used, first in a file named, 00-phyint.conf, or similar.mgroup fromIIF []sourceSOURCE[/LEN]groupGROUP[/LEN]- Join a multicast group, with optional prefix length, on a given inbound
interface (IIF). The source address is optional, but if given a source
specific (SSM) join is performed. Every
/LENis translated to as many sources and groups as specified. To attempt to overcome (configured) kernel limitations,smcroutedprobes the amount of joins available per socket. When the socket has been exhausted, another one is opened. At most 2048 sockets are opened. The purpose of joining groups is to use layer-2 signaling to inform switches, and other routers, to open up multicast traffic to your interfaces. Leaving a group is not supported from the configuration file, instead remove themgroup,or trim its arguments,SIGHUPorsmcroutectl reloadyour daemon. Note: use of themgroupcommand should be avoided if possible. Instead configure "router ports" or similar on the switches (bridges) on your LAN. This to have them direct all the multicast to your router, or direct select groups if they have such capabilities. Usually MAC multicast filters exist. mroute fromIIF []sourceSOURCE[/LEN]groupGROUP[/LEN]toOIF [OIF ...]- Add a multicast route for packets received on network interface
IIF, originating from IP addressSOURCE, and sent to the multicast group addressGROUP, to the outbound network interface(s)OIF[]. The interfaces provided asOIF ...IIFandOIFcan be any network interface name available in the system, as long as it has theMULTICASTflag set. Furthermore, the kernel usually only forwards traffic if the interface(s) have an IP address. These are limitations posed by the kernel, notsmcrouted. To add a (*,G) route, either leave SOURCE out completely or set it to 0.0.0.0, and if you want to specify a range, set GROUP/LEN, e.g. 225.0.0.0/24. IfIIFdoes not yet exist when the configuration is read, the directive is queued. On Linux it is activated automatically as soon as the interface arrives; on other systems on the next reload. Use ‘smcroutectl show pending’ to inspect what is waiting. The same applies tomgroupdirectives. includePATH- Include another
smcroute.conffile, or set of files. Matching is performed using glob(3), and matches are sorted alphabetically. By convention, the examplesmcroute.confbundled withsmcroutedincludes /etc/smcroute.d/*.conf.
EXAMPLE
smcrouted supports reading and setting up
multicast routes from a config file. The default location is
/etc/smcroute.conf, but this can be
overridden using the -f
FILE command line option.
The IIF and
OIF arguments below are interface names, or
interface wildcards of the form eth+, which
matches eth0,
eth10, etc. Wildcards are available for
inbound interfaces.
# # smcroute.conf example # # Syntax: # global-query-interval <1-1024> # global-response-interval <1-1024> # global-last-member-interval <1-1024> # robustness <2-10> # router-timeout <1-1024> # topology-query <on|off> # router-alert <on|off> # phyint IFNAME <enable|disable> [mrdisc] [upstream|downstream] [proxy-querier] [ttl-threshold <1-255>] [query-interval <1-1024>] # mgroup from IIF [source ADDR[/LEN]] group GROUP[/LEN] # mroute from IIF [source ADDR[/LEN]] group GROUP[/LEN] to OIF [OIF ...] # include /path/to/*.conf # Assuming smcrouted was started with the `-N` flag. Enable interfaces # required for inbound and outbound traffic. TTL scoping is enabled on # all interfaces, e.g., to use eth0 as n outbound interface (OIF), all # multicast frames must have a TTL of 12 or greater when ingressing. phyint eth0 enable ttl-threshold 11 phyint eth1 enable ttl-threshold 3 phyint eth2 enable ttl-threshold 5 phyint virbr0 enable ttl-threshold 5 # Instruct the kernel to join the multicast group 225.1.2.3 on interface # eth0. Then add an mroute of the same multicast stream, from the host # 192.168.1.42 on interface eth0 and forward to eth1 and eth2. mgroup from eth0 group 225.1.2.3 mroute from eth0 source 192.168.1.42 group 225.1.2.3 to eth1 eth2 # Similarly, but using source-specific group join mgroup from virbr0 source 192.168.123.110 group 225.1.2.4 mroute from virbr0 source 192.168.123.110 group 225.1.2.4 to eth0 # Allow multicast for group 225.3.2.1, from ANY source, ingressing on # interface eth0 to be forwarded to eth1 and eth2. When the kernel # receives a frame from unknown multicast sender, it asks smcrouted who # use this "template" to match against, if the ingressing interface and # group matches, smcrouted installs an (S,G) route in the kernel MFC. mgroup from eth0 group 225.3.2.1 mroute from eth0 group 225.3.2.1 to eth1 eth2 # The previous is an example of the (*,G) support. It is also possible # to specify a range of such rules. mgroup from eth0 group 225.0.0.0/24 mroute from eth0 group 225.0.0.0/24 to eth1 eth2 # IGMP/MLD proxy, RFC 4605. Hosts on lan0 join groups, which are # then subscribed to on wan0 and forwarded to lan0. phyint wan0 enable upstream phyint lan0 enable downstream # Include any snippet in /etc/smcroute.d/, but please remember that # all phyint statements must be read first. include /etc/smcroute.d/*.conf
CAVEATS
The source address is optional for both IPv4 and IPv6 multicast routes, this is called (*,G) routing. When omitted,smcrouted dynamically installs (S,G)
routes, matching the group and inbound interface, to the kernel when it learns
of new inbound multicast. This feature was inherited from
mrouted(8), and may
not work as intended in all use-cases. Also, depending on kernel and CPU load,
account for the setup time to detect and install the route, expect at least
one initial frame to be lost when using (*,G) rules.
FILES
/etc/smcroute.conf, /etc/smcroute.d/*.confSEE ALSO
smcrouted(8), smcroute.conf(5)AUTHORS
SMCRoute was originally created by Carsten Schill <carsten@cschill.de>. Initial IPv6 support by Todd Hayton <todd.hayton@gmail.com>. Initial FreeBSD support by Micha Lenk <micha@debian.org>. SMCRoute is currently maintained by Joachim Wiberg <troglobit@gmail.com>, and Micha Lenk <micha@debian.org> at GitHub.| June 9, 2026 | Debian |
Maintained in troglobit/smcroute as man/smcroute.conf.5. Send corrections there, or read it on the mirror.