Annotation of embedaddon/pimd/pimd.8, revision 1.1
1.1 ! misho 1: .\" Hey, EMACS: -*- nroff -*-
! 2: .\" First parameter, NAME, should be all caps
! 3: .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
! 4: .\" other parameters are allowed: see man(7), man(1)
! 5: .Dd Mar 3, 2016
! 6: .\" Please adjust this date whenever revising the manpage.
! 7: .Dt PIMD 8 SMM
! 8: .Os
! 9: .Sh NAME
! 10: .Nm pimd
! 11: .Nd PIM-SM/SSM v2 dynamic multicast routing daemon
! 12: .Sh SYNOPSIS
! 13: .Nm pimd
! 14: .Op Fl fhlNqr
! 15: .Op Fl c Ar FILE
! 16: .Op Fl d Ar [SYS[,SYS,...]
! 17: .Op Fl s Ar LEVEL
! 18: .Sh DESCRIPTION
! 19: .Nm
! 20: is a lightweight, stand-alone PIM-SM/SSM v2 multicast routing daemon
! 21: available under the free 3-clause BSD license. This is the restored
! 22: original from University of Southern California, by Ahmed Helmy, Rusty
! 23: Eddy and Pavlin Ivanov Radoslavov.
! 24: .Pp
! 25: Protocol Independent Multicast - Sparse Mode (PIM-SM):
! 26: .Bl -bullet -width 1n -compact
! 27: .It
! 28: maintains the traditional IP multicast service model of
! 29: receiver-initiated membership;
! 30: .It
! 31: uses explicit joins that propagate hop-by-hop from members' directly
! 32: connected routers toward the distribution tree.
! 33: .It
! 34: builds a shared multicast distribution tree centered at a Rendezvous
! 35: Point (RP), and then builds source-specific trees for those sources
! 36: whose data traffic warrants it.
! 37: .It
! 38: is not dependent on a specific unicast routing protocol; and
! 39: .It
! 40: uses soft-state mechanisms to adapt to underlying network conditions and
! 41: group dynamics.
! 42: .El
! 43: .Pp
! 44: The robustness, flexibility, and scaling properties of this architecture
! 45: make it well suited to large heterogeneous internetworks.
! 46: .Pp
! 47: .Nm
! 48: originally only implemented RFC2362, but since v2.3.0 is supporting more
! 49: and more of RFC4601.
! 50: .Sh OPTIONS
! 51: This program follows the usual UNIX command line syntax, with long
! 52: options starting with two dashes (`-'). The options are as follows:
! 53: .Bl -tag -width Ds
! 54: .It Fl h, -help
! 55: Print a help message and exit.
! 56: .It Fl c, -config=FILE
! 57: Specify an alternative configuration file, default
! 58: .Pa /etc/pimd.conf .
! 59: If
! 60: .Nm
! 61: cannot find its configuration file it will start up with fallback
! 62: defaults, which include enabling both
! 63: .Cm bsr-candidate
! 64: and
! 65: .Cm rp-candidate .
! 66: .It Fl d, -debug[=SYS[,SYS...]
! 67: By default,
! 68: .Nm
! 69: daemonizes itself by detaching from the invoking terminal and forking to
! 70: the background. However, if
! 71: .Fl d, -debug
! 72: or
! 73: .Fl f, -foreground
! 74: is specified,
! 75: .Nm
! 76: runs in the foreground of the starting terminal. If
! 77: .Fl d
! 78: is given without any argument
! 79: .Nm
! 80: defaults to debug all subystems.
! 81: .Pp
! 82: Available subsystems are:
! 83: .Pp
! 84: .Bl -tag -width pim_routes -compact -offset indent
! 85: .It Cm packet
! 86: Debug inbound/outbout packets
! 87: .It Cm prunes
! 88: Pruning operations, or pruned routes
! 89: .It Cm routes
! 90: Routing messages
! 91: .It Cm rtdetail
! 92: Detailed routing information
! 93: .It Cm peers
! 94: Neighbor gossip
! 95: .It Cm cache
! 96: Debug routing cache
! 97: .It Cm timeout
! 98: Debug timeouts
! 99: .It Cm interface
! 100: Show interface (VIF) debug messages
! 101: .It Cm groups
! 102: Debug group memberships
! 103: .It Cm mtrace
! 104: Multicast traceroute information
! 105: .It Cm igmp
! 106: Debug IGMP messages
! 107: .It Cm icmp
! 108: Debug ICMP messages
! 109: .It Cm rsrr
! 110: Debug RSRR messages
! 111: .It Cm pim
! 112: All PIM messages
! 113: .It Cm pim_routes
! 114: PIM routing messages
! 115: .It Cm pim_bsr
! 116: PIM bootstrap router messages
! 117: .It Cm pim_detail
! 118: Detailed PIM debug
! 119: .It Cm pim_hello
! 120: Debug hello messages to/from neighbors
! 121: .El
! 122: .It Fl f, -foreground
! 123: Run in the foreground, do not detach from calling terminal and do not
! 124: fork to background. Useful not only when debugging (above) but also
! 125: when running under a process monitor like daemontools, runit, finit, or
! 126: systemd.
! 127: .It Fl l, -reload-config
! 128: Tell a running pimd to reload its configuration. This is done by sending
! 129: a SIGHUP to the PID listed in
! 130: .Pa /var/run/pimd.pid .
! 131: Depending on the capabilities of your user, you may need to be root to
! 132: do this.
! 133: .It Fl N, -disable-vifs
! 134: This prevents
! 135: .Nm
! 136: from being activated on all interfaces by default. When this command
! 137: line option is given, use `phyint IFNAME enable` to selectively activate
! 138: PIM services on an interface.
! 139: .It Fl q, -quit-daemon
! 140: Tell a running
! 141: .Nm
! 142: to quit. Similar to
! 143: .Fl l, -reload-config
! 144: but this command sends SIGTERM. Depending on the capabilities of your
! 145: user, you may need to be root to do this.
! 146: .It Fl r, -show-routes
! 147: Show state of VIFs and multicast routing tables. This is command sends
! 148: SIGUSR1 to a running
! 149: .Nm ,
! 150: similar to
! 151: .Fl l -reload-config.
! 152: Depending on the capabilities of your user, you may need to be root to
! 153: do this.
! 154: .It Fl v, -version
! 155: Show
! 156: .Nm
! 157: version
! 158: .It Fl s, -loglevel=LEVEL
! 159: Set log level to one of the following, default
! 160: .Nm notice :
! 161: .Pp
! 162: .Bl -tag -width WARNING -compact -offset indent
! 163: .It Cm none
! 164: Disable all logging
! 165: .It Cm error
! 166: Error conditions
! 167: .It Cm warning
! 168: Warning conditions
! 169: .It Cm notice
! 170: Normal but significant condition (Default)
! 171: .It Cm info
! 172: Informational
! 173: .It Cm debug
! 174: Debug-level messages
! 175: .El
! 176: .El
! 177: .Sh CONFIGURATION
! 178: The configuration is kept in the file
! 179: .Pa /etc/pimd.conf .
! 180: The file format is relatively free-form: whitespace (including newlines) is not
! 181: significant. However, the order of some statements are important, see
! 182: more below.
! 183: .Pp
! 184: All <masklen> arguments to an IPv4 address, group or network can also be
! 185: given in the alternative /CIDR format. E.g., <group>/<masklen>.
! 186: .Pp
! 187: Here are the different configuration settings:
! 188: .Bl -item -offset indent
! 189: .It
! 190: .Cm default-route-distance
! 191: .Ar <1-255>
! 192: .It
! 193: .Cm default-route-metric
! 194: .Ar <1-1024>
! 195: .It
! 196: .Cm igmp-query-interval
! 197: .Ar <1-65535>
! 198: .It
! 199: .Cm igmp-querier-timeout
! 200: .Ar <8-65535>
! 201: .It
! 202: .Cm hello-interval
! 203: .Ar <30-18724>
! 204: .It
! 205: .Cm phyint
! 206: .Cm <address | ifname>
! 207: .Bl -item -offset indent
! 208: .Op Cm disable | enable
! 209: .Op Cm igmpv2 | igmpv3
! 210: .br
! 211: .Op Cm dr-priority Ar <1-4294967294>
! 212: .br
! 213: .Op Cm ttl-threshold Ar <1-255>
! 214: .Op Cm distance Ar <1-255>
! 215: .Op Cm metric Ar <1-1024>
! 216: .br
! 217: .Oo
! 218: .Cm altnet Ar <network> Op Cm /<masklen> | Cm masklen <masklen>
! 219: .Oc
! 220: .br
! 221: .Oo
! 222: .Cm scoped Ar <network> Op Cm /<masklen> | Cm masklen <masklen>
! 223: .Oc
! 224: .El
! 225: .It
! 226: .Cm bsr-candidate
! 227: .Op Ar address | Ar ifname
! 228: .Op Cm priority Ar <number>
! 229: .It
! 230: .Cm rp-candidate
! 231: .Op Ar address | Ar ifname
! 232: .Op Cm priority Ar <0-255>
! 233: .Op Cm time Ar <10-16384>
! 234: .Bl -item -offset indent -compact
! 235: .It
! 236: .Cm group-prefix Ar <group>[/<masklen> | Cm masklen Ar <masklen>]
! 237: .It
! 238: ...
! 239: .It
! 240: .Cm group-prefix ...
! 241: .El
! 242: .It
! 243: .Cm rp-address Ar <address> [<group-addr>[/<masklen> | masklen <masklen]
! 244: .It
! 245: .Cm spt-threshold
! 246: .Op Cm rate Ar <KBPS> | Cm packets Ar <NUM> | Cm infinity
! 247: .Op Cm interval Ar <SEC>
! 248: .El
! 249: .Pp
! 250: By default,
! 251: .Nm
! 252: will be activated on all multicast capable interfaces. The
! 253: .Cm phyint
! 254: setting and the
! 255: .Fl N, -disable-vifs
! 256: command line option control this behaviour. More on the
! 257: .Cm phyint
! 258: interface configuration setting below.
! 259: .Pp
! 260: The
! 261: .Cm default-route-distance
! 262: option has nothing to do with the system default route, it is rather the
! 263: default value for the unicast routing protocol's administrative
! 264: distance. It is used in PIM Assert elections to determine upstream
! 265: routers. Currently
! 266: .Nm
! 267: cannot obtain the admin distance and metric from the unicast routing
! 268: protocols, so a default routing protocol distance (the RFC confusingly
! 269: refers to this as
! 270: .Em metric prefererence )
! 271: may be configured. In a PIM Assert election, the router advertising the
! 272: lowest assert preference will be selected as the forwarder and upstream
! 273: router for the LAN. Setting 101 should be sufficiently high so that
! 274: asserts from Cisco or GateD routers are preferred over poor-little pimd.
! 275: .Pp
! 276: It is reccommended that distances be set such that metrics are never
! 277: consulted. However, default routing metrics may also be set using the
! 278: .Cm default-route-metric
! 279: option. (Again, this has nothing to do with the system default route.)
! 280: This item sets the cost for sending data through this router. You want
! 281: only PIM-SM data to go to this daemon; so once again, a high value is
! 282: recommended to prevent accidental usage. The preferred default value is
! 283: 1024. Both defaults can be overridden per phyint, so learned routes, or
! 284: PIM Asserts use the phyint's values.
! 285: .Pp
! 286: Please also note that PIM Assert elections are not the same as the DR
! 287: election. The PIM Assert election determines the active multicast
! 288: forwarder, whereas the DR election determines the active PIM router.
! 289: .Pp
! 290: Two settings for IGMP behavior are available:
! 291: .Cm igmp-query-interval
! 292: and
! 293: .Cm igmp-querier-timeout
! 294: which are similar, but very different. The former controls the interval
! 295: between IGMP querys when elected as querier, the latter controls the
! 296: timeout for the elected querier -- before
! 297: .Nm pimd
! 298: decides to take over. In IGMP the lowest numerical address in a LAN
! 299: becomes the elected querier. Obviously these settings must be handled
! 300: with care. The RFC recommends that the querier timeout is set to a
! 301: robustness value times the query interval, plus have the query response
! 302: time. The pimd robustness value for IGMP is 3 and the default query
! 303: response time is 10 sec. Since pimd v2.3.0 the default query interval
! 304: is 12 sec, which makes the querier timeut default to 41 sec, but this is
! 305: rounded off to 42 to honor the late Douglas Adams.
! 306: .Pp
! 307: The PIM Hello message interval can be tuned by changing the
! 308: .Cm hello-interval
! 309: setting. Changing this value also affects the hold-time value included
! 310: in Hello messages. The hold-time value is 3.5 times hello-interval.
! 311: The default value for the Hello interval is 30 sec. Anything less than
! 312: 30 sec is considered an "aggressive" setting and is unsupported.
! 313: .Pp
! 314: The
! 315: .Nm phyint
! 316: option refers to a physical interface and must come after
! 317: .Cm default-route-metric
! 318: and
! 319: .Cm default-route-distance .
! 320: Select the interface either by its IP
! 321: .Ar address
! 322: or interface name
! 323: .Ar ifname
! 324: (e.g. eth0). If you just want to activate this interface with default
! 325: values, you don't need to put anything else on the line. However, there
! 326: are some additional settings:
! 327: .Bl -bullet -offset indent -width 1n -compact
! 328: .It
! 329: .Nm disable :
! 330: Do not send PIM-SM traffic through this interface nor listen for PIM-SM traffic
! 331: from this interface. Default: enable.
! 332: .Nm enable :
! 333: Selectively enable which interfaces to send PIM-SM traffic through. Useful with
! 334: the
! 335: .Fl N
! 336: command line option.
! 337: .It
! 338: .Nm igmpv2 :
! 339: Force interface to use IGMPv2, or
! 340: .It
! 341: .Nm igmpv3 :
! 342: Use IGMPv3, this is the default since v2.3.0.
! 343: .It
! 344: .Cm dr-priority Ar <1-4294967294> :
! 345: When there are multiple PIM routers on the same LAN the DR is usually
! 346: elected based on the highest numerical IP address. This setting can be
! 347: used to control the DR Priority option in PIM Hellow messages, which by
! 348: default otherwise is 1. When the DR Priority option is advertised by
! 349: .Em all
! 350: PIM routers on the same LAN the highest priority router wins the DR
! 351: election, regardless of its IP. If any router does
! 352: .Em not
! 353: advertise the DR Priority option, or the same priority is advertised by
! 354: more than one router, the protocol falls back to using the IP address.
! 355: .It
! 356: .Cm ttl-threshold Ar <1-255> :
! 357: The TTL threshold for multicast frames to be forwarded from this
! 358: interface. Default: 1
! 359: .It
! 360: .Cm distance Ar <1-255> :
! 361: Use this to override the
! 362: .Nm default-route-distance
! 363: (101) on this
! 364: .Nm phyint
! 365: in PIM Assert elections.
! 366: .It
! 367: .Cm metric Ar <1-1024> :
! 368: The cost of sending data through this interface. Defaults to
! 369: .Nm default-route-metric
! 370: (1024) if not assigned.
! 371: .It
! 372: .Cm altnet Ar <network/len> :
! 373: Alternative host(s)/network(s) to accept as locally attached multicast
! 374: sources on a given interface. If a phyint is attached to multiple IP
! 375: subnets, describe each additional subnet with the altnet keyword.
! 376: .It
! 377: .Cm scoped Ar <network/len> :
! 378: Optional scoping of multicast groups. This allows interfaces to be
! 379: configured as an administrative boundary for the specified
! 380: group(s). Multicast streams belonging to the scoped groups will not be
! 381: forwarded.
! 382: .El
! 383: .Pp
! 384: Add one
! 385: .Nm phyint
! 386: line per interface on this router. If you don't do this,
! 387: .Nm pimd
! 388: will either be completely silent (if you provide the
! 389: .Fl N
! 390: command line option), or simply assume that you want it to utilize all interfaces
! 391: using default settings.
! 392: .Pp
! 393: Both the
! 394: .Cm bsr-candidate
! 395: (CBSR) and
! 396: .Cm rp-candidate
! 397: (CRP) settings are enabled in the default configuration. Disabling
! 398: them, by commenting them out in the config file, for all PIM capable
! 399: routers is a bad idea. When troubleshooting, ensure at least one
! 400: bootstrap router (BSR) and at least one rendez-vous point (RP) in
! 401: PIM-SM, is available. Both settings share the following options, with
! 402: priority being interpreted differently:
! 403: .Pp
! 404: .Bl -bullet -offset indent -width 1n -compact
! 405: .It
! 406: .Nm address | ifname :
! 407: Optional local IPv4 address, or interface name to acquire address from.
! 408: If both address and ifname is left out,
! 409: .Nm
! 410: will default to the highest active IP address.
! 411: .It
! 412: .Nm priority Ar <0-255> :
! 413: How important this router is compared to others. For CRP, the lower the
! 414: value the more important the router is considered. For BSR it is of
! 415: course the exact opposite: a higher value is preferred. If the priority
! 416: is left out
! 417: .Nm
! 418: and Cisco IOS defaults to 0 for both, but the standard says 192 for RP.
! 419: .It
! 420: .Nm time Ar <10-16383> :
! 421: The number of seconds to wait between advertising this CRP. The default
! 422: value is 30 seconds. Use a lower value for faster convergence.
! 423: .El
! 424: .Pp
! 425: .Bl -item -offset indent -compact
! 426: .It
! 427: The
! 428: .Nm group-prefix
! 429: sub-setting to
! 430: .Nm rp-candidate
! 431: is the set of multicast groups that the CRP will advertise to other
! 432: routers, if it wins an election:
! 433: .Bl -bullet -offset indent -width 1n -compact
! 434: .It
! 435: .Nm group :
! 436: A specific multicast group or network range this router will handle.
! 437: .It
! 438: .Nm masklen :
! 439: Optional number of groups, in prefix length format. Remember that a
! 440: multicast address is a Class D and has a netmask of 240.0.0.0, which
! 441: means its length is 4.
! 442: .El
! 443: .Pp
! 444: Multiple lines of
! 445: .Nm group-prefix
! 446: may be given, but max number of records supported in pimd is 255.
! 447: .El
! 448: .Pp
! 449: The
! 450: .Nm rp-address
! 451: setting is for static rendezvous point (RP) configurations. It defines
! 452: the RP for a given group, or range or groups. The argument can be
! 453: either a unicast address or a multicast group, with an optional group
! 454: address and netmask. Default group and netmask is 224.0.0.0/16.
! 455: .Nm Note:
! 456: all static RP's are announced with priority 1.
! 457: .Pp
! 458: The
! 459: .Nm spt-threshold
! 460: setting replaces two older configuration settings,
! 461: .Nm switch_data_threshold
! 462: and
! 463: .Nm switch_register_threshold .
! 464: It controls the switch-over from the shared tree to the shortest-path
! 465: source tree. The default is to do the switch-over after the first
! 466: packet, but only after 100 seconds. If
! 467: .Ar infinity
! 468: is specified the shortest path switch-over is disabled.
! 469: .Sh SIGNALS
! 470: .Nm
! 471: responds to the following signals:
! 472: .Pp
! 473: .Bl -tag -width TERM -compact
! 474: .It HUP
! 475: Restarts
! 476: .Nm .
! 477: The configuration file is reread every time this signal is evoked.
! 478: .It TERM
! 479: Terminates execution gracefully (i.e. by sending good-bye messages to all neighboring
! 480: routers).
! 481: .It INT
! 482: The same as TERM.
! 483: .It USR1
! 484: Dumps the internal state of VIFs and multicast routing tables to
! 485: .Pa /var/run/pimd/pimd.dump .
! 486: See also the
! 487: .Fl r, -show-routes
! 488: option above.
! 489: .\" Not implemented yet, still TODO
! 490: .\" .It USR2
! 491: .\" Dumps the internal cache tables to
! 492: .\" .Pa /var/run/pimd/pimd.cache .
! 493: .\" Also not implemented yet, TODO
! 494: .\" .It QUIT
! 495: .\" Dumps the internal routing tables to stderr (only if
! 496: .\" .Nm
! 497: .\" was invoked with a non-zero debug level).
! 498: .El
! 499: .Pp
! 500: For convenience in sending signals,
! 501: .Nm
! 502: writes its process ID to
! 503: .Pa /var/run/pimd.pid
! 504: upon startup.
! 505: .Sh FILES
! 506: .Bl -tag -width /var/run/pimd/pimd.cache -compact
! 507: .It Pa /etc/pimd.conf
! 508: .\" .It Pa /var/run/pimd/pimd.cache
! 509: .It Pa /var/run/pimd/pimd.dump
! 510: .It Pa /var/run/pimd.pid
! 511: .El
! 512: .Sh SEE ALSO
! 513: .Xr mrouted 8 ,
! 514: .Xr smcroute 8 ,
! 515: .Xr /usr/share/doc/pimd/
! 516: .Pp
! 517: PIM-SM is described in, the now obsolete RFC2362, and the current
! 518: RFC4601, with additions in RFC5059 and RFC5796.
! 519: .Pp
! 520: The pages at USC, http://netweb.usc.edu/pim/, are unfortunately no
! 521: longer available. The wiki pages at http://github.com/troglobit/pimd/,
! 522: the new GitHub project, are an attempt to gather as much info as
! 523: possible.
! 524: .Sh AUTHORS
! 525: .Nm
! 526: was written by Ahmed Helmy, George Edmond "Rusty" Eddy, and Pavlin
! 527: Ivanov Radoslavov. PIM-SSM, including full IGMPv3 support, added by
! 528: Markus Veranen. With contributions by many others.
! 529: .Pp
! 530: This manual page was initially written by Antonín Král for the Debian
! 531: GNU/Linux system, and then updated by Joachim Nilsson for the GitHub
! 532: pimd project.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>