Provided by: smcroute_2.4.2-4_amd64 bug

NAME

       smcroute — SMCRoute, a static multicast router

SYNOPSIS

       smcrouted  [-nNhsv]  [-c  SEC]  [-d  SEC] [-e CMD] [-f FILE] [-I NAME] [-l LVL] [-p USER:GROUP] [-P FILE]
                 [-t ID]
       smcroutectl [-dtv] [-I NAME] [COMMAND]

       smcroutectl ⟨help | flush | kill | restart | version⟩
       smcroutectl ⟨show⟩ [groups | routes]
       smcroutectl ⟨add  |   rem⟩ ⟨IFNAME⟩ [SOURCE] GROUP[/LEN] IFNAME [IFNAME ...]
       smcroutectl ⟨join | leave⟩ ⟨IFNAME⟩ [SOURCE] GROUP

DESCRIPTION

       smcroute is both a daemon and command line tool to manipulate the  multicast  routing  table  of  a  UNIX
       kernel.   It  supports  both  IPv4 and IPv6 multicast routing.  smcroute can be used as an alternative to
       dynamic multicast routers like mrouted or pimd in situations where  static  multicast  routes  should  be
       maintained and/or no proper IGMP or MLD signaling exists.

       Multicast  routes  exist  in the UNIX kernel as long as a multicast routing daemon is running.  On Linux,
       multiple multicast routers can be used simultaneously with different multicast routing  tables.   To  run
       smcrouted  and,  mrouted  at  the same time, set the former to use a routing table other than the default
       (0).

       smcrouted modifies the kernel routing table and needs either full superuser rights, or  CAP_NET_ADMIN  on
       Linux.  This also applies to smcroutectl.

   WARNING
       Be  careful when creating multicast routes.  You can easily flood your networks by inadvertently creating
       routing loops.  Either direct loops listing an inbound interface also as an outbound, or  indirect  loops
       by going through other routers.

OPTIONS

       The following smcrouted commands are available:

       -n      Run daemon in foreground, do not detach from controlling terminal

       -N      By  default  smcrouted  enables  multicast  routing  on  all  available,  and  multicast capable,
               interfaces in the system.  These interfaces are enumerated as VIFs, virtual interfaces, of  which
               most  UNIX  systems  have  a  very  limited  amount,  usually 32.  This daemon option inverts the
               behavior so no interfaces are enabled by default.  Useful on systems with many interfaces,  where
               multicast routing only makes use of a few.

               The config file setting phyint IFNAME enable is required to enable the required interfaces.

       -f FILE
               Alternate configuration file, default /etc/smcroute.conf

       -c SEC  Flush unused dynamic (*,G) multicast routes every SEC seconds.

               This  option  is  intended  for  systems  with topology changes, i.e., when inbound multicast may
               change both interface and source IP address.  E.g. in a setup with at least two VRRP routers.  If
               there is no way of detecting such a topology change this option makes sure to periodically  flush
               all  dynamically  learned  multicast  routes  so that traffic may resume.  Flushing of a specific
               route only occurs if it was unused during the last flush interval,  i.e.  there  was  no  traffic
               matching  it.   This  avoids  toggling between different inbound interfaces if traffic arrives on
               several interfaces simultaneously.  In  this  case,  the  first  selected  inbound  interface  is
               retained until traffic on it ceases.

               Default  is  60  sec,  set to 0 to disable.  See also the smcroutectl flush command, which can be
               called manually on topology changes.

       -d SEC  Daemon startup delay.  Delays the probe of interfaces and  parsing  of  the  configuration  file.
               Note, the PID file is also not created, since the daemon is not ready yet.

               This  command  line  option,  although useful in some use-cases, is fragile.  It is almost always
               better to rely on an  init  or  process  supervisor  that  handles  dependencies  properly,  like
               finit(8),  which  can  wait  for  interfaces to come up and files to be created before starting a
               service.

       -e CMD  Specify external script or command to be called when smcrouted  has  loaded/reloaded  all  static
               multicast  routes  from  the  configuration  file,  or  when  a  source-less  (ANY) rule has been
               installed.

       -I NAME
               Set daemon identity.  Used to create unique PID, IPC socket, and  configuration  file  names,  as
               well as set the syslog identity.  E.g., -I foo would make smcrouted look for /etc/foo.conf, write
               its PID to /var/run/foo.pid and create an IPC socket for smcroutectl in /var/run/foo.sock.

               For  smcroutectl  the same option can be used to select the proper smcrouted instance to send IPC
               to.

               This option is required for both daemon and client when  running  multiple  smcrouted  instances,
               using multiple routing tables, on Linux.

       -l LEVEL
               Set log level: none, err, notice, info, debug.  Default is notice.

       -p USER [:GROUP]
               Drop  root  privileges to USER:GROUP after start and retain CAP_NET_ADMIN capabilities only.  The
               :GROUP is optional.  This option is only available when smcrouted is built with libcap support.

       -P FILE
               Set PID file name, and optionally full path, in case you need to override the  default  identity,
               or  the  identity set with -I NAME.  Regardless, setting this option overrides all others, but it
               is recommended to use the ident option instead.

       -s      Let daemon log to syslog, default unless running in foreground.

       -t ID   Set multicast routing table ID.  Remember to also create routing rules directing packets  to  the
               table.  This example uses routing table ID 123:

               ip mrule add iif eth0 lookup 123
               ip mrule add oif eth0 lookup 123

               Note: Only available on Linux.

       -v      Show program version.

       The  -e CMD option is useful if you want to trigger other processes to start when smcrouted has completed
       installing dynamic multicast routes from (*,G) rules in /etc/smcroute.conf, or when a  source-less  (ANY)
       route,  a.k.a  (*,G)  multicast  rule, from /etc/smcroute.conf.  is matched and installed.  For instance,
       calling conntrack on Linux to flush firewall connection tracking when NAT:ing multicast.

       The script CMD is called with an argument reload or install to let the script know if  it  is  called  on
       SIGHUP/startup,  or  when  a (*,G) rule is matched and installed.  In the latter case smcrouted also sets
       two  environment  variables:  source,  and  group.   Beware  that   these   environment   variables   are
       unconditionally  overwritten by smcrouted and can thus not be used to pass information to the script from
       outside of smcrouted.

