pimdd
—
PIM-DM multicast routing daemon
pimdd |
[ -hnsv ]
[-d
SYS[,SYS,...] ]
[-f
FILE ]
[-l
LEVEL ]
[-p
FILE ]
[-u
FILE ]
[-w
SEC ] |
pimdd
is a stand-alone PIM-DM multicast
routing daemon available under the 4-clause BSD license. This is the restored
original from University of Oregon, by Kurt Windisch.
pimdd
is a PIM Dense Mode (PIM-DM)
implementation based on
pimd
, which is the
PIM Sparse Mode (PIM-SM) reference implementation, by Ahmed Helmy, Rusty Eddy
and Pavlin Ivanov Radoslavov.
PIM-DM is a significantly less complex protocol than PIM-SM. PIM-DM works on the
principle that it is probable that any given multicast streamwill have at
least one downstream listener. PIM-DM is ideal where many hosts subscribe
toreceive multicast packets, so most of the PIM Routers receive and forward
all multicastpackets.
Where PIM-SM only forwards a multicast stream when requested, PIM-DM always
floods anynew multicast stream that arrives at the PIM Router and only stops
flooding the multicaststream on a given link if it is explicitly told to, by
receiving a Prune message from the downstream PIM Router.
PIM-DM does not include the concepts of Rendez-vous Points, which are used in
PIM-SM. PIM-SM explicitly builds unidirectional shared trees rooted at a
Rendez-vous Point (RP) pergroup. PIM-DM implicitly builds shortest-path trees
by flooding multicast traffic domain wide, then prunes back branches of the
tree where no receivers are available. As with PIM-SM, so does PIM-DM also use
Reverse Path Forwarding (RPF) to stop loops for packet forwarding for PIM
Routers receiving multicast packets.
- PIM Router
- Any Layer-3 routing device that is running PIM, i.e., the physical device
doing the actual forwarding, communicting using PIM frames with
neighboring routers.
- Reverse Path Forwarding
- The mechanism that PIM uses to make sure it does not forward multicast
streams around in loops. If a set of PIM Routers are connected in a loop,
and each PIM Router is forwarding a given multicast stream, then
eventually the multicast stream would be forwarded right around the loop.
To prevent this from happening, PIM makes use of the fact that the unicast
routing tables in a set of PIM Routers should converge into a loop-free
tree of paths to any given destination. When a
PIM Router receives a multicast stream from
source address A through an interface
IF1, it checks whether
IF1 is the interface the
PIM Router would use to reach
A. The PIM
Router only forwards the multicast stream if
IF1 is the interface the
PIM Router would use to reach
A. RPF determines whether the interface is
correct by consulting unicast routing tables. This ensure that the
multicast stream is forwarded in a loop-free manner back up the tree of
unicast paths that lead to the source.
- Forwarding multicast packets
- PIM Routers forward a given multicast stream
onto all PIM enabled IP interfaces that have not received a Prune for the
given multicast stream. As with unicast routing, the
PIM Router decrements the TTL (Time To Live)
field in the IP header of each packet that the
PIM Router forwards. The packet is discarded
if the TTL is decremented to 0. However, unlike unicast routing, the
destination MAC addresses of the packets are not altered as they are
forwarded by the PIM Router. The destination
MAC addresses remain set to the multicast MAC addresses corresponding to
the destination group address of the multicast stream.
- Upstream
- Direction towards the Source.
- Downstream
- Any other than the upstream interface for that group.
This program follows the usual UNIX command line syntax. The options are as
follows:
-d
SYS[,SYS...]
- This option controls extended subsystem debugging, use
all
to enable all subsystems.
Available subsystems are:
graft
- Grafting operations, or grafted routes
packet
- Debug inbound/outbout packets
prunes
- Pruning operations, or pruned routes
routes
- Routing messages
neighbors
- Neighbor gossip
mfc
- Debug multicast forwarding cache
timeout
- Debug timeouts
interface
- Show interface (VIF) debug messages
groups
- Debug group memberships
trace
- Multicast traceroute information
igmp
- Debug IGMP messages
rsrr
- Debug RSRR messages
pim
- All PIM messages
mrt
- PIM routing messages
bsr
- PIM bootstrap router messages
detail
- Detailed PIM debug
hello
- Debug hello messages to/from neighbors
-f
FILE
- Specify an alternative configuration file, default:
/etc/pimdd.conf.
-h
- Print a help message and exit.
-l
LEVEL
- Set log level to one of the following, default
notice
:
none
- Disable all logging
error
- Error conditions
warning
- Warning conditions
notice
- Normal but significant condition (Default)
info
- Informational
debug
- Debug-level messages
-n
- 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
-s
, to
send all logs to the syslog daemon, unless you want to debug
pimdd
and run in the foreground.
-p
FILE
- Override PID filename, the default name is based on the identity,
-i
NAME. On most systems this is
/var/run/pimdd.pid.
-s
- Use syslog, default unless running in foreground,
-n
.
-u
FILE
- Override UNIX domain socket filename, the default is based on the
identity,
-i
NAME. On most systems this is
/var/run/pimdd.sock.
-v
- Show program version and support information.
-w
SEC
- Initial startup delay of SEC seconds
before probing for interfaces. Useful if
pimdd
starts before interfaces are
created and have an IP address.
pimdd
responds to the following signals.
- HUP
- Restart
pimdd
and reload configuration
file
- TERM
- Terminate execution gracefully, i.e. by sending good-bye messages to
neighboring routers
- INT
- The same as TERM
For convenience in sending signals,
pimdd
writes its process ID to
/var/run/pimdd.pid
upon startup.
- /etc/pimdd.conf
- Main configuration file
- /var/run/pimdd.pid
- PID file created by
pimdd
when it has
started up and is ready to receive commands. Also touched after a reload
or SIGHUP as an acknowledgement. Possible to override with
-p
FILE.
- /var/run/pimdd.sock
- UNIX-domain socket used for communication with
pimctl(8),
possible to override with
-u
FILE.
pimdd.conf(5),
pimctl(8),
pimd(8),
mrouted(8),
smcroute(8)
pimdd
implements PIM-DM according to an
earlier draft version of the standard. The newer, and ratified,
RFC3973,
is not yet fully supported.
pimdd
was made by Kurt Windisch while at
University of Oregon. It is entirely based on
pimd
, which was originally written by Ahmed
Helmy, George Edmond "Rusty" Eddy, and Pavlin Ivanov Radoslavov.
This manual page was written by Joachim Wiberg for the
GitHub
pimdd
project.