PIM-SM/SSM multicast routing daemon
is a stand-alone PIM-SM/SSM multicast
routing daemon available under the free 3-clause BSD license. This is the
restored original from University of Southern California, by Ahmed Helmy,
Rusty Eddy and Pavlin Ivanov Radoslavov.
Protocol Independent Multicast - Sparse Mode (PIM-SM):
- maintains the traditional IP multicast service model of receiver-initiated
- uses explicit joins that propagate hop-by-hop from members' directly
connected routers toward the distribution tree
- builds a shared multicast distribution tree centered at a Rendezvous Point
(RP), and then builds source-specific trees for those sources whose data
traffic warrants it
- is not dependent on a specific unicast routing protocol, and
- uses soft-state mechanisms to adapt to underlying network conditions and
The robustness, flexibility, and scaling properties of this architecture make it
well suited to large heterogeneous internetworks.
originally only implemented RFC2362, but
since v2.3.0 is supporting more and more of RFC4601.
ships with a
which is compatible with all PIM daemon's from the same family:
This program follows the usual UNIX command line syntax, with long options
starting with two dashes (`-'). The options are as follows:
- Print a help message and exit.
- Specify an alternative configuration file, the default
/etc/pimd.conf, is derived from
NAME, which is strongly recommended to
use over this option.
- This option controls extended subsystem debugging, use
all to enable all subsystems.
Available subsystems are:
- All subsystems
- PIM assert messages
- PIM bootstrap router messages
- PIM Candidate Rendez-Vous Point messages
- Detailed PIM debug messages
- IGMP messages
- Interface (VIF) debug messages
- PIM join-prune messages
- Kernel messages
- Multicast forwarding cache messages
- Routing messages
- PIM hello messages to/from neighbors
- All inbound/outbout packets
- All PIM messages
- PIM register tunnel messages
- PIM reverse-path forwarding messages
- RSRR messages (if enabled)
- PIM timer events
- Multicast traceroute information
- Run in the foreground, do not detach from calling terminal and do not fork
to background. Useful not only when debugging (above) but also when
running under a process monitor like daemontools, runit, finit, or
systemd. Remember to also use
send all logs to the syslog daemon, unless you want to debug
pimd and run in the foreground.
- Specify program identity (name) to be used for configuration file, PID
file and syslog messages. Useful with multiple instances of
pimd, or to adapt to site specific
practices, e.g. "PIM", 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
- This prevents
pimd from running on all
interfaces by default. When this command line option is given, use
phyint IFNAME enable to selectively
activate PIM services on an interface. This command line option is also
available as a setting in the configuration file.
- Set PID file name and location, defaults to
/var/run/pimd.pid, derived from
NAME, which is strongly recommended to
change over this option.
- Set log level to one of the following, default
- Disable all logging
- Error conditions
- Warning conditions
- Normal but significant condition (default)
- Debug-level messages
- With this option, and
pimd will retry (forever) querying the
kernel for all required
interfaces listed in /etc/pimd.conf.
Useful at startup when not all interfaces may be up or have an IP address
- Use syslog, default unless running in foreground,
- 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.
- Override UNIX domain socket filename, the default is based on the
NAME. On most systems this is
- Show program version and support information.
- Initial startup delay of SEC seconds
before probing for interfaces. Useful if
pimd starts before interfaces are
created and have an IP address.
- Check the TTL of incoming multicast. Remember, the TTL of the multicast
stream must be >1 to be routed. Or rather, greater than the configured
ttl-threshold of the inbound
for more information.
- If you see `Permission denied` in your logs, you are most likely having
firewall, or SELinux, problems
- For PIM-SM, make sure you have a Rendezvous-Point (RP) in your network.
rp-candidate (CRP) and
bsr-candidate (CBSR) settings in your
rp-address if you prefer the static
- Check the Linux
setting. Many Linux systems have the "strict" setting enabled,
"loose" can work but may cause problems in some setups. We
recommend disabling the setting entirely
- PIM is protocol independent, meaning you must
have unicast routing in place already for the multicast routing decisions
pimd to work. Use
ping(1) to verify
connectivity between multicast sender and receiver
responds to the following signals.
However, consider using
since this gives more and better output, and is also less prone to race
pimd and reload configuration
- Terminate execution gracefully, i.e. by sending good-bye messages to
- The same as TERM
For convenience in sending signals,
writes its process ID to /var/run/pimd.pid
upon startup. If started with a different identy,
is used as basename of the PID
The basename of the following files change if
is started with a different identity,
- Main configuration file
- Pidfile (re)created by
pimd daemon when
it has started up and is ready to receive commands
- UNIX-domain socket used for communication with
PIM-SM is described in, the now obsolete RFC2362, and the current RFC4601, with
additions in RFC5059 and RFC5796.
The pages at USC, http://netweb.usc.edu/pim/, are unfortunately no longer
available. The wiki pages at http://github.com/troglobit/pimd/, the new GitHub
project, are an attempt to gather as much info as possible.
was originally written by Ahmed Helmy,
George Edmond "Rusty" Eddy, and Pavlin Ivanov Radoslavov. PIM-SSM,
including full IGMPv3 support, was added by Markus Veranen. With contributions
by many others.
This manual page was initially written by Antonín Král for the
Debian GNU/Linux system. Updated by Joachim Wiberg for the GitHub