Annotation of embedaddon/pimd/README.md, revision 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>