PIM-DM Multicast Routing for UNIX
Introduction
pimdd is the dense-mode cousin to pimd, the reference implementation for PIM-DM draft 5. Later revised in RFC3973, which pimdd does not (yet) fully support.
PIM-DM is similar to DVRMP (mrouted), they are both flood-and-prune multicast routing protocols, but unlike DVMRP, PIM implementations rely on the underlying unicast routes to be established already.
This GitHub project is an attempt at reviving pimdd. The latest code on the master branch has been infused with fresh DNA strands from the pimd project, including a netlink back-end to read the unicast routing table, and full IGMPv3 support (ASM).
HELP NEEDED: The project needs more volunteers to test and update
pimddto RFC3973.
Running pimdd
If you have more than one router, you need to have unicast routing set up already between all subnets. Usually an IGP like OSPF or even RIP is used for this. Then start pimdd as root, it backgrounds itself as a proper UNIX daemon:
pimdd
Use the pimctl control tool (shared with pimd) to query status. The
project also ships a systemd unit file that allows for customization of
command line arguments using an environment file: /etc/default/pimdd.
See the manual pages for details on command line options, config file
settings, and the pimctl control tool:
- https://man.troglobit.com/man8/pimdd.8.html
- https://man.troglobit.com/man8/pimctl.8.html
- https://man.troglobit.com/man5/pimdd.conf.5.html
To help out with development, or tracking down bugs, it is recommended to run pimdd in debug mode. Since there are many debug messages, you can specify only a subset of the messages to be printed out:
Usage: pimdd [-hnpqrsv] [-d SYS[,SYS]] [-f FILE] [-l LVL] [-w SEC]
-d SYS Enable debug of subsystem(s)
-f FILE Configuration file, default: /etc/pimdd.conf
-h This help text
-i NAME Identity for config + PID file, and syslog, default: pimdd
-l LVL Set log level: none, err, notice (default), info, debug
-n Run in foreground, do not detach from calling terminal
-p FILE Override PID file, default is based on identity, -i
-s Use syslog, default unless running in foreground, -n
-u FILE Override UNIX domain socket, default based on identity, -i
-v Show program version
-w SEC Initial startup delay before probing interfaces
Available subystems for debug:
all, igmp, groups, igmp_proto, igmp_timers, igmp_members, interfaces,
kernel, mfc, neighbors, pkt, rsrr, pim, asserts, bsr, detail, graft, hello,
registers, routes, pim_routes, jp, pim_timers, rpf, timers, timeout, trace
If you want to see all messages, use pimdd -d all. When debugging
pimdd, it is recommended to run in foreground as well.
Build & Install
When building from a released tarball, the configure script is bundled
and you do not need to do anything special (see below for building from
GIT). The Makefile supports de facto standard settings and environment
variables such as --prefix=PATH and DESTDIR= for the install
process. E.g., to install pimd to /usr instead of the default
/usr/local, but redirect install to a package directory in /tmp:
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
make DESTDIR=/tmp/pimd-dense-1.0.0 install-strip
Building from GIT
If you want to contribute, or simply just try out the latest but unreleased features, then you need to know a few things about the GNU build system:
configure.acand a per-directoryMakefile.amare key filesconfigureandMakefile.inare generated fromautogen.shMakefileis generated byconfigurescript
To build from GIT you first need to clone the repository and run the
autogen.sh script. This requires automake and autoconf to be
installed on your system.
git clone https://github.com/troglobit/pimd-dense.git
cd pimd-dense/
./autogen.sh
./configure && make
GIT sources are a moving target and are not recommended for production systems, unless you know what you are doing!
Origin & References
This code is old and was sort of dead and forgotten. The only project that kept it running was FreeBSD in their ports collection. As such it was included in the BSD Router Project.
pimdd was written by Kurt Windisch when he was at University of Oregon. It is based on the PIM sparse-mode daemon, pimd, which in turn is based on the DVMRP daemon mrouted.
pimdd is covered by LICENSE, Copyright 1998 the University of Oregon.
pimd is covered by LICENSE.pimd, Copyright 1998-2001 University of Southern California.
mrouted is covered by LICENSE.mrouted, Copyright 2002 The Board of Trustees of Leland Stanford Junior University
Copyright (c) 1998 by the University of Oregon. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation in source and binary forms for lawful purposes and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice appear in supporting documentation, and that any documentation, advertising materials, and other materials related to such distribution and use acknowledge that the software was developed by the University of Oregon. The name of the University of Oregon may not be used to endorse or promote products derived from this software without specific prior written permission. THE UNIVERSITY OF OREGON DOES NOT MAKE ANY REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. IN NO EVENT SHALL UO, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT, TORT, OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH, THE USE OR PERFORMANCE OF THIS SOFTWARE.