| < draft-ietf-pim-bidir-08.txt | draft-ietf-pim-bidir-09.txt > | |||
|---|---|---|---|---|
| Internet Engineering Task Force PIM WG | Internet Engineering Task Force PIM WG | |||
| INTERNET-DRAFT Mark Handley/UCL | INTERNET-DRAFT Mark Handley/UCL | |||
| draft-ietf-pim-bidir-08.txt Isidor Kouvelas/Cisco | draft-ietf-pim-bidir-09.txt Isidor Kouvelas/Cisco | |||
| Tony Speakman/Cisco | Intended Status: Proposed Standard Tony Speakman/Cisco | |||
| Lorenzo Vicisano/Cisco | Lorenzo Vicisano/Digital Fountain | |||
| 22 October 2005 | 22 February 2007 | |||
| Expires: April 2006 | Expires: August 2007 | |||
| Bi-directional Protocol Independent Multicast (BIDIR-PIM) | Bi-directional Protocol Independent Multicast (BIDIR-PIM) | |||
| Status of this Document | Status of this Document | |||
| By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
| applicable patent or other IPR claims of which he or she is aware have | applicable patent or other IPR claims of which he or she is aware | |||
| been or will be disclosed, and any of which he or she becomes aware will | have been or will be disclosed, and any of which he or she becomes | |||
| be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering Task | Internet-Drafts are working documents of the Internet Engineering | |||
| Force (IETF), its areas, and its working groups. Note that other groups | Task Force (IETF), its areas, and its working groups. Note that | |||
| may also distribute working documents as Internet-Drafts. | other groups may also distribute working documents as Internet- | |||
| Drafts. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference material | time. It is inappropriate to use Internet-Drafts as reference | |||
| or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt | http://www.ietf.org/ietf/1id-abstracts.txt | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This document is a product of the IETF PIM WG. Comments should be | This document is a product of the IETF PIM WG. Comments should be | |||
| addressed to the authors, or the mailing list at pim@ietf.org. | addressed to the authors, or the mailing list at pim@ietf.org. | |||
| Abstract | Abstract | |||
| This document discusses Bi-directional PIM, a variant of PIM | This document discusses Bi-directional PIM, a variant of PIM | |||
| Sparse-Mode that builds bi-directional shared trees connecting | Sparse-Mode that builds bi-directional shared trees connecting | |||
| multicast sources and receivers. Bi-directional trees are | multicast sources and receivers. Bi-directional trees are built | |||
| built using a fail-safe Designated Forwarder (DF) election | using a fail-safe Designated Forwarder (DF) election mechanism | |||
| mechanism operating on each link of a multicast topology. | operating on each link of a multicast topology. With the | |||
| With the assistance of the DF, multicast data is natively | assistance of the DF, multicast data is natively forwarded from | |||
| forwarded from sources to the Rendezvous-Point and hence along | sources to the Rendezvous-Point and hence along the shared tree | |||
| the shared tree to receivers without requiring source-specific | to receivers without requiring source-specific state. The DF | |||
| state. The DF election takes place at RP discovery time and | election takes place at RP discovery time and provides the route | |||
| provides the route to the RP thus eliminating the requirement | to the RP thus eliminating the requirement for data-driven | |||
| for data-driven protocol events. | protocol events. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction. . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology. . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.1. Definitions. . . . . . . . . . . . . . . . . . . . . 6 | 2.1. Definitions . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.2. Pseudocode Notation. . . . . . . . . . . . . . . . . 8 | 2.2. Pseudocode Notation . . . . . . . . . . . . . . . . . . 8 | |||
| 3. Protocol Specification. . . . . . . . . . . . . . . . . 8 | 3. Protocol Specification . . . . . . . . . . . . . . . . . . 8 | |||
| 3.1. BIDIR-PIM Protocol State . . . . . . . . . . . . . . 9 | 3.1. BIDIR-PIM Protocol State. . . . . . . . . . . . . . . . 9 | |||
| 3.1.1. General Purpose State . . . . . . . . . . . . . . 9 | 3.1.1. General Purpose State. . . . . . . . . . . . . . . . 9 | |||
| 3.1.2. RPA State . . . . . . . . . . . . . . . . . . . . 10 | 3.1.2. RPA State. . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.1.3. Group State . . . . . . . . . . . . . . . . . . . 10 | 3.1.3. Group State. . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.1.4. State Summarization Macros. . . . . . . . . . . . 11 | 3.1.4. State Summarization Macros . . . . . . . . . . . . . 11 | |||
| 3.2. PIM Neighbor Discovery . . . . . . . . . . . . . . . 12 | 3.2. PIM Neighbor Discovery. . . . . . . . . . . . . . . . . 12 | |||
| 3.3. Data Packet Forwarding Rules . . . . . . . . . . . . 13 | 3.3. Data Packet Forwarding Rules. . . . . . . . . . . . . . 13 | |||
| 3.3.1. Upstream Forwarding at RP . . . . . . . . . . . . 14 | 3.3.1. Upstream Forwarding at RP. . . . . . . . . . . . . . 14 | |||
| 3.3.2. Source-Only Branches. . . . . . . . . . . . . . . 14 | 3.3.2. Source-Only Branches . . . . . . . . . . . . . . . . 14 | |||
| 3.3.3. Directly Connected Sources. . . . . . . . . . . . 15 | 3.3.3. Directly Connected Sources . . . . . . . . . . . . . 15 | |||
| 3.4. PIM Join/Prune Messages. . . . . . . . . . . . . . . 15 | 3.4. PIM Join/Prune Messages . . . . . . . . . . . . . . . . 15 | |||
| 3.4.1. Receiving (*,G) Join/Prune Messages . . . . . . . 15 | 3.4.1. Receiving (*,G) Join/Prune Messages. . . . . . . . . 15 | |||
| 3.4.2. Sending Join/Prune Messages . . . . . . . . . . . 18 | 3.4.2. Sending Join/Prune Messages. . . . . . . . . . . . . 18 | |||
| 3.5. Designated Forwarder (DF) Election . . . . . . . . . 21 | 3.5. Designated Forwarder (DF) Election. . . . . . . . . . . 21 | |||
| 3.5.1. DF Requirements . . . . . . . . . . . . . . . . . 21 | 3.5.1. DF Requirements. . . . . . . . . . . . . . . . . . . 21 | |||
| 3.5.2. DF Election description . . . . . . . . . . . . . 22 | 3.5.2. DF Election description. . . . . . . . . . . . . . . 22 | |||
| 3.5.2.1. Bootstrap Election . . . . . . . . . . . . . . 22 | 3.5.2.1. Bootstrap Election. . . . . . . . . . . . . . . . 22 | |||
| 3.5.2.2. Loser Metric Changes . . . . . . . . . . . . . 23 | 3.5.2.2. Loser Metric Changes. . . . . . . . . . . . . . . 23 | |||
| 3.5.2.3. Winner Metric Changes. . . . . . . . . . . . . 24 | 3.5.2.3. Winner Metric Changes . . . . . . . . . . . . . . 24 | |||
| 3.5.2.4. Winner Loses Path. . . . . . . . . . . . . . . 24 | 3.5.2.4. Winner Loses Path . . . . . . . . . . . . . . . . 24 | |||
| 3.5.2.5. Late Router Starting Up. . . . . . . . . . . . 24 | 3.5.2.5. Late Router Starting Up . . . . . . . . . . . . . 25 | |||
| 3.5.2.6. Winner Dies. . . . . . . . . . . . . . . . . . 25 | 3.5.2.6. Winner Dies . . . . . . . . . . . . . . . . . . . 25 | |||
| 3.5.3. Election Protocol Specification . . . . . . . . . 25 | 3.5.3. Election Protocol Specification. . . . . . . . . . . 25 | |||
| 3.5.3.1. Election State . . . . . . . . . . . . . . . . 25 | 3.5.3.1. Election State. . . . . . . . . . . . . . . . . . 25 | |||
| 3.5.3.2. Election Messages. . . . . . . . . . . . . . . 26 | 3.5.3.2. Election Messages . . . . . . . . . . . . . . . . 26 | |||
| 3.5.3.3. Election Events. . . . . . . . . . . . . . . . 27 | 3.5.3.3. Election Events . . . . . . . . . . . . . . . . . 27 | |||
| 3.5.3.4. Election Actions . . . . . . . . . . . . . . . 28 | 3.5.3.4. Election Actions. . . . . . . . . . . . . . . . . 28 | |||
| 3.5.3.5. Election State Transitions . . . . . . . . . . 29 | 3.5.3.5. Election State Transitions. . . . . . . . . . . . 29 | |||
| 3.5.4. Election Reliability Enhancements . . . . . . . . 32 | 3.5.4. Election Reliability Enhancements. . . . . . . . . . 32 | |||
| 3.5.5. Missing Pass. . . . . . . . . . . . . . . . . . . 32 | 3.5.5. Missing Pass . . . . . . . . . . . . . . . . . . . . 32 | |||
| 3.5.6. Periodic Winner Announcement. . . . . . . . . . . 32 | 3.5.6. Periodic Winner Announcement . . . . . . . . . . . . 32 | |||
| 3.6. Timers, Counters and Constants . . . . . . . . . . . 32 | 3.6. Timers, Counters and Constants. . . . . . . . . . . . . 32 | |||
| 3.7. BIDIR-PIM Packet Formats . . . . . . . . . . . . . . 36 | 3.7. BIDIR-PIM Packet Formats. . . . . . . . . . . . . . . . 36 | |||
| 3.7.1. DF Election Packet Formats. . . . . . . . . . . . 36 | 3.7.1. DF Election Packet Formats . . . . . . . . . . . . . 36 | |||
| 3.7.2. Backoff Message . . . . . . . . . . . . . . . . . 37 | 3.7.2. Backoff Message. . . . . . . . . . . . . . . . . . . 37 | |||
| 3.7.3. Pass Message. . . . . . . . . . . . . . . . . . . 38 | 3.7.3. Pass Message . . . . . . . . . . . . . . . . . . . . 38 | |||
| 3.7.4. Bidir Capable PIM-Hello Option. . . . . . . . . . 39 | 3.7.4. Bidir Capable PIM-Hello Option . . . . . . . . . . . 39 | |||
| 4. RP Discovery. . . . . . . . . . . . . . . . . . . . . . 39 | 4. RP Discovery . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . 39 | 5. Security Considerations. . . . . . . . . . . . . . . . . . 39 | |||
| 5.1. Attacks Based on Forged Messages . . . . . . . . . . 39 | 5.1. Attacks Based on Forged Messages. . . . . . . . . . . . 39 | |||
| 5.1.1. Election of an Incorrect DF . . . . . . . . . . . 40 | 5.1.1. Election of an Incorrect DF. . . . . . . . . . . . . 40 | |||
| 5.1.2. Preventing Election Convergence . . . . . . . . . 41 | 5.1.2. Preventing Election Convergence. . . . . . . . . . . 41 | |||
| 5.2. Non-cryptographic Authentication Mechanisms. . . . . 41 | 5.2. Non-cryptographic Authentication Mechanisms . . . . . . 41 | |||
| 5.2.1. Basic Access Control. . . . . . . . . . . . . . . 41 | 5.2.1. Basic Access Control . . . . . . . . . . . . . . . . 41 | |||
| 5.3. Authentication Using IPsec . . . . . . . . . . . . . 41 | 5.3. Authentication Using IPsec. . . . . . . . . . . . . . . 41 | |||
| 5.4. Denial of Service Attacks. . . . . . . . . . . . . . 41 | 5.4. Denial of Service Attacks . . . . . . . . . . . . . . . 41 | |||
| 6. Change history. . . . . . . . . . . . . . . . . . . . . 42 | 6. IANA Considerations. . . . . . . . . . . . . . . . . . . . 42 | |||
| 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . 42 | 7. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . 42 | |||
| 8. Authors' Addresses. . . . . . . . . . . . . . . . . . . 42 | 8. Authors' Addresses . . . . . . . . . . . . . . . . . . . . 42 | |||
| 9. Normative References. . . . . . . . . . . . . . . . . . 43 | 9. Normative References . . . . . . . . . . . . . . . . . . . 42 | |||
| 10. Informative References . . . . . . . . . . . . . . . . 43 | 10. Informative References. . . . . . . . . . . . . . . . . . 43 | |||
| 11. Index. . . . . . . . . . . . . . . . . . . . . . . . . 45 | 11. Index . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 12. Full Copyright Statement . . . . . . . . . . . . . . . 46 | ||||
| List of Figures | List of Figures | |||
| Figure 1. Downstream group per-interface state- | Figure 1. Downstream group per-interface state- | |||
| machine. . . . . . . . . . . . . . . . . . . . . 16 | machine . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| Figure 2. Upstream group state-machine. . . . . . . . . . . . 19 | ||||
| Figure 3. Designated Forwarder election state- | Figure 3. Designated Forwarder election state- | |||
| machine. . . . . . . . . . . . . . . . . . . . . 29 | machine . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 1. Introduction | 1. Introduction | |||
| This document specifies Bi-directional PIM (BIDIR-PIM), a variant of PIM | This document specifies Bi-directional PIM (BIDIR-PIM), a variant of | |||
| Sparse-Mode (PIM-SM) [4] that builds bi-directional shared trees | PIM Sparse-Mode (PIM-SM) [4] that builds bi-directional shared trees | |||
| connecting multicast sources and receivers. | connecting multicast sources and receivers. | |||
| PIM-SM constructs uni-directional shared trees that are used to forward | PIM-SM constructs uni-directional shared trees that are used to | |||
| data from senders to receivers of a multicast group. PIM-SM also allows | forward data from senders to receivers of a multicast group. PIM-SM | |||
| the construction of source specific trees, but this capability is not | also allows the construction of source specific trees, but this | |||
| related to the protocol described in this document. | capability is not related to the protocol described in this document. | |||
| The shared tree for each multicast group is rooted at a multicast router | The shared tree for each multicast group is rooted at a multicast | |||
| called the Rendezvous Point (RP). Different multicast groups can use | router called the Rendezvous Point (RP). Different multicast groups | |||
| separate RPs within a PIM domain. | can use separate RPs within a PIM domain. | |||
| In unidirectional PIM-SM, there are two possible methods for | In unidirectional PIM-SM, there are two possible methods for | |||
| distributing data packets on the shared tree. These differ in the way | distributing data packets on the shared tree. These differ in the way | |||
| packets are forwarded from a source to the RP: | packets are forwarded from a source to the RP: | |||
| o Initially when a source starts transmitting, its first hop router | o Initially when a source starts transmitting, its first hop router | |||
| encapsulates data packets in special control messages (Registers) | encapsulates data packets in special control messages (Registers) | |||
| which are unicast to the RP. After reaching the RP the packets are | which are unicast to the RP. After reaching the RP the packets are | |||
| decapsulated and distributed on the shared tree. | decapsulated and distributed on the shared tree. | |||
| o A transition from the above distribution mode can be made at a later | o A transition from the above distribution mode can be made at a | |||
| stage. This is achieved by building source specific state on all | later stage. This is achieved by building source specific state on | |||
| routers along the path between the source and the RP. This state is | all routers along the path between the source and the RP. This | |||
| then used to natively forward packets from that source. | state is then used to natively forward packets from that source. | |||
| Both these mechanisms suffer from problems. Encapsulation results in | Both these mechanisms suffer from problems. Encapsulation results in | |||
| significant processing, bandwidth and delay overheads. Forwarding using | significant processing, bandwidth and delay overheads. Forwarding | |||
| source specific state has additional protocol and memory requirements. | using source specific state has additional protocol and memory | |||
| requirements. | ||||
| Bi-directional PIM dispenses with both encapsulation and source state by | Bi-directional PIM dispenses with both encapsulation and source state | |||
| allowing packets to be natively forwarded from a source to the RP using | by allowing packets to be natively forwarded from a source to the RP | |||
| shared tree state. In contrast to PIM-SM this mode of forwarding does | using shared tree state. In contrast to PIM-SM this mode of | |||
| not require any data-driven events. | forwarding does not require any data-driven events. | |||
| The protocol specification in this document assumes familiarity with the | The protocol specification in this document assumes familiarity with | |||
| PIM-SM specification in [4]. Portions of the BIDIR-PIM protocol | the PIM-SM specification in [4]. Portions of the BIDIR-PIM protocol | |||
| operation that are identical to that of PIM-SM are only defined by | operation that are identical to that of PIM-SM are only defined by | |||
| reference. | reference. | |||
| 2. Terminology | 2. Terminology | |||
| In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", | In this document, the key words "MUST", "MUST NOT", "REQUIRED", | |||
| "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | |||
| "OPTIONAL" are to be interpreted as described in RFC 2119 and indicate | and "OPTIONAL" are to be interpreted as described in RFC 2119 [1] and | |||
| requirement levels for compliant BIDIR-PIM implementations. | indicate requirement levels for compliant BIDIR-PIM implementations. | |||
| 2.1. Definitions | 2.1. Definitions | |||
| This specification uses a number of terms to refer to the roles of | This specification uses a number of terms to refer to the roles of | |||
| routers participating in BIDIR-PIM. The following terms have special | routers participating in BIDIR-PIM. The following terms have special | |||
| significance for BIDIR-PIM: | significance for BIDIR-PIM: | |||
| MRIB Multicast Routing Information Base. This is the multicast | MRIB Multicast Routing Information Base. This is the multicast | |||
| topology table, which is typically derived from the unicast | topology table, which is typically derived from the unicast | |||
| routing table, or routing protocols such as MBGP that carry | routing table, or routing protocols such as MBGP that carry | |||
| multicast-specific topology information. It is used by PIM for | multicast-specific topology information. It is used by PIM for | |||
| establishing the RPF interface (used in the forwarding rules). In | establishing the RPF interface (used in the forwarding rules). | |||
| PIM-SM the MRIB is also used to make decisions regarding where to | In PIM-SM the MRIB is also used to make decisions regarding | |||
| forward Join/Prune messages whereas in BIDIR-PIM it is used as a | where to forward Join/Prune messages whereas in BIDIR-PIM it is | |||
| source for routing metrics for the DF election process. | used as a source for routing metrics for the DF election | |||
| process. | ||||
| Rendezvous Point Address (RPA): | Rendezvous Point Address (RPA): | |||
| An RPA is an address that is used as the root of the distribution | An RPA is an address that is used as the root of the | |||
| tree for a range of multicast groups. The RPA must be routable | distribution tree for a range of multicast groups. The RPA must | |||
| from all routers in the PIM domain. The RPA does not need to | be routable from all routers in the PIM domain. The RPA does | |||
| correspond to an address for an interface of a real router. In | not need to correspond to an address for an interface of a real | |||
| this respect BIDIR-PIM differs from PIM-SM which requires an | router. In this respect BIDIR-PIM differs from PIM-SM which | |||
| actual router to be configured as the Rendezvous Point (RP). Join | requires an actual router to be configured as the Rendezvous | |||
| messages from receivers for a BIDIR-PIM group propagate hop-by-hop | Point (RP). Join messages from receivers for a BIDIR-PIM group | |||
| towards the RPA. | propagate hop-by-hop towards the RPA. | |||
| Rendezvous Point Link (RPL): | Rendezvous Point Link (RPL): | |||
| An RPL for a particular RPA is the physical link to which the RPA | An RPL for a particular RPA is the physical link to which the | |||
| belongs. In BIDIR-PIM all multicast traffic to groups mapping to a | RPA belongs. In BIDIR-PIM all multicast traffic to groups | |||
| specific RPA is forwarded on the RPL of that RPA. The RPL is | mapping to a specific RPA is forwarded on the RPL of that RPA. | |||
| special within a BIDIR-PIM domain as it is the only link on which | The RPL is special within a BIDIR-PIM domain as it is the only | |||
| a Designated Forwarder election does not take place (see DF | link on which a Designated Forwarder election does not take | |||
| definition below). | place (see DF definition below). | |||
| Upstream | Upstream | |||
| Towards the root (RPA) of the tree. The direction used by packets | Towards the root (RPA) of the tree. The direction used by | |||
| traveling from sources to the RPL. | packets traveling from sources to the RPL. | |||
| Downstream | Downstream | |||
| Away from the root of the tree. The direction on which packets | Away from the root of the tree. The direction on which packets | |||
| travel from the RPL to receivers. | travel from the RPL to receivers. | |||
| Designated Forwarder (DF): | Designated Forwarder (DF): | |||
| The protocol presented in this document is largely based on the | The protocol presented in this document is largely based on the | |||
| concept of a Designated Forwarder (DF). A single DF exists for | concept of a Designated Forwarder (DF). A single DF exists for | |||
| each RPA on every link within a BIDIR-PIM domain (this includes | each RPA on every link within a BIDIR-PIM domain (this includes | |||
| both multi-access and point-to-point links). The only exception is | both multi-access and point-to-point links). The only exception | |||
| the RPL on which no DF exists. The DF is the router on the link | is the RPL on which no DF exists. The DF is the router on the | |||
| with the best route to the RPA (determined by comparing MRIB | link with the best route to the RPA (determined by comparing | |||
| provided metrics). A DF for a given RPA is in charge of forwarding | MRIB provided metrics). A DF for a given RPA is in charge of | |||
| downstream traffic onto its link, and forwarding upstream traffic | forwarding downstream traffic onto its link, and forwarding | |||
| from its link towards the RPL. It does this for all the bi- | upstream traffic from its link towards the RPL. It does this | |||
| directional groups that map to the RPA. The DF on a link is also | for all the bi-directional groups that map to the RPA. The DF | |||
| responsible for processing Join messages from downstream routers | on a link is also responsible for processing Join messages from | |||
| on the link as well as ensuring that packets are forwarded to | downstream routers on the link as well as ensuring that packets | |||
| local receivers (discovered through a local membership mechanism | are forwarded to local receivers (discovered through a local | |||
| such as MLD [3] or IGMP [2]). | membership mechanism such as MLD [3] or IGMP [2]). | |||
| RPF Interface | RPF Interface | |||
| RPF stands for "Reverse Path Forwarding". The RPF Interface of a | RPF stands for "Reverse Path Forwarding". The RPF Interface of | |||
| router with respect to an address is the interface that the MRIB | a router with respect to an address is the interface that the | |||
| indicates should be used to reach that address. In the case of a | MRIB indicates should be used to reach that address. In the | |||
| BIDIR-PIM multicast group, the RPF interface is determined by | case of a BIDIR-PIM multicast group, the RPF interface is | |||
| looking up the RPA in the MRIB. The RPF information determines the | determined by looking up the RPA in the MRIB. The RPF | |||
| interface of the router that would be used to send packets towards | information determines the interface of the router that would | |||
| the RPL for the group. | be used to send packets towards the RPL for the group. | |||
| RPF Neighbor | RPF Neighbor | |||
| The RPF Neighbor of a router with respect to an address is the | The RPF Neighbor of a router with respect to an address is the | |||
| neighbor that the MRIB indicates should be used to reach that | neighbor that the MRIB indicates should be used to reach that | |||
| address. Note that in BIDIR-PIM, the RPF neighbor for a group is | address. Note that in BIDIR-PIM, the RPF neighbor for a group | |||
| not necessarily the router on the RPF interface that Join messages | is not necessarily the router on the RPF interface that Join | |||
| for that group would be directed to (Join messages are only | messages for that group would be directed to (Join messages are | |||
| directed to the DF on the RPF interface for the group). | only directed to the DF on the RPF interface for the group). | |||
| TIB Tree Information Base. This is the collection of state at a PIM | TIB Tree Information Base. This is the collection of state at a | |||
| router that has been created by receiving PIM Join/Prune messages, | PIM router that has been created by receiving PIM Join/Prune | |||
| PIM DF election messages and IGMP or MLD information from local | messages, PIM DF election messages and IGMP or MLD information | |||
| hosts. It essentially stores the state of all multicast | from local hosts. It essentially stores the state of all | |||
| distribution trees at that router. | multicast distribution trees at that router. | |||
| MFIB Multicast Forwarding Information Base. The TIB holds all the | MFIB Multicast Forwarding Information Base. The TIB holds all the | |||
| state that is necessary to forward multicast packets at a router. | state that is necessary to forward multicast packets at a | |||
| However, although this specification defines forwarding in terms | router. However, although this specification defines | |||
| of the TIB, to actually forward packets using the TIB is very | forwarding in terms of the TIB, to actually forward packets | |||
| inefficient. Instead a real router implementation will normally | using the TIB is very inefficient. Instead a real router | |||
| build an efficient MFIB from the TIB state to perform forwarding. | implementation will normally build an efficient MFIB from the | |||
| How this is done is implementation-specific, and is not discussed | TIB state to perform forwarding. How this is done is | |||
| in this document. | implementation-specific, and is not discussed in this document. | |||
| 2.2. Pseudocode Notation | 2.2. Pseudocode Notation | |||
| We use set notation in several places in this specification. | We use set notation in several places in this specification. | |||
| A (+) B | A (+) B | |||
| is the union of two sets A and B. | is the union of two sets A and B. | |||
| A (-) B | A (-) B | |||
| is the elements of set A that are not in set B. | is the elements of set A that are not in set B. | |||
| NULL | NULL | |||
| is the empty set or list. | is the empty set or list. | |||
| In addition we use C-like syntax: | In addition we use C-like syntax: | |||
| = denotes assignment of a variable. | = denotes assignment of a variable. | |||
| == denotes a comparison for equality. | == denotes a comparison for equality. | |||
| != denotes a comparison for inequality. | != denotes a comparison for inequality. | |||
| Braces { and } are used for grouping. | Braces { and } are used for grouping. | |||
| 3. Protocol Specification | 3. Protocol Specification | |||
| The specification of BIDIR-PIM is broken into several parts: | The specification of BIDIR-PIM is broken into several parts: | |||
| o Section 3.1 details the protocol state stored. | o Section 3.1 details the protocol state stored. | |||
| o Section 3.2 defines the BIDIR-PIM extensions to the PIM-SM [4] | o Section 3.2 defines the BIDIR-PIM extensions to the PIM-SM [4] | |||
| neighbour discovery mechanism. | neighbour discovery mechanism. | |||
| o Section 3.3 specifies the data packet forwarding rules. | o Section 3.3 specifies the data packet forwarding rules. | |||
| o Section 3.4 specifies the BIDIR-PIM Join/Prune generation and | o Section 3.4 specifies the BIDIR-PIM Join/Prune generation and | |||
| processing rules. | processing rules. | |||
| o Designated Forwarder (DF) election is specified in Section 3.5. | o Designated Forwarder (DF) election is specified in Section 3.5. | |||
| o PIM packet formats are specified in Section 3.7. | o PIM packet formats are specified in Section 3.7. | |||
| o A summary of BIDIR-PIM timers and their default values is given in | o A summary of BIDIR-PIM timers and their default values is given in | |||
| Section 3.6. | Section 3.6. | |||
| 3.1. BIDIR-PIM Protocol State | 3.1. BIDIR-PIM Protocol State | |||
| This section specifies all the protocol state that a BIDIR-PIM | This section specifies all the protocol state that a BIDIR-PIM | |||
| implementation should maintain in order to function correctly. We term | implementation should maintain in order to function correctly. We | |||
| this state the Tree Information Base or TIB, as it holds the state of | term this state the Tree Information Base or TIB, as it holds the | |||
| all the multicast distribution trees at this router. In this | state of all the multicast distribution trees at this router. In | |||
| specification we define PIM mechanisms in terms of the TIB. However, | this specification we define PIM mechanisms in terms of the TIB. | |||
| only a very simple implementation would actually implement packet | However, only a very simple implementation would actually implement | |||
| forwarding operations in terms of this state. Most implementations will | packet forwarding operations in terms of this state. Most | |||
| use this state to build a multicast forwarding table, which would then | implementations will use this state to build a multicast forwarding | |||
| be updated when the relevant state in the TIB changes. | table, which would then be updated when the relevant state in the TIB | |||
| changes. | ||||
| Although we specify precisely the state to be kept, this does not mean | Although we specify precisely the state to be kept, this does not | |||
| that an implementation of BIDIR-PIM needs to hold the state in this | mean that an implementation of BIDIR-PIM needs to hold the state in | |||
| form. This is actually an abstract state definition, which is needed in | this form. This is actually an abstract state definition, which is | |||
| order to specify the router's behavior. A BIDIR-PIM implementation is | needed in order to specify the router's behavior. A BIDIR-PIM | |||
| free to hold whatever internal state it requires, and will still be | implementation is free to hold whatever internal state it requires, | |||
| conformant with this specification so long as it results in the same | and will still be conformant with this specification so long as it | |||
| externally visible protocol behavior as an abstract router that holds | results in the same externally visible protocol behavior as an | |||
| the following state. | abstract router that holds the following state. | |||
| We divide TIB state into two sections: | We divide TIB state into two sections: | |||
| RPA state | RPA state | |||
| State that maintains the DF election information for each RPA. | State that maintains the DF election information for each RPA. | |||
| Group state | Group state | |||
| State that maintains a group-specific tree for groups that map to a | State that maintains a group-specific tree for groups that map to | |||
| given RPA. | a given RPA. | |||
| The state that should be kept is described below. Of course, | The state that should be kept is described below. Of course, | |||
| implementations will only maintain state when it is relevant to | implementations will only maintain state when it is relevant to | |||
| forwarding operations - for example, the "NoInfo" state might be assumed | forwarding operations - for example, the "NoInfo" state might be | |||
| from the lack of other state information, rather than being held | assumed from the lack of other state information, rather than being | |||
| explicitly. | held explicitly. | |||
| 3.1.1. General Purpose State | 3.1.1. General Purpose State | |||
| A router holds the following state that is not specific to a RPA or | A router holds the following state that is not specific to a RPA or | |||
| group: | group: | |||
| Neighbor State: | Neighbor State: | |||
| For each neighbor: | For each neighbor: | |||
| o Neighbor's Gen ID. | o Neighbor's Gen ID. | |||
| o Neighbor liveness timer (NLT) | o Neighbor liveness timer (NLT) | |||
| o Other information from neighbor's Hello | o Other information from neighbor's Hello | |||
| For more information on Hello information look at section 3.2 as well as | For more information on Hello information look at section 3.2 as well | |||
| the PIM-SM specification in [4]. | as the PIM-SM specification in [4]. | |||
| 3.1.2. RPA State | 3.1.2. RPA State | |||
| A router maintains a multicast-group to RPA mapping which is built | A router maintains a multicast-group to RPA mapping which is built | |||
| through static configuration or by using an automatic RP discovery | through static configuration or by using an automatic RP discovery | |||
| mechanism like BSR or AUTO-RP (see section 4). For each BIDIR-PIM RPA a | mechanism like BSR or AUTO-RP (see section 4). For each BIDIR-PIM | |||
| router holds the following state: | RPA a router holds the following state: | |||
| o RPA (actual address) | o RPA (actual address) | |||
| Designated Forwarder (DF) State: | Designated Forwarder (DF) State: | |||
| For each router interface: | For each router interface: | |||
| Acting DF information: | Acting DF information: | |||
| o DF IP Address | o DF IP Address | |||
| o DF metric | o DF metric | |||
| Election information: | Election information: | |||
| o Election State | o Election State | |||
| o DF election-Timer (DFT) | o DF election-Timer (DFT) | |||
| o Message-Count (MC) | o Message-Count (MC) | |||
| Current best offer: | Current best offer: | |||
| o IP address of best offering router | o IP address of best offering router | |||
| o Best offering router metric | o Best offering router metric | |||
| Designated Forwarder state is described in section 3.5. | Designated Forwarder state is described in section 3.5. | |||
| 3.1.3. Group State | 3.1.3. Group State | |||
| For every group G a router keeps the following state: | For every group G a router keeps the following state: | |||
| Group state: | Group state: | |||
| For each interface: | For each interface: | |||
| Local Membership: | Local Membership: | |||
| o State: One of {"NoInfo", "Include"} | o State: One of {"NoInfo", "Include"} | |||
| PIM Join/Prune State: | PIM Join/Prune State: | |||
| o State: One of {"NoInfo" (NI), "Join" (J), | o State: One of {"NoInfo" (NI), "Join" (J), | |||
| "PrunePending" (PP)} | "PrunePending" (PP)} | |||
| o Prune Pending Timer (PPT) | o Prune Pending Timer (PPT) | |||
| o Join/Prune Expiry Timer (ET) | o Join/Prune Expiry Timer (ET) | |||
| Not interface specific: | Not interface specific: | |||
| o Upstream Join/Prune Timer (JT) | o Upstream Join/Prune Timer (JT) | |||
| o Last RPA Used | o Last RPA Used | |||
| Local membership is the result of the local membership mechanism (such | Local membership is the result of the local membership mechanism | |||
| as IGMP [2]) running on that interface. This information is used by the | (such as IGMP [2]) running on that interface. This information is | |||
| pim_include(*,G) macro described in section 3.1.4. | used by the pim_include(*,G) macro described in section 3.1.4. | |||
| PIM Join/Prune state is the result of receiving PIM (*,G) Join/Prune | PIM Join/Prune state is the result of receiving PIM (*,G) Join/Prune | |||
| messages on this interface, and is specified in section 3.4.1. The state | messages on this interface, and is specified in section 3.4.1. The | |||
| is used by the macros that calculate the outgoing interface list in | state is used by the macros that calculate the outgoing interface | |||
| section 3.1.4, and in the JoinDesired(G) macro (defined in section | list in section 3.1.4, and in the JoinDesired(G) macro (defined in | |||
| 3.4.2) that is used in deciding whether a Join(*,G) should be sent | section 3.4.2) that is used in deciding whether a Join(*,G) should be | |||
| upstream. | sent upstream. | |||
| The upstream Join/Prune timer is used to send out periodic Join(*,G) | The upstream Join/Prune timer is used to send out periodic Join(*,G) | |||
| messages, and to override Prune(*,G) messages from peers on an upstream | messages, and to override Prune(*,G) messages from peers on an | |||
| LAN interface. | upstream LAN interface. | |||
| The last RPA used must be stored because if the group to RPA mapping | The last RPA used must be stored because if the group to RPA mapping | |||
| changes (see RP Set changes in [4]) then state must be torn down and | changes (see RP Set changes in [4]) then state must be torn down and | |||
| rebuilt for groups whose RPA changes. | rebuilt for groups whose RPA changes. | |||
| 3.1.4. State Summarization Macros | 3.1.4. State Summarization Macros | |||
| Using this state, we define the following "macro" definitions which we | Using this state, we define the following "macro" definitions which | |||
| will use in the descriptions of the state machines and pseudocode in the | we will use in the descriptions of the state machines and pseudocode | |||
| following sections. | in the following sections. | |||
| olist(G) = | olist(G) = | |||
| RPF_interface(RPA(G)) (+) joins(G) (+) pim_include(G) | RPF_interface(RPA(G)) (+) joins(G) (+) pim_include(G) | |||
| RPF_interface(RPA) is the interface the MRIB indicates would be used to | RPF_interface(RPA) is the interface the MRIB indicates would be used | |||
| route packets to RPA. The olist(G) is the list of interfaces on which | to route packets to RPA. The olist(G) is the list of interfaces on | |||
| packets to group G must be forwarded. | which packets to group G must be forwarded. | |||
| The macro pim_include(G) indicates the interfaces to which traffic might | The macro pim_include(G) indicates the interfaces to which traffic | |||
| be forwarded because of hosts that are local members on that interface. | might be forwarded because of hosts that are local members on that | |||
| interface. | ||||
| pim_include(G) = | pim_include(G) = | |||
| { all interfaces I such that: | { all interfaces I such that: | |||
| I_am_DF(RPA(G),I) AND local_receiver_include(G,I) } | I_am_DF(RPA(G),I) AND local_receiver_include(G,I) } | |||
| The clause "I_am_DF(RPA,I)" is TRUE if the router is in the Win or | The clause "I_am_DF(RPA,I)" is TRUE if the router is in the Win or | |||
| Backoff states in the DF election state machine (described in section | Backoff states in the DF election state machine (described in section | |||
| 3.5) for the given RPA on interface I. Otherwise it is FALSE. | 3.5) for the given RPA on interface I. Otherwise it is FALSE. | |||
| The clause "local_receiver_include(G,I)" is true if the IGMP module, MLD | The clause "local_receiver_include(G,I)" is true if the IGMP module, | |||
| module or other local membership mechanism has determined that there are | MLD module or other local membership mechanism has determined that | |||
| local members on interface I that desire to receive traffic sent to | there are local members on interface I that desire to receive traffic | |||
| group G. | sent to group G. | |||
| The set "joins(G)" is the set of all interfaces on which the router has | The set "joins(G)" is the set of all interfaces on which the router | |||
| received (*,G) Joins: | has received (*,G) Joins: | |||
| joins(G) = | joins(G) = | |||
| { all interfaces I such that | { all interfaces I such that | |||
| I_am_DF(RPA(G),I) AND | I_am_DF(RPA(G),I) AND | |||
| DownstreamJPState(G,I) is either Joined or PrunePending } | DownstreamJPState(G,I) is either Joined or PrunePending } | |||
| DownstreamJPState(G,I) is the state of the finite state machine in | DownstreamJPState(G,I) is the state of the finite state machine in | |||
| section 3.4.1. | section 3.4.1. | |||
| RPF_DF(RPA) is the neighbor that Join messages must be sent to in order | RPF_DF(RPA) is the neighbor that Join messages must be sent to in | |||
| to build the group shared tree rooted at the RPL for the given RPA. This | order to build the group shared tree rooted at the RPL for the given | |||
| is the Designated-Forwarder on the RPF_interface(RPA). | RPA. This is the Designated-Forwarder on the RPF_interface(RPA). | |||
| 3.2. PIM Neighbor Discovery | 3.2. PIM Neighbor Discovery | |||
| PIM routers exchange PIM-Hello messages with their neighboring PIM | PIM routers exchange PIM-Hello messages with their neighboring PIM | |||
| routers. These messages are used to update the Neighbor State described | routers. These messages are used to update the Neighbor State | |||
| in section 3.1. The procedures for generating and processing Hello | described in section 3.1. The procedures for generating and | |||
| messages as well as maintaining Neighbor State are specified in the PIM- | processing Hello messages as well as maintaining Neighbor State are | |||
| SM [4] documentation. | specified in the PIM-SM [4] documentation. | |||
| Bidir PIM introduces the Bidir_Capable PIM-Hello option that MUST be | Bidir PIM introduces the Bidir_Capable PIM-Hello option that MUST be | |||
| included in all Hello messages from a Bidir-PIM capable router. The | included in all Hello messages from a Bidir-PIM capable router. The | |||
| Bidir_Capable option advertises the router's ability to participate in | Bidir_Capable option advertises the router's ability to participate | |||
| the Bidir-PIM protocol. The format of the Bidir_Capable option is | in the Bidir-PIM protocol. The format of the Bidir_Capable option is | |||
| described in section 3.7. | described in section 3.7. | |||
| If a Bidir PIM router receives a PIM-Hello message that does not contain | If a Bidir PIM router receives a PIM-Hello message that does not | |||
| the Bidir_Capable option from one of its neighbours, the error must be | contain the Bidir_Capable option from one of its neighbours, the | |||
| logged to the router administrator in a rate-limited manner. | error must be logged to the router administrator in a rate-limited | |||
| manner. | ||||
| 3.3. Data Packet Forwarding Rules | 3.3. Data Packet Forwarding Rules | |||
| For groups mapping to a given RPA, the following responsibilities are | For groups mapping to a given RPA, the following responsibilities are | |||
| uniquely assigned to the DF for that RPA on each link: | uniquely assigned to the DF for that RPA on each link: | |||
| o The DF is the only router that forwards packets traveling downstream | ||||
| onto the link. | ||||
| o The DF is the only router that picks-up upstream traveling packets off | o The DF is the only router that forwards packets traveling | |||
| the link to forward towards the RPL. | downstream onto the link. | |||
| Non-DF routers on a link, that use that link as their RPF interface to | o The DF is the only router that picks-up upstream traveling packets | |||
| reach the RPA, may perform the following forwarding actions for | off the link to forward towards the RPL. | |||
| bidirectional groups: | ||||
| o Forward packets from the link towards downstream receivers. | Non-DF routers on a link, that use that link as their RPF interface | |||
| to reach the RPA, may perform the following forwarding actions for | ||||
| bidirectional groups: | ||||
| o Forward packets from downstream sources onto the link (provided they | o Forward packets from the link towards downstream receivers. | |||
| are the DF for the downstream link from which the packet was picked- | ||||
| up). | ||||
| The BIDIR-PIM packet forwarding rules are defined below in pseudocode. | o Forward packets from downstream sources onto the link (provided | |||
| they are the DF for the downstream link from which the packet was | ||||
| picked-up). | ||||
| iif is the incoming interface of the packet. | The BIDIR-PIM packet forwarding rules are defined below in | |||
| G is the destination address of the packet (group address). | pseudocode. | |||
| RPA is the Rendezvous Point Address for this group. | ||||
| First we check to see whether the packet should be accepted based on TIB | iif is the incoming interface of the packet. | |||
| state and the interface that the packet arrived on. A packet is accepted | G is the destination address of the packet (group address). | |||
| if it arrives on the RPF_interface to reach the RPA (downstream | RPA is the Rendezvous Point Address for this group. | |||
| traveling packet) or if the router is the DF on the interface the packet | ||||
| arrives (upstream traveling packet). | ||||
| If the packet should be forwarded we build an outgoing interface list | First we check to see whether the packet should be accepted based on | |||
| for the packet. | TIB state and the interface that the packet arrived on. A packet is | |||
| accepted if it arrives on the RPF_interface to reach the RPA | ||||
| (downstream traveling packet) or if the router is the DF on the | ||||
| interface the packet arrives (upstream traveling packet). | ||||
| Finally we remove the incoming interface from the outgoing interface | If the packet should be forwarded we build an outgoing interface list | |||
| list we've created, and if the resulting outgoing interface list is not | for the packet. | |||
| empty, we forward the packet out of those interfaces. | ||||
| On receipt of data to G on interface iif: | Finally we remove the incoming interface from the outgoing interface | |||
| list we've created, and if the resulting outgoing interface list is | ||||
| not empty, we forward the packet out of those interfaces. | ||||
| if( iif == RPF_interface(RPA) || I_am_DF(RPA,iif) ) { | On receipt of data to G on interface iif: | |||
| oiflist = olist(G) (-) iif | if( iif == RPF_interface(RPA) || I_am_DF(RPA,iif) ) { | |||
| forward packet on all interfaces in oiflist | oiflist = olist(G) (-) iif | |||
| } | forward packet on all interfaces in oiflist | |||
| } | ||||
| 3.3.1. Upstream Forwarding at RP | 3.3.1. Upstream Forwarding at RP | |||
| When configuring a BIDIR-PIM domain it is possible to assign the | When configuring a BIDIR-PIM domain it is possible to assign the | |||
| Rendezvous Point Address (RPA) such that it does not belong to a | Rendezvous Point Address (RPA) such that it does not belong to a | |||
| physical box but instead is simply a routable address. Routers that have | physical box but instead is simply a routable address. Routers that | |||
| interfaces on the RPL that the RPA belongs to will upstream forward | have interfaces on the RPL that the RPA belongs to will upstream | |||
| traffic onto the link. Joins from receivers in the domain will propagate | forward traffic onto the link. Joins from receivers in the domain | |||
| hop-by-hop till they reach one of the routers connected to the RPL where | will propagate hop-by-hop till they reach one of the routers | |||
| they will terminate (as there will be no DF elected on the RPL). | connected to the RPL where they will terminate (as there will be no | |||
| DF elected on the RPL). | ||||
| If instead the administrator chooses to configure the RPA to be the | If instead the administrator chooses to configure the RPA to be the | |||
| address of a physical interface of a specific router then nothing | address of a physical interface of a specific router then nothing | |||
| changes. That router must still upstream forward traffic on to the RPL | changes. That router must still upstream forward traffic on to the | |||
| and behave no differently than any other router with an interface on the | RPL and behave no differently than any other router with an interface | |||
| RPL. | on the RPL. | |||
| To configure a BIDIR-PIM network to operate in a mode similar to that of | To configure a BIDIR-PIM network to operate in a mode similar to that | |||
| PIM-SM where a single router (the RP) is acting as the root of the | of PIM-SM where a single router (the RP) is acting as the root of the | |||
| distribution tree, the RPA can be configured to be the loopback | distribution tree, the RPA can be configured to be the loopback | |||
| interface of a router. | interface of a router. | |||
| 3.3.2. Source-Only Branches | 3.3.2. Source-Only Branches | |||
| Source-only branches of the distribution tree for a group G are branches | Source-only branches of the distribution tree for a group G are | |||
| which do not lead to any receivers, but which are used to forward | branches which do not lead to any receivers, but which are used to | |||
| packets traveling upstream from sources towards the RPL. Routers along | forward packets traveling upstream from sources towards the RPL. | |||
| source-only branches only have the RPF_interface to the RPA in their | Routers along source-only branches only have the RPF_interface to the | |||
| olist for G and hence do not need to maintain any group specific state. | RPA in their olist for G and hence do not need to maintain any group | |||
| Upstream forwarding can be performed using only RPA specific state. An | specific state. Upstream forwarding can be performed using only RPA | |||
| implementation may decide to maintain group state for source-only | specific state. An implementation may decide to maintain group state | |||
| branches for accounting or performance reasons. However, doing so | for source-only branches for accounting or performance reasons. | |||
| requires data-driven events (to discover the groups with active sources) | However, doing so requires data-driven events (to discover the groups | |||
| thus sacrificing one of the main benefits of Bidir PIM. | with active sources) thus sacrificing one of the main benefits of | |||
| Bidir PIM. | ||||
| 3.3.3. Directly Connected Sources | 3.3.3. Directly Connected Sources | |||
| A major advantage of using a Designated Forwarder in BIDIR-PIM compared | A major advantage of using a Designated Forwarder in BIDIR-PIM | |||
| to PIM-SM is that special treatment is no longer required for sources | compared to PIM-SM is that special treatment is no longer required | |||
| that are directly connected to a router. Data from such sources does not | for sources that are directly connected to a router. Data from such | |||
| need to be differentiated from other multicast traffic and will | sources does not need to be differentiated from other multicast | |||
| automatically be picked up by the DF and forwarded upstream. This | traffic and will automatically be picked up by the DF and forwarded | |||
| removes the need for performing a directly-connected-source check for | upstream. This removes the need for performing a directly-connected- | |||
| data to groups that do not have existing state. | source check for data to groups that do not have existing state. | |||
| 3.4. PIM Join/Prune Messages | 3.4. PIM Join/Prune Messages | |||
| BIDIR-PIM Join/Prune messages are used to construct group specific | BIDIR-PIM Join/Prune messages are used to construct group specific | |||
| distribution trees between receivers and the RPL. Joins are originated | distribution trees between receivers and the RPL. Joins are | |||
| by last-hop routers that are elected as the DF on an interface with | originated by last-hop routers that are elected as the DF on an | |||
| directly connected receivers. The Joins propagate hop-by-hop towards the | interface with directly connected receivers. The Joins propagate hop- | |||
| RPA till they reach a router connected to the RPL. | by-hop towards the RPA till they reach a router connected to the RPL. | |||
| A BIDIR-PIM Join/Prune message consists of a list of Joined and Pruned | A BIDIR-PIM Join/Prune message consists of a list of Joined and | |||
| Groups. When processing a received Join/Prune message, each Joined or | Pruned Groups. When processing a received Join/Prune message, each | |||
| Pruned Group is effectively considered individually by applying the | Joined or Pruned Group is effectively considered individually by | |||
| following state machines. When considering a Join/Prune message whose | applying the following state machines. When considering a Join/Prune | |||
| PIM Destination field addresses this router, (*,G) Joins and Prunes can | message whose PIM Destination field addresses this router, (*,G) | |||
| affect the downstream state machine. When considering a Join/Prune | Joins and Prunes can affect the downstream state machine. When | |||
| message whose PIM Destination field addresses another router, most Join | considering a Join/Prune message whose PIM Destination field | |||
| or Prune entries could affect the upstream state machine. | addresses another router, most Join or Prune entries could affect the | |||
| upstream state machine. | ||||
| 3.4.1. Receiving (*,G) Join/Prune Messages | 3.4.1. Receiving (*,G) Join/Prune Messages | |||
| When a router receives a Join(*,G) or Prune(*,G) it MUST first check to | When a router receives a Join(*,G) or Prune(*,G) it MUST first check | |||
| see whether the RP address in the message matches RPA(G) (the router's | to see whether the RP address in the message matches RPA(G) (the | |||
| idea of what the Rendezvous Point Address is). If the RP address in the | router's idea of what the Rendezvous Point Address is). If the RP | |||
| message does not match RPA(G) the Join or Prune MUST be silently | address in the message does not match RPA(G) the Join or Prune MUST | |||
| dropped. | be silently dropped. | |||
| If a router has no RPA information for the group (e.g. has not recently | If a router has no RPA information for the group (e.g. has not | |||
| received a BSR message) then it MAY choose to accept Join(*,G) or | recently received a BSR message) then it MAY choose to accept | |||
| Prune(*,G) and treat the RP address in the message as RPA(G). If the | Join(*,G) or Prune(*,G) and treat the RP address in the message as | |||
| newly discovered RPA did not previously exist for any other group, a DF | RPA(G). If the newly discovered RPA did not previously exist for any | |||
| election has to be initiated. | other group, a DF election has to be initiated. | |||
| Note that a router will process a Join(*,G) targeted to itself even if | Note that a router will process a Join(*,G) targeted to itself even | |||
| it is not the DF for RP(G) on the interface on which the message was | if it is not the DF for RP(G) on the interface on which the message | |||
| received. This is an optimisation to eliminate the Join delay of one | was received. This is an optimisation to eliminate the Join delay of | |||
| Join period (t_periodic) in the case where a new DF processes the | one Join period (t_periodic) in the case where a new DF processes the | |||
| received Pass and Join messages in reverse order. The BIDIR-PIM | received Pass and Join messages in reverse order. The BIDIR-PIM | |||
| forwarding logic will ensure that data packets are not forwarded on such | forwarding logic will ensure that data packets are not forwarded on | |||
| an interface while the router is no the DF (unless it is the | such an interface while the router is no the DF (unless it is the | |||
| RPF_interface towards the RPA). | RPF_interface towards the RPA). | |||
| The per-interface state-machine for receiving (*,G) Join/Prune Messages | The per-interface state-machine for receiving (*,G) Join/Prune | |||
| is given below. There are three states: | Messages is given below. There are three states: | |||
| NoInfo (NI) | NoInfo (NI) | |||
| The interface has no (*,G) Join state and no timers running. | The interface has no (*,G) Join state and no timers running. | |||
| Join (J) | Join (J) | |||
| The interface has (*,G) Join state. If the router is the DF on | The interface has (*,G) Join state. If the router is the DF on | |||
| this interface (I_am_DF(RPA(G),I) is TRUE), the Join state | this interface (I_am_DF(RPA(G),I) is TRUE), the Join state will | |||
| will cause us to forward packets destined for G on this | cause us to forward packets destined for G on this interface. | |||
| interface. | ||||
| PrunePending (PP) | PrunePending (PP) | |||
| The router has received a Prune(*,G) on this interface from a | The router has received a Prune(*,G) on this interface from a | |||
| downstream neighbor and is waiting to see whether the prune | downstream neighbor and is waiting to see whether the prune | |||
| will be overridden by another downstream router. For | will be overridden by another downstream router. For | |||
| forwarding purposes, the PrunePending state functions exactly | forwarding purposes, the PrunePending state functions exactly | |||
| like the Join state. | like the Join state. | |||
| In addition the state-machine uses two timers: | In addition the state-machine uses two timers: | |||
| ExpiryTimer (ET) | ExpiryTimer (ET) | |||
| This timer is restarted when a valid Join(*,G) is received. | This timer is restarted when a valid Join(*,G) is received. | |||
| Expiry of the ExpiryTimer causes the interface state to revert | Expiry of the ExpiryTimer causes the interface state to revert | |||
| to NoInfo for this group. | to NoInfo for this group. | |||
| PrunePendingTimer (PPT) | PrunePendingTimer (PPT) | |||
| This timer is set when a valid Prune(*,G) is received. Expiry | This timer is set when a valid Prune(*,G) is received. Expiry | |||
| of the PrunePendingTimer causes the interface state to revert | of the PrunePendingTimer causes the interface state to revert | |||
| to NoInfo for this group. | to NoInfo for this group. | |||
| Figure 1: Downstream group per-interface state-machine in tabular form | Figure 1: Downstream group per-interface state-machine in tabular form | |||
| +----------------+------------------------------------------------------+ | +---------------++---------------------------------------------------+ | |||
| | | Prev State | | | || Prev State | | |||
| | Event +----------------+------------------+------------------+ | |Event ++---------------+-----------------+-----------------+ | |||
| | | NoInfo (NI) | Join (J) | Prune Pending | | | || NoInfo (NI) | Join (J) | Prune Pending | | |||
| | | | | (PP) | | | || | | (PP) | | |||
| +----------------+----------------+------------------+------------------+ | +---------------++---------------+-----------------+-----------------+ | |||
| | | -> J state | -> J state | -> J state | | | || -> J state | -> J state | -> J state | | |||
| | Receive | start Expiry | restart Expiry | restart Expiry | | |Receive || start Expiry | restart Expiry | restart Expiry | | |||
| | Join(*,G) | Timer | Timer | Timer; stop | | |Join(*,G) || Timer | Timer | Timer; stop | | |||
| | | | | Prune Pending | | | || | | Prune Pending | | |||
| | | | | Timer | | | || | | Timer | | |||
| +----------------+----------------+------------------+------------------+ | +---------------++---------------+-----------------+-----------------+ | |||
| | Receive | - | -> PP state | -> PP state | | |Receive || - | -> PP state | -> PP state | | |||
| | Prune(*,G) | | start Prune | | | |Prune(*,G) || | start Prune | | | |||
| | | | Pending Timer | | | | || | Pending Timer | | | |||
| +----------------+----------------+------------------+------------------+ | +---------------++---------------+-----------------+-----------------+ | |||
| | Prune Pending | - | - | -> NI state | | |Prune Pending || - | - | -> NI state | | |||
| | Timer Expires | | | Send Prune- | | |Timer Expires || | | Send Prune- | | |||
| | | | | Echo(*,G) | | | || | | Echo(*,G) | | |||
| +----------------+----------------+------------------+------------------+ | +---------------++---------------+-----------------+-----------------+ | |||
| | Expiry Timer | - | -> NI state | -> NI state | | |Expiry Timer || - | -> NI state | -> NI state | | |||
| | Expires | | | | | |Expires || | | | | |||
| +----------------+----------------+------------------+------------------+ | +---------------++---------------+-----------------+-----------------+ | |||
| | Stop Being DF | - | -> NI state | -> NI state | | |Stop Being DF || - | -> NI state | -> NI state | | |||
| | on I | | | | | |on I || | | | | |||
| +----------------+----------------+------------------+------------------+ | +---------------++---------------+-----------------+-----------------+ | |||
| The transition events "Receive Join(*,G)" and "Receive Prune(*,G)" imply | The transition events "Receive Join(*,G)" and "Receive Prune(*,G)" | |||
| receiving a Join or Prune targeted to this router's address on the | imply receiving a Join or Prune targeted to this router's address on | |||
| received interface. If the destination address is not correct, these | the received interface. If the destination address is not correct, | |||
| state transitions in this state machine must not occur, although seeing | these state transitions in this state machine must not occur, | |||
| such a packet may cause state transitions in other state machines. | although seeing such a packet may cause state transitions in other | |||
| state machines. | ||||
| On unnumbered interfaces on point-to-point links, the router's address | On unnumbered interfaces on point-to-point links, the router's | |||
| should be the same as the source address it chose for the Hello packet | address should be the same as the source address it chose for the | |||
| it sent over that interface. However, on point-to-point links we also | Hello packet it sent over that interface. However, on point-to-point | |||
| RECOMMEND that PIM messages with a destination address of all zeros are | links we also RECOMMEND that PIM messages with a destination address | |||
| also accepted. | of all zeros are also accepted. | |||
| The transition event "Stop being DF" implies a DF re-election taking | The transition event "Stop being DF" implies a DF re-election taking | |||
| place on this router interface for RPA(G) and the router changing status | place on this router interface for RPA(G) and the router changing | |||
| from being the active DF to being a non-DF router (the value of the | status from being the active DF to being a non-DF router (the value | |||
| I_am_DF macro changing to FALSE). | of the I_am_DF macro changing to FALSE). | |||
| When ExpiryTimer is started or restarted, it is set to the HoldTime from | When ExpiryTimer is started or restarted, it is set to the HoldTime | |||
| the triggering received Join/Prune message. | from the triggering received Join/Prune message. | |||
| When PrunePendingTimer is started, it is set to the | When PrunePendingTimer is started, it is set to the | |||
| J/P_Override_Interval if the router has more than one neighbor on that | J/P_Override_Interval if the router has more than one neighbor on | |||
| interface; otherwise it is set to zero causing it to expire immediately. | that interface; otherwise it is set to zero causing it to expire | |||
| immediately. | ||||
| The action "Send PruneEcho(*,G)" is triggered when the router stops | The action "Send PruneEcho(*,G)" is triggered when the router stops | |||
| forwarding on an interface as a result of a prune. A PruneEcho(*,G) is | forwarding on an interface as a result of a prune. A PruneEcho(*,G) | |||
| simply a Prune(*,G) message sent by the upstream router to itself on a | is simply a Prune(*,G) message sent by the upstream router to itself | |||
| LAN. Its purpose is to add additional reliability so that if a Prune | on a LAN. Its purpose is to add additional reliability so that if a | |||
| that should have been overridden by another router is lost locally on | Prune that should have been overridden by another router is lost | |||
| the LAN, then the PruneEcho may be received and cause the override to | locally on the LAN, then the PruneEcho may be received and cause the | |||
| happen. A PruneEcho(*,G) need not be sent when the router has only one | override to happen. A PruneEcho(*,G) need not be sent when the | |||
| neighbour on the link. | router has only one neighbour on the link. | |||
| 3.4.2. Sending Join/Prune Messages | 3.4.2. Sending Join/Prune Messages | |||
| The downstream per-interface state-machines described above hold join | The downstream per-interface state-machines described above hold join | |||
| state from downstream PIM routers. This state then determines whether a | state from downstream PIM routers. This state then determines whether | |||
| router needs to propagate a Join(*,G) upstream towards the RPA. Such | a router needs to propagate a Join(*,G) upstream towards the RPA. | |||
| Join(*,G) messages are sent on the RPF_interface towards the RPA and are | Such Join(*,G) messages are sent on the RPF_interface towards the RPA | |||
| targeted at the DF on that interface. | and are targeted at the DF on that interface. | |||
| If a router wishes to propagate a Join(*,G) upstream, it must also watch | ||||
| for messages on its upstream interface from other routers on that | ||||
| subnet, and these may modify its behavior. If it sees a Join(*,G) to | ||||
| the correct upstream neighbor, it should suppress its own Join(*,G). If | ||||
| it sees a Prune(*,G) to the correct upstream neighbor, it should be | ||||
| prepared to override that prune by sending a Join(*,G) almost | ||||
| immediately. Finally, if it sees the Generation ID (see PIM-SM | ||||
| specification [4]) of the correct upstream neighbor change, it knows | ||||
| that the upstream neighbor has lost state, and it should be prepared to | ||||
| refresh the state by sending a Join(*,G) almost immediately. | ||||
| In addition changes in the next hop towards the RPA trigger a prune off | ||||
| from the old next hop, and join towards the new next hop. Such a change | ||||
| can be caused by the following two events: | ||||
| o The MRIB indicates that the RPF Interface towards the RPA has | If a router wishes to propagate a Join(*,G) upstream, it must also | |||
| changed. In this case the DF on the new RPF_interface becomes | watch for messages on its upstream interface from other routers on | |||
| the new RPF Neighbour. | that subnet, and these may modify its behavior. If it sees a | |||
| Join(*,G) to the correct upstream neighbor, it should suppress its | ||||
| own Join(*,G). If it sees a Prune(*,G) to the correct upstream | ||||
| neighbor, it should be prepared to override that prune by sending a | ||||
| Join(*,G) almost immediately. Finally, if it sees the Generation ID | ||||
| (see PIM-SM specification [4]) of the correct upstream neighbor | ||||
| change, it knows that the upstream neighbor has lost state, and it | ||||
| should be prepared to refresh the state by sending a Join(*,G) almost | ||||
| immediately. | ||||
| o There is a DF re-election on the RPF_interface and a new router | In addition changes in the next hop towards the RPA trigger a prune | |||
| emerges as the DF. | off from the old next hop, and join towards the new next hop. Such a | |||
| change can be caused by the following two events: | ||||
| The upstream (*,G) state-machine only contains two states: | o The MRIB indicates that the RPF Interface towards the RPA has | |||
| changed. In this case the DF on the new RPF_interface becomes | ||||
| the new RPF Neighbour. | ||||
| Not Joined | o There is a DF re-election on the RPF_interface and a new router | |||
| The downstream state-machines indicate that the router does not | emerges as the DF. | |||
| need to join the RPA tree for this group. | ||||
| Joined | The upstream (*,G) state-machine only contains two states: | |||
| The downstream state-machines indicate that the router would like | ||||
| to join the RPA tree for this group. | ||||
| In addition, one timer JT(G) is kept which is used to trigger the | Not Joined | |||
| sending of a Join(*,G) to the upstream next hop towards the RPA (the DF | The downstream state-machines indicate that the router does not | |||
| on the RPF_interface for RPA(G)). | need to join the RPA tree for this group. | |||
| +-----------------------------------+ | Joined | |||
| | Figures omitted from text version | | The downstream state-machines indicate that the router would like | |||
| +-----------------------------------+ | to join the RPA tree for this group. | |||
| Figure 2: Upstream group state-machine | In addition, one timer JT(G) is kept which is used to trigger the | |||
| sending of a Join(*,G) to the upstream next hop towards the RPA (the | ||||
| DF on the RPF_interface for RPA(G)). | ||||
| In tabular form, the state machine is: | Figure 2: Upstream group state-machine in tabular form | |||
| +----------------------+------------------------------------------------+ | +---------------------+----------------------------------------------+ | |||
| | | Event | | | | Event | | |||
| | Prev State +------------------------+-----------------------+ | | Prev State +-----------------------+----------------------+ | |||
| | | JoinDesired(G) | JoinDesired(G) | | | | JoinDesired(G) | JoinDesired(G) | | |||
| | | ->True | ->False | | | | ->True | ->False | | |||
| +----------------------+------------------------+-----------------------+ | +---------------------+-----------------------+----------------------+ | |||
| | | -> J state | - | | | | -> J state | - | | |||
| | NotJoined (NJ) | Send Join(*,G); | | | | NotJoined (NJ) | Send Join(*,G); | | | |||
| | | Set Timer to | | | | | Set Timer to | | | |||
| | | t_periodic | | | | | t_periodic | | | |||
| +----------------------+------------------------+-----------------------+ | +---------------------+-----------------------+----------------------+ | |||
| | Joined (J) | - | -> NJ state | | | Joined (J) | - | -> NJ state | | |||
| | | | Send Prune(*,G) | | | | | Send Prune(*,G) | | |||
| +----------------------+------------------------+-----------------------+ | +---------------------+-----------------------+----------------------+ | |||
| In addition, we have the following transitions which occur within the | In addition, we have the following transitions which occur within the | |||
| Joined state: | Joined state: | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | In Joined (J) State | | | In Joined (J) State | | |||
| +-----------------+-----------------+-----------------+-----------------+ | +----------------+----------------+-----------------+----------------+ | |||
| |Timer Expires | See Join(*,G) | See Prune(*,G) | RPF_DF(RPA(G)) | | |Timer Expires | See Join(*,G) | See Prune(*,G) | RPF_DF(RPA(G)) | | |||
| | | to | to | GenID changes | | | | to | to | GenID changes | | |||
| | | RPF_DF(RPA(G)) | RPF_DF(RPA(G)) | | | | | RPF_DF(RPA(G)) | RPF_DF(RPA(G)) | | | |||
| +-----------------+-----------------+-----------------+-----------------+ | +----------------+----------------+-----------------+----------------+ | |||
| |Send | Increase Timer | Decrease Timer | Decrease Timer | | |Send | Increase Timer | Decrease Timer | Decrease Timer | | |||
| |Join(*,G); Set | to | to t_override | to t_override | | |Join(*,G); Set | to | to t_override | to t_override | | |||
| |Timer to | t_suppressed | | | | |Timer to | t_suppressed | | | | |||
| |t_periodic | | | | | |t_periodic | | | | | |||
| +-----------------+-----------------+-----------------+-----------------+ | +----------------+----------------+-----------------+----------------+ | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | In Joined (J) State | | | In Joined (J) State | | |||
| +-------------------------------------+---------------------------------+ | +-----------------------------------+--------------------------------+ | |||
| | Change of RPF_DF(RPA(G)) | RPF_DF(RPA(G)) GenID | | | Change of RPF_DF(RPA(G)) | RPF_DF(RPA(G)) GenID | | |||
| | | changes | | | | changes | | |||
| +-------------------------------------+---------------------------------+ | +-----------------------------------+--------------------------------+ | |||
| | Send Join(*,G) to new | Decrease Timer to | | | Send Join(*,G) to new | Decrease Timer to | | |||
| | DF; Send Prune(*,G) to | t_override | | | DF; Send Prune(*,G) to | t_override | | |||
| | old DF; set Timer to | | | | old DF; set Timer to | | | |||
| | t_periodic | | | | t_periodic | | | |||
| +-------------------------------------+---------------------------------+ | +-----------------------------------+--------------------------------+ | |||
| This state machine uses the following macro: | This state machine uses the following macro: | |||
| bool JoinDesired(G) { | bool JoinDesired(G) { | |||
| if (olist(G) (-) RPF_interface(RPA(G))) != NULL | if (olist(G) (-) RPF_interface(RPA(G))) != NULL | |||
| return TRUE | return TRUE | |||
| else | else | |||
| return FALSE | return FALSE | |||
| } | } | |||
| 3.5. Designated Forwarder (DF) Election | 3.5. Designated Forwarder (DF) Election | |||
| This section presents a fail-safe mechanism for electing a per-RPA | This section presents a fail-safe mechanism for electing a per-RPA | |||
| designated router on each link in a BIDIR-PIM domain. We call this | designated router on each link in a BIDIR-PIM domain. We call this | |||
| router the Designated Forwarder (DF). The DF election does not take | router the Designated Forwarder (DF). The DF election does not take | |||
| place on the RPL for a RPA. | place on the RPL for a RPA. | |||
| 3.5.1. DF Requirements | 3.5.1. DF Requirements | |||
| The DF election chooses the best router on a link to assume the | The DF election chooses the best router on a link to assume the | |||
| responsibility of forwarding traffic between the RPL and the link for | responsibility of forwarding traffic between the RPL and the link for | |||
| the range of multicast groups served by the RPA. Different multicast | the range of multicast groups served by the RPA. Different multicast | |||
| groups that share a common RPA share the same upstream direction. | groups that share a common RPA share the same upstream direction. | |||
| Hence, the election of an upstream forwarder on each link does not have | Hence, the election of an upstream forwarder on each link does not | |||
| to be a group specific decision but instead can be RPA-specific. As the | have to be a group specific decision but instead can be RPA-specific. | |||
| number of RPAs is typically small, the number of elections that have to | As the number of RPAs is typically small, the number of elections | |||
| be performed is significantly reduced by this observation. | that have to be performed is significantly reduced by this | |||
| observation. | ||||
| To optimise tree creation, it is desirable that the winner of the | To optimise tree creation, it is desirable that the winner of the | |||
| election process should be the router on the link with the "best" | election process should be the router on the link with the "best" | |||
| unicast routing metric (as reported by the MRIB) to reach the RPA. When | unicast routing metric (as reported by the MRIB) to reach the RPA. | |||
| comparing metrics from different unicast routing protocols, we use the | When comparing metrics from different unicast routing protocols, we | |||
| same comparison rules used by the PIM-SM assert process [4]. | use the same comparison rules used by the PIM-SM assert process [4]. | |||
| The election process needs to take place when information on a new RPA | The election process needs to take place when information on a new | |||
| initially becomes available. The result can be re-used as new bidir | RPA initially becomes available. The result can be re-used as new | |||
| groups that map to the same RPA are encountered. There are however some | bidir groups that map to the same RPA are encountered. There are | |||
| conditions under which an update to the election is required: | however some conditions under which an update to the election is | |||
| required: | ||||
| o There is a change in unicast metric to reach the RPA for any of | o There is a change in unicast metric to reach the RPA for any of | |||
| the routers on the link. | the routers on the link. | |||
| o The interface on which the RPA is reachable (RPF Interface) | o The interface on which the RPA is reachable (RPF Interface) | |||
| changes to an interface for which the router was previously the | changes to an interface for which the router was previously the | |||
| DF. | DF. | |||
| o A new PIM neighbor starts up on a link that must participate in | o A new PIM neighbor starts up on a link that must participate in | |||
| the elections and be informed of current outcome. | the elections and be informed of current outcome. | |||
| o The elected DF fails (detected through neighbor information | o The elected DF fails (detected through neighbor information | |||
| timeout or MRIB RPF change at downstream router). | timeout or MRIB RPF change at downstream router). | |||
| The election process has to be robust enough to ensure with very high | The election process has to be robust enough to ensure with very high | |||
| probability that all routers on the link have a consistent view of the | probability that all routers on the link have a consistent view of | |||
| DF. This is because with the forwarding rules described in section 3.3 | the DF. This is because with the forwarding rules described in | |||
| if multiple routers end-up thinking that they should be responsible for | section 3.3 if multiple routers end-up thinking that they should be | |||
| forwarding, loops may result. To reduce the possibility of this | responsible for forwarding, loops may result. To reduce the | |||
| occurrence to a minimum, the election algorithm has been biased towards | possibility of this occurrence to a minimum, the election algorithm | |||
| discarding DF information and suspending forwarding during periods of | has been biased towards discarding DF information and suspending | |||
| ambiguity. | forwarding during periods of ambiguity. | |||
| 3.5.2. DF Election description | 3.5.2. DF Election description | |||
| This section gives an outline of the DF election process. It does not | This section gives an outline of the DF election process. It does not | |||
| provide the definitive specification for the DF election. If any | provide the definitive specification for the DF election. If any | |||
| discrepancy exists between section 3.5.3 and this section, the | discrepancy exists between section 3.5.3 and this section, the | |||
| specification in section 3.5.3 is to be assumed correct. | specification in section 3.5.3 is to be assumed correct. | |||
| To perform the election of the DF for a particular RPA, routers on a | To perform the election of the DF for a particular RPA, routers on a | |||
| link need to exchange their unicast routing metric information for | link need to exchange their unicast routing metric information for | |||
| reaching the RPA. Routers advertise their own metrics in Offer, Winner, | reaching the RPA. Routers advertise their own metrics in Offer, | |||
| Backoff and Pass messages. The advertised metric is calculated using the | Winner, Backoff and Pass messages. The advertised metric is | |||
| RPF Interface and metric to reach the RPA available through the MRIB. | calculated using the RPF Interface and metric to reach the RPA | |||
| When a router is participating in a DF election for an RPA on the | available through the MRIB. When a router is participating in a DF | |||
| interface that its MRIB indicates as the RPF Interface then that router | election for an RPA on the interface that its MRIB indicates as the | |||
| MUST always advertise an infinite metric in its election messages. When | RPF Interface then that router MUST always advertise an infinite | |||
| a router is participating in a DF election on an interface other than | metric in its election messages. When a router is participating in a | |||
| the MRIB indicated RPF Interface then it MUST advertise the MRIB | DF election on an interface other than the MRIB indicated RPF | |||
| provided metrics in its election messages. | Interface then it MUST advertise the MRIB provided metrics in its | |||
| election messages. | ||||
| In the election protocol described below, many message exchanges are | In the election protocol described below, many message exchanges are | |||
| repeated Election_Robustness times for reliability. In all those cases | repeated Election_Robustness times for reliability. In all those | |||
| the message retransmissions are spaced in time by a small random | cases the message retransmissions are spaced in time by a small | |||
| interval. All of the following description is specific to the election | random interval. All of the following description is specific to the | |||
| on a single link for a single RPA. | election on a single link for a single RPA. | |||
| 3.5.2.1. Bootstrap Election | 3.5.2.1. Bootstrap Election | |||
| Initially when no DF has been elected, routers finding out about a new | Initially when no DF has been elected, routers finding out about a | |||
| RPA start participating in the election by sending Offer messages. | new RPA start participating in the election by sending Offer | |||
| Offer messages include the router's metric to reach the RPA. Offers are | messages. Offer messages include the router's metric to reach the | |||
| periodically retransmitted with a period of Offer_Interval. | RPA. Offers are periodically retransmitted with a period of | |||
| Offer_Interval. | ||||
| If a router hears a better offer than its own from a neighbor, it stops | If a router hears a better offer than its own from a neighbor, it | |||
| participating in the election for a period of Election_Robustness * | stops participating in the election for a period of | |||
| Offer_Interval thus giving a chance to the neighbour with the better | Election_Robustness * Offer_Interval thus giving a chance to the | |||
| metric to be elected DF. If during this period no winner is elected, the | neighbour with the better metric to be elected DF. If during this | |||
| router restarts the election from the beginning. If at any point during | period no winner is elected, the router restarts the election from | |||
| the initial election a router receives an out of order offer with worse | the beginning. If at any point during the initial election a router | |||
| metrics than its own, then it restarts the election from the beginning. | receives an out of order offer with worse metrics than its own, then | |||
| it restarts the election from the beginning. | ||||
| The result should be that all routers except the best candidate stop | The result should be that all routers except the best candidate stop | |||
| advertising their offers. | advertising their offers. | |||
| A router assumes the role of the DF after having advertised its metrics | A router assumes the role of the DF after having advertised its | |||
| Election_Robustness times without receiving any offer from any other | metrics Election_Robustness times without receiving any offer from | |||
| neighbor. At that point it transmits a Winner message which declares to | any other neighbor. At that point it transmits a Winner message which | |||
| every other router on the link the identity of the winner and the | declares to every other router on the link the identity of the winner | |||
| metrics it is using. | and the metrics it is using. | |||
| Routers receiving a winner message stop participating in the election | Routers receiving a winner message stop participating in the election | |||
| and record the identity and metrics of the winner. If the local metrics | and record the identity and metrics of the winner. If the local | |||
| are better than those of the winner then the router records the identity | metrics are better than those of the winner then the router records | |||
| of the winner (accepting it as the acting DF) but re-initiates the | the identity of the winner (accepting it as the acting DF) but re- | |||
| election to try and take over. | initiates the election to try and take over. | |||
| 3.5.2.2. Loser Metric Changes | 3.5.2.2. Loser Metric Changes | |||
| Whenever the unicast metric to a RPA changes at a non-DF router to a | Whenever the unicast metric to a RPA changes at a non-DF router to a | |||
| value that is better than that previously advertised by the acting DF, | value that is better than that previously advertised by the acting | |||
| the router with the new better metric should take action to eventually | DF, the router with the new better metric should take action to | |||
| assume forwarding responsibility. When the metric change is detected, | eventually assume forwarding responsibility. When the metric change | |||
| the non-DF router with the now better metric restarts the DF election | is detected, the non-DF router with the now better metric restarts | |||
| process by sending Offer messages with this new metric. Note that at | the DF election process by sending Offer messages with this new | |||
| any point during an election if no response is received after | metric. Note that at any point during an election if no response is | |||
| Election_Robustness retransmissions of an offer, a router assumes the | received after Election_Robustness retransmissions of an offer, a | |||
| role of the DF following the usual Winner announcement procedure. | router assumes the role of the DF following the usual Winner | |||
| announcement procedure. | ||||
| Upon receipt of an offer that is worse than its current metric, the DF | Upon receipt of an offer that is worse than its current metric, the | |||
| will respond with a Winner message declaring its status and advertising | DF will respond with a Winner message declaring its status and | |||
| its better metric. Upon receiving the Winner message, the originator of | advertising its better metric. Upon receiving the Winner message, the | |||
| the Offer records the identity of the DF and aborts the election. | originator of the Offer records the identity of the DF and aborts the | |||
| election. | ||||
| Upon receipt of an offer that is better than its current metric, the DF | Upon receipt of an offer that is better than its current metric, the | |||
| records the identity and metrics of the offering router and responds | DF records the identity and metrics of the offering router and | |||
| with a Backoff message. This instructs the offering router to hold off | responds with a Backoff message. This instructs the offering router | |||
| for a short period of time while the unicast routing stabilises and | to hold off for a short period of time while the unicast routing | |||
| other routers get a chance to put in their offers. The Backoff message | stabilises and other routers get a chance to put in their offers. The | |||
| includes the offering router's new metric and address. All routers on | Backoff message includes the offering router's new metric and | |||
| the link that have pending offers with metrics worse than those in the | address. All routers on the link that have pending offers with | |||
| backoff message (including the original offering router) will hold | metrics worse than those in the backoff message (including the | |||
| further offers for a period of time defined in the Backoff message. | original offering router) will hold further offers for a period of | |||
| time defined in the Backoff message. | ||||
| If during the Backoff_Period, a third router sends a new better offer, | If during the Backoff_Period, a third router sends a new better | |||
| the Backoff message is repeated for the new offer and the Backoff_Period | offer, the Backoff message is repeated for the new offer and the | |||
| restarted. | Backoff_Period restarted. | |||
| Before the Backoff_Period expires, the acting DF nominates the router | Before the Backoff_Period expires, the acting DF nominates the router | |||
| having made the best offer as the new DF using a Pass message. This | having made the best offer as the new DF using a Pass message. This | |||
| message includes the IDs and metrics of both the old and new DFs. The | message includes the IDs and metrics of both the old and new DFs. | |||
| old DF stops performing its tasks at the time the Pass message | The old DF stops performing its tasks at the time the Pass message | |||
| transmission is made. The new DF assumes the role of the DF as soon as | transmission is made. The new DF assumes the role of the DF as soon | |||
| it receives the Pass message. All other routers on the link take note of | as it receives the Pass message. All other routers on the link take | |||
| the new DF and its metric. Note that this event constitutes an RPF | note of the new DF and its metric. Note that this event constitutes | |||
| Neighbour change which may trigger Join messages to the new DF (see | an RPF Neighbour change which may trigger Join messages to the new DF | |||
| section 3.4). | (see section 3.4). | |||
| 3.5.2.3. Winner Metric Changes | 3.5.2.3. Winner Metric Changes | |||
| If the DF's routing metric to reach the RPA changes to a worse value, it | If the DF's routing metric to reach the RPA changes to a worse value, | |||
| sends a set of Election_Robustness randomly spaced Winner messages on | it sends a set of Election_Robustness randomly spaced Winner messages | |||
| the link, advertising the new metric. Routers that receive this | on the link, advertising the new metric. Routers that receive this | |||
| announcement but have a better metric may respond with an Offer message | announcement but have a better metric may respond with an Offer | |||
| which results in the same handoff procedure described above. All | message which results in the same handoff procedure described above. | |||
| routers assume the DF has not changed until they see a Pass or Winner | All routers assume the DF has not changed until they see a Pass or | |||
| message indicating the change. | Winner message indicating the change. | |||
| There is no pressure to make this handoff quickly if the acting DF still | There is no pressure to make this handoff quickly if the acting DF | |||
| has a path to the RPL. The old path may now be suboptimal but it will | still has a path to the RPL. The old path may now be suboptimal but | |||
| still work while the re-election is in progress. | it will still work while the re-election is in progress. | |||
| 3.5.2.4. Winner Loses Path | 3.5.2.4. Winner Loses Path | |||
| If a router's RPF Interface to the RPA switches to be on a link for | If a router's RPF Interface to the RPA switches to be on a link for | |||
| which it is acting as the DF, then it can no longer provide forwarding | which it is acting as the DF, then it can no longer provide | |||
| services for that link. It therefore immediately stops being the DF and | forwarding services for that link. It therefore immediately stops | |||
| restarts the election. As its path to the RPA is through the link, an | being the DF and restarts the election. As its path to the RPA is | |||
| infinite metric is used in the Offer message it sends. | through the link, an infinite metric is used in the Offer message it | |||
| sends. | ||||
| 3.5.2.5. Late Router Starting Up | 3.5.2.5. Late Router Starting Up | |||
| A late router starting up after the DF election process has completed | A late router starting up after the DF election process has completed | |||
| will have no immediate knowledge of the election outcome. As a result, | will have no immediate knowledge of the election outcome. As a | |||
| it will start advertising its metric in Offer messages. As soon as this | result, it will start advertising its metric in Offer messages. As | |||
| happens, the currently elected DF will respond with a Winner message if | soon as this happens, the currently elected DF will respond with a | |||
| its metric is better than the metric in the Offer message, or with a | Winner message if its metric is better than the metric in the Offer | |||
| Backoff message if its metric is worse than the metric in the Offer | message, or with a Backoff message if its metric is worse than the | |||
| message. | metric in the Offer message. | |||
| 3.5.2.6. Winner Dies | 3.5.2.6. Winner Dies | |||
| Whenever the DF dies, a new DF has to be elected. The speed at which | Whenever the DF dies, a new DF has to be elected. The speed at which | |||
| this can be achieved depends on whether there are any downstream routers | this can be achieved depends on whether there are any downstream | |||
| on the link. | routers on the link. | |||
| If there are downstream routers, typically their MRIB reported next-hop | If there are downstream routers, typically their MRIB reported next- | |||
| before the DF dies will be the DF itself. They will therefore notice | hop before the DF dies will be the DF itself. They will therefore | |||
| either a change in the metric for the route to the RPA or a change in | notice either a change in the metric for the route to the RPA or a | |||
| next-hop away from the DF and can restart the election by transmitting | change in next-hop away from the DF and can restart the election by | |||
| Offer messages. If according to the MRIB the RPA is now reachable | transmitting Offer messages. If according to the MRIB the RPA is now | |||
| through the same link via another upstream router, an infinite metric | reachable through the same link via another upstream router, an | |||
| will be used in the Offer. | infinite metric will be used in the Offer. | |||
| If no downstream routers are present, the only way for other upstream | If no downstream routers are present, the only way for other upstream | |||
| routers to detect a DF failure is by the timeout of the PIM neighbor | routers to detect a DF failure is by the timeout of the PIM neighbor | |||
| information, which will take significantly longer. | information, which will take significantly longer. | |||
| 3.5.3. Election Protocol Specification | 3.5.3. Election Protocol Specification | |||
| This section provides the definitive specification for the DF election | This section provides the definitive specification for the DF | |||
| process. If any discrepancy exists between section 3.5.2 and this | election process. If any discrepancy exists between section 3.5.2 and | |||
| section, the specification in this section is to be assumed correct. | this section, the specification in this section is to be assumed | |||
| correct. | ||||
| 3.5.3.1. Election State | 3.5.3.1. Election State | |||
| The DF election state is maintained per RPA for each multicast enabled | The DF election state is maintained per RPA for each multicast | |||
| interface I on the router as introduced in section 3.1. | enabled interface I on the router as introduced in section 3.1. | |||
| The state machine has the following four states: | The state machine has the following four states: | |||
| Offer | Offer | |||
| Initial election state. When in the Offer state a router | Initial election state. When in the Offer state a router thinks | |||
| thinks it can eventually become the winner and periodically | it can eventually become the winner and periodically generates | |||
| generates Offer messages. | Offer messages. | |||
| Lose In this state the router knows that there either is a | Lose | |||
| different election winner or that no router on the link has a | In this state the router knows that there either is a different | |||
| path to the RPA. | election winner or that no router on the link has a path to the | |||
| RPA. | ||||
| Winner | Winner | |||
| The router is the acting DF without any contest. | The router is the acting DF without any contest. | |||
| Backoff | Backoff | |||
| The router is the acting DF but another router has made a bid | The router is the acting DF but another router has made a bid | |||
| to take over. | to take over. | |||
| In the state machine a router is considered to be an acting DF if it is | In the state machine a router is considered to be an acting DF if it | |||
| in the Win or Backoff states. | is in the Win or Backoff states. | |||
| The operation of the election protocol makes use of the variables and | The operation of the election protocol makes use of the variables and | |||
| timers described below: | timers described below: | |||
| Acting DF information | Acting DF information | |||
| Used to store the identity and advertised metrics of the | Used to store the identity and advertised metrics of the | |||
| election winner that is the currently acting DF. | election winner that is the currently acting DF. | |||
| DF election-Timer (DFT) | DF election-Timer (DFT) | |||
| Used to schedule transmission of Offer, Winner and Pass | Used to schedule transmission of Offer, Winner and Pass | |||
| messages. | messages. | |||
| Message-Count (MC) | Message-Count (MC) | |||
| Used to maintain the number of times an Offer or Winner | Used to maintain the number of times an Offer or Winner message | |||
| message has been transmitted. | has been transmitted. | |||
| Best-Offer | Best-Offer | |||
| Used by the DF to record the identity and advertised metrics | Used by the DF to record the identity and advertised metrics of | |||
| of the router that has made the last offer, for use when | the router that has made the last offer, for use when sending | |||
| sending the Path message. | the Path message. | |||
| 3.5.3.2. Election Messages | 3.5.3.2. Election Messages | |||
| The election process uses the following PIM control messages, the packet | The election process uses the following PIM control messages, the | |||
| format of which is described in section 3.7: | packet format of which is described in section 3.7: | |||
| Offer (OfferingID, Metric) | Offer (OfferingID, Metric) | |||
| Sent by routers that believe they have a better metric to the | Sent by routers that believe they have a better metric to the | |||
| RPA than the metric that has been on offer so far. | RPA than the metric that has been on offer so far. | |||
| Winner (DF-ID, DF-Metric) | Winner (DF-ID, DF-Metric) | |||
| Sent by a router when assuming the role of the DF or when re- | Sent by a router when assuming the role of the DF or when re- | |||
| asserting in response to worse offers. | asserting in response to worse offers. | |||
| Backoff (DF-ID, DF-Metric, OfferingID, OfferMetric, | Backoff (DF-ID, DF-Metric, OfferingID, OfferMetric, | |||
| BackoffInterval) | BackoffInterval) | |||
| Used by the DF to acknowledge better offers. It instructs | Used by the DF to acknowledge better offers. It instructs other | |||
| other routers with equal or worse offers to wait till the DF | routers with equal or worse offers to wait till the DF passes | |||
| passes responsibility to the sender of the offer. | responsibility to the sender of the offer. | |||
| Pass (Old-DF-ID, Old-DF-Metric, New-DF-ID, New-DF-Metric) | Pass (Old-DF-ID, Old-DF-Metric, New-DF-ID, New-DF-Metric) | |||
| Used by the old DF to pass forwarding responsibility to a | Used by the old DF to pass forwarding responsibility to a | |||
| router that has previously made an offer. The Old-DF-Metric | router that has previously made an offer. The Old-DF-Metric is | |||
| is the current metric of the DF at the time the pass is sent. | the current metric of the DF at the time the pass is sent. | |||
| Note that when a router is participating in a DF election for an RPA on | Note that when a router is participating in a DF election for an RPA | |||
| the interface that its MRIB indicates as the RPF Interface then that | on the interface that its MRIB indicates as the RPF Interface then | |||
| router MUST always advertise an infinite metric in its election | that router MUST always advertise an infinite metric in its election | |||
| messages. When a router is participating in a DF election on an | messages. When a router is participating in a DF election on an | |||
| interface other than the MRIB indicated RPF Interface then it MUST | interface other than the MRIB indicated RPF Interface then it MUST | |||
| advertise the MRIB provided metrics in its election messages. | advertise the MRIB provided metrics in its election messages. | |||
| 3.5.3.3. Election Events | 3.5.3.3. Election Events | |||
| During protocol operation the following events can take place: | During protocol operation the following events can take place: | |||
| Control message reception | Control message reception | |||
| Reception of one of the four control DF election messages | Reception of one of the four control DF election messages | |||
| (Offer, Winner, Backoff and Pass). When a control message is | (Offer, Winner, Backoff and Pass). When a control message is | |||
| received and actions are specified on a condition that metrics | received and actions are specified on a condition that metrics | |||
| are Better or Worse the comparison must be performed as | are Better or Worse the comparison must be performed as | |||
| follows: | follows: | |||
| o On receipt of an Offer or Winner message compare our current | o On receipt of an Offer or Winner message compare our current | |||
| metrics for the RPA with the metrics advertised for the | metrics for the RPA with the metrics advertised for the | |||
| sender of the message. | sender of the message. | |||
| o On receipt of a Backoff or Pass message compare our current | o On receipt of a Backoff or Pass message compare our current | |||
| metrics for the RPA with the metrics advertised for the | metrics for the RPA with the metrics advertised for the | |||
| target of the message. | target of the message. | |||
| Path to RPA lost | Path to RPA lost | |||
| Losing the path to the RPA can happen in two ways. The first | Losing the path to the RPA can happen in two ways. The first | |||
| happens when the route learned through the MRIB is withdrawn | happens when the route learned through the MRIB is withdrawn | |||
| and the MRIB no longer reports an available route to reach the | and the MRIB no longer reports an available route to reach the | |||
| RPA. The second case happens when the next-hop information | RPA. The second case happens when the next-hop information | |||
| reported by the MRIB changes to indicate a next-hop that is | reported by the MRIB changes to indicate a next-hop that is | |||
| reachable through the router interface under consideration. | reachable through the router interface under consideration. | |||
| Clearly as the router is using the interface as its RPF | Clearly as the router is using the interface as its RPF | |||
| Interface it cannot offer forwarding services towards the RPL | Interface it cannot offer forwarding services towards the RPL | |||
| to other routers on that link. | to other routers on that link. | |||
| Metric reported by the MRIB to reach the RPA changes | Metric reported by the MRIB to reach the RPA changes | |||
| This event is triggered when the MRIB supplied information for | This event is triggered when the MRIB supplied information for | |||
| the RPA changes and the new information provides a path to the | the RPA changes and the new information provides a path to the | |||
| RPA. If the new MRIB information either reports no route or | RPA. If the new MRIB information either reports no route or | |||
| reports a next-hop interface through the interface for which | reports a next-hop interface through the interface for which | |||
| the DF election is taking place then the "Path to RPA lost" | the DF election is taking place then the "Path to RPA lost" | |||
| event triggers instead. In specific states the event may be | event triggers instead. In specific states the event may be | |||
| further filtered by specifying whether it is expected of the | further filtered by specifying whether it is expected of the | |||
| metric to become better or worse and which stored metric the | metric to become better or worse and which stored metric the | |||
| new MRIB information must be compared against. The new | new MRIB information must be compared against. The new | |||
| information must be compared with either the router's old | information must be compared with either the router's old | |||
| metric, the stored DF metric or the stored Best Offer metric. | metric, the stored DF metric or the stored Best Offer metric. | |||
| Election-Timer (DFT) Expiration | Election-Timer (DFT) Expiration | |||
| Expiration of the DFT election timer can cause message | Expiration of the DFT election timer can cause message | |||
| transmission and state transitions. The event might be further | transmission and state transitions. The event might be further | |||
| qualified by specifying the value of the Message Count (MC) as | qualified by specifying the value of the Message Count (MC) as | |||
| well as the current existence of a path to the RPA (as defined | well as the current existence of a path to the RPA (as defined | |||
| above). | above). | |||
| Detection of DF failure | Detection of DF failure | |||
| Detection of DF failure can occur through the timeout of PIM | Detection of DF failure can occur through the timeout of PIM | |||
| neighbor state. | neighbor state. | |||
| 3.5.3.4. Election Actions | 3.5.3.4. Election Actions | |||
| The DF election state machine action descriptions use the following | The DF election state machine action descriptions use the following | |||
| notation in addition to the pseudocode notation described earlier in | notation in addition to the pseudocode notation described earlier in | |||
| this spec. | this spec. | |||
| ?= denotes the operation of lowering a timer to a new value. If | ?= denotes the operation of lowering a timer to a new value. If | |||
| the timer is not running then it is started using the new | the timer is not running then it is started using the new | |||
| value. If the timer is running with an expiration lower than | value. If the timer is running with an expiration lower than | |||
| the new value, then the timer is not altered. | the new value, then the timer is not altered. | |||
| When an action of "set DF to Sender or Target" is encountered during | When an action of "set DF to Sender or Target" is encountered during | |||
| receipt of a Winner, Pass or Backoff message it means the following: | receipt of a Winner, Pass or Backoff message it means the following: | |||
| o On receipt of a Winner message set the DF to be the originator of | o On receipt of a Winner message set the DF to be the originator | |||
| the message and record its metrics. | of the message and record its metrics. | |||
| o On receipt of a Pass message set the DF to be the target of the | o On receipt of a Pass message set the DF to be the target of the | |||
| message and record its metrics. | message and record its metrics. | |||
| o On receipt of a Backoff message set the DF to be the originator | o On receipt of a Backoff message set the DF to be the originator | |||
| of the message and record its metrics. | of the message and record its metrics. | |||
| 3.5.3.5. Election State Transitions | 3.5.3.5. Election State Transitions | |||
| When a Designated Forwarder election is initiated the starting state is | When a Designated Forwarder election is initiated the starting state | |||
| the Offer state, the message counter (MC) is set to zero and the DF | is the Offer state, the message counter (MC) is set to zero and the | |||
| election Timer (DFT) is set to OPlow (see section 3.6 for a definition | DF election Timer (DFT) is set to OPlow (see section 3.6 for a | |||
| of timer values). | definition of timer values). | |||
| Figure 3: Designated Forwarder election state-machine in tabular form | Figure 3: Designated Forwarder election state-machine in tabular form | |||
| +-------------++--------------------------------------------------------+ | +-------------+------------------------------------------------------+ | |||
| | || Event | | | | Event | | |||
| | Prev State ++------------------+------------------+------------------+ | | Prev State +-----------------+------------------+-----------------+ | |||
| | || Recv better | Recv better | Recv better | | | | Recv better | Recv better | Recv better | | |||
| | || Pass / Win | Backoff | Offer | | | | Pass / Win | Backoff | Offer | | |||
| +-------------++------------------+------------------+------------------+ | +-------------+-----------------+------------------+-----------------+ | |||
| | || -> Lose | - | - | | | | -> Lose | - | - | | |||
| | Offer || DF = Sender or | DFT = BOperiod | DFT = OPhigh; | | | Offer | DF = Sender or | DFT = BOperiod | DFT = OPhigh; | | |||
| | || Target; Stop | + OPlow; MC = | MC = 0 | | | | Target; Stop | + OPlow; MC = | MC = 0 | | |||
| | || DFT | 0 | | | | | DFT | 0 | | | |||
| +-------------++------------------+------------------+------------------+ | +-------------+-----------------+------------------+-----------------+ | |||
| | || - | - | -> Offer | | | | - | - | -> Offer | | |||
| | Lose || DF = Sender or | DF = Sender | DFT = OPhigh; | | | Lose | DF = Sender or | DF = Sender | DFT = OPhigh; | | |||
| | || Target | | MC = 0 | | | | Target | | MC = 0 | | |||
| +-------------++------------------+------------------+------------------+ | +-------------+-----------------+------------------+-----------------+ | |||
| | || -> Lose | -> Lose | -> Backoff | | | | -> Lose | -> Lose | -> Backoff | | |||
| | || DF = Sender or | DF = Sender; | Set Best to | | | | DF = Sender or | DF = Sender; | Set Best to | | |||
| | Win || Target; Stop | Stop DFT | Sender; Send | | | Win | Target; Stop | Stop DFT | Sender; Send | | |||
| | || DFT | | Backoff; DFT = | | | | DFT | | Backoff; DFT = | | |||
| | || | | BOperiod | | | | | | BOperiod | | |||
| +-------------++------------------+------------------+------------------+ | +-------------+-----------------+------------------+-----------------+ | |||
| | || -> Lose | -> Lose | - | | | | -> Lose | -> Lose | - | | |||
| | || DF = Sender or | DF = Sender; | Set Best to | | | | DF = Sender or | DF = Sender; | Set Best to | | |||
| | Backoff || Target; Stop | Stop DFT | Sender; Send | | | Backoff | Target; Stop | Stop DFT | Sender; Send | | |||
| | || DFT | | Backoff; DFT = | | | | DFT | | Backoff; DFT = | | |||
| | || | | BOperiod | | | | | | BOperiod | | |||
| +-------------++------------------+------------------+------------------+ | +-------------+-----------------+------------------+-----------------+ | |||
| +-----------++----------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | || Event | | | | Event | | |||
| | ++-------------+--------------+--------------+--------------+ | | +-------------+-------------+--------------+------------+ | |||
| |Prev State ||Recv Backoff | Recv Pass | Recv Worse | Recv worse | | |Prev State |Recv Backoff |Recv Pass |Recv Worse |Recv worse | | |||
| | ||for us | for us | Pass / Win / | Offer | | | |for us |for us |Pass / Win / |Offer | | |||
| | || | | Backoff | | | | | | |Backoff | | | |||
| +-----------++-------------+--------------+--------------+--------------+ | +-----------+-------------+-------------+--------------+------------+ | |||
| | ||- | -> Win | - | - | | | |- |-> Win |- |- | | |||
| | ||DFT = | Stop DFT | Set DF to | DFT ?= | | | |DFT = |Stop DFT |Set DF to |DFT ?= | | |||
| |Offer ||BOperiod + | | Sender or | OPlow; MC = | | |Offer |BOperiod + | |Sender or |OPlow; MC = | | |||
| | ||OPlow; MC = | | Target; DFT | 0 | | | |OPlow; MC = | |Target; DFT |0 | | |||
| | ||0 | | ?= OPlow; MC | | | | |0 | |?= OPlow; MC | | | |||
| | || | | = 0 | | | | | | |= 0 | | | |||
| +-----------++-------------+--------------+--------------+--------------+ | +-----------+-------------+-------------+--------------+------------+ | |||
| | ||-> Offer | -> Offer | -> Offer | -> Offer | | | |-> Offer |-> Offer |-> Offer |-> Offer | | |||
| | ||DF = Sender; | DF = Sender; | DF = Sender | DFT = OPlow; | | | |DF = Sender; |DF = Sender; |DF = Sender |DFT = OPlow;| | |||
| |Lose ||DFT = OPlow; | DFT = OPlow; | or Target; | MC = 0 | | |Lose |DFT = OPlow; |DFT = OPlow; |or Target; |MC = 0 | | |||
| | ||MC = 0 | MC = 0 | DFT = OPlow; | | | | |MC = 0 |MC = 0 |DFT = OPlow; | | | |||
| | || | | MC = 0 | | | | | | |MC = 0 | | | |||
| +-----------++-------------+--------------+--------------+--------------+ | +-----------+-------------+-------------+--------------+------------+ | |||
| | ||-> Offer | -> Offer | -> Offer | - | | | |-> Offer |-> Offer |-> Offer |- | | |||
| | ||DF = Sender; | DF = Sender; | DF = Sender | Send Winner | | | |DF = Sender; |DF = Sender; |DF = Sender |Send Winner | | |||
| |Win ||DFT = OPlow; | DFT = OPlow; | or Target; | | | |Win |DFT = OPlow; |DFT = OPlow; |or Target; | | | |||
| | ||MC = 0 | MC = 0 | DFT = OPlow; | | | | |MC = 0 |MC = 0 |DFT = OPlow; | | | |||
| | || | | MC = 0 | | | | | | |MC = 0 | | | |||
| +-----------++-------------+--------------+--------------+--------------+ | +-----------+-------------+-------------+--------------+------------+ | |||
| | ||-> Offer | -> Offer | -> Offer | -> Win | | | |-> Offer |-> Offer |-> Offer |-> Win | | |||
| | ||DF = Sender; | DF = Sender; | DF = Sender | Send Winner; | | | |DF = Sender; |DF = Sender; |DF = Sender |Send Winner;| | |||
| |Backoff ||DFT = OPlow; | DFT = OPlow; | or Target; | Stop DFT | | |Backoff |DFT = OPlow; |DFT = OPlow; |or Target; |Stop DFT | | |||
| | ||MC = 0 | MC = 0 | DFT = OPlow; | | | | |MC = 0 |MC = 0 |DFT = OPlow; | | | |||
| | || | | MC = 0 | | | | | | |MC = 0 | | | |||
| +-----------++-------------+--------------+--------------+--------------+ | +-----------+-------------+-------------+--------------+------------+ | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | In Offer State | | | In Offer State | | |||
| +-----------------------+-----------------------+-----------------------+ | +----------------------+----------------------+----------------------+ | |||
| | DFT Expires and MC | DFT Expires and MC | DFT Expires and MC | | | DFT Expires and MC | DFT Expires and MC | DFT Expires and MC | | |||
| | is less than | is equal to | is equal to | | | is less than | is equal to | is equal to | | |||
| | Robustness | Robustness and we | Robustness and | | | Robustness | Robustness and we | Robustness and | | |||
| | | have path to RPA | there is no path | | | | have path to RPA | there is no path | | |||
| | | | to RPA | | | | | to RPA | | |||
| +-----------------------+-----------------------+-----------------------+ | +----------------------+----------------------+----------------------+ | |||
| | - | -> Win | -> Lose | | | - | -> Win | -> Lose | | |||
| | Send Offer; DFT = | Send Winner | Set DF to None | | | Send Offer; DFT = | Send Winner | Set DF to None | | |||
| | OPlow; MC = MC + 1 | | | | | OPlow; MC = MC + 1 | | | | |||
| +-----------------------+-----------------------+-----------------------+ | +----------------------+----------------------+----------------------+ | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | In Offer State | | | In Offer State | | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | Metric changes and is now worse | | | Metric changes and is now worse | | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | DFT ?= OPlow | | | DFT ?= OPlow | | |||
| | MC = 0 | | | MC = 0 | | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | In Lose State | | | In Lose State | | |||
| +--------------------------------+--------------------------------------+ | +------------------------------+-------------------------------------+ | |||
| | Detect DF Failure | Metric changes and now | | | Detect DF Failure | Metric changes and now | | |||
| | | is better than DF | | | | is better than DF | | |||
| +--------------------------------+--------------------------------------+ | +------------------------------+-------------------------------------+ | |||
| | -> Offer | -> Offer | | | -> Offer | -> Offer | | |||
| | DF = None; DFT = | DFT = OPlow_int; MC = 0 | | | DF = None; DFT = | DFT = OPlow_int; MC = 0 | | |||
| | OPlow_int; MC = 0 | | | | OPlow_int; MC = 0 | | | |||
| +--------------------------------+--------------------------------------+ | +------------------------------+-------------------------------------+ | |||
| +-----------------------------------------------------------------------+ | +--------------------------------------------------------------------+ | |||
| | In Win State | | | In Win State | | |||
| +-----------------------+------------------------+----------------------+ | +----------------------+-----------------------+---------------------+ | |||
| | Metric changes and | Timer Expires and | Path to RPA lost | | | Metric changes and | Timer Expires and | Path to RPA lost | | |||
| | is now worse | MC is less than | | | | is now worse | MC is less than | | | |||
| | | Robustness | | | | | Robustness | | | |||
| +-----------------------+------------------------+----------------------+ | +----------------------+-----------------------+---------------------+ | |||
| | - | - | -> Offer | | | - | - | -> Offer | | |||
| | DFT = OPlow; MC = | Send Winner; DFT = | Set DF to None; | | | DFT = OPlow; MC = | Send Winner; DFT = | Set DF to None; | | |||
| | 0 | OPlow; MC = MC + 1 | DFT = OPlow; MC = | | | 0 | OPlow; MC = MC + 1 | DFT = OPlow; MC = | | |||
| | | | 0 | | | | | 0 | | |||
| +-----------------------+------------------------+----------------------+ | +----------------------+-----------------------+---------------------+ | |||
| +--------------------------------------------------------------------+ | ||||
| | In Backoff State | | ||||
| +----------------------+-----------------------+---------------------+ | ||||
| | Metric changes and | Timer Expires | Path to RPA lost | | ||||
| | is now better than | | | | ||||
| | Best | | | | ||||
| +----------------------+-----------------------+---------------------+ | ||||
| | -> Win | -> Lose | -> Offer | | ||||
| | Stop Timer | Send Pass; Set DF | Set DF to None; | | ||||
| | | to stored Best | DFT = OPlow; MC = | | ||||
| | | | 0 | | ||||
| +----------------------+-----------------------+---------------------+ | ||||
| +-----------------------------------------------------------------------+ | ||||
| | In Backoff State | | ||||
| +-----------------------+------------------------+----------------------+ | ||||
| | Metric changes and | Timer Expires | Path to RPA lost | | ||||
| | is now better than | | | | ||||
| | Best | | | | ||||
| +-----------------------+------------------------+----------------------+ | ||||
| | -> Win | -> Lose | -> Offer | | ||||
| | Stop Timer | Send Pass; Set DF | Set DF to None; | | ||||
| | | to stored Best | DFT = OPlow; MC = | | ||||
| | | | 0 | | ||||
| +-----------------------+------------------------+----------------------+ | ||||
| 3.5.4. Election Reliability Enhancements | 3.5.4. Election Reliability Enhancements | |||
| For the correct operation of BIDIR-PIM it is very important to avoid | For the correct operation of BIDIR-PIM it is very important to avoid | |||
| situations where two routers consider themselves to be Designated | situations where two routers consider themselves to be Designated | |||
| Forwarders for the same link. The two precautions below are not required | Forwarders for the same link. The two precautions below are not | |||
| for correct operation but can help diagnose anomalies and correct them. | required for correct operation but can help diagnose anomalies and | |||
| correct them. | ||||
| 3.5.5. Missing Pass | 3.5.5. Missing Pass | |||
| After a DF has been elected, a router whose metrics change to become | After a DF has been elected, a router whose metrics change to become | |||
| better than the DF will attempt to take over. If during the re-election | better than the DF will attempt to take over. If during the re- | |||
| the acting DF has a condition that causes it to lose all of the election | election the acting DF has a condition that causes it to lose all of | |||
| messages (like a CPU overload), the new candidate will transmit three | the election messages (like a CPU overload), the new candidate will | |||
| offers and assume the role of the forwarder resulting in two DFs on the | transmit three offers and assume the role of the forwarder resulting | |||
| link. This situation is pathological and should be corrected by fixing | in two DFs on the link. This situation is pathological and should be | |||
| the overloaded router. It is desirable that such an event can be | corrected by fixing the overloaded router. It is desirable that such | |||
| detected by a network administrator. | an event can be detected by a network administrator. | |||
| When a router becomes the DF for a link without receiving a Pass message | When a router becomes the DF for a link without receiving a Pass | |||
| from the known old DF, the PIM neighbor information for the old DF can | message from the known old DF, the PIM neighbor information for the | |||
| be marked to this effect. Upon receiving the next PIM Hello message from | old DF can be marked to this effect. Upon receiving the next PIM | |||
| the old DF, the router can retransmit Winner messages for all the RPAs | Hello message from the old DF, the router can retransmit Winner | |||
| for which it is acting as the DF. The anomaly may also be logged by the | messages for all the RPAs for which it is acting as the DF. The | |||
| router in a rate-limited manner to alert the operator. | anomaly may also be logged by the router in a rate-limited manner to | |||
| alert the operator. | ||||
| 3.5.6. Periodic Winner Announcement | 3.5.6. Periodic Winner Announcement | |||
| An additional degree of safety can be achieved by having the DF for each | An additional degree of safety can be achieved by having the DF for | |||
| RPA periodically announce its status in a Winner message. Transmission | each RPA periodically announce its status in a Winner message. | |||
| of the periodic Winner message can be restricted to occur only for RPAs | Transmission of the periodic Winner message can be restricted to | |||
| which have active groups, thus avoiding the periodic control traffic in | occur only for RPAs which have active groups, thus avoiding the | |||
| areas of the network without senders or receivers for a particular RPA. | periodic control traffic in areas of the network without senders or | |||
| receivers for a particular RPA. | ||||
| 3.6. Timers, Counters and Constants | 3.6. Timers, Counters and Constants | |||
| BIDIR-PIM maintains the following timers, as discussed in section 3.1. | BIDIR-PIM maintains the following timers, as discussed in section | |||
| All timers are countdown timers - they are set to a value and count down | 3.1. All timers are countdown timers - they are set to a value and | |||
| to zero, at which point they typically trigger an action. Of course | count down to zero, at which point they typically trigger an action. | |||
| they can just as easily be implemented as count-up timers, where the | Of course they can just as easily be implemented as count-up timers, | |||
| absolute expiry time is stored and compared against a real-time clock, | where the absolute expiry time is stored and compared against a real- | |||
| but the language in this specification assumes that they count downwards | time clock, but the language in this specification assumes that they | |||
| to zero. | count downwards to zero. | |||
| Per Rendezvous-Point Address (RPA): | Per Rendezvous-Point Address (RPA): | |||
| Per interface (I): | Per interface (I): | |||
| DF Election Timer: DFT(RPA,I) | DF Election Timer: DFT(RPA,I) | |||
| Per Group (G): | Per Group (G): | |||
| Upstream Join Timer: JT(G) | Upstream Join Timer: JT(G) | |||
| Per interface (I): | Per interface (I): | |||
| Join Expiry Timer: ET(G,I) | Join Expiry Timer: ET(G,I) | |||
| PrunePending Timer: PPT(G,I) | PrunePending Timer: PPT(G,I) | |||
| When timers are started or restarted, they are set to default values. | When timers are started or restarted, they are set to default values. | |||
| This section summarizes those default values. | This section summarizes those default values. | |||
| Timer Name: DF Election Timer (DFT) | Timer Name: DF Election Timer (DFT) | |||
| +--------------------+-------------------------+------------------------+ | +-------------------+------------------------+-----------------------+ | |||
| | Value Name | Value | Explanation | | | Value Name | Value | Explanation | | |||
| +--------------------+-------------------------+------------------------+ | +-------------------+------------------------+-----------------------+ | |||
| | Offer_Period | 100 ms | Interval to wait | | | Offer_Period | 100 ms | Interval to wait | | |||
| | | | between repeated | | | | | between repeated | | |||
| | | | Offer and Winner | | | | | Offer and Winner | | |||
| | | | messages. | | | | | messages. | | |||
| +--------------------+-------------------------+------------------------+ | +-------------------+------------------------+-----------------------+ | |||
| | Backoff_Period | 1 sec | Period that acting | | | Backoff_Period | 1 sec | Period that acting | | |||
| | | | DF waits between | | | | | DF waits between | | |||
| | | | receiving a better | | | | | receiving a better | | |||
| | | | Offer and sending | | | | | Offer and sending | | |||
| | | | the Pass message | | | | | the Pass message | | |||
| | | | to transfer DF | | | | | to transfer DF | | |||
| | | | responsibility. | | | | | responsibility. | | |||
| +--------------------+-------------------------+------------------------+ | +-------------------+------------------------+-----------------------+ | |||
| | OPlow | rand(0.5, 1) * | Range of actual | | | OPlow | rand(0.5, 1) * | Range of actual | | |||
| | | Offer_Period | randomised value | | | | Offer_Period | randomised value | | |||
| | | | used between | | | | | used between | | |||
| | | | repeated messages. | | | | | repeated messages. | | |||
| +--------------------+-------------------------+------------------------+ | +-------------------+------------------------+-----------------------+ | |||
| | OPhigh | Election_Robustness | Interval to wait | | | OPhigh | Election_Robustness | Interval to wait | | |||
| | | * Offer_Period | in order to give a | | | | * Offer_Period | in order to give a | | |||
| | | | chance to a router | | | | | chance to a router | | |||
| | | | with a better | | | | | with a better | | |||
| | | | Offer to become | | | | | Offer to become | | |||
| | | | the DF. | | | | | the DF. | | |||
| +--------------------+-------------------------+------------------------+ | +-------------------+------------------------+-----------------------+ | |||
| Timer Names: Join Expiry Timer (ET(G,I)) | Timer Names: Join Expiry Timer (ET(G,I)) | |||
| +----------------+----------------+-------------------------------------+ | +---------------+---------------+------------------------------------+ | |||
| | Value Name | Value | Explanation | | |Value Name | Value | Explanation | | |||
| +----------------+----------------+-------------------------------------+ | +---------------+---------------+------------------------------------+ | |||
| | J/P HoldTime | from message | Hold Time from Join/Prune Message | | |J/P HoldTime | from message | Hold Time from Join/Prune Message | | |||
| +----------------+----------------+-------------------------------------+ | +---------------+---------------+------------------------------------+ | |||
| Timer Names: Prune Pending Timer (PPT(G,I)) | Timer Names: Prune Pending Timer (PPT(G,I)) | |||
| +--------------------------+--------------------+-----------------------+ | +-------------------------+-------------------+----------------------+ | |||
| | Value Name | Value | Explanation | | | Value Name | Value | Explanation | | |||
| +--------------------------+--------------------+-----------------------+ | +-------------------------+-------------------+----------------------+ | |||
| | J/P Override Interval | Default: 3 secs | Short period after | | | J/P Override Interval | Default: 3 secs | Short period after | | |||
| | | | a join or prune to | | | | | a join or prune to | | |||
| | | | allow other | | | | | allow other | | |||
| | | | routers on the LAN | | | | | routers on the LAN | | |||
| | | | to override the | | | | | to override the | | |||
| | | | join or prune | | | | | join or prune | | |||
| +--------------------------+--------------------+-----------------------+ | +-------------------------+-------------------+----------------------+ | |||
| Note that the value of the J/P Override Interval is interface specific | Note that the value of the J/P Override Interval is interface | |||
| and depends on both the Propagation_Delay and the Override_Interval | specific and depends on both the Propagation_Delay and the | |||
| values that may change when Hello messages are received [4]. | Override_Interval values that may change when Hello messages are | |||
| received [4]. | ||||
| Timer Names: Upstream Join Timer (JT(G)) | Timer Names: Upstream Join Timer (JT(G)) | |||
| +-------------+--------------------+-------------------------------------+ | +------------+-------------------+-----------------------------------+ | |||
| |Value Name | Value | Explanation | | Value Name |Value Explanation | | |||
| +-------------+--------------------+-------------------------------------+ | +------------+-------------------+-----------------------------------+ | |||
| |t_periodic | Default: 60 secs | Period between Join/Prune Messages | | t_periodic |Default: 60 secs Period between Join/Prune Messages | | |||
| +-------------+--------------------+-------------------------------------+ | +------------+-------------------+-----------------------------------+ | |||
| |t_suppressed | rand(1.1 * | Suppression period when someone | | t_suppressed |rand(1.1 * Suppression period when someone | | |||
| | | t_periodic, 1.4 * | else sends a J/P message so we | | | |t_periodic, 1.4 * else sends a J/P message so we | | |||
| | | t_periodic) | don't need to do so. | | | |t_periodic) don't need to do so. | | |||
| +-------------+--------------------+-------------------------------------+ | +------------+-------------------+-----------------------------------+ | |||
| |t_override | rand(0, 0.9 * J/P | Randomized delay to prevent | | t_override |rand(0, 0.9 * J/P Randomized delay to prevent | | |||
| | | Override Interval) | response implosion when sending a | | | |Override Interval) response implosion when sending a | | |||
| | | | join message to override someone | | | | join message to override someone | | |||
| | | | else's prune message. | | | | else's prune message. | | |||
| +-------------+--------------------+-------------------------------------+ | +------------+-------------------+-----------------------------------+ | |||
| For more information about these values refer to the PIM-SM [4] | For more information about these values refer to the PIM-SM [4] | |||
| documentation. | documentation. | |||
| Constant Name: DF Election Robustness | Constant Name: DF Election Robustness | |||
| +--------------------------+-------------------+------------------------+ | +-------------------------+------------------+-----------------------+ | |||
| | Constant Name | Value | Explanation | | | Constant Name | Value | Explanation | | |||
| +--------------------------+-------------------+------------------------+ | +-------------------------+------------------+-----------------------+ | |||
| | Election_Robustness | Default: 3 | Minimum number of | | | Election_Robustness | Default: 3 | Minimum number of | | |||
| | | | election messages | | | | | election messages | | |||
| | | | that must be lost | | | | | that must be lost | | |||
| | | | in order for | | | | | in order for | | |||
| | | | election to fail. | | | | | election to fail. | | |||
| +--------------------------+-------------------+------------------------+ | +-------------------------+------------------+-----------------------+ | |||
| 3.7. BIDIR-PIM Packet Formats | 3.7. BIDIR-PIM Packet Formats | |||
| This section describes the details of the packet formats for BIDIR-PIM | This section describes the details of the packet formats for BIDIR- | |||
| control messages. BIDIR-PIM shares a number of control messages in | PIM control messages. BIDIR-PIM shares a number of control messages | |||
| common with PIM-SM [4]. These include the Hello and Join/Prune messages | in common with PIM-SM [4]. These include the Hello and Join/Prune | |||
| as well as the format for the Encoded-Unicast address. For details on | messages as well as the format for the Encoded-Unicast address. For | |||
| the format of these packets please refer to the PIM-SM documentation. | details on the format of these packets please refer to the PIM-SM | |||
| Here we will only define the additional packets that are introduced by | documentation. Here we will only define the additional packets that | |||
| BIDIR-PIM. These are the packets used in the DF election process as | are introduced by BIDIR-PIM. These are the packets used in the DF | |||
| well as the Bidir_Capable PIM-Hello option. | election process as well as the Bidir_Capable PIM-Hello option. | |||
| 3.7.1. DF Election Packet Formats | 3.7.1. DF Election Packet Formats | |||
| All PIM control messages have IP protocol number 103. | All PIM control messages have IP protocol number 103. | |||
| BIDIR-PIM messages are multicast with TTL 1 to the `ALL-PIM-ROUTERS' | BIDIR-PIM messages are multicast with TTL 1 to the `ALL-PIM-ROUTERS' | |||
| group The IPv4 `ALL-PIM-ROUTERS' group is `224.0.0.13'. The IPv6 `ALL- | group The IPv4 `ALL-PIM-ROUTERS' group is `224.0.0.13'. The IPv6 | |||
| PIM-ROUTERS' group is `ff02::d'. | `ALL-PIM-ROUTERS' group is `ff02::d'. | |||
| All DF election BIDIR-PIM control messages share the common header | All DF election BIDIR-PIM control messages share the common header | |||
| below: | below: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |PIM Ver| Type |Subtype| Rsvd | Checksum | | |PIM Ver| Type |Subtype| Rsvd | Checksum | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Encoded-Unicast-RP-Address | | RP Address (Encoded-Unicast format) ... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Sender Metric Preference | | | Sender Metric Preference | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Sender Metric | | | Sender Metric | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| PIM Ver | PIM Ver | |||
| PIM Version number is 2. | PIM Version number is 2. | |||
| Type All DF-Election PIM control messages share the PIM message Type of | Type | |||
| 10. | All DF-Election PIM control messages share the PIM message Type of | |||
| 10. | ||||
| Subtype | Subtype | |||
| Subtypes for DF election messages are: | Subtypes for DF election messages are: | |||
| 1 = Offer | 1 = Offer | |||
| 2 = Winner | 2 = Winner | |||
| 3 = Backoff | 3 = Backoff | |||
| 4 = Pass | 4 = Pass | |||
| Rsvd Set to zero on transmission. Ignored upon receipt. | Rsvd | |||
| Set to zero on transmission. Ignored upon receipt. | ||||
| Checksum | Checksum | |||
| The checksum is standard IP checksum, i.e. the 16-bit one's | The checksum is standard IP checksum, i.e. the 16-bit one's | |||
| complement of the one's complement sum of the entire PIM message. | complement of the one's complement sum of the entire PIM message. | |||
| For computing the checksum, the checksum field is zeroed. | For computing the checksum, the checksum field is zeroed. | |||
| RP-Address | RP Address | |||
| The bidir RPA for which the election is taking place (note that the | The bidir RPA for which the election is taking place. Format | |||
| length of this field will be different than 32 bits depending on | described in [4] Section 4.9.1. | |||
| the family and encoding of the address). | ||||
| Sender Metric Preference | Sender Metric Preference | |||
| Preference value assigned to the unicast routing protocol that the | Preference value assigned to the unicast routing protocol that the | |||
| message sender used to obtain the route to the RPA. | message sender used to obtain the route to the RPA. | |||
| Sender Metric | Sender Metric | |||
| The unicast routing table metric used by the message sender to | The unicast routing table metric used by the message sender to | |||
| reach the RPA. The metric is in units applicable to the unicast | reach the RPA. The metric is in units applicable to the unicast | |||
| routing protocol used. | routing protocol used. | |||
| In addition to the fields defined above the Backoff and Pass messages | In addition to the fields defined above the Backoff and Pass messages | |||
| have the extra fields described below. | have the extra fields described below. | |||
| 3.7.2. Backoff Message | 3.7.2. Backoff Message | |||
| The Backoff message uses the following fields in addition to the common | The Backoff message uses the following fields in addition to the | |||
| election message format described above. | common election message format described above. | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Encoded-Unicast-Offering-Address | | Offering Address (Encoded-Unicast format) ... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Offering Metric Preference | | | Offering Metric Preference | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Offering Metric | | | Offering Metric | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Interval | | | Interval | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Offering Address | Offering Address | |||
| The address of the router that made the last (best) Offer (note | The address of the router that made the last (best) Offer. Format | |||
| that the length of this field will be different than 32 bits | described in [4] Section 4.9.1. | |||
| depending on the family and encoding of the address). | ||||
| Offering Metric Preference | Offering Metric Preference | |||
| Preference value assigned to the unicast routing protocol that the | Preference value assigned to the unicast routing protocol that the | |||
| offering router used to obtain the route to the RPA. | offering router used to obtain the route to the RPA. | |||
| Offering Metric | Offering Metric | |||
| The unicast routing table metric used by the offering router to | The unicast routing table metric used by the offering router to | |||
| reach the RPA. The metric is in units applicable to the unicast | reach the RPA. The metric is in units applicable to the unicast | |||
| routing protocol used. | routing protocol used. | |||
| Interval | Interval | |||
| The backoff interval in milliseconds to be used by routers with | The backoff interval in milliseconds to be used by routers with | |||
| worse metrics than the offering router. | worse metrics than the offering router. | |||
| 3.7.3. Pass Message | 3.7.3. Pass Message | |||
| The Pass message uses the following fields in addition to the common | The Pass message uses the following fields in addition to the common | |||
| election fields described above. | election fields described above. | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Encoded-Unicast-New-Winner-Address | | New Winner Address (Encoded-Unicast format) ... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | New Winner Metric Preference | | | New Winner Metric Preference | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | New Winner Metric | | | New Winner Metric | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| New Winner Address | New Winner Address | |||
| The address of the router that made the last (best) Offer (note | The address of the router that made the last (best) Offer. Format | |||
| that the length of this field will be different than 32 bits | described in [4] Section 4.9.1. | |||
| depending on the family and encoding of the address). | ||||
| New Winner Metric Preference | New Winner Metric Preference | |||
| Preference value assigned to the unicast routing protocol that the | Preference value assigned to the unicast routing protocol that the | |||
| offering router used to obtain the route to the RPA. | offering router used to obtain the route to the RPA. | |||
| New Winner Metric | New Winner Metric | |||
| The unicast routing table metric used by the offering router to | The unicast routing table metric used by the offering router to | |||
| reach the RPA. The metric is in units applicable to the unicast | reach the RPA. The metric is in units applicable to the unicast | |||
| routing protocol used. | routing protocol used. | |||
| 3.7.4. Bidir Capable PIM-Hello Option | 3.7.4. Bidir Capable PIM-Hello Option | |||
| BIDIR-PIM introduces one new PIM-Hello option. | BIDIR-PIM introduces one new PIM-Hello option. | |||
| o OptionType 22: Bidir Capable | o OptionType 22: Bidir Capable | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type = 22 | Length = 0 | | | Type = 22 | Length = 0 | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 4. RP Discovery | 4. RP Discovery | |||
| Routers discover that a range of multicast group addresses operates in | Routers discover that a range of multicast group addresses operates | |||
| bi-directional mode and the address of the Rendezvous-Point address | in bi-directional mode and the address of the Rendezvous-Point | |||
| (RPA) serving the group range either through static configuration or | address (RPA) serving the group range either through static | |||
| using an automatic RP discovery mechanism like the PIM Bootstrap | configuration or using an automatic RP discovery mechanism like the | |||
| mechanism (BSR) [9] or Auto-RP. | PIM Bootstrap mechanism (BSR) [7] or Auto-RP. | |||
| 5. Security Considerations | 5. Security Considerations | |||
| The IPsec [5] authentication header MAY be used to provide data | The IPsec [5] authentication header MAY be used to provide data | |||
| integrity protection and group-wise data origin authentication of BIDIR- | integrity protection and group-wise data origin authentication of | |||
| PIM protocol messages. Authentication of BIDIR-PIM messages can protect | BIDIR-PIM protocol messages. Authentication of BIDIR-PIM messages can | |||
| against unwanted behaviour caused by unauthorized or altered BIDIR-PIM | protect against unwanted behaviour caused by unauthorized or altered | |||
| messages. | BIDIR-PIM messages. | |||
| 5.1. Attacks Based on Forged Messages | 5.1. Attacks Based on Forged Messages | |||
| As in PIM Sparse-Mode, the extent of possible damage depends on the type | As in PIM Sparse-Mode, the extent of possible damage depends on the | |||
| of counterfeit messages accepted. BIDIR-PIM only uses link-local | type of counterfeit messages accepted. BIDIR-PIM only uses link-local | |||
| multicast messages sent to the ALL_PIM_ROUTERS address, hence attacks | multicast messages sent to the ALL_PIM_ROUTERS address, hence attacks | |||
| can only be carried out by directly connected nodes, or with the | can only be carried out by directly connected nodes, or with the | |||
| complicity of directly connected routers. | complicity of directly connected routers. | |||
| Some of the BIDIR-PIM protocol messages (Join/Prune and Hello) are | Some of the BIDIR-PIM protocol messages (Join/Prune and Hello) are | |||
| identical, both in format and functionality, to the respective messages | identical, both in format and functionality, to the respective | |||
| used in PIM-SM. Security considerations for these messages are to be | messages used in PIM-SM. Security considerations for these messages | |||
| found in [4]. Other messages (DF-election messages) are specific to | are to be found in [4]. Other messages (DF-election messages) are | |||
| BIDIR-PIM and will be discussed in the following paragraphs. | specific to BIDIR-PIM and will be discussed in the following | |||
| paragraphs. | ||||
| By forging DF-election messages an attacker can disrupt the election of | By forging DF-election messages an attacker can disrupt the election | |||
| the Designated Forwarder on a link in two different ways: | of the Designated Forwarder on a link in two different ways: | |||
| 5.1.1. Election of an Incorrect DF | 5.1.1. Election of an Incorrect DF | |||
| An attacker can force its election as DF by participating in a regular | An attacker can force its election as DF by participating in a | |||
| election and advertising the best metric to reach the RPA. An attacker | regular election and advertising the best metric to reach the RPA. | |||
| can also try to force the election of another router as DF by sending an | An attacker can also try to force the election of another router as | |||
| Offer, Winner or Pass message and impersonating another router. In some | DF by sending an Offer, Winner or Pass message and impersonating | |||
| cases (e.g. the Offer) multiple messages might be needed to carry out an | another router. In some cases (e.g. the Offer) multiple messages | |||
| attack. | might be needed to carry out an attack. | |||
| In the case of Offer or Winner messages the attacker will have to | In the case of Offer or Winner messages the attacker will have to | |||
| impersonate the node that it wants to have become the DF. In the case of | impersonate the node that it wants to have become the DF. In the case | |||
| the Pass it will have to impersonate the current DF. This type of attack | of the Pass it will have to impersonate the current DF. This type of | |||
| causes the wrong DF to be recorded in all nodes apart from the one that | attack causes the wrong DF to be recorded in all nodes apart from the | |||
| is being impersonated. This node typically will be able to detect the | one that is being impersonated. This node typically will be able to | |||
| anomaly and, possibly, restart a new election. | detect the anomaly and, possibly, restart a new election. | |||
| A more sophisticated attacker might carry out a concurrent DoS attack on | A more sophisticated attacker might carry out a concurrent DoS attack | |||
| the node being impersonated, so that it will not be able to detect the | on the node being impersonated, so that it will not be able to detect | |||
| forged packets and/or take countermeasures. | the forged packets and/or take countermeasures. | |||
| All attacks based on impersonation can be detected by all routers and | All attacks based on impersonation can be detected by all routers and | |||
| avoided if the source of DF-election messages can be authenticated. | avoided if the source of DF-election messages can be authenticated. | |||
| When authentication is available, spoofed messages MUST be discarded and | When authentication is available, spoofed messages MUST be discarded | |||
| a rate-limited warning message SHOULD be logged. | and a rate-limited warning message SHOULD be logged. | |||
| A more subtle attacker could use MAC-level addresses to partition the | A more subtle attacker could use MAC-level addresses to partition the | |||
| set of recipients of DF-election messages and create an inconsistent DF | set of recipients of DF-election messages and create an inconsistent | |||
| view on the link. For example the attacker could use unicast MAC | DF view on the link. For example the attacker could use unicast MAC | |||
| addresses for its forged DF-election messages. To prevent this type of | addresses for its forged DF-election messages. To prevent this type | |||
| attack, BIDIR-PIM routers SHOULD check the destination MAC address of | of attack, BIDIR-PIM routers SHOULD check the destination MAC address | |||
| received DF-election messages. This however is ineffective on links | of received DF-election messages. This however is ineffective on | |||
| that do not support layer-2 multicast delivery. | links that do not support layer-2 multicast delivery. | |||
| Source authentication is also sufficient to prevent this kind of attack. | Source authentication is also sufficient to prevent this kind of | |||
| attack. | ||||
| 5.1.2. Preventing Election Convergence | 5.1.2. Preventing Election Convergence | |||
| By forging DF election messages, an attacker can prevent the election | By forging DF election messages, an attacker can prevent the election | |||
| from converging thus disrupting the establishment of multicast | from converging thus disrupting the establishment of multicast | |||
| forwarding trees. There are many ways to achieve this. The simplest is | forwarding trees. There are many ways to achieve this. The simplest | |||
| by sending an infinite sequence of Offer messages (the metric used in | is by sending an infinite sequence of Offer messages (the metric used | |||
| the messages is not important). | in the messages is not important). | |||
| 5.2. Non-cryptographic Authentication Mechanisms | 5.2. Non-cryptographic Authentication Mechanisms | |||
| A BIDIR-PIM router SHOULD provide an option to limit the set of | A BIDIR-PIM router SHOULD provide an option to limit the set of | |||
| neighbors from which it will accept Join/Prune, Assert, and DF-election | neighbors from which it will accept Join/Prune, Assert, and DF- | |||
| messages. Either static configuration of IP addresses or an IPsec | election messages. Either static configuration of IP addresses or an | |||
| security association may be used. Furthermore, a PIM router SHOULD NOT | IPsec security association may be used. Furthermore, a PIM router | |||
| accept protocol messages from a router from which it has not yet | SHOULD NOT accept protocol messages from a router from which it has | |||
| received a valid Hello message. | not yet received a valid Hello message. | |||
| 5.2.1. Basic Access Control | 5.2.1. Basic Access Control | |||
| In a PIM-SM domain, when all routers are trusted, it is possible to | In a PIM-SM domain, when all routers are trusted, it is possible to | |||
| implement a basic form of access control for both sources and receivers: | implement a basic form of access control for both sources and | |||
| Receivers can be validated by the last-hop DR and sources can be | receivers: Receivers can be validated by the last-hop DR and sources | |||
| validated by the first-hop DR and/or the RP. | can be validated by the first-hop DR and/or the RP. | |||
| In BIDIR-PIM this is generally feasible only for receivers, as sources | In BIDIR-PIM this is generally feasible only for receivers, as | |||
| can send to the multicast group without the need for routers to detect | sources can send to the multicast group without the need for routers | |||
| their activity and create source-specific state. However it is possible | to detect their activity and create source-specific state. However it | |||
| to modify the standard BIDIR-PIM behaviour, in a backward compatible | is possible to modify the standard BIDIR-PIM behaviour, in a backward | |||
| way, to allow per-source access control. The tradeoff would be protocol | compatible way, to allow per-source access control. The tradeoff | |||
| simplicity, memory and processing requirements. | would be protocol simplicity, memory and processing requirements. | |||
| 5.3. Authentication Using IPsec | 5.3. Authentication Using IPsec | |||
| Just like for PIM-SM, the IPsec [5] transport mode using the | Just like for PIM-SM, the IPsec [5] transport mode using the | |||
| Authentication Header (AH) is the recommended method to prevent the | Authentication Header (AH) is the recommended method to prevent the | |||
| above attacks against BIDIR-PIM. | above attacks against BIDIR-PIM. | |||
| It is recommended that IPsec authentication be applied to all BIDIR-PIM | It is recommended that IPsec authentication be applied to all BIDIR- | |||
| protocol messages. The specification on how this is done is to be found | PIM protocol messages. The specification on how this is done is to be | |||
| in [4]. specifically the authentication of PIM-SM link-local messages, | found in [4]. specifically the authentication of PIM-SM link-local | |||
| described in [4] applies to all BIDIR-PIM messages as well. | messages, described in [4] applies to all BIDIR-PIM messages as well. | |||
| 5.4. Denial of Service Attacks | 5.4. Denial of Service Attacks | |||
| The denial of service attack based on forged Join described in [4] also | The denial of service attack based on forged Join described in [4] | |||
| apply to BIDIR-PIM. | also apply to BIDIR-PIM. | |||
| 6. Change history | ||||
| >From 06 to 07: Minor corrections in response to WG last call comments. | ||||
| >From 05 to 06: | ||||
| Minor editorial corrections. | ||||
| >From 03 to 05: | ||||
| RP concept replaced by RP Address (RPA) and RP Link (RPL). No DF | ||||
| election on RPL. RP forwards upstream on RPL. Accept joins even if not | ||||
| DF but do not forward. Added event description for DF election state | ||||
| machine. Security considerations by Lorenzo.Removed comparison with | ||||
| Dino's draft. | ||||
| >From 02 to 03: | ||||
| Consistency fixes in DF election tables to match state transition | ||||
| diagram pointed out by Apoorva. | ||||
| >From 00 to 01: | 6. IANA Considerations | |||
| The differences between this version (-01) of the BIDIR-PIM | IANA has assigned OptionType 22 to the "Bidir Capable" option. | |||
| specification and draft-ietf-pim-bidir-new-00.txt are mostly in the | ||||
| format of the information presented. As BIDIR-PIM has many similarities | ||||
| in operation to Sparse-Mode PIM, the earlier version of this spec relied | ||||
| heavily on the now obsolete PIM-SM [8] specification. This revision | ||||
| removes this dependency and instead references the new Sparse-Mode | ||||
| documentation [4] where necessary. In addition the method in which the | ||||
| protocol specification is presented has been updated to follow the | ||||
| format of [4]. | ||||
| 7. Acknowledgments | 7. Acknowledgments | |||
| The bidir proposal in this draft is heavily based on the ideas and text | The bidir proposal in this draft is heavily based on the ideas and | |||
| presented by Estrin and Farinacci in [7]. The main difference between | text presented by Estrin and Farinacci in [6]. The main difference | |||
| the two proposals is in the method chosen for upstream forwarding. | between the two proposals is in the method chosen for upstream | |||
| forwarding. | ||||
| We would also like to thank John Zwiebel at Procket, Deborah Estrin at | We would also like to thank John Zwiebel at Cisco, Deborah Estrin at | |||
| ISI/USC as well as Nidhi Bhaskar, Yiqun Cai, Toerless Eckert, Apoorva | ISI/USC, Bill Fenner at AT&T Research as well as Nidhi Bhaskar, Yiqun | |||
| Karan, Rajitha Sumanasekera and Beau Williamson at cisco for their | Cai, Toerless Eckert, Apoorva Karan, Rajitha Sumanasekera and Beau | |||
| contributions and comments to this draft. | Williamson at cisco for their contributions and comments to this | |||
| draft. | ||||
| 8. Authors' Addresses | 8. Authors' Addresses | |||
| Mark Handley | Mark Handley | |||
| Computer Science Department | Computer Science Department | |||
| University College London | University College London | |||
| M.Handley@cs.ucl.ac.uk | M.Handley@cs.ucl.ac.uk | |||
| Isidor Kouvelas | Isidor Kouvelas | |||
| Cisco Systems | Cisco Systems | |||
| kouvelas@cisco.com | kouvelas@cisco.com | |||
| Tony Speakman | Tony Speakman | |||
| Cisco Systems | Cisco Systems | |||
| speakman@cisco.com | speakman@cisco.com | |||
| Lorenzo Vicisano | Lorenzo Vicisano | |||
| Cisco Systems | Digital Fountain | |||
| lorenzo@cisco.com | lorenzo@digitalfountain.com | |||
| 9. Normative References | 9. Normative References | |||
| [1] S.E. Deering, "Host extensions for IP multicasting", RFC 1112, Aug | [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
| 1989. | Levels", BCP 14, RFC 2119, March 1997. | |||
| [2] B. Cain, S Deering, W. Fenner, I Kouvelas, A. Thyagarajan, "Internet | [2] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | |||
| Group Management Protocol, Version 3", RFC 3376. | Thyagarajan, "Internet Group Management Protocol, Version 3", RFC | |||
| 3376, October 2002. | ||||
| [3] S. Deering, W. Fenner, B. Haberman, "Multicast Listener Discovery | [3] Deering, S., Fenner, W., and B. Haberman, "Multicast Listener | |||
| (MLD) for IPv6", RFC 2710. | Discovery (MLD) for IPv6", RFC 2710, October 1999. | |||
| [4] B. Fenner, M. Handley, H. Holbrook, I. Kouvelas "Protocol | [4] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, "Protocol | |||
| Independent Multicast - Sparse Mode (PIM-SM): Protocol | Independent Multicast - Sparse Mode (PIM-SM): Protocol | |||
| Specification (Revised)", Work In Progress, <draft-ietf-pim-sm- | Specification (Revised)", RFC 4601, August 2006. | |||
| v2-new-09.txt>, 2004. | ||||
| [5] S. Kent, R. Atkinson, "Security Architecture for the Internet | [5] Kent, S. and R. Atkinson, "Security Architecture for the Internet | |||
| Protocol.", RFC 2401. | Protocol", RFC 2401, November 1998. [Note to RFC Editor: this is | |||
| intended to be the obsolete document, just like RFC 4601's] | ||||
| 10. Informative References | 10. Informative References | |||
| [6] T. Bates , R. Chandra , D. Katz , Y. Rekhter, "Multiprotocol | [6] Estrin, D. and D. Farinacci, "Bi-directional Shared Trees in PIM- | |||
| Extensions for BGP-4", RFC 2283 | SM", Work in progress <draft-farinacci-bidir-pim-01.txt>, May | |||
| 1999. | ||||
| [7] D. Estrin, D. Farinacci, "Bi-directional Shared Trees in PIM-SM", | [7] Bhaskar, N., Gall, A., Lingard, J. and S. Venaas, "Bootstrap | |||
| <draft-farinacci-bidir-pim-01.txt>, May 1999. | Router (BSR) Mechanism for PIM", Work in progress <draft-ietf-pim- | |||
| sm-bsr-09.txt>, June 2006. | ||||
| [8] D. Estrin et al, "Protocol Independent Multicast-Sparse Mode (PIM- | 11. Index | |||
| SM): Protocol Specification", RFC 2362, Nov 1999. | DF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7,21 | |||
| Downstream. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| DownstreamJPState(G,I). . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| ET(G,I) . . . . . . . . . . . . . . . . . . . . . . . . . . .11,16,34 | ||||
| ET(RPA,I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| I_am_DF(RPA,I). . . . . . . . . . . . . . . . . . . . . . . .12,14,17 | ||||
| J/P_HoldTime. . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| J/P_Override_Interval . . . . . . . . . . . . . . . . . . . . . 18,35 | ||||
| JoinDesired(G). . . . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
| joins(G). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| JT(*,G) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | ||||
| JT(G) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11,35 | ||||
| local_receiver_include(G,I) . . . . . . . . . . . . . . . . . . . 12 | ||||
| MFIB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| NLT(N,I). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| Offer_Period. . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| olist(G). . . . . . . . . . . . . . . . . . . . . . . . . . .12,14,21 | ||||
| OT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| pim_include(G). . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| PPT(G,I). . . . . . . . . . . . . . . . . . . . . . . . . . .11,16,35 | ||||
| RPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| RPF_interface(RPA). . . . . . . . . . . . . . . . . . . . . . . 12,14 | ||||
| RPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| TIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| t_override. . . . . . . . . . . . . . . . . . . . . . . . . . . 20,35 | ||||
| t_periodic. . . . . . . . . . . . . . . . . . . . . . . . . . . 20,35 | ||||
| t_suppressed. . . . . . . . . . . . . . . . . . . . . . . . . . 20,35 | ||||
| Upstream. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| [9] W. Fenner, M. Handley, R. Kermode and D. Thaler, "Bootstrap Router | Intellectual Property | |||
| (BSR) Mechanism for PIM Sparse Mode", Work in progress <draft-ietf- | ||||
| pim-sm-bsr-03.txt>, 2003. | ||||
| 11. Index | The IETF takes no position regarding the validity or scope of any | |||
| DF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7,21 | Intellectual Property Rights or other rights that might be claimed to | |||
| Downstream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | pertain to the implementation or use of the technology described in | |||
| DownstreamJPState(G,I) . . . . . . . . . . . . . . . . . . . . . . . 12 | this document or the extent to which any license under such rights | |||
| ET(G,I). . . . . . . . . . . . . . . . . . . . . . . . . . . . .11,16,34 | might or might not be available; nor does it represent that it has | |||
| ET(RPA,I). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | made any independent effort to identify any such rights. Information | |||
| I_am_DF(RPA,I) . . . . . . . . . . . . . . . . . . . . . . . . .12,14,17 | on the procedures with respect to rights in RFC documents can be | |||
| J/P_HoldTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | found in BCP 78 and BCP 79. | |||
| J/P_Override_Interval. . . . . . . . . . . . . . . . . . . . . . . 18,35 | ||||
| JoinDesired(G) . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | ||||
| joins(G) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| JT(*,G). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | ||||
| JT(G). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11,35 | ||||
| local_receiver_include(G,I). . . . . . . . . . . . . . . . . . . . . 12 | ||||
| MFIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| NLT(N,I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| Offer_Period . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| olist(G) . . . . . . . . . . . . . . . . . . . . . . . . . . . .12,14,20 | ||||
| OT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| pim_include(G) . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| PPT(G,I) . . . . . . . . . . . . . . . . . . . . . . . . . . . .11,16,35 | ||||
| RPA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| RPF_interface(RPA) . . . . . . . . . . . . . . . . . . . . . . . . 12,14 | ||||
| RPL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| TIB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| t_override . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20,35 | ||||
| t_periodic . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20,35 | ||||
| t_suppressed . . . . . . . . . . . . . . . . . . . . . . . . . . . 20,35 | ||||
| Upstream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| The IETF takes no position regarding the validity or scope of any | ||||
| Intellectual Property Rights or other rights that might be claimed to | ||||
| pertain to the implementation or use of the technology described in this | ||||
| document or the extent to which any license under such rights might or | ||||
| might not be available; nor does it represent that it has made any | ||||
| independent effort to identify any such rights. Information on the | ||||
| procedures with respect to rights in RFC documents can be found in BCP | ||||
| 78 and BCP 79. | ||||
| Copies of IPR disclosures made to the IETF Secretariat and any | Copies of IPR disclosures made to the IETF Secretariat and any | |||
| assurances of licenses to be made available, or the result of an attempt | assurances of licenses to be made available, or the result of an | |||
| made to obtain a general license or permission for the use of such | attempt made to obtain a general license or permission for the use of | |||
| proprietary rights by implementers or users of this specification can be | such proprietary rights by implementers or users of this | |||
| obtained from the IETF on-line IPR repository at | specification can be obtained from the IETF on-line IPR repository at | |||
| http://www.ietf.org/ipr. | http://www.ietf.org/ipr. | |||
| The IETF invites any interested party to bring to its attention any | The IETF invites any interested party to bring to its attention any | |||
| copyrights, patents or patent applications, or other proprietary rights | copyrights, patents or patent applications, or other proprietary | |||
| that may cover technology that may be required to implement this | rights that may cover technology that may be required to implement | |||
| standard. Please address the information to the IETF at ietf- | this standard. Please address the information to the IETF at | |||
| ipr@ietf.org. | ietf-ipr@ietf.org. | |||
| 12. Full Copyright Statement | Full Copyright Statement | |||
| Copyright (C) The Internet Society (2005). This document is subject to | Copyright (C) The IETF Trust (2007). | |||
| the rights, licenses and restrictions contained in BCP 78, and except as | ||||
| set forth therein, the authors retain all their rights. | ||||
| This document and the information contained herein are provided on an | This document is subject to the rights, licenses and restrictions | |||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR | contained in BCP 78, and except as set forth therein, the authors | |||
| IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | retain all their rights. | |||
| ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ||||
| INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | This document and the information contained herein are provided on an | |||
| INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | |||
| THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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. | ||||
| End of changes. 320 change blocks. | ||||
| 1426 lines changed or deleted | 1419 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||