COMMANDS

       The IFNAME argument in the below smcroutectl commands is the interface name, or an interface wildcard  of
       the  form  eth+,  which  matches  eth0, eth10, etc.  Wildcards are available for inbound interfaces.  The
       following commands are available:

       add IFNAME [SOURCE] GROUP[/LEN] OUTIFNAME [OUTIFNAME ...]
               Add a multicast route to the kernel routing cache so  that  multicast  packets  received  on  the
               network  interface  IFNAME originating from the IP address SOURCE and sent to the multicast group
               address GROUP will be forwarded to the outbound network  interfaces  OUTIFNAME  [OUTIFNAME  ...].
               The  interfaces  provided  as  INIFNAME  and  OUTIFNAME can be any network interface as listed by
               'ifconfig' or 'ip link list' (incl. tunnel interfaces), but not the loopback interface.

               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.

       remove IFNAME [SOURCE] GROUP
               Remove a kernel multicast route.

       flush   Flush dynamic (*,G) multicast routes now.  Similar to how -c SEC works in the daemon, this client
               command initiates an immediate flush of all dynamically set (*,G) routes.  Useful when a topology
               change has been detected and need to be propagated to smcrouted.

       join IFNAME [SOURCE] GROUP
               Join a multicast group on a given interface.  The source address is  optional,  but  if  given  a
               source specific (SSM) join is performed.

       leave IFNAME [SOURCE] GROUP
               Leave  a  multicast  group  on  a  given  interface.  As with the join command, above, the source
               address is optional.

       help [cmd]
               Print a usage information message.

       kill    Stop (kill) running daemon.

       restart
               Tell daemon to restart and reload its configuration file.  Same as SIGHUP.

       show [groups|routes]
               Show joined multicast groups or multicast routes, defaults to show routes.  Can be combined  with
               the -d option to get details for each multicast route.

       version
               Show program version.

       A  multicast route is defined by an input interface IFNAME, the sender's unicast IP address SOURCE, which
       is optional, the multicast group GROUP and a list of, at least one, output interface IFNAME [IFNAME ...].

       The sender's address and the multicast group must both be either IPv4 or IPv6 addresses.

       The output interfaces are not needed when removing routes using the  remove  command.   The  first  three
       parameters are sufficient to identify the source of the multicast route.

       The  intended  purpose  of smcroute is to aid in situations where dynamic multicast routing does not work
       properly.  However, a dynamic multicast routing protocol is in nearly all cases the  preferred  solution.
       The  reason  for  this is their ability to translate Layer-3 signaling to Layer-2 and vice versa (IGMP or
       MLD).

       smcrouted is capable of simple group join and leave by sending commands to the kernel.  The  kernel  then
       handles  sending  Layer-2  IGMP/MLD join and leave frames as needed.  This can be used for testing but is
       also useful sometimes to open up multicast from the sender if located on a  LAN  with  switches  equipped
       with  IGMP/MLD  Snooping.   Such  devices will prevent forwarding of multicast unless an IGMP/MLD capable
       router or multicast client is located on the same physical port as you run smcrouted on.   However,  this
       feature  of smcrouted is only intended as a workaround, and only 20 groups can be joined this way (kernel
       limit).  For bigger installations it is strongly recommended to instead  address  the  root  cause,  e.g.
       enable  multicast  router  ports on intermediate switches, or try the embedded multicast router discovery
       feature of smcrouted.

       To emulate a multicast client using smcroute you use the join and leave commands to issue join and  leave
       commands  for  a given multicast group on a given interface IFNAME.  The GROUP may be given in an IPv4 or
       IPv6 address format.

       The command is passed to the daemon that passes it to the kernel. The  kernel  then  tries  to  join  the
       multicast  group  GROUP on interface IFNAME by starting IGMP, or MLD for IPv6 group address, signaling on
       the given interface.  This signaling may be  received  by  routers/switches  connected  on  that  network
       supporting  IGMP/MLD  multicast  signaling  and, in turn, start forwarding the requested multicast stream
       eventually reach your desired interface.

       Note: when running multiple smcrouted instances, one per routing table on Linux, it is  required  to  use
       the  -I  NAME  option  to  both  daemon  and  client.   This  because the name of the IPC socket used for
       communicating is composed from the identity.

