Annotation of embedaddon/mrouted/mrouted.8, revision 1.1
1.1 ! misho 1: .\" $OpenBSD: mrouted.8,v 1.22 2010/04/05 16:47:01 deraadt Exp $
! 2: .\" The mrouted program is covered by the license in the accompanying file
! 3: .\" named "LICENSE". Use of the mrouted program represents acceptance of
! 4: .\" the terms and conditions listed in that file.
! 5: .\"
! 6: .\" The mrouted program is COPYRIGHT 1989 by The Board of Trustees of
! 7: .\" Leland Stanford Junior University.
! 8: .Dd $Mdocdate: April 5 2010 $
! 9: .Dt MROUTED 8 SMM
! 10: .Os
! 11: .Sh NAME
! 12: .Nm mrouted
! 13: .Nd IP multicast routing daemon
! 14: .Sh SYNOPSIS
! 15: .Nm mrouted
! 16: .Op Fl fhp
! 17: .Op Fl c Ar FILE
! 18: .Op Fl d Op Ar [LEVEL[,LEVEL,...]
! 19: .Sh DESCRIPTION
! 20: .Nm
! 21: is an implementation of the Distance-Vector Multicast Routing
! 22: Protocol (DVMRP), an earlier version of which is specified in RFC 1075.
! 23: It maintains topological knowledge via a distance-vector routing protocol
! 24: (like RIP, described in RFC 1058), upon which it implements a multicast
! 25: datagram forwarding algorithm called Reverse Path Multicasting.
! 26: .Pp
! 27: .Nm
! 28: forwards a multicast datagram along a shortest (reverse) path tree
! 29: rooted at the subnet on which the datagram originates.
! 30: The multicast delivery tree may be thought of as a broadcast delivery
! 31: tree that has been pruned back so that it does not extend beyond those
! 32: subnetworks that have members of the destination group.
! 33: Hence, datagrams are not forwarded along those branches which have no
! 34: listeners of the multicast group.
! 35: The IP time-to-live of a multicast datagram can be
! 36: used to limit the range of multicast datagrams.
! 37: .Pp
! 38: In order to support multicasting among subnets that are separated by (unicast)
! 39: routers that do not support IP multicasting,
! 40: .Nm
! 41: includes support for
! 42: "tunnels", which are virtual point-to-point links between pairs of
! 43: .Nm
! 44: daemons located anywhere in an internet.
! 45: IP multicast packets are encapsulated for transmission through tunnels,
! 46: so that they look like normal unicast datagrams to intervening routers
! 47: and subnets.
! 48: The encapsulation is added on entry to a tunnel, and stripped off on exit
! 49: from a tunnel.
! 50: By default, the packets are encapsulated using the IP-in-IP protocol
! 51: (IP protocol number 4).
! 52: Older versions of
! 53: .Nm
! 54: tunnel use IP source routing, which puts a heavy load on some
! 55: types of routers.
! 56: This version does not support IP source route tunnelling.
! 57: .Pp
! 58: The tunnelling mechanism allows
! 59: .Nm
! 60: to establish a virtual internet, for the purpose of multicasting only,
! 61: which is independent of the physical internet, and which may span
! 62: multiple Autonomous Systems.
! 63: This capability is intended for experimental support of internet
! 64: multicasting only, pending widespread support for multicast routing
! 65: by the regular (unicast) routers.
! 66: .Nm
! 67: suffers from the well-known scaling problems of any distance-vector
! 68: routing protocol, and does not (yet) support hierarchical multicast routing.
! 69: .Pp
! 70: .Nm
! 71: handles multicast routing only; there may or may not be unicast routing
! 72: software running on the same machine as
! 73: .Nm mrouted .
! 74: With the use of tunnels, it is not necessary for
! 75: .Nm
! 76: to have access to more than one physical subnet
! 77: in order to perform multicast forwarding.
! 78: .Pp
! 79: .Sh OPTIONS
! 80: This program follows the usual UNIX command line syntax, with long options starting
! 81: with two dashes (`-'). The options are as follows:
! 82: .Bl -tag -width Ds
! 83: .It Fl h, -help
! 84: Print a help message and exit.
! 85: .It Fl f, -foreground
! 86: Run in foreground, do not detach from the calling terminal.
! 87: .It Fl c, -config=FILE
! 88: Specify an alternative configuration file, instead of the default
! 89: .Pa /etc/mrouted.conf .
! 90: .It Fl d, -debug[=LEVEL[,LEVEL...]
! 91: By default,
! 92: .Nm
! 93: detaches from the invoking terminal.
! 94: If this option is specified,
! 95: .Nm
! 96: it runs in foreground of the starting terminal and responds to signals.
! 97: If
! 98: .Fl d
! 99: is given with no argument, the debug level defaults to
! 100: .Nm igmp, cache, interface, groups, prunes, routes and peers .
! 101:
! 102: Regardless of the debug level,
! 103: .Nm
! 104: always writes warning and error messages to the system log daemon.
! 105: Debug levels have the following effects:
! 106: .Pp
! 107: .Bl -tag -width TERM -compact -offset indent
! 108: .It Cm packet
! 109: Debug inbound/outbout packets
! 110: .It Cm prunes
! 111: Pruning operations, or pruned routes
! 112: .It Cm routes
! 113: Routing messages
! 114: .It Cm rtdetail
! 115: Detailed routing information
! 116: .It Cm peers
! 117: Neighbor gossip
! 118: .It Cm cache
! 119: Debug routing cache
! 120: .It Cm timeout
! 121: Debug timeouts
! 122: .It Cm interface
! 123: Show interface, or vif, debug messages
! 124: .It Cm groups
! 125: Debug group memberships
! 126: .It Cm mtrace
! 127: Multicast traceroute information
! 128: .It Cm igmp
! 129: Debug IGMP messages
! 130: .It Cm icmp
! 131: Debug ICMP messages
! 132: .It Cm rsrr
! 133: Debug RSRR messages
! 134: .El
! 135: .It Fl p
! 136: Start
! 137: .Nm
! 138: in a non-pruning mode. This was previously used in routers for test purposes only.
! 139: However, this is no longer supported and this option is only kept for compatibility
! 140: reasons.
! 141: .It Fl r, -show-routes
! 142: Show state of VIFs and multicast routing tables. This command sends SIGUSR1 to a
! 143: running mrouted, waits for the dump file to be updated, and then displays the result
! 144: on stdout.
! 145: .El
! 146: .Pp
! 147: .Sh CONFIGURATION
! 148: .Nm
! 149: automatically configures itself to forward on all multicast-capable
! 150: interfaces, i.e. interfaces that have the IFF_MULTICAST flag set (excluding
! 151: the loopback "interface"), and it finds other
! 152: .Nm
! 153: directly reachable via those interfaces.
! 154: To override the default configuration, or to add tunnel links to other
! 155: .Nm mrouted ,
! 156: configuration commands may be placed in
! 157: .Pa /etc/mrouted.conf .
! 158: There are five types of configuration commands:
! 159: .Bl -item -offset indent
! 160: .It
! 161: .Cm cache_lifetime
! 162: .Ar ct
! 163: .It
! 164: .Cm name
! 165: .Ar boundary-name | scoped-addr Ns / Ns Ar mask-len
! 166: .It
! 167: .Cm phyint
! 168: .Ar local-addr
! 169: .Oo
! 170: .Cm altnet
! 171: .Ar network Ns / Ns Ar mask-len
! 172: .Oc
! 173: .br
! 174: .Oo
! 175: .Cm boundary
! 176: .Ar boundary-name | scoped-addr Ns / Ns Ar mask-len
! 177: .Oc
! 178: .Op Cm disable
! 179: .br
! 180: .Op Cm metric Ar m
! 181: .Op Cm rate_limit Ar b
! 182: .Op Cm threshold Ar t
! 183: .It
! 184: .Cm pruning
! 185: .Op Cm off | on
! 186: .It
! 187: .Cm tunnel
! 188: .Ar local-addr
! 189: .Ar remote-addr
! 190: .br
! 191: .Oo
! 192: .Cm boundary
! 193: .Ar boundary-name | scoped-addr Ns / Ns Ar mask-len
! 194: .Oc
! 195: .Op Cm metric Ar m
! 196: .Op Cm rate_limit Ar b
! 197: .Op Cm threshold Ar t
! 198: .El
! 199: .Pp
! 200: The file format is free-form: whitespace (including newlines) is not
! 201: significant.
! 202: The
! 203: .Cm boundary
! 204: option
! 205: can accept either a name or a boundary;
! 206: the
! 207: .Cm boundary
! 208: and
! 209: .Cm altnet
! 210: options may be specified as many times as necessary.
! 211: .Pp
! 212: The
! 213: .Nm cache_lifetime
! 214: is a value that determines the amount of time that a
! 215: cached multicast route stays in kernel before timing out.
! 216: The value of this entry should lie between 300 (5 min) and 86400 (1 day).
! 217: It defaults to 300.
! 218: .Pp
! 219: The
! 220: .Nm name
! 221: option assigns names to boundaries to make configuration easier.
! 222: .Pp
! 223: The
! 224: .Nm phyint
! 225: command can be used to disable multicast routing on the physical
! 226: interface identified by local IP address
! 227: .Ar local-addr ,
! 228: or to associate a non-default metric or threshold with the specified
! 229: physical interface.
! 230: The local IP address
! 231: .Ar local-addr
! 232: may be replaced by the interface name (e.g. le0).
! 233: If a phyint is attached to multiple IP subnets, describe each additional
! 234: subnet with the
! 235: .Cm altnet
! 236: keyword.
! 237: Phyint commands must precede tunnel commands.
! 238: .Pp
! 239: The
! 240: .Nm pruning
! 241: option is provided for
! 242: .Nm
! 243: to act as a non-pruning router. This is no longer supported and the
! 244: configuration option is only kept for compatibility reasons.
! 245: .Pp
! 246: The
! 247: .Nm tunnel
! 248: command can be used to establish a tunnel link between local IP address
! 249: .Ar local-addr
! 250: and remote IP address
! 251: .Ar remote-addr ,
! 252: and to associate a non-default metric or threshold with that tunnel.
! 253: The local IP address
! 254: .Ar local-addr
! 255: may be replaced by the interface name (e.g. le0).
! 256: The remote IP address
! 257: .Ar remote-addr
! 258: may be replaced by a host name, if and only if the host name has a single
! 259: IP address associated with it.
! 260: The tunnel must be set up in the mrouted.conf files of both routers before
! 261: it can be used.
! 262: .\"For backwards compatibility with older versions of
! 263: .\".Nm ,
! 264: .\"the srcrt keyword specifies
! 265: .\"encapsulation using IP source routing.
! 266: .Pp
! 267: .Cm boundary
! 268: allows an interface to be configured as an administrative boundary
! 269: for the specified scoped address.
! 270: Packets belonging to this address will not be forwarded on a scoped interface.
! 271: The boundary option accepts either a name or a boundary spec.
! 272: .Pp
! 273: .Cm metric
! 274: is the "cost" associated with sending a datagram on the given
! 275: interface or tunnel; it may be used to influence the choice of routes.
! 276: The metric defaults to 1.
! 277: Metrics should be kept as small as possible, because
! 278: .Nm
! 279: cannot route along paths with a sum of metrics greater than 31.
! 280: .Pp
! 281: .Cm rate_limit
! 282: allows the network administrator to specify a
! 283: certain bandwidth in Kbits/second which would be allocated to multicast
! 284: traffic.
! 285: It defaults to 500Kbps on tunnels, and 0 (unlimited) on physical interfaces.
! 286: .Pp
! 287: .Cm threshold
! 288: is the minimum IP time-to-live required for a multicast datagram
! 289: to be forwarded to the given interface or tunnel.
! 290: It is used to control the scope of multicast datagrams.
! 291: (The TTL of forwarded packets is only compared to the threshold,
! 292: it is not decremented by the threshold.
! 293: Every multicast router decrements the TTL by 1.)
! 294: The default threshold is 1.
! 295: .Pp
! 296: In general, all
! 297: .Nm
! 298: connected to a particular subnet or tunnel should
! 299: use the same metric and threshold for that subnet or tunnel.
! 300: .Pp
! 301: .Nm
! 302: will not initiate execution
! 303: if it has fewer than two enabled virtual interfaces (vifs),
! 304: where a vif is either a physical multicast-capable
! 305: interface or a tunnel.
! 306: It will log a warning if all of its vifs are tunnels; such an
! 307: .Nm
! 308: configuration would be better replaced by more
! 309: direct tunnels (i.e. eliminate the middle man).
! 310: .Sh EXAMPLE CONFIGURATION
! 311: This is an example configuration for a mythical multicast router at a big
! 312: school.
! 313: .Bd -unfilled -offset left
! 314: #
! 315: # mrouted.conf example
! 316: #
! 317: # Name our boundaries to make it easier.
! 318: name LOCAL 239.255.0.0/16
! 319: name EE 239.254.0.0/16
! 320: #
! 321: # le1 is our gateway to compsci, don't forward our
! 322: # local groups to them.
! 323: phyint le1 boundary EE
! 324: #
! 325: # le2 is our interface on the classroom net, it has four
! 326: # different length subnets on it.
! 327: # Note that you can use either an ip address or an
! 328: # interface name
! 329: phyint 172.16.12.38 boundary EE altnet 172.16.15.0/26
! 330: altnet 172.16.15.128/26 altnet 172.16.48.0/24
! 331: #
! 332: # atm0 is our ATM interface, which doesn't properly
! 333: # support multicasting.
! 334: phyint atm0 disable
! 335: #
! 336: # This is an internal tunnel to another EE subnet.
! 337: # Remove the default tunnel rate limit, since this
! 338: # tunnel is over Ethernets.
! 339: tunnel 192.168.5.4 192.168.55.101 metric 1 threshold 1
! 340: rate_limit 0
! 341: #
! 342: # This is our tunnel to the outside world.
! 343: # Careful with those boundaries, Eugene.
! 344: tunnel 192.168.5.4 10.11.12.13 metric 1 threshold 32
! 345: boundary LOCAL boundary EE
! 346: .Ed
! 347: .Sh SIGNALS
! 348: .Nm
! 349: responds to the following signals:
! 350: .Pp
! 351: .Bl -tag -width TERM -compact
! 352: .It HUP
! 353: Restarts
! 354: .Nm mrouted .
! 355: The configuration file is reread every time this signal is evoked.
! 356: .It INT
! 357: Terminates execution gracefully (i.e. by sending
! 358: good-bye messages to all neighboring routers).
! 359: .It TERM
! 360: The same as INT.
! 361: .It USR1
! 362: Dumps the internal routing tables to
! 363: .Pa /var/run/mrouted/mrouted.dump .
! 364: .It USR2
! 365: Dumps the internal cache tables to
! 366: .Pa /var/run/mrouted/mrouted.cache .
! 367: .It QUIT
! 368: Dumps the internal routing tables to stderr (only if
! 369: .Nm
! 370: was invoked with a non-zero debug level).
! 371: .El
! 372: .Pp
! 373: For convenience in sending signals,
! 374: .Nm
! 375: writes its process ID to
! 376: .Pa /var/run/mrouted.pid
! 377: upon startup.
! 378: .Sh FILES
! 379: .Bl -tag -width /var/run/mrouted/mrouted.cache -compact
! 380: .It Pa /etc/mrouted.conf
! 381: .It Pa /var/run/mrouted/mrouted.cache
! 382: .It Pa /var/run/mrouted/mrouted.dump
! 383: .It Pa /var/run/mrouted.pid
! 384: .El
! 385: .Sh EXAMPLES
! 386: The routing tables look like this:
! 387: .Bd -unfilled -offset left
! 388: Virtual Interface Table
! 389: Vif Local-Address Metric Thresh Flags
! 390: 0 36.2.0.8 subnet: 36.2 1 1 querier
! 391: groups: 224.0.2.1
! 392: 224.0.0.4
! 393: pkts in: 3456
! 394: pkts out: 2322323
! 395:
! 396: 1 36.11.0.1 subnet: 36.11 1 1 querier
! 397: groups: 224.0.2.1
! 398: 224.0.1.0
! 399: 224.0.0.4
! 400: pkts in: 345
! 401: pkts out: 3456
! 402:
! 403: 2 36.2.0.8 tunnel: 36.8.0.77 3 1
! 404: peers: 36.8.0.77 (2.2)
! 405: boundaries: 239.0.1
! 406: : 239.1.2
! 407: pkts in: 34545433
! 408: pkts out: 234342
! 409:
! 410: 3 36.2.0.8 tunnel: 36.6.8.23 3 16
! 411:
! 412: Multicast Routing Table (1136 entries)
! 413: Origin-Subnet From-Gateway Metric Tmr In-Vif Out-Vifs
! 414: 36.2 1 45 0 1* 2 3*
! 415: 36.8 36.8.0.77 4 15 2 0* 1* 3*
! 416: 36.11 1 20 1 0* 2 3*
! 417: .
! 418: .
! 419: .
! 420: .Ed
! 421: .Pp
! 422: In this example, there are four vifs connecting to two subnets and two
! 423: tunnels.
! 424: The vif 3 tunnel is not in use (no peer address).
! 425: The vif 0 and vif 1 subnets have some groups present;
! 426: tunnels never have any groups.
! 427: This instance of
! 428: .Nm
! 429: is the one responsible for sending periodic group membership queries on the
! 430: vif 0 and vif 1 subnets, as indicated by the "querier" flags.
! 431: The list of boundaries indicate the scoped addresses on that interface.
! 432: A count of the number of incoming and outgoing packets is also
! 433: shown at each interface.
! 434: .Pp
! 435: Associated with each subnet from which a multicast datagram can originate
! 436: is the address of the previous hop router (unless the subnet is directly-
! 437: connected), the metric of the path back to the origin, the amount of time
! 438: since we last received an update for this subnet, the incoming vif for
! 439: multicasts from that origin, and a list of outgoing vifs.
! 440: "*" means that the outgoing vif is connected to a leaf of the broadcast
! 441: tree rooted at the origin, and a multicast datagram from that origin will
! 442: be forwarded on that outgoing vif only if there are members of the
! 443: destination group on that leaf.
! 444: .Pp
! 445: .Nm
! 446: also maintains a copy of the kernel forwarding cache table.
! 447: Entries are created and deleted by
! 448: .Nm mrouted .
! 449: .Pp
! 450: The cache tables look like this:
! 451: .Bd -unfilled -offset left
! 452: Multicast Routing Cache Table (147 entries)
! 453: Origin Mcast-group CTmr Age Ptmr IVif Forwvifs
! 454: 13.2.116/22 224.2.127.255 3m 2m - 0 1
! 455: \*(Gt13.2.116.19
! 456: \*(Gr13.2.116.196
! 457: 138.96.48/21 224.2.127.255 5m 2m - 0 1
! 458: \*(Gt138.96.48.108
! 459: 128.9.160/20 224.2.127.255 3m 2m - 0 1
! 460: \*(Gt128.9.160.45
! 461: 198.106.194/24 224.2.135.190 9m 28s 9m 0P
! 462: \*(Gt198.106.194.22
! 463: .Ed
! 464: .Pp
! 465: Each entry is characterized by the origin subnet number and mask and the
! 466: destination multicast group.
! 467: .Pp
! 468: The 'CTmr' field indicates the lifetime of the entry.
! 469: The entry is deleted from the cache table when the timer decrements to zero.
! 470: The 'Age' field is the time since this cache entry was originally created.
! 471: Since cache entries get refreshed if traffic is flowing,
! 472: routing entries can grow very old.
! 473: .Pp
! 474: The 'Ptmr' field is simply a dash if no prune was sent upstream, or the
! 475: amount of time until the upstream prune will time out.
! 476: The 'Ivif' field indicates the incoming vif for multicast packets from
! 477: that origin.
! 478: .Pp
! 479: Each router also maintains a record of the number of prunes received from
! 480: neighboring routers for a particular source and group.
! 481: .Pp
! 482: If there are no members of a multicast group on any downward link of the
! 483: multicast tree for a subnet, a prune message is sent to the upstream router.
! 484: They are indicated by a "P" after the vif number.
! 485: .Pp
! 486: The Forwvifs field shows the interfaces along which datagrams belonging to
! 487: the source-group are forwarded.
! 488: .Pp
! 489: A "p" indicates that no datagrams are being forwarded along that interface.
! 490: An unlisted interface is a leaf subnet with no members of the particular
! 491: group on that subnet.
! 492: .Pp
! 493: A "b" on an interface indicates that it is a boundary interface, i.e.\&
! 494: traffic will not be forwarded on the scoped address on that interface.
! 495: An additional line with a
! 496: .Sq \*(Gt
! 497: as the first character is printed for
! 498: each source on the subnet.
! 499: .Pp
! 500: Note that there can be many sources in one subnet.
! 501: .Sh SEE ALSO
! 502: .Xr map-mbone 8 ,
! 503: .Xr mrinfo 8 ,
! 504: .Xr mtrace 8 ,
! 505: .Xr pimd 8
! 506: .Pp
! 507: DVMRP is described, along with other multicast routing algorithms, in the
! 508: paper "Multicast Routing in Internetworks and Extended LANs" by S. Deering,
! 509: in the Proceedings of the ACM SIGCOMM '88 Conference.
! 510: .Sh AUTHORS
! 511: Steve Deering, Ajit Thyagarajan, Bill Fenner, David Thaler and Daniel Zappala. With
! 512: contributions by many others.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>