Annotation of embedaddon/pimd/README.md, revision 1.1.1.1

1.1       misho       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>