CONFIGURATION FILE

       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 IFNAME argument below is the interface name, or an interface wildcard of the form eth+, which matches
       eth0, eth10, etc.  Wildcards are available for inbound interfaces.

             #
             # smcroute.conf example
             #
             # The configuration file supports joining multicast groups, to use
             # Layer-2 signaling so that switches and routers open up multicast
             # traffic to your interfaces.  Leave is not supported, remove the
             # mgroup and SIGHUP your daemon, or send a specific leave command.
             #
             # NOTE: Use of the mgroup command should be avoided if possible.
             #       Instead configure "router ports" or similar on the switches
             #       or bridges on your LAN.  This to have them direct all the
             #       multicast to your router, or direct select groups they have
             #       such capabilities.  Usually MAC multicast filters exist.
             #
             #       The UNIX kernel usually limits the number of multicast groups
             #       a socket/client can join.  In Linux, 20 mgroup lines can be
             #       configured by default, but this can be changed with sysctl:
             #
             #           sysctl -w net.ipv4.igmp_max_memberships=30
             #
             # Similarly supported is setting mroutes.  Removing mroutes is not
             # supported, remove/comment out the mroute from the .conf file, or
             # send a remove command with smcroutectl.
             #
             # Syntax:
             #   phyint IFNAME <enable|disable> [mrdisc] [ttl-threshold <1-255>]
             #   mgroup from IFNAME [source ADDRESS] group MCGROUP
             #   mroute from IFNAME [source ADDRESS] group MCGROUP[/LEN] to IFNAME [IFNAME ...]

             # This example disables the creation of a multicast VIF for WiFi
             # interface wlan0.  The kernel (at least Linux) sets the ALLMULTI
             # flag for all interfaces that have a VIF enabled.  Hence, it can
             # cause quite a bit of unnecessary traffic to reach the CPU if too
             # many interfaces have a VIF (or MIF in IPv6 lingo).  Only enable
             # interfaces required for inbound and outbound traffic.
             # phyint wlan0 disable
             phyint eth0 enable ttl-threshold 11
             phyint eth1 enable ttl-threshold 3
             phyint eth2 enable ttl-threshold 5
             phyint virbr0 enable ttl-threshold 5

             # The following example instructs the kernel to join the multicast
             # group 225.1.2.3 on interface eth0.  Followed by setting up an
             # mroute of the same multicast stream, but from the explicit sender
             # 192.168.1.42 on the eth0 network 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

             # Similar example, 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

             # Here we allow routing of multicast to group 225.3.2.1 from ANY
             # source coming in from interface eth0 and forward to eth1 and eth2.
             # NOTE: Routing from ANY source is currently only available for IPv4
             #       multicast.
             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.  Such rules cause
             # SMCRoute to dynamically add multicast routes to the kernel when the
             # first frame of a stream reaches the router.  It is also possible to
             # specify a range of such rules, again, note that this currently only
             # works for IPv4.  Also, it is not possible to set a range of groups
             # to join atm.
             mroute from eth0 group 225.0.0.0/24 to eth1 eth2

       Fairly simple. As usual, to identify the origin of the inbound multicast we need the IFNAME, the sender's
       IP address and, of course, the multicast group address, MCGROUP.  The last argument is a list of outbound
       interfaces.

       The source address is optional for IPv4 multicast routes.  If omitted it defaults to 0.0.0.0 (INADDR_ANY)
       and  will cause smcrouted to dynamically add new routes, matching the group and inbound interface, to the
       kernel.  This is an experimental feature which may not work as intended, in particular not with 1:1 NAT.

       Following the UNIX tradition the file format supports comments starting at  the  beginning  of  the  line
       using a hash sign.  It is untested to have comments at the end of a line, but should work.

       When starting up in debug mode, smcrouted logs the success of parsing each line and setting up a route.

