File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pimd / README.md
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jun 12 07:59:37 2017 UTC (6 years, 11 months ago) by misho
Branches: pimd, MAIN
CVS tags: v2_3_2, HEAD
pimd 2.3.2

    1: README
    2: ======
    3: [![Travis Status][]][Travis] [![Coverity Status][]][Coverity Scan]
    4: 
    5: Table of Contents
    6: -----------------
    7: 
    8: * [Introduction](#introduction)
    9: * [Download](#download)
   10: * [Building](#building)
   11: * [Configuration](#configuration)
   12: * [Example](#example)
   13: * [Starting](#starting)
   14: * [Monitoring](#monitoring)
   15: * [Contributing](#contributing)
   16: 
   17: 
   18: Introduction
   19: ------------
   20: 
   21: pimd is a lightweight, stand-alone PIM-SM/SSM multicast routing daemon
   22: available under the free [3-clause BSD license][BSD license].  This is
   23: the restored original version from University of Southern California, by
   24: Ahmed Helmy, Rusty Eddy and Pavlin Ivanov Radoslavov.
   25: 
   26: Today pimd is [maintained at GitHub][GitHub].  Use its facilities to
   27: access the source, report bugs and feature requests, and send patches or
   28: pull requests.  Official release tarballs at [the homepage][homepage].
   29: 
   30: pimd is primarily developed on Linux and should work as-is out of the
   31: box on all major distributions.  Other UNIX variants (OpenBSD, NetBSD,
   32: and FreeBSD) should also work, but are not as thoroughly tested.  For
   33: some tips and details, see the `configure` script.
   34: 
   35: For a summary of changes for each release, see the [ChangeLog][changes].
   36: 
   37: 
   38: Download
   39: --------
   40: 
   41: Although the project makes heavy use of GitHub, it is *not* recommended
   42: to use the ZIP file links GitHub provides.  Instead, we recommend using
   43: proper tarball releases from [the FTP][], or the [releases page][].
   44: 
   45: The GitHub *Download ZIP* links, and ZIP files on the [releases page][],
   46: do not include files from the GIT submodules.  The configure script has
   47: a check for this, but is not 100% foolproof.
   48: 
   49: See below if you want to contribute.
   50: 
   51: 
   52: Building
   53: --------
   54: 
   55: When building pimd from source you first need to run the `configure`
   56: script to generate the file `config.mk`.  The script relies on Bourne
   57: shell standard features as well as expr and uname.  Any optional pimd
   58: features, such as `--enable-scoped-acls` are activated here as well.
   59: 
   60: **Example:**
   61: 
   62:     ./configure --enable-scoped-acls && make
   63: 
   64:     sudo make install
   65: 
   66: The configure script and Makefile supports de facto standard settings
   67: and environment variables such as `--prefix=PATH` and `DESTDIR=` for the
   68: install process.  E.g., to install pimd to `/usr` instead of the default
   69: `/usr/local`, but redirect to a binary package directory in `/tmp`:
   70: 
   71:     ./configure --prefix=/usr && make clean all
   72:     make VERSION=2.3.0-1 DESTDIR=/tmp/pimd-2.3.0-1 install
   73: 
   74: 
   75: Configuration
   76: -------------
   77: 
   78: The configuration is kept in the file `/etc/pimd.conf`, the order of
   79: the statements are in some cases important.
   80: 
   81: PIM-SM is a designed to be a *protocol independent* multicast routing
   82: protocol.  As such it relies on unicast protocols like, e.g, OSPF, RIP,
   83: or static routing entries, to figure out the path to all multicast
   84: capable neighboring routers.  This information is necessary in setups
   85: with more than one route between a multicast sender and a receiver to
   86: figure out which PIM router should be the active forwarder.
   87: 
   88: However, pimd currently cannot retrieve the unicast routing distance
   89: (preference) and metric of routes from the system, not from the kernel
   90: nor a route manager like zebra.  Hence, pimd currently needs to be setup
   91: statically on each router using the desired distance and metric for each
   92: active interface.  If either the distance and/or the metric is missing
   93: in an interface configuration, the following two defaults will be used:
   94: 
   95:     default-route-distance   <1-255>     default: 101
   96:     default-route-metric     <1-1024>    default: 1024
   97: 
   98: By default pimd starts up on all interfaces it can find, using the above
   99: defaults.  To configure individual interfaces use:
  100: 
  101:     phyint <address | ifname> ...
  102: 
  103: You can reference the interface via either its local IPv4 address or
  104: its name, e.g., eth0.  Some common interface settings are:
  105: 
  106:    * `disable`: Disable pimd on this interface, i.e., do not send or
  107:      listen for PIM-SM traffic
  108: 
  109:    * `dr-priority <1-4294967294>`: The DR Priority option, sent in all
  110:      all PIM Hello messages.  Used instead of the IP address in all DR
  111:      elections, if all PIM routers in LAN advertise it.  The higher, the
  112:      better, default 1.
  113: 
  114:    * `distance <1-255>`: The interface's admin distance value (also
  115:      confusingly referred to as *metric preference* in the RFC) in PIM
  116:      Assert messages.  Used with `metric` to elect the active multicast
  117:      forwarding router.  Defaults to `default-route-distance`
  118: 
  119:    * `metric <1-1024>`: The cost for traversing this router.  Used with
  120:      the `preference` value above. Defaults to `default-route-metric`
  121: 
  122: More interface settings are available, see the pimd(8) manual page for
  123: the full details.
  124: 
  125: The most notable feature of PIM-SM is that multicast is distributed from
  126: so called Rendezvous Points (RP).  Each RP handles distribution of one
  127: or more multicast groups, pimd can be configured to advertise itself as
  128: a candidate RP `rp-candidate`, and request to be static RP `rp-address`
  129: for one or more multicast groups.
  130: 
  131:     rp-address <address> [<group>[/<LENGTH> | masklen <LENGTH]
  132: 
  133: The `rp-address` setting is the same as the Cisco `ip pim rp-address`
  134: setting to configure static Rendezvous Points.  The first argument can
  135: be an IPv4 address or a multicast group address.  The default group and
  136: prefix length is 224.0.0.0/16.  Static RP's always have priority 1.
  137: 
  138:     rp-candidate [address | ifname] [time <10-16383>] [priority <0-255>]
  139: 
  140: The Rendezvous Point candidate, or CRP, setting is the same as the Cisco
  141: `ip pim rp-candidate` setting.  Use it to control which interface that
  142: should be used in RP elections.
  143: 
  144:    * `address | ifname`: Optional local IPv4 address, or interface name
  145:      to acquire address from.  The default is to use the highest active
  146:      IP address.
  147: 
  148:    * `time <10-16383>`: The interval, in seconds, between advertising
  149:      this CRP. Default: 60 seconds
  150: 
  151:    * `priority <0-255>`: How important this CRP is compared to others.
  152:      The lower the value here, the more important the CRP.  Like Cisco,
  153:      pimd defaults to priority 0 when this is left out
  154: 
  155: In the CRP messages sent out by pimd, one or more multicast groups can
  156: be advertised using the following syntax.
  157: 
  158:     group-prefix <group>[</LENGTH> | masklen <LENGTH>]
  159: 
  160: Each `group-prefix` setting defines one multicast group and an optional
  161: mask length, which defaults to 16 if left out.  A maximum of 255
  162: multicast group prefix records is possible for the CRP.
  163: 
  164: To keep track of all Rendezvous Points in a PIM-SM domain there exists a
  165: feature called *Bootstrap Router*.  The elected BSR in a PIM-SM domain
  166: periodically announces the RP set in Bootstrap messages.  For details on
  167: PIM BSR operation, see [RFC 5059](http://tools.ietf.org/search/rfc5059).
  168: 
  169:     bsr-candidate [address | ifname] [priority <0-255>]
  170: 
  171: The configuration of a Candidate BootStrap Router (CBSR) is very similar
  172: to that of CRP, except for the interval time.  If either the address or
  173: the interface name is left out pimd uses the highest active IP address.
  174: If the priority is left out, `pimd` (like Cisco) defaults to priority 0.
  175: 
  176: To *disable CRP and CBSR* completely in `pimd`, simply comment the two
  177: lines out from your `pimd.conf`, and make sure `pimd` can find the file.
  178: Because if `pimd` cannot find the file it will default to them enabled,
  179: with defaults listed in the `pimd.conf` included in the distribution.
  180: 
  181: In a PIM-SM domain there can be two, or more, paths from a designated
  182: router (DR) for a multicast sender to reach a receiver.  When receivers
  183: begin joining multicast groups all data is received via the *shared
  184: tree* (RPT) from each Rendezvous Point (RP).  This is often not an
  185: optimal route, so when the volume starts exceeding a configurable
  186: threshold, on either the last-hop router or the RP itself, the router
  187: will attempt to switch to the *shortest path tree* (SPT) from the
  188: multicast source to the receiver.
  189: 
  190: In versions of pimd prior to 2.2.0 this threshold was confusingly split
  191: in two different settings, one for the DR and one for the RP.  These
  192: settings are still supported, for compatibility reasons and documented
  193: in the man-page, but it is strongly recommended to change to the new
  194: syntax instead:
  195: 
  196:     spt-threshold [rate <KBPS> | packets <NUM> | infinity] [interval <5-60>]
  197: 
  198: Only slightly different from the Cisco `ip pim spt-threshold` setting,
  199: pimd can trigger a switch to SPT on a rate or number of packets and you
  200: can also tweak the poll interval.  It's recommended to keep the interval
  201: in the tens of seconds, the default is 100 sec.  The default threshold
  202: is set to zero packets, which will cause a switch over to the SPT after
  203: the first multicast packet is received.
  204: 
  205: 
  206: Example
  207: -------
  208: 
  209:     # Interface eth0 is disabled, i.e., pimd will not run there.
  210:     phyint eth0 disable
  211: 
  212:     # On this LAN we have a lower numeric IP than other PIM routers
  213:     # but we want to take care of forwarding all PIM messages.
  214:     phyint eth1 dr-priority 10
  215: 
  216:     # Partake in BSR elections on eth1
  217:     bsr-candidate eth1
  218: 
  219:     # Offer to be an RP for all of 224.0.0.0/4
  220:     rp-candidate eth1
  221:     group-prefix 224.0.0.0 masklen 4
  222: 
  223:     # This is the built-in defaults, switch to SPT on first packet
  224:     spt-threshold packets 0 interval 100
  225: 
  226: 
  227: Starting
  228: --------
  229: 
  230: Having set up the configuration file, you are ready to run pimd.  As
  231: usual, it is recommended that you start it manually first, to make sure
  232: everything works as expected, before adding it to your system's startup
  233: scripts, with any startup flags it might need.
  234: 
  235:     pimd [-c file] [-d subsys1[,...,subsysN]] [-s level]
  236: 
  237: * `-c file`: Utilize the specified configuration file rather than the
  238:    default, `/etc/pimd.conf`
  239: * `-d [subsys1,...,subsysN]`: Subsystems to enable debug for when
  240:   running the daemon.  Optional argument, if left out, all subsystems
  241:   are enabled.  Type `pimd -h` for a full list of subsystems
  242: * `-s level`: Log level, one of `none`, `error`, `warning`, `notice`,
  243:    `info`, or `debug`.  Default is `notice`
  244: 
  245: **Example:**
  246: 
  247:     pimd -c /cfg/pimd.conf -digmp_proto,pim_jp,kernel,pim_register
  248: 
  249: Notice the lack of spaces in the option argument to `-d`, the
  250: long-option `--debug=igmp_proto,pim_jp,kernel,pim_register`is slightly
  251: more readable.
  252: 
  253: 
  254: Monitoring
  255: ----------
  256: 
  257: To see the virtual interface table, including neighboring PIM routers,
  258: and the multicast routing table:
  259: 
  260:     pimd -r
  261: 
  262: or to watch it continually:
  263: 
  264:     watch pimd -r
  265: 
  266: In addition, pimd logs important events to the system logfile, in
  267: particular at startup when parsing the `pimd.conf` configuration file.
  268: 
  269: 
  270: Contributing
  271: ------------
  272: 
  273: pimd is maintained by [Joachim Nilsson][] at [GitHub][].  If you find
  274: bugs, have feature requests, or want to contribute fixes or features,
  275: check out the code from GitHub, including the submodules:
  276: 
  277: 	git clone https://github.com/troglobit/uftpd
  278: 	cd uftpd
  279: 	make submodules
  280: 
  281: When you pull from upstream, remember to also update the submodules
  282: using `git submodule update`, see the file [CONTRIBUTING.md][contrib]
  283: for further details.
  284: 
  285: 
  286: [BSD license]:     https://en.wikipedia.org/wiki/BSD_licenses
  287: [github]:          http://github.com/troglobit/pimd
  288: [homepage]:        http://troglobit.com/pimd.html
  289: [changes]:         https://github.com/troglobit/pimd/blob/master/ChangeLog.org
  290: [the FTP]:         http://ftp.troglobit.com/pimd/
  291: [releases page]:   https://github.com/troglobit/pimd/releases
  292: [contrib]:         https://github.com/troglobit/pimd/blob/master/CONTRIBUTING.md
  293: [Joachim Nilsson]: http://troglobit.com
  294: [Travis]:          https://travis-ci.org/troglobit/pimd
  295: [Travis Status]:   https://travis-ci.org/troglobit/pimd.png?branch=master
  296: [Coverity Scan]:   https://scan.coverity.com/projects/3319
  297: [Coverity Status]: https://scan.coverity.com/projects/3319/badge.svg
  298: 
  299: <!--
  300:   -- Local Variables:
  301:   -- mode: markdown
  302:   -- End:
  303:   -->

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>