summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc2715.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc2715.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc2715.txt')
-rw-r--r--doc/rfc/rfc2715.txt1235
1 files changed, 1235 insertions, 0 deletions
diff --git a/doc/rfc/rfc2715.txt b/doc/rfc/rfc2715.txt
new file mode 100644
index 0000000..17fd408
--- /dev/null
+++ b/doc/rfc/rfc2715.txt
@@ -0,0 +1,1235 @@
+
+
+
+
+
+
+Network Working Group D. Thaler
+Request for Comments: 2715 Microsoft
+Category: Informational October 1999
+
+
+ Interoperability Rules for Multicast Routing Protocols
+
+Status of this Memo
+
+ This memo provides information for the Internet community. It does
+ not specify an Internet standard of any kind. Distribution of this
+ memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (1999). All Rights Reserved.
+
+Abstract
+
+ The rules described in this document will allow efficient
+ interoperation among multiple independent multicast routing domains.
+ Specific instantiations of these rules are given for the DVMRP,
+ MOSPF, PIM-DM, PIM-SM, and CBT multicast routing protocols, as well
+ as for IGMP-only links. Future versions of these protocols, and any
+ other multicast routing protocols, may describe their
+ interoperability procedure by stating how the rules described herein
+ apply to them.
+
+1. Introduction
+
+ To allow sources and receivers inside multiple autonomous multicast
+ routing domains (or "regions") to communicate, the domains must be
+ connected by multicast border routers (MBRs). To prevent black holes
+ or routing loops among domains, we assume that these domains are
+ organized into one of the following topologies:
+
+ o A tree (or star) topology (figure 1) with a backbone domain at the
+ root, stub domains at the leaves, and possibly "transit" domains
+ as branches between the root and the leaves. Each pair of
+ adjacent domains is connected by one or more MBRs. The root of
+ each subtree of domains receives all globally-scoped traffic
+ originated anywhere within the subtree, and forwards traffic to
+ its parent and children where needed. Each parent domain's MBR
+ injects a default route into its child domains, while child
+ domains' MBRs inject actual (but potentially aggregated) routes
+ into parent domains. Thus, the arrows in the figure indicate both
+ the direction in which the default route points, as well as the
+ direction in which all globally-scoped traffic is sent.
+
+
+
+Thaler Informational [Page 1]
+
+RFC 2715 Interop Rules October 1999
+
+
+ +--------+
+ +----| |----+
+ +---+ +---+ | ===> <=== |
+ | | | | +----| # |----+
+ | | | # | +-----#------+
+ | # | +---#-------| v |-----------+
+ +--#----| v | | |-----+
+ | v ===> ===> Backbone <=== <=== |
+ +-------| ^ | | ^ |-----+
+ +---#-------| ^ |-----#-----+
+ | # | +-----#------+ | # |-----+
+ | | | # | | <=== |
+ +---+ +---| | | |-----+
+ | ===> | +--------+
+ +---+--------+
+
+ Figure 1: Tree Topology of Domains
+
+ o An arbitrary topology, in which a higher level (inter-domain)
+ routing protocol, such as HDVMRP [1] or BGMP [9], is used to
+ calculate paths among domains. Each pair of adjacent domains is
+ connected by one or more MBRs.
+
+ Section 2 describes rules allowing interoperability between existing
+ multicast routing protocols [2,3,4,5,6], and reduces the
+ interoperability problem from O(N^2) potential protocol interactions,
+ to just N (1 per protocol) instantiations of the same set of
+ invariant rules. This document specifically applies to Multicast
+ Border Routers (MBRs) which meet the following assumptions:
+
+ o The MBR consists of two or more active multicast routing
+ components, each running an instance of some multicast routing
+ protocol. No assumption is made about the type of multicast
+ routing protocol (e.g., broadcast-and-prune vs. explicit-join) any
+ component runs, or the nature of a "component". Multiple
+ components running the same protocol are allowed.
+
+ o The router is configured to forward packets between two or more
+ independent domains. The router has one or more active interfaces
+ in each domain, and one component per domain. The router also has
+ an inter-component "alert dispatcher", which we cover in Section
+ 3.
+
+
+
+
+
+
+
+
+
+Thaler Informational [Page 2]
+
+RFC 2715 Interop Rules October 1999
+
+
+ o Only one multicast routing protocol is active per interface (we do
+ not consider mixed multicast protocol LANs). Each interface on
+ which multicast is enabled is thus "owned" by exactly one of the
+ components.
+
+ o All components share a common forwarding cache of (S,G) entries,
+ which are created when data packets are received, and can be
+ deleted at any time. Only the component owning an interface may
+ change information about that interface in the forwarding cache.
+ Each forwarding cache entry has a single incoming interface (iif)
+ and a list of outgoing interfaces (oiflist). Each component
+ typically keeps a separate multicast routing table with any type
+ of entries.
+
+ Note that the guidelines in this document are implementation-
+ independent. The same rules given in Section 2 apply in some form,
+ regardless of the implementation. For example, they apply to each of
+ the following architectural models:
+
+ o Single process (e.g., GateD): Several routing components in the
+ same user-space process, running on top of a multicast-capable
+ kernel.
+
+ o Multiple peer processes: Several routing components, each as a
+ separate user-space process, all sitting on top of a multicast-
+ capable kernel, with N*(N-1) interaction channels.
+
+ o Multiple processes with arbiter: Multiple independent peer routing
+ component processes which interact with each other and with the
+ kernel solely through an independent arbitration daemon.
+
+ o Monolith: Several routing components which are part of the
+ "kernel" itself.
+
+ We describe all interactions between components in terms of "alerts".
+ The nature of an alert is implementation-dependent (e.g., it may
+ consist of a simple function call, writing to shared memory, use of
+ IPC, or some other method) but alerts of some form exist in every
+ model. Similarly, the originator of an alert is also implementation-
+ dependent; for example, alerts may be originated by a component
+ effecting a change, by an independent arbiter, or by the kernel.
+
+1.1. Specification Language
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in RFC 2119.
+
+
+
+
+Thaler Informational [Page 3]
+
+RFC 2715 Interop Rules October 1999
+
+
+2. Requirements
+
+ To insure that a MBR fitting the above assumptions exhibits correct
+ interdomain routing behavior, each MBR component MUST adhere to the
+ following rules:
+
+ Rule 1: All components must agree on which component owns the
+ incoming interface (iif) for a forwarding cache entry. This
+ component, which we call the "iif owner" is determined by the
+ dispatcher (see Section 3). The incoming component may
+ select ANY interface it owns as the iif according to its own
+ rules.
+
+ When a routing change occurs which causes the iif to change to an
+ interface owned by a different component, both the component
+ previously owning the entry's iif and the component afterwards owning
+ the entry's iif MUST notice the change (so the first can prune
+ upstream and the second can join/graft upstream, for example).
+ Typically, noticing such changes will happen as a result of normal
+ protocol behavior.
+
+ Rule 2: The component owning an interface specifies the criteria for
+ which packets received on that interface are to be accepted
+ or dropped (e.g., whether to perform an RPF check, and what
+ scoped boundaries exist on that interface). Once a packet is
+ accepted, however, it is processed according to the
+ forwarding rules of all components.
+
+ Furthermore, some multicast routing protocols (e.g. PIM) also require
+ the ability to react to packets received on the "wrong" interface. To
+ support these protocols, an MBR must allow a component to place any
+ of its interfaces in "WrongIf Alert Mode". If a packet arrives on
+ such an interface, and is not accepted according to Rule 2, then the
+ component owning the interface MUST be alerted [(S,G) WrongIf alert].
+ Typically, WrongIf alerts must be rate-limited.
+
+ Rule 3: Whenever a new (S,G) forwarding cache entry is to be created
+ (e.g., upon accepting a packet destined to a non-local
+ group), all components MUST be alerted [(S,G) Creation alert]
+ so that they can set the forwarding state on their own
+ outgoing interfaces (oifs) before the packet is forwarded.
+
+ Note that (S,G) Creation alerts are not necessarily generated by one
+ of the protocol components themselves.
+
+
+
+
+
+
+
+Thaler Informational [Page 4]
+
+RFC 2715 Interop Rules October 1999
+
+
+ Rule 4: When a component removes the last oif from an (S,G)
+ forwarding cache entry whose iif is owned by another
+ component, or when such an (S,G) forwarding cache entry is
+ created with an empty oif list, the component owning the iif
+ MUST be alerted [(S,G) Prune alert] (so it can send a prune,
+ for example).
+
+ Rule 5: When the first oif is added to an (S,G) forwarding cache
+ entry whose iif is owned by another component, the component
+ owning the iif MUST be alerted [(S,G) Join alert] (so it can
+ send a join or graft, for example).
+
+ The oif list in rules 4 and 5 must also logically include any virtual
+ encapsulation interfaces such as those used for tunneling or for
+ sending encapsulated packets to an RP/core.
+
+ Rule 6: Unless a component reports the aggregate group membership in
+ the direction of its interfaces, it MUST be a "wildcard
+ receiver" for all sources whose RPF interface is owned by
+ another component ("externally-reached" sources). In
+ addition, a component MUST be a "wildcard receiver" for all
+ sources whose RPF interface is owned by that component
+ ("internally-reached" sources) if any other component of the
+ MBR is a wildcard receiver for externally-reached sources;
+ this will happen naturally as a result of Rule 5 when it
+ receives a (*,*) Join alert.
+
+ For example, if the backbone does not keep global membership
+ information, all MBR components in the backbone in a tree topology of
+ domains, as well as all components owning the RPF interface towards
+ the backbone are wildcard receivers for externally-reached sources.
+
+ MBRs need not be wildcard receivers (for internally- or externally-
+ reached sources) if a higher-level routing protocol, such as BGMP, is
+ used for routing between domains.
+
+2.1. Deleting Forwarding Cache Entries
+
+ Special care must be taken to follow Rules 4 and 5 when forwarding
+ cache entries can be deleted at will. Specifically, a component must
+ be able to determine when the combined oiflist for (S,G) goes from
+ null to non-null, and vice versa.
+
+ This can be done in any implementation-specific manner, including,
+ but not limited to, the following possibilities:
+
+
+
+
+
+
+Thaler Informational [Page 5]
+
+RFC 2715 Interop Rules October 1999
+
+
+ o Whenever a component would modify the oiflist of a single
+ forwarding cache entry if one existed, one is first created. The
+ oiflist is then modified and Rules 4 and 5 applied after an (S,G)
+ Creation alert is sent to all components and all components have
+ updated the oiflist. OR,
+
+ o When a forwarding cache entry is to be deleted, a new alert [(S,G)
+ Deletion alert] is sent to all components, and the entry is only
+ deleted if all components then grant permission. Each component
+ could then grant permission only if it had no (S,G) route table
+ entry.
+
+2.2. Additional Recommendation
+
+ Using (*,G) Join alerts and (*,G) Prune alerts can reduce bandwidth
+ usage by avoiding broadcast-and-prune behavior among domains when it
+ is unnecessary. This optimization requires that each component be
+ able to determine which other components are interested in any given
+ group.
+
+ Although this may be done in any implementation-dependent method, one
+ example would be to maintain a common table (which we call the
+ Component-Group Table) indexed by group-prefix, listing which
+ components are interested in each group(prefix). Thus, any
+ components which are wildcard receivers for externally-reached
+ sources (i.e., those whose RPF interface is owned by another
+ component) would be listed in all entries of this table, including a
+ default entry. This table is thus loosely analogous to a forwarding
+ cache of (*,G) entries, except that no distinction is made between
+ incoming and outgoing interfaces.
+
+3. Alert Dispatchers
+
+ We assume that each MBR has an "alert dispatcher". The dispatcher is
+ responsible for selecting, for each (S,G) entry in the shared
+ forwarding cache, the component owning the iif. It is also
+ responsible for selecting to which component(s) a given alert should
+ be sent.
+
+3.1. The "Interop" Dispatcher
+
+ We describe here rules that may be used in the absence of any inter-
+ domain multicast routing protocol, to enable interoperability in a
+ tree topology of domains. If an inter-domain multicast routing
+ protocol is in use, another dispatcher should be used instead. The
+ Interop dispatcher does not own any interfaces.
+
+
+
+
+
+Thaler Informational [Page 6]
+
+RFC 2715 Interop Rules October 1999
+
+
+ To select the iif of an (S,G) entry, the iif owner is the component
+ owning the next-hop interface towards S in the multicast RIB.
+
+ The "iif owner" of (*,G) and (*,*) entries is the Interop dispatcher
+ itself. This allows the Interop dispatcher to receive relevant
+ alerts without owning any interfaces.
+
+3.1.1. Processing Alerts
+
+ If the Interop dispatcher receives an (S,G) Creation alert, it adds
+ no interfaces to the entry's oif list, since it owns none.
+
+ When the Interop dispatcher receives a (*,G) Prune alert, the
+ following actions are taken, depending on the number of components N
+ which want to receive data for G. If N has just changed from 2 to 1,
+ a (*,G) Prune alert is sent to the remaining component. If N has just
+ changed from 1 to 0, a (*,G) Prune alert is sent to ALL components
+ other than the 1.
+
+ When the Interop dispatcher receives a (*,G) Join alert, the
+ following actions are taken, depending on the number of components N
+ which want to receive data for G. If N has just changed from 0 to 1,
+ a (*,G) Join alert is sent to ALL components other than the 1. If N
+ has just changed from 1 to 2, a (*,G) Join alert is sent to the
+ original (1) component.
+
+3.2. "BGMP" Dispatcher
+
+ This dispatcher can be used with an inter-domain multicast routing
+ protocol (such as BGMP) which allows global (S,G) and (*,G) trees.
+
+ The iif owner of an (S,G) entry is the component owning the next-hop
+ interface towards S in the multicast RIB.
+
+ The iif owner of a (*,G) entry is the component owning the next-hop
+ interface towards G in the multicast RIB.
+
+3.2.1. Processing Alerts
+
+ This dispatcher simply forwards all (S,G) and (*,G) alerts to the iif
+ owner of the associated entry.
+
+4. Multicast Routing Protocol Components
+
+ In this section, we describe how the rules in section 2 apply to
+ current versions of various protocols. Future versions, and
+ additional protocols, should describe how these rules apply in a
+ separate document.
+
+
+
+Thaler Informational [Page 7]
+
+RFC 2715 Interop Rules October 1999
+
+
+4.1. DVMRP
+
+ In this section we describe how the rules in section 2 apply to
+ DVMRP. We assume that the reader is familiar with normal DVMRP
+ behavior as specified in [2].
+
+ As with all broadcast-and-prune protocols, DVMRP components are
+ automatically wildcard receivers for internally-reached sources.
+ Unless some form of Domain-Wide-Reports (DWRs) [10] (synonymous with
+ Regional-Membership-Reports as described in [1]) are added to DVMRP
+ in the future, all DVMRP components also act as wildcard receivers
+ for externally-reached sources. If DWRs are available for the
+ domain, then a DVMRP component acts as a wildcard receiver for
+ externally-reached sources only if internally-reached domains exist
+ which do not support some form of DWRs.
+
+ One simple heuristic to approximate DWRs is to assume that if there
+ are any internally-reached members, then at least one of them is a
+ sender. With this heuristic, the presense of any (S,G) state for
+ internally-reached sources can be used instead. Sending a data
+ packet to a group is then equivalent to sending a DWR for the group.
+
+4.1.1. Generating Alerts
+
+ A (*,*) Join alert is sent to the iif owner of the (*,*) entry (e.g.,
+ the Interop dispatcher) when the first component becomes a wildcard
+ receiver for external sources. This may occur when a DVMRP component
+ starts up which does not support some form of DWRs.
+
+ A (*,*) Prune alert is sent to the iif owner of the (*,*) entry
+ (e.g., the Interop dispatcher) when all components are no longer
+ wildcard receivers for external sources. This may occur when a DVMRP
+ component which does not support some form of DWRs shuts down.
+
+ An (S,G) Prune alert is sent to the component owning the iif for a
+ forwarding cache entry whenever the last oif is removed from the
+ entry, and the iif is owned by another component. In DVMRP, this may
+ happen when:
+
+ o A DVMRP (S,G) Prune message is received on the logical
+ interface.
+
+ An (S,G) Join alert is sent to the component owning the iif for a
+ forwarding cache entry whenever the first logical oif is added to an
+ entry, and the iif is owned by another component. In DVMRP, this may
+ happen when any of the following occur:
+
+
+
+
+
+Thaler Informational [Page 8]
+
+RFC 2715 Interop Rules October 1999
+
+
+ o The oif's prune timer expires, or
+ o A DVMRP (S,G) Graft message is received on the logical
+ interface, or
+ o IGMP [7] notifies DVMRP that directly-connected members of G
+ now exist on the interface.
+
+ When it is known, for a group G, that there are no longer any members
+ in the DVMRP domain which receive data for externally-reached sources
+ from the local router, a (*,G) Prune alert is sent to the "iif owner"
+ for (*,G) according to the dispatcher. In DVMRP, this may happen
+ when:
+
+ o The DWR for G times out, or
+ o The members-are-senders approximation is being used and the
+ last (S,G) entry for G is timed out.
+
+ When it is first known that there are members of a group G in the
+ DVMRP domain, a (*,G) Join alert is sent to the "iif owner" of (*,G).
+ In DVMRP, this may happen when either of the following occurs:
+
+ o A DWR is received for G, or
+ o The members-are-senders approximation is being used and a data
+ packet for G is received on one of the component's interfaces.
+
+4.1.2. Processing Alerts
+
+ When a DVMRP component receives an (S,G) Creation alert, it adds all
+ the component's interfaces to the entry's oif list (according to
+ normal DVMRP behavior) EXCEPT:
+
+ o the iif,
+ o interfaces without local members of the entry's group, and for
+ which DVMRP (S,G) Prune messages have been received from all
+ downstream dependent neighbors.
+ o interfaces for which the router is not the designated forwarder
+ for S,
+ o and interfaces with scoped boundaries covering the group.
+
+ When a DVMRP component receives an (S,G) Prune alert, and the
+ forwarding cache entry's oiflist is empty, it sends a DVMRP (S,G)
+ Prune message to the upstream neighbor according to normal DVMRP
+ behavior.
+
+ When a DVMRP component receives a (*,G) or (*,*) Prune alert, it is
+ treated as if an (S,G) Prune alert were received for every existing
+ DVMRP (S,G) entry covered. In addition, if DWRs are being used, a
+ DWR Leave message is sent within its domain.
+
+
+
+
+Thaler Informational [Page 9]
+
+RFC 2715 Interop Rules October 1999
+
+
+ When a DVMRP component receives an (S,G) Join alert, and a prune was
+ previously sent upstream, it sends a DVMRP (S,G) Graft message to the
+ upstream neighbor according to normal DVMRP behavior.
+
+ When a DVMRP component receives a (*,G) or (*,*) Join alert, it is
+ treated as if an (S,G) Join alert were received for every existing
+ DVMRP (S,G) entry covered. In addition, if DWRs are being used, the
+ component sends a DWR Join message within its domain.
+
+4.2. MOSPF
+
+ In this section we describe how the rules in section 2 apply to
+ MOSPF. We assume that the reader is familiar with normal MOSPF
+ behavior as specified in [3]. We note that MOSPF allows joining and
+ pruning entire groups, but not individual sources within groups.
+
+ Although interoperability between MOSPF and dense-mode protocols
+ (such as DVMRP) is specified in [3], we describe here how an MOSPF
+ implementation may interoperate with all other multicast routing
+ protocols.
+
+ An MOSPF component acts as a wildcard receiver for internally-reached
+ sources if and only if any other component is a wildcard receiver for
+ externally-reached sources. An MOSPF component acts as a wildcard
+ receiver for externally-reached sources only if internally-reached
+ domains exist which do not support some form of Domain-Wide-Reports
+ (DWRs) [10]. Since MOSPF floods membership information throughout
+ the domain, MOSPF itself is considered to support a form of DWRs
+ natively.
+
+4.2.1. Generating Alerts
+
+ A (*,*) Join alert is sent to the iif owner of the (*,*) entry (e.g.,
+ the Interop dispatcher) when the first component becomes a wildcard
+ receiver for external sources. This may occur when an MOSPF
+ component starts up and decides to act in this role.
+
+ A (*,*) Prune alert is sent to the iif owner of the (*,*) entry
+ (e.g., the Interop dispatcher) when all components are no longer
+ wildcard receivers for external sources. This may occur when an
+ MOSPF component which was acting in this role shuts down.
+
+ When it is known that there are no longer any members of a group G in
+ the MOSPF domain, a (*,G) Prune alert is sent to the "iif owner" for
+ (*,G) according to the dispatcher. In MOSPF, this may happen when
+ either:
+
+
+
+
+
+Thaler Informational [Page 10]
+
+RFC 2715 Interop Rules October 1999
+
+
+ o IGMP notifies MOSPF that there are no longer any directly-
+ connected group members on an interface, or
+ o Any router's group-membership-LSA for G is aged out.
+
+ When it is first known that there are members of a group G in the
+ MOSPF domain, a (*,G) Join alert is sent to the "iif owner" of
+ (*,G), according to the dispatcher. In MOSPF, this may happen
+ when any of the following occur:
+
+ o IGMP notifies MOSPF that directly-connected group members now
+ exist on the interface, or
+ o A group-membership-LSA is received for G.
+
+4.2.2. Processing Alerts
+
+ When an MOSPF component receives an (S,G) Creation alert, it
+ calculates the shortest path tree for the MOSPF domain, and adds the
+ downstream interfaces to the entry's oif list according to normal
+ MOSPF behavior.
+
+ When an MOSPF component receives an (S,G) Prune alert, the alert is
+ ignored, since MOSPF can only prune entire groups at a time.
+
+ When an MOSPF component receives a (*,G) Prune alert, and there are
+ no directly-connected members on any MOSPF interface, the router
+ "prematurely ages" out its group-membership-LSA for G in the MOSPF
+ domain according to normal MOSPF behavior.
+
+ When an MOSPF component receives either an (S,G) Join alert or a
+ (*,G) Join alert, and G was not previously included in the router's
+ group-membership-LSA (and the component is not a wildcard multicast
+ receiver), it originates a group-membership-LSA in the MOSPF domain
+ according to normal MOSPF behavior.
+
+ When an MOSPF component receives a (*,*) Prune alert, it ceases to be
+ a wildcard multicast receiver in its domain.
+
+ When an MOSPF component receives a (*,*) Join alert, it becomes a
+ wildcard multicast receiver in its domain.
+
+4.3. PIM-DM
+
+ In this section we describe how the rules in section 2 apply to
+ Dense-mode PIM. We assume that the reader is familiar with normal
+ PIM-DM behavior as specified in [6].
+
+
+
+
+
+
+Thaler Informational [Page 11]
+
+RFC 2715 Interop Rules October 1999
+
+
+ As with all broadcast-and-prune protocols, PIM-DM components are
+ automatically wildcard receivers for internally-reached sources.
+ Unless some form of Domain-Wide-Reports (DWRs) [10] are added to
+ PIM-DM in the future, all PIM-DM components also act as wildcard
+ receivers for externally-reached sources. If DWRs are available for
+ the domain, then a PIM-DM component acts as a wildcard receiver for
+ externally-reached sources only if internally-reached domains exist
+ which do not support some form of DWRs.
+
+ One simple heuristic to approximate DWRs is to assume that if there
+ are any internally-reached members, then at least one of them is a
+ sender. With this heuristic, the presense of any (S,G) state for
+ internally-reached sources can be used instead. Sending a data
+ packet to a group is then equivalent to sending a DWR for the group.
+
+4.3.1. Generating Alerts
+
+ A (*,*) Join alert is sent to the iif owner of the (*,*) entry (e.g.,
+ the Interop dispatcher) when the first component becomes a wildcard
+ receiver for external sources. This may occur when a PIM-DM
+ component starts up which does not support some form of DWRs.
+
+ A (*,*) Prune alert is sent to the iif owner of the (*,*) entry
+ (e.g., the Interop dispatcher) when all components are no longer
+ wildcard receivers for external sources. This may occur when a PIM-
+ DM component which does not support some form of DWRs shuts down.
+
+ A (S,G) Prune alert is sent to the component owning the iif for a
+ forwarding cache entry whenever the last oif is removed from the
+ forwarding cache entry, and the iif is owned by another component. In
+ PIM-DM, this may happen when:
+
+ o A PIM (S,G) Join/Prune message with S in the prune list is
+ received on a point-to-point interface.
+ o The Oif-Timer in an (S,G) route table entry expires.
+ o A PIM (S,G) Assert message from a preferred neighbor is
+ received on the interface.
+
+ A (S,G) Join alert is sent to the component owning the iif for a
+ forwarding cache entry whenever the first oif is added to an entry,
+ and the iif is owned by another component. In PIM-DM, this may
+ happen when any of the following occur:
+
+ o The oif's prune timer expires, or
+ o A PIM-DM (S,G) Graft message is received on the interface, or
+ o IGMP notifies PIM-DM that directly-connected group members now
+ exist on the interface.
+
+
+
+
+Thaler Informational [Page 12]
+
+RFC 2715 Interop Rules October 1999
+
+
+ When it is known that there are no longer any members of a group G in
+ the PIM-DM domain which receive data for externally-reached sources
+ from the local router, a (*,G) Prune alert is sent to the "iif owner"
+ for (*,G) according to the dispatcher. In PIM-DM, this may happen
+ when:
+
+ o The DWR for G times out.
+ o The members-are-senders approximation is being used and PIM-
+ DM's last (S,G) entry for G is timed out.
+
+ When it is first known that there are members of a group G in the
+ PIM-DM domain, a (*,G) Join alert is sent to the "iif owner" of
+ (*,G), according to the dispatcher. In PIM-DM, this may happen when
+ either of the following occurs:
+
+ o A DWR is received for G.
+ o The members-are-senders approximation is being used and a data
+ packet for G is received on one of the component's interfaces.
+
+4.3.2. Processing Alerts
+
+ When a PIM-DM component receives an (S,G) Creation alert, it adds the
+ component's interfaces to the entry's oif list (according to normal
+ PIM-DM behavior) EXCEPT:
+
+ o the iif,
+ o leaf networks without local members of the entry's group,
+ o and interfaces with scoped boundaries covering the group.
+
+ When a PIM-DM component receives an (S,G) Prune alert, and the
+ forwarding cache entry's oiflist is empty, it sends a PIM-DM (S,G)
+ Prune message to the upstream neighbor according to normal PIM-DM
+ behavior.
+
+ When a PIM-DM component receives a (*,G) or (*,*) Prune alert, it is
+ treated as if an (S,G) Prune alert were received for every matching
+ (S,G) entry.
+
+ When a PIM-DM component receives an (S,G) Join alert, and an (S,G)
+ prune was previously sent upstream, it sends a PIM-DM (S,G) Graft
+ message to the upstream neighbor according to normal PIM-DM behavior.
+
+ When a PIM-DM component receives a (*,G) or (*,*) Join alert, then
+ for each matching (S,G) entry in the PIM-DM routing table for which a
+ prune was previously sent upstream, it sends a PIM-DM (S,G) Graft
+ message to the upstream neighbor according to normal PIM-DM behavior.
+ In addition, if DWR's are being used, the component sends a DWR Join
+ message within its domain.
+
+
+
+Thaler Informational [Page 13]
+
+RFC 2715 Interop Rules October 1999
+
+
+4.4. PIM-SM
+
+ In this section we describe how the rules in section 2 apply to
+ Sparse-mode PIM. We assume that the reader is familiar with normal
+ PIM-SM behavior, as specified in [4].
+
+ To achieve correct PIM-SM behavior within the domain, the PIM-SM
+ domain MUST be convex so that Bootstrap messages reach all routers in
+ the domain. That is, the shortest-path route from any internal
+ router to any other internal router must lie entirely within the PIM
+ domain.
+
+ Unless some form of Domain-Wide-Reports (DWRs) [10] are added to
+ PIM-SM in the future, all PIM-SM components act as wildcard receivers
+ for externally-reached sources. If DWRs are available for the
+ domain, then a PIM-SM component acts as a wildcard receiver for
+ externally-reached sources only if internally-reached domains exist
+ which do not support some form of DWRs.
+
+ A PIM-SM component acts as a wildcard receiver for internally-reached
+ sources if and only if any other component is a wildcard receiver for
+ externally-reached sources. It does this by periodically sending
+ (*,*,RP) Joins to all RPs for non-local groups (for example,
+ 239.x.x.x is considered locally-scoped, and PIM-SM components do not
+ send (*,*,RP) Joins to RPs supporting only that portion of the
+ address space). The period is set according to standard PIM-SM rules
+ for periodic Join/Prune messages.
+
+ To properly instantiate Rule 1, whenever PIM creates a PIM (S,G)
+ entry for an externally-reached source, and the next hop towards S is
+ reached via an interface owned by another component, the iif should
+ always point towards S and not towards the RP for G. In addition,
+ the Border-bit is set in all PIM Register messages for this entry.
+
+ Finally, the PIM-SM component acts as a DR for externally-reached
+ receivers in terms of being able to switch to the shortest-path tree
+ for internally-reached sources.
+
+4.4.1. Generating Alerts
+
+ A (*,*) Join alert is sent to the iif owner of the (*,*) entry (e.g.,
+ the Interop dispatcher) when the first component becomes a wildcard
+ receiver for external sources. This may occur when a PIM-SM
+ component starts up and decides to act in this role.
+
+
+
+
+
+
+
+Thaler Informational [Page 14]
+
+RFC 2715 Interop Rules October 1999
+
+
+ A (*,*) Prune alert is sent to the iif owner of the (*,*) entry
+ (e.g., the Interop dispatcher) when all components are no longer
+ wildcard receivers for external sources. This may occur when a PIM-
+ SM component which was acting in this role shuts down.
+
+ A (S,G) Prune alert is sent to the component owning the iif for a
+ forwarding cache entry whenever the last oif is removed from the
+ entry and the iif is owned by another component. In PIM-SM, this may
+ happen when:
+
+ o A PIM (S,G) Join/Prune message with S in the prune list is
+ received on a point-to-point interface, or
+ o A PIM (S,G) Assert from a preferred neighbor was received on
+ the interface, or
+ o A PIM Register-Stop message is received for (S,G), or
+ o The interface's Oif-Timer for PIM's (S,G) route table entry
+ expires.
+ o The Entry-Timer for PIM's (S,G) route table entry expires.
+
+ When it is known that there are no longer any members of a group G in
+ the PIM-SM domain which receive data for externally-reached sources
+ from the local router, a (*,G) Prune alert is sent to the "iif owner"
+ for (*,G) according to the dispatcher. In PIM-SM, this may happen
+ when:
+
+ o A PIM (*,G) Join/Prune message with G in the prune list is
+ received on a point-to-point interface, or
+ o A PIM (*,G) Assert from a preferred neighbor was received on
+ the interface, or
+ o IGMP notifies PIM-SM that directly-connected members no longer
+ exist on the interface.
+ o The Entry-Timer for PIM's (*,G) route table entry expires.
+
+ A (S,G) Join alert is sent to the component owning the iif for a
+ forwarding cache entry whenever the first logical oif is added to an
+ entry and the iif is owned by another component. In PIM-SM, this may
+ happen when any of the following occur:
+
+ o A PIM (S,G) Join/Prune message is received on the interface, or
+ o The Register-Suppression-Timer for (S,G) expires, or
+ o The Entry-Timer for an (S,G) negative-cache state route table
+ entry expires.
+
+ When it is first known that there are members of a group G in the
+ PIM-SM domain, a (*,G) Join alert is sent to the "iif owner" of
+ (*,G), according to the dispatcher. In PIM-SM, this may happen when
+ any of the following occur:
+
+
+
+
+Thaler Informational [Page 15]
+
+RFC 2715 Interop Rules October 1999
+
+
+ o A PIM (*,G) Join/Prune message is received on the interface, or
+ o A PIM (*,*,RP) Join/Prune message is received on the interface,
+ or
+ o (*,G) negative cache state expires, or
+ o IGMP notifies PIM that directly-connected group members now
+ exist on the interface.
+
+4.4.2. Processing Alerts
+
+ When a PIM-SM component receives an (S,G) Creation alert, it does a
+ longest match search ((S,G), then (*,G), then (*,*,RP)) in its
+ multicast routing table. All outgoing interfaces of that entry are
+ then added to the forwarding cache entry. Unless the PIM-SM
+ component owns the iif, the oiflist is also modified to support
+ sending PIM Registers with the Border-bit set to the corresponding
+ RP.
+
+ When a PIM-SM component receives an (S,G) Prune alert, and the
+ forwarding cache entry's oiflist is empty, then for each PIM (S,G)
+ state entry covered, it sends an (S,G) Join/Prune message with S in
+ the prune list to the upstream neighbor according to normal PIM-SM
+ behavior.
+
+ When a PIM-SM component receives a (*,G) Prune alert, it sends a
+ (*,G) Join/Prune message with G in the prune list to the upstream
+ neighbor towards the RP for G, according to normal PIM-SM behavior.
+
+ When a PIM-SM component receives an (S,G) Join alert, it sends an
+ (S,G) Join/Prune message to the next-hop neighbor towards S, and
+ resets the (S,G) Entry-timer, according to normal PIM-SM behavior.
+
+ When a PIM-SM component receives a (*,G) Join alert, then it sends a
+ (*,G) Join/Prune message to the next-hop neighbor towards the RP for
+ G, and resets the (*,G) Entry-timer, according to normal PIM-SM
+ behavior.
+
+ When a PIM-SM component receives a (*,*) Join alert, then it sends
+ (*,*,RP) Join/Prune messages towards each RP.
+
+ When a PIM-SM component receives a (*,*) Prune alert, then it sends a
+ (*,*,RP) Prune towards each RP.
+
+
+
+
+
+
+
+
+
+
+Thaler Informational [Page 16]
+
+RFC 2715 Interop Rules October 1999
+
+
+4.5. CBTv2
+
+ In this section we describe how the rules in section 2 apply to
+ CBTv2. We assume that the reader is familiar with normal CBTv2
+ behavior as specified in [5]. We note that, like MOSPF, CBTv2 allows
+ joining and pruning entire groups, but not individual sources within
+ groups.
+
+ Interoperability between a single CBTv2 stub domain and a DVMRP
+ backbone is outlined in [8]. Briefly, CBTv2 MBR components are
+ statically configured such that, whenever an external route exists
+ between two or more MBRs, one is designated as the primary, and the
+ others act as non-forwarding (to prevent duplicate packets) backups.
+ Thus, a CBTv2 domain must not serve as transit between two domains if
+ another route between them exists.
+
+ We now describe how a CBTv2 implementation may extend this to
+ interoperate with all other multicast routing protocols. A CBTv2
+ component acts as a wildcard receiver for internally-reached sources
+ if and only if any other component is a wildcard receiver for
+ externally-reached sources. It does this by sending JOIN-REQUESTs
+ for all non-local group ranges to all known cores, as described in
+ [8].
+
+ Unless some form of Domain-Wide-Reports (DWRs) [10] are added to
+ CBTv2 in the future, all CBTv2 components act as wildcard receivers
+ for externally-reached sources. If DWRs are available for the
+ domain, then a CBTv2 component acts as a wildcard receiver for
+ externally-reached sources only if internally-reached domains exist
+ which do not support some form of DWRs.
+
+4.5.1. Generating Alerts
+
+ A (*,*) Join alert is sent to the iif owner of the (*,*) entry (e.g.,
+ the Interop dispatcher) when the first component becomes a wildcard
+ receiver for external sources. This may occur when a PIM-SM
+ component starts up and decides to act in this role.
+
+ A (*,*) Prune alert is sent to the iif owner of the (*,*) entry
+ (e.g., the Interop dispatcher) when all components are no longer
+ wildcard receivers for external sources. This may occur when a PIM-
+ SM component which was acting in this role shuts down.
+
+ When the last oif is removed from the core tree for G, a (*,G) Prune
+ alert is sent to the "iif owner" for (*,G) according to the
+ dispatcher. Since CBTv2 always sends all data to the core, the only
+ time this can occur after the entry is created is when the MBR is the
+ core. In this case, the last oif is removed from the entry when:
+
+
+
+Thaler Informational [Page 17]
+
+RFC 2715 Interop Rules October 1999
+
+
+ o A QUIT-REQUEST is received on the logical interface, and there
+ are no directly-connected members present on the interface, or
+ o IGMP notifies CBT that there are no longer directly-connected
+ members present on the interface, and the interface is not a
+ CBT child interface for group G.
+
+ When the first CBT outgoing interface is added to an existing core
+ tree, a (*,G) Join alert is sent to the "iif owner" of (*,G)
+ according to the dispatcher. Since CBTv2 always sends all data to
+ the core, the only time these can occur, other than when the entry is
+ created, is when the MBR is the core. In this case, the first
+ logical oif is added to an entry when:
+
+ o A JOIN-REQUEST for G is received on the interface, or
+ o IGMP notifies CBT that directly-connected group members now
+ exist on the interface.
+
+4.5.2. Processing Alerts
+
+ When a CBTv2 component receives an (S,G) Creation alert, and the
+ router is functioning as the designated BR, any CBT interfaces which
+ are on the tree for G are added to the forwarding cache entry's oif
+ list (according to normal CBTv2 behavior).
+
+ When a CBTv2 component receives an (S,G) Prune alert, the alert is
+ ignored, since CBTv2 cannot prune specific sources. Thus, it will
+ continue to receive packets from S since it must receive packets from
+ other sources in group G.
+
+ When a CBTv2 component receives a (*,G) Prune alert, and the router
+ is not the primary core for G, and the only CBT on-tree interface is
+ the interface towards the core, it sends a QUIT-REQUEST to the next-
+ hop neighbor towards the core, according to normal CBTv2 behavior.
+
+ When a CBTv2 component receives either an (S,G) Join alert or a (*,G)
+ Join alert, and the router is not the primary core for G, and the
+ router is not already on the core-tree for G, it sends a CBT (*,G)
+ JOIN-REQUEST to the next-hop neighbor towards the core, according to
+ normal CBTv2 behavior.
+
+
+
+
+
+
+
+
+
+
+
+
+Thaler Informational [Page 18]
+
+RFC 2715 Interop Rules October 1999
+
+
+4.6. IGMP-only links
+
+ In this section we describe how the rules in section 2 apply to a
+ link which is not within any routing domain, and hence no routing
+ protocol messages are exchanged and the interface is not owned by any
+ multicast routing protocol component. We assume that the reader is
+ familiar with normal IGMP behavior as specified in [7]. We note that
+ IGMPv2 allows joining and pruning entire groups, but not individual
+ sources within groups.
+
+ An IGMP-only "component" may only own a single interface; hence an
+ IGMP-only domain only consists of a single link. Since an IGMP-only
+ component can only act as a wildcard receiver for internally-reached
+ sources if all internally-reached sources are directly-connected,
+ then either the IGMP-only domain (link) must be a stub domain, or
+ else there must be no other components which are wildcard receivers
+ for externally-reached sources.
+
+4.6.1. Generating Alerts
+
+ When it is known that there are no longer any directly-connected
+ members of a group G on the IGMP-only interface, a (*,G) Prune alert
+ is sent to the "iif owner" for (*,G) according to the dispatcher. In
+ IGMP, this may happen when:
+
+ o The group membership times out.
+
+ When it is first known that there are directly-connected members of a
+ group G on the interface, a (*,G) Join alert is sent to the "iif
+ owner" of (*,G), according to the dispatcher. In IGMP, this may
+ happen when any of the following occur:
+
+ o A Membership Report is received for G.
+
+4.6.2. Processing Alerts
+
+ When an IGMP-only component receives an (S,G) Creation alert, and
+ there are directly-connected members of G present on its interface,
+ it adds the interface to the entry's oif list.
+
+ When an IGMP-only component receives an (S,G) Prune alert, the alert
+ is ignored, since IGMP can only prune entire groups at a time.
+
+ When an IGMP-only component receives a (*,G) Prune alert, the router
+ leaves the group G, sending an IGMP Leave message if it was the last
+ reporter, according to normal IGMPv2 behavior.
+
+
+
+
+
+Thaler Informational [Page 19]
+
+RFC 2715 Interop Rules October 1999
+
+
+ When an IGMP-only component receives a (*,*) Prune alert, it leaves
+ promiscuous multicast mode.
+
+ When an IGMP-only component receives either an (S,G) Join alert or a
+ (*,G) Join alert, and the component was not previously a member of G
+ on the IGMP-only interface (and the component is not a wildcard
+ receiver for internally reached sources), it joins the group on the
+ interface, causing it to send an unsolicited Membership Report
+ according to normal IGMP behavior.
+
+ When an IGMP-only component receives a (*,*) Join alert, it enters
+ promiscuous multicast mode.
+
+5. Security Considerations
+
+ All operations described herein are internal to multicast border
+ routers. The rules described herein do not change the security
+ issues underlying individual multicast routing protcols. Allowing
+ different protocols to interact, however, means that security
+ weaknesses of any particular protocol may also apply to the other
+ protocols as a result.
+
+6. References
+
+ [1] Ajit S. Thyagarajan and Stephen E. Deering. Hierarchical
+ distance-vector multicast routing for the MBone. In
+ "Proceedings of the ACM SIGCOMM", pages 60--66, October 1995.
+
+ [2] Pusateri, T., "Distance Vector Multicast Routing Protocol",
+ Work in Progress.
+
+ [3] Moy, J., "Multicast Extensions to OSPF", RFC 1584, March 1994.
+
+ [4] Estrin, D., Farinacci, D., Helmy, A., Thaler, D., Deering, S.,
+ Handley, M., Jacobson, V., Liu, C., Sharma, P. and L. Wei,
+ "Protocol Independent Multicast-Sparse Mode (PIM-SM): Protocol
+ Specification", RFC 2362, June 1998.
+
+ [5] Ballardie, A., "Core Based Trees (CBT version 2) Multicast
+ Routing", RFC 2189, September 1997.
+
+ [6] Estrin, Farinacci, Helmy, Jacobson, and Wei, "Protocol
+ Independent Multicast (PIM), Dense Mode Protocol
+ Specification", Work in Progress.
+
+ [7] Fenner, W., "Internet Group Management Protocol, Version 2",
+ RFC 2236, November 1997.
+
+
+
+
+Thaler Informational [Page 20]
+
+RFC 2715 Interop Rules October 1999
+
+
+ [8] Ballardie, A., "Core Based Tree (CBT) Multicast Border Router
+ Specification", Work in Progress.
+
+ [9] Thaler, D., Estrin, D. and D. Meyer, "Border Gateway Multicast
+ Protocol (BGMP): Protocol Specification", Work in Progress.
+
+ [10] Fenner, W., "Domain Wide Multicast Group Membership Reports",
+ Work in Progress.
+
+7. Author's Address
+
+ Dave Thaler
+ Microsoft
+ One Microsoft Way
+ Redmond, WA 98052
+
+ Phone: (425) 703-8835
+ EMail: dthaler@microsoft.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Thaler Informational [Page 21]
+
+RFC 2715 Interop Rules October 1999
+
+
+8. Full Copyright Statement
+
+ Copyright (C) The Internet Society (1999). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published
+ and distributed, in whole or in part, without restriction of any
+ kind, provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on an
+ "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Thaler Informational [Page 22]
+