mrouted
—
IP multicast routing daemon
mrouted |
[ -hnsv ]
[-d
SYS[,SYS,... ]
[-f
FILE ]
[-i
NAME ]
[-l
LEVEL ]
[-p
FILE ]
[-t
ID ]
[-u
FILE ]
[-w
SEC ] |
mrouted
is the original implementation of the
Distance-Vector Multicast Routing Protocol (DVMRP), RFC 1075. A dynamic
(automatic) multicast routing daemon, that also supports static routing. See
mrouted.conf(5)
for information on the
static-group
configuration directive.
mrouted
is
simple to use. DVMRP is derived from RIP, RFC
1058, which means
mrouted
works stand-alone
without any extra network setup required. You can get up and running in a
matter of minutes.
mrouted
maintains topological knowledge via
DVMRP, upon which it implements a multicast datagram forwarding algorithm
called Reverse Path Multicasting.
mrouted
forwards multicast datagrams along
the shortest (reverse) path tree rooted at the subnet on which the datagram
originates. The multicast delivery tree may be thought of as a broadcast
delivery tree that has been pruned back so that it does not extend beyond
those subnetworks that have members of the destination group. Hence, datagrams
are not forwarded along those branches which have no listeners of the
multicast group. The IP time-to-live of a multicast datagram can be used to
limit the range of multicast datagrams.
In order to support multicasting among subnets that are separated by (unicast)
routers that do not support IP multicasting, you can set up GRE tunnels.
However,
mrouted
includes (built-in)
support for IP-in-IP tunnels, which are virtual point-to-point links between
pairs of DVMRP capable routers located anywhere in an internet. IP multicast
packets are encapsulated for transmission through tunnels, so that they look
like normal unicast datagrams to intervening routers and subnets. The
encapsulation is added on entry to a tunnel, and stripped off on exit from a
tunnel.
The tunneling mechanism allows
mrouted
to
establish a virtual internet, for the purpose of multicasting only, which is
independent of the physical internet, and which may span multiple Autonomous
Systems. This capability is intended for experimental support of internet
multicasting only, pending widespread support for multicast routing by the
regular (unicast) routers.
mrouted
suffers
from the well-known scaling problems of any distance-vector routing protocol,
and does not support hierarchical multicast routing.
A more common practice today is to set up GRE tunnels between multicast capable
routers and limit
mrouted
to run on a
select number of interfaces listed in the configuration.
mrouted
handles multicast routing only; there
may or may not be unicast routing software running on the same machine as
mrouted
. With the use of tunnels, it is not
necessary for
mrouted
to have access to
more than one physical subnet in order to perform multicast forwarding.
This program follows the usual UNIX command line syntax, with long options
starting with two dashes (`--'). The options are as follows:
-d,
--debug
SYS[,SYS,..]
- This option enables subsystem debug messages and causes
mrouted
to run in the foreground of the
starting terminal, regardless of the -l
flag controls the (syslog) log level of each subsystem. Use '?' for a
complete list of supported subsystems.
Available subystems:
packet
- Display the type, source and destination of all packets sent or
received
pruning
- Display more information about prunes sent or received
routing
- Display more information about routing update packets sent or
received
route-detail
- Display routing updates in excruciating detail. This is generally way
too much information
neighbors
- Display information about neighbor discovery
cache
- Display insertions, deletions and refreshes of entries in the kernel
forwarding cache
timer
- Debug timeouts and periodic processes
interface
- Display information about interfaces and their configuration
membership
- Display information about group memberships on physical
interfaces
traceroute
- Display information about multicast traceroute requests passing
through this router
igmp
- Display IGMP operation including group membership and querier
election
icmp
- Monitor ICMP handling
all
- Enable all debug messages (except noisy timer)
-f,
--config
FILE
- Specify an alternative configuration file, default
/etc/mrouted.conf
-h,
--help
- Print a help message and exit.
-i,
--ident
NAME
- Specify program identity (name) to be used for configuration file, PID
file, generation ID file, UNIX IPC socket, and syslog messages. Useful
with multiple instances of
mrouted
, or
to adapt to site specific practices, e.g. "DVMRP", without
renaming the binary.
Note, this option only changes the base name of the files, not the location,
which is system specific. On most systems this is
/var/run/mrouted.pid, or
/run/mrouted.pid,
/run/mrouted.genid,
/run/mrouted.sock, and
/etc/mrouted.conf.
-l,
--loglevel
LEVEL
- Set log level for syslog messages: none, err, notice (default), info,
debug. Use '?' for a complete list of supported log levels.
none
- Disable all logging
error
- Error conditions
warning
- Warning conditions
notice
- Normal but significant condition (default)
info
- Informational
debug
- Debug-level messages
-n,
--foreground
- Run in foreground, do not detach from controlling terminal. This option is
usually required when running under process supervisors like systemd and
Finit, but is also useful when running from the terminal, when debugging a
config or at initial set up. Remember to also give the
-s
option if you still want to redirect
log messages to the syslog.
-p,
--pidfile
FILE
- Set PID file name and location, defaults to
/var/run/mrouted.pid.
-s,
--syslog
- Use syslog(3)
for log messages, warnings and error conditions. This is the default when
running in the background. When running in the foreground, see
-n
, log messages are printed to
stdout.
-t,
--table-id
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.
-u,
--ipc
FILE
- Override UNIX domain socket filename, the default on most systems is
/var/run/mrouted.sock.
-w,
--startup-delay
SEC
- Wait for SEC seconds before applying
routes. This delay allows exchange of routes before starting to forward
multicast packets. In certain setups this can prevent transient problems
at startup, at the cost of a momentary black hole.
mrouted
responds to the following signals:
- HUP
- Restart
mrouted
and reload the
configuration file.
- INT
- Terminate execution gracefully, i.e., by sending good-bye messages to all
neighboring routers.
- TERM
- Same as INT.
For convenience,
mrouted
writes its process
ID to
/var/run/mrouted.pid when it has
completed its start up and is ready to receive signals.
- /etc/mrouted.conf
- Main configuration file.
- /var/lib/misc/mrouted.genid
- DVMRP generation ID. Used by neighboring DVRMP routers to detect when a
router is restarted. On BSD
/var/db/mrouted.genid is used.
- /var/run/mrouted.pid
- Pidfile (re)created by
mrouted
daemon
when it has started up and is ready to receive commands.
- /var/run/mrouted.sock
- UNIX domain socket used for communication with
mroutectl(8)
- /proc/net/ip_mr_cache
- Holds active IPv4 multicast routes (Linux).
- /proc/net/ip_mr_vif
- Holds the IPv4 virtual interfaces used by the active multicast routing
daemon (Linux).
Dynamic multicast routing has never been use-case 1a for UNIX systems. Most
systems are by default tuned to act as workstations, end devices. When
something does not work, or only sort of works, run
‘
mrouted
-l
debug
-d
all
’, optionally also with
-n
, to get full logs of its interaction
with the system.
Particular problems include, but are not limited to:
ENOPROTOOPT
- Or similar, with an error message like this:
Cannot enable multicast routing in kernel
This comes from missing multicast routing support in the kernel. On Linux
you need at least:
On *BSD:
options MROUTING # Multicast routing
ENOBUFS
- On Linux systems a common problem is that of many interfaces. The error
message used to be something like this:
Cannot join group 224.0.0.4: No buffer space available
Today that cryptic message has been replaced with a request to adjust
/proc/sys/net/ipv4/igmp_max_memberships
to a value at least 3x the number of vifs to run on, e.g., by setting it
in /etc/sysctl.conf or similar,
depending on the system.
mrouted.conf(5),
mroutectl(8),
map-mbone(8),
mrinfo(8),
mtrace(8),
pimd(8),
smcroute(8)
S. Deering,
Multicast Routing in Internetworks and Extended LANs,
Proceedings of the ACM SIGCOMM '88 Conference.
The
mrouted
home page is
⟨https://github.com/troglobit/mrouted⟩
The following are the principal authors of
mrouted
, listed in no particular order:
David Waitzman,
Craig Partridge,
Steve Deering,
Ajit Thyagarajan,
Bill Fenner,
David Thaler,
and
Daniel Zappala.
With contributions by many others.