Git Product home page Git Product logo

pimd-dense's Introduction

PIM-DM Multicast Routing for UNIX

Badge CIstat Cstat

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 pimdd to 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:

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.ac and a per-directory Makefile.am are key files
  • configure and Makefile.in are generated from autogen.sh
  • Makefile is generated by configure script

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

pimd-dense's People

Contributors

stefansaraev avatar troglobit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pimd-dense's Issues

Won't start on Debian 12.4 arm64

2.1.0 won't start on Debian 12.4 arm64. Always shows usage.

Here is a patch:

diff --git a/src/main.c b/src/main.c
index 752b68b..de1ea05 100644
--- a/src/main.c
+++ b/src/main.c
@@ -226,7 +226,7 @@ main(argc, argv)
     int nfds, n, i, secs;
     struct sigaction sa;
     struct debugname *d;
-    char ch;
+    int ch;
     int rc;
 
     setlinebuf(stderr);

Who is using this?

I'm curious about who is using pimd-dense, be it individuals or organizations. Please let me know here in this issue, or send me an email if you're more comfortable with that or want to remain anonymous.

For anyone who wants, I'm willing to put your testimonial and/or company logo+link in the README. This could hopefully help spread awareness and help pay for the continued development of pimd-dense and its cousins.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.