LIMITS

       The current version compiles and runs fine on Linux kernel version 2.4, 2.6 and 3.0. Known limits:

             Multicast routes
                   Depends on the kernel, more than 200, probably more than 1000
             Multicast group memberships
                   Max. 20, see caveat above

SIGNALS

       smcrouted responds to the following signals:

       HUP   Restart and reload the configuration file.  All existing multicast routes and groups are dropped.
       INT   Terminates execution gracefully.
       TERM  The same as INT.

       For  convenience  in  sending  signals,  smcrouted  writes  its  process ID to /var/run/smcroute.pid upon
       startup.

DEBUGGING

       The most common problem when attempting to route multicast is the TTL.  Always start  by  verifying  that
       the  TTL  of  your multicast stream is not set to 1, because the router decrements the TTL of an IP frame
       before routing it.  Test your setup using ping(8) or iperf(1).  Either of which is  capable  of  creating
       multicast  traffic  with  an  adjustable  TTL.   Iperf in particular is useful since it can act both as a
       multicast source (sender) and a multicast sink (receiver).  For more advanced IP  multicast  testing  the
       omping(8) tool can be used.

FILES

       /etc/smcroute.conf      Routes  to be set when starting, or restarting smcrouted on SIGHUP.  Like the PID
                               file, the name of the configuration file may be different  depending  on  command
                               line options given to the daemon.
       /var/run/smcroute.pid   Default  PID file (re)created by smcrouted when it has started up and is ready to
                               receive commands.  See also the -I NAME or -P FILE options which can  change  the
                               default name.
       /var/run/smcroute.sock  IPC  socket  created  by smcrouted for use by smcroutectl.  Same caveats apply to
                               this file as the previous two, command line options to the daemon can change  the
                               file names.
       /proc/net/ip_mr_cache   Holds active IPv4 multicast routes.
       /proc/net/ip_mr_vif     Holds the IPv4 virtual interfaces used by the active multicast routing daemon.
       /proc/net/ip6_mr_cache  Holds active IPv6 multicast routes.
       /proc/net/ip6_mr_vif    Holds the IPv6 virtual interfaces used by the active multicast routing daemon.
       /proc/net/igmp          Holds active IGMP joins.
       /proc/net/igmp6         Holds active MLD joins.

SEE ALSO

       mrouted(8), pimd(8), omping(8), ping(8), mcjoin(1), iperf(1)

AUTHORS

       SMCRoute   was   created   by   Carsten   Schill  <carsten@cschill.de>.   IPv6  support  by  Todd  Hayton
       <todd.hayton@gmail.com>.  FreeBSD support by Micha Lenk <micha@debian.org>.

       smcrouted is maintained by Joachim Nilsson <troglobit@gmail.com>,  Todd  Hayton  <todd.hayton@gmail.com>,
       Micha      Lenk      <micha@debian.org>      and      Julien      BLACHE      <jblache@debian.org>     at
       https://github.com/troglobit/smcroute

TIPS

       A lot of extra information is sent under the daemon facility and the debug priority to the syslog daemon.
       Use smcrouted -s -l debug to enable.

Debian                                             May 6, 2017                                       SMCROUTE(8)