summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9128.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9128.txt')
-rw-r--r--doc/rfc/rfc9128.txt4999
1 files changed, 4999 insertions, 0 deletions
diff --git a/doc/rfc/rfc9128.txt b/doc/rfc/rfc9128.txt
new file mode 100644
index 0000000..7236bcc
--- /dev/null
+++ b/doc/rfc/rfc9128.txt
@@ -0,0 +1,4999 @@
+
+
+
+
+Internet Engineering Task Force (IETF) X. Liu
+Request for Comments: 9128 IBM Corporation
+Category: Standards Track P. McAllister
+ISSN: 2070-1721 Metaswitch Networks
+ A. Peter
+ Individual
+ M. Sivakumar
+ Juniper Networks
+ Y. Liu
+ China Mobile
+ F. Hu
+ Individual Contributor
+ October 2022
+
+
+ YANG Data Model for Protocol Independent Multicast (PIM)
+
+Abstract
+
+ This document defines a YANG data model that can be used to configure
+ and manage devices supporting Protocol Independent Multicast (PIM).
+ The model covers the PIM protocol configuration, operational state,
+ and event notifications data.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9128.
+
+Copyright Notice
+
+ Copyright (c) 2022 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Terminology
+ 1.2. Tree Diagrams
+ 1.3. Prefixes in Data Node Names
+ 2. Design of Data Model
+ 2.1. Scope of Model
+ 2.2. Optional Capabilities
+ 2.3. Datastore Applicability
+ 2.4. Module and Hierarchy Organization
+ 2.5. Position of Address Family in Hierarchy
+ 3. Module Structure
+ 3.1. PIM Base Module
+ 3.1.1. High-Level Structure
+ 3.1.2. Global Data
+ 3.1.3. Per-Address-Family Data
+ 3.1.4. PIM Interface Modeling
+ 3.1.5. Neighbor Modeling
+ 3.1.6. Notifications
+ 3.2. PIM RP Module
+ 3.2.1. Static RPs
+ 3.2.2. BSRs
+ 3.2.3. RP State Data
+ 3.2.4. RP-to-Group Mappings
+ 3.2.5. Notifications
+ 3.3. PIM-SM Module
+ 3.4. PIM-DM Module
+ 3.5. BIDIR-PIM Module
+ 4. Complete Tree Structure
+ 4.1. PIM Base Module
+ 4.2. PIM RP Module
+ 4.3. PIM-SM Module
+ 4.4. PIM-DM Module
+ 4.5. BIDIR-PIM Module
+ 5. Relationship to the PIM-STD-MIB
+ 5.1. pimInterfaceTable
+ 5.2. pimNeighborTable
+ 5.3. pimStarGTable
+ 5.4. pimSGTable
+ 5.5. pimSGRptTable
+ 5.6. pimBidirDFElectionTable
+ 5.7. pimStaticRPTable
+ 5.8. pimAnycastRPSetTable
+ 5.9. pimGroupMappingTable
+ 6. PIM YANG Modules
+ 6.1. PIM Base Module
+ 6.2. PIM RP Module
+ 6.3. PIM-SM Module
+ 6.4. PIM-DM Module
+ 6.5. BIDIR-PIM Module
+ 7. Security Considerations
+ 8. IANA Considerations
+ 9. References
+ 9.1. Normative References
+ 9.2. Informative References
+ Appendix A. Data Tree Example
+ Acknowledgments
+ Authors' Addresses
+
+1. Introduction
+
+ YANG [RFC7950] is a data modeling language that was introduced to
+ model the configuration and operational state of a device managed
+ using network management protocols such as the Network Configuration
+ Protocol (NETCONF) [RFC6241] or RESTCONF [RFC8040]. YANG is now also
+ being used as a component of other management interfaces, such as
+ command-line interfaces (CLIs).
+
+ This document defines a YANG data model that can be used to configure
+ and manage devices supporting Protocol Independent Multicast (PIM).
+ This model supports the core PIM protocol, as well as many other
+ features; see Section 2.1. Non-core features are defined as optional
+ in the provided data model.
+
+1.1. Terminology
+
+ The terminology for describing YANG data models is found in
+ [RFC7950].
+
+ The following abbreviations are used in this document and the defined
+ model:
+
+ ASM: Any-Source Multicast service model [RFC3569] [RFC4607]
+
+ BFD: Bidirectional Forwarding Detection [RFC5880]
+
+ BIDIR-PIM: Protocol Independent Multicast - Bidirectional Mode
+ [RFC5015]
+
+ BSR: Bootstrap Router [RFC5059]
+
+ DF: Designated Forwarder [RFC5015]
+
+ DR: Designated Router [RFC7761]
+
+ IGMP: Internet Group Management Protocol [RFC3376]
+
+ MLD: Multicast Listener Discovery [RFC3810]
+
+ mLDP: Multipoint extensions for LDP [RFC6388]
+
+ MRIB: Multicast Routing Information Base [RFC3973] [RFC5015]
+ [RFC7761]
+
+ MSDP: Multicast Source Discovery Protocol [RFC3618]
+
+ mVPN: Multicast VPN
+
+ PIM: Protocol Independent Multicast [RFC3973] [RFC5015]
+ [RFC7761]
+
+ PIM-DM: Protocol Independent Multicast - Dense Mode [RFC3973]
+
+ PIM-SM: Protocol Independent Multicast - Sparse Mode [RFC7761]
+
+ RP: Rendezvous Point [RFC7761]
+
+ RPA: Rendezvous Point Address [RFC5015]
+
+ RPF: Reverse Path Forwarding [RFC3973] [RFC5015] [RFC7761]
+
+ RPT: Rendezvous Point Tree [RFC7761]
+
+ SPT: Shortest Path Tree [RFC7761]
+
+ SSM: Source-Specific Multicast service model [RFC3569]
+ [RFC4607]
+
+ VRF: Virtual Routing and Forwarding
+
+1.2. Tree Diagrams
+
+ Tree diagrams used in this document follow the notation defined in
+ [RFC8340].
+
+ In addition, the following notation is used as a placeholder at the
+ location of the name of a tree node, to represent a section of nodes:
+
+ <summary description of a section of nodes>
+
+1.3. Prefixes in Data Node Names
+
+ In this document, names of data nodes, actions, and other data model
+ objects are often used without a prefix, as long as the context
+ clearly indicates the YANG module in which each name is defined.
+ Otherwise, names are prefixed using the standard prefix associated
+ with the corresponding YANG module, as shown in Table 1.
+
+ +===========+====================+===========+
+ | Prefix | YANG Module | Reference |
+ +===========+====================+===========+
+ | yang | ietf-yang-types | [RFC6991] |
+ +-----------+--------------------+-----------+
+ | inet | ietf-inet-types | [RFC6991] |
+ +-----------+--------------------+-----------+
+ | if | ietf-interfaces | [RFC8343] |
+ +-----------+--------------------+-----------+
+ | rt | ietf-routing | [RFC8349] |
+ +-----------+--------------------+-----------+
+ | rt-types | ietf-routing-types | [RFC8294] |
+ +-----------+--------------------+-----------+
+ | bfd-types | ietf-bfd-types | [RFC9314] |
+ +-----------+--------------------+-----------+
+
+ Table 1: Prefixes and Corresponding YANG
+ Modules
+
+2. Design of Data Model
+
+2.1. Scope of Model
+
+ The model covers PIM Sparse Mode [RFC7761] (including the Source-
+ Specific subset [RFC3569] [RFC4607]), Dense Mode [RFC3973], and
+ Bidirectional PIM [RFC5015].
+
+ The PIM extensions represented in the model include BSRs [RFC5059]
+ and Anycast-RPs [RFC4610].
+
+ The data model can be used to configure and manage these protocol
+ features. The operational state data and statistics can be retrieved
+ by this model. The protocol-specific notifications are also defined
+ in the model.
+
+ This model does not cover other multicast protocols such as IGMP/MLD,
+ MSDP, mVPN, or mLDP in-band signaling. It does not cover any
+ configuration required to generate the MRIB. These will be specified
+ in separate documents.
+
+2.2. Optional Capabilities
+
+ This model is designed to represent the capabilities of devices
+ supporting PIM with various specifications, including some with basic
+ subsets of the PIM protocol. The main design goals of this document
+ are that any major currently existing implementation may be said to
+ support the base model and that the configuration of all
+ implementations meeting the specification is easy to express through
+ some combination of the features in the base model and simple vendor
+ augmentations.
+
+ There is also value in widely supported features being standardized,
+ to save work for individual vendors, and so that mapping between
+ different vendors' configurations is not needlessly complicated.
+ Therefore, these modules declare a number of features representing
+ capabilities that not all deployed devices support.
+
+ The extensive use of feature declarations should also substantially
+ simplify the capability negotiation process for a vendor's PIM
+ implementation.
+
+ On the other hand, operational state parameters are not so widely
+ designated as features, as there are many cases where the defaulting
+ of an operational state parameter would not cause any harm to the
+ system, and it is much more likely that an implementation without
+ intrinsic support for a piece of operational state would be able to
+ derive a suitable value for a state variable that is not
+ intrinsically supported.
+
+ For the same reason, wide constant ranges (for example, timer maxima
+ and minima) are used in the model. It is expected that vendors will
+ augment the model with any specific extensions and restrictions
+ needed to adapt it to their vendor-specific implementations.
+
+2.3. Datastore Applicability
+
+ This model conforms to the Network Management Datastore Architecture
+ (NMDA) [RFC8342]. The operational state data is combined with the
+ associated configuration data in the same hierarchy [RFC8407].
+
+2.4. Module and Hierarchy Organization
+
+ This model defines several separate modules for modeling PIM
+ configuration. Again, this separation makes it easier to express the
+ specific capabilities of a PIM device. The module organization,
+ along with the usage of the YANG extensible features such as
+ identity, allows the model to be easily augmented for new
+ capabilities.
+
+ The hierarchy of PIM configuration is designed so that objects that
+ are only relevant for one situation or feature are collected in a
+ container for that feature. For example, a configuration for PIM-SM
+ that is not relevant for an SSM-only implementation is collected in
+ an ASM container.
+
+ Where fields are not genuinely essential to protocol operation, they
+ are marked as optional. Some fields are essential but have a default
+ specified, so they need not be explicitly configured.
+
+ This module structure also applies, where applicable, to the
+ operational state and notifications of the model.
+
+2.5. Position of Address Family in Hierarchy
+
+ This document contains "address-family" as a node in the hierarchy
+ multiple times: under both the interface list and the PIM instance.
+
+ The reasoning for this is to make it easier for implementations in
+ which configuration options are not supported for specific address
+ families.
+
+ For these implementations, the restriction that interface
+ configuration must be address-family independent may be expressed
+ either (1) as a vendor augmentation of an address-family-independent
+ parameter above the address-family level or (2) by a constraint on
+ the base model objects of a form similar to the following:
+
+ deviation "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface/"
+ + "pim-base:address-family" {
+
+ deviate add {
+ must "(address-family = 'rt:ipv4' and dr-priority = "
+ + "../address-family[address-family = 'rt:ipv6']/"
+ + "dr-priority) or "
+ + "(address-family = 'rt:ipv6' and dr-priority = "
+ + "../address-family[address-family = 'rt:ipv4']/"
+ + "dr-priority)" {
+ error-message
+ "Error: The IPv6 DR priority must match the "
+ + "IPv4 DR priority.";
+ error-app-tag "dr-priority-mismatch";
+ }
+ }
+ }
+
+3. Module Structure
+
+3.1. PIM Base Module
+
+ The PIM base module defines the base framework not specific to any
+ PIM mode and is imported by the other modules. The base module by
+ itself does not provide sufficient data for any PIM mode to operate.
+ Other mode-specific and feature-specific modules need to be
+ implemented in addition to this module, depending on the feature set
+ required by the implementation.
+
+ This model augments the core routing data model "ietf-routing"
+ specified in [RFC8349]. The PIM base model augments "/rt:routing/
+ rt:control-plane-protocols" as opposed to augmenting "/rt:routing/
+ rt:control-plane-protocols/rt:control-plane-protocol", as the latter
+ would allow multiple protocol instances, while the PIM protocol is
+ designed to be enabled or disabled as a single protocol instance on a
+ network instance or a logical network element.
+
+3.1.1. High-Level Structure
+
+ The high-level structure of the model is shown below:
+
+ module: ietf-pim-base
+ augment /rt:routing/rt:control-plane-protocols:
+ +--rw pim!
+ +--rw <global configuration>
+ +--ro <global operational state>
+ +--rw address-family* [address-family]
+ | +--rw address-family identityref
+ | +--rw <per-address-family configuration>
+ | +--ro <per-address-family operational state>
+ +--rw interfaces
+ +--rw interface* [name]
+ +--rw name if:interface-ref
+ +--rw address-family* [address-family]
+ +--rw address-family identityref
+ +--rw <per interface configuration>
+ +--ro <per interface operational state>
+ +--ro neighbors
+ +--ro ipv4-neighbor* [address]
+ | +--ro address inet:ipv4-address
+ | +--ro <IPv4 per-neighbor operational state>
+ +--ro ipv6-neighbor* [address]
+ +--ro address inet:ipv6-address
+ +--ro <IPv4 per-neighbor operational state>
+
+ The presence of the top-level container "pim" enables the PIM
+ protocols.
+
+3.1.2. Global Data
+
+ The global configuration data and operational state data cover
+ support for graceful restart in the PIM base model. Additional
+ features can be added by augmentation if required by an
+ implementation.
+
+3.1.3. Per-Address-Family Data
+
+ Support for per-address-family data is shown below:
+
+ +--rw pim!
+ +--rw address-family* [address-family]
+ | +--rw address-family identityref
+ | +--rw graceful-restart
+ ...
+ | +--ro statistics
+ | | +--ro discontinuity-time? yang:date-and-time
+ | | +--ro error
+ | | | +--ro assert? yang:counter32
+ ...
+ | | +--ro queue
+ | | | +--ro size? uint32
+ | | | +--ro overflow? yang:counter32
+ | | +--ro received
+ | | | +--ro assert? yang:counter32
+ ...
+ | | +--ro sent
+ | | +--ro assert? yang:counter32
+ ...
+ | +--ro topology-tree-info
+ | | +--ro ipv4-route* [group source-address is-rpt]
+ | | | +--ro group
+ | | | | rt-types:ipv4-multicast-group-address
+ | | | +--ro source-address
+ | | | | rt-types:ipv4-multicast-source-address
+ | | | +--ro is-rpt boolean
+ | | +--ro ipv6-route* [group source-address is-rpt]
+
+ | | +--ro group
+ | | | rt-types:ipv6-multicast-group-address
+ | | +--ro source-address
+ | | | rt-types:ipv6-multicast-source-address
+ | | +--ro is-rpt boolean
+ ...
+ | | +--ro incoming-interface? if:interface-ref
+ ...
+ | | +--ro outgoing-interface* [name]
+ | | +--ro name if:interface-ref
+ | | +--ro expiration? rt-types:timer-value-seconds16
+ | | +--ro up-time? rt-types:timeticks64
+ | | +--ro jp-state? enumeration
+
+ This is the location that most of the PIM RP module (ietf-pim-rp)
+ augments. Each of the mode-specific modules also augments this
+ schema tree.
+
+3.1.4. PIM Interface Modeling
+
+ The configuration data and operational state data of PIM interfaces
+ are modeled as shown below:
+
+ +--rw pim!
+ +--rw interfaces
+ +--rw interface* [name]
+ +--rw name if:interface-ref
+ +--rw address-family* [address-family]
+ +--rw address-family identityref
+ +--rw bfd {bfd}?
+ ...
+ +--rw dr-priority? uint32 {intf-dr-priority}?
+ +--rw hello-interval? rt-types:timer-value-seconds16
+ | {intf-hello-interval}?
+ +--rw (hello-holdtime-or-multiplier)?
+ | +--:(holdtime) {intf-hello-holdtime}?
+ | | +--rw hello-holdtime?
+ | | rt-types:timer-value-seconds16
+ | +--:(multiplier) {intf-hello-multiplier}?
+ | +--rw hello-multiplier?
+ | rt-types:timer-multiplier
+ +--rw jp-interval? rt-types:timer-value-seconds16
+ | {intf-jp-interval}?
+ +--rw (jp-holdtime-or-multiplier)?
+ | +--:(holdtime) {intf-jp-holdtime}?
+ | | +--rw jp-holdtime?
+ | | rt-types:timer-value-seconds16
+ | +--:(multiplier) {intf-jp-multiplier}?
+ | +--rw jp-multiplier?
+ | rt-types:timer-multiplier
+ +--rw override-interval? uint16
+ | {intf-override-interval}?
+ +--rw propagation-delay? uint16
+ | {intf-propagation-delay}?
+ +--ro oper-status? enumeration
+ +--ro gen-id? uint32
+ +--ro hello-expiration? rt-types:timer-value-seconds16
+ +--ro ipv4
+ | +--ro address* inet:ipv4-address
+ | +--ro dr-address? inet:ipv4-address
+ +--ro ipv6
+ | +--ro address* inet:ipv6-address
+ | +--ro dr-address? inet:ipv6-address
+
+ Support for BFD client configuration is achieved by using a grouping
+ provided by an external module, "ietf-bfd-types", as defined in
+ [RFC9314].
+
+3.1.5. Neighbor Modeling
+
+ For each PIM interface, there can be a list of neighbors that
+ contains operational state data for each neighbor. To model such
+ data, the following structure is specified:
+
+ +--rw pim!
+ +--rw interfaces
+ +--rw interface* [name]
+ +--rw address-family* [address-family]
+ +--ro neighbors
+ +--ro ipv4-neighbor* [address]
+ | +--ro address inet:ipv4-address
+ | +--ro bfd-status? enumeration
+ | +--ro expiration?
+ | | rt-types:timer-value-seconds16
+ | +--ro dr-priority? uint32
+ | +--ro gen-id? uint32
+ | +--ro lan-prune-delay
+ | | +--ro present? boolean
+ | | +--ro override-interval? uint16
+ | | +--ro propagation-delay? uint16
+ | | +--ro t-bit? boolean
+ | +--ro up-time? rt-types:timeticks64
+ +--ro ipv6-neighbor* [address]
+ +--ro address inet:ipv6-address
+ +--ro bfd-status? enumeration
+ +--ro expiration?
+ | rt-types:timer-value-seconds16
+ +--ro dr-priority? uint32
+ +--ro gen-id? uint32
+ +--ro lan-prune-delay
+ | +--ro present? boolean
+ | +--ro override-interval? uint16
+ | +--ro propagation-delay? uint16
+ | +--ro t-bit? boolean
+ +--ro up-time? rt-types:timeticks64
+
+3.1.6. Notifications
+
+ The PIM base module also defines the notifications for PIM interface
+ and neighbor events, as shown below:
+
+ notifications:
+ +---n pim-neighbor-event
+ | +--ro event-type? neighbor-event-type
+ | +--ro interface-ref? leafref
+ | +--ro interface-af-ref? leafref
+ | +--ro neighbor-ipv4-ref? leafref
+ | +--ro neighbor-ipv6-ref? leafref
+ | +--ro up-time? rt-types:timeticks64
+ +---n pim-interface-event
+ +--ro event-type? interface-event-type
+ +--ro interface-ref? leafref
+ +--ro ipv4
+ | +--ro address* inet:ipv4-address
+ | +--ro dr-address? inet:ipv4-address
+ +--ro ipv6
+ +--ro address* inet:ipv6-address
+ +--ro dr-address? inet:ipv6-address
+
+3.2. PIM RP Module
+
+ The PIM RP module augments the PIM base module to define the
+ configuration and operational state information scoped to RP-related
+ features:
+
+ module: ietf-pim-rp
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw rp
+ +--rw static-rp
+ ...
+ +--rw bsr {bsr}?
+ ...
+ +--ro rp-list
+ ...
+ +--ro rp-mappings
+ ...
+
+ This module is shared by PIM-SM and BIDIR-PIM mode but is not shared
+ by PIM-DM. The PIM-SM module and the BIDIR-PIM module augment this
+ module to cover mode-specific data.
+
+ The following sections describe the features and capabilities covered
+ in this module.
+
+3.2.1. Static RPs
+
+ Static RPs can be configured by using the following portion of the
+ module:
+
+ +--rw rp
+ +--rw static-rp
+ | +--rw ipv4-rp* [rp-address]
+ | | +--rw rp-address inet:ipv4-address
+ | +--rw ipv6-rp* [rp-address]
+ | +--rw rp-address inet:ipv6-address
+
+3.2.2. BSRs
+
+ Support for BSRs includes both configuration data and operational
+ state data, as shown below:
+
+ +--rw rp
+ +--rw bsr {bsr}?
+ | +--rw bsr-candidate!
+ | | +--rw (interface-or-address)?
+ | | | +--:(interface) {candidate-interface}?
+ | | | | +--rw interface if:interface-ref
+ | | | +--:(ipv4-address) {candidate-ipv4}?
+ | | | | +--rw ipv4-address inet:ipv4-address
+ | | | +--:(ipv6-address) {candidate-ipv6}?
+ | | | +--rw ipv6-address inet:ipv6-address
+ | | +--rw hash-mask-length uint8
+ | | +--rw priority? uint8
+ | +--rw rp-candidate
+ | | +--rw interface* [name] {candidate-interface}?
+ | | | +--rw name if:interface-ref
+ | | | +--rw policy-name? string
+ | | | +--rw mode? identityref
+ | | +--rw ipv4-address* [address] {candidate-ipv4}?
+ | | | +--rw address inet:ipv4-address
+ | | | +--rw policy-name? string
+ | | | +--rw mode? identityref
+ | | +--rw ipv6-address* [address] {candidate-ipv6}?
+ | | +--rw address inet:ipv6-address
+ | | +--rw policy-name? string
+ | | +--rw mode? identityref
+ | +--ro bsr
+ | | +--ro address? inet:ip-address
+ | | +--ro hash-mask-length? uint8
+ | | +--ro priority? uint8
+ | | +--ro up-time? rt-types:timeticks64
+ | +--ro (election-state)? {bsr-election-state}?
+ | | +--:(candidate)
+ | | | +--ro candidate-bsr-state? enumeration
+ | | +--:(non-candidate)
+ | | +--ro non-candidate-bsr-state? enumeration
+ | +--ro bsr-next-bootstrap? uint16
+ | +--ro rp
+ | | +--ro rp-address? inet:ip-address
+ | | +--ro policy-name? string
+ | | +--ro up-time? rt-types:timeticks64
+ | +--ro rp-candidate-next-advertisement? uint16
+
+3.2.3. RP State Data
+
+ This portion of the model provides the operational state information
+ for all RPs on the router, including the statically configured RPs
+ and the BSR-elected RPs.
+
+ +--rw rp
+ +--ro rp-list
+ | +--ro ipv4-rp* [rp-address mode]
+ | | +--ro rp-address inet:ipv4-address
+ | | +--ro mode identityref
+ | | +--ro info-source-address? inet:ipv4-address
+ | | +--ro info-source-type? identityref
+ | | +--ro up-time? rt-types:timeticks64
+ | | +--ro expiration? rt-types:timer-value-seconds16
+ | +--ro ipv6-rp* [rp-address mode]
+ | +--ro rp-address inet:ipv6-address
+ | +--ro mode identityref
+ | +--ro info-source-address? inet:ipv6-address
+ | +--ro info-source-type? identityref
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro expiration? rt-types:timer-value-seconds16
+
+3.2.4. RP-to-Group Mappings
+
+ The operational state data of the mappings between RPs and multicast
+ groups is modeled as follows:
+
+ +--rw rp
+ +--ro rp-mappings
+ +--ro ipv4-rp* [group rp-address]
+ | +--ro group inet:ipv4-prefix
+ | +--ro rp-address inet:ipv4-address
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro expiration? rt-types:timer-value-seconds16
+ +--ro ipv6-rp* [group rp-address]
+ +--ro group inet:ipv6-prefix
+ +--ro rp-address inet:ipv6-address
+ +--ro up-time? rt-types:timeticks64
+ +--ro expiration? rt-types:timer-value-seconds16
+
+3.2.5. Notifications
+
+ The PIM RP module also defines the notifications for RP-related
+ events, as shown below:
+
+ notifications:
+ +---n pim-rp-event
+ +--ro event-type? rp-event-type
+ +--ro instance-af-ref? leafref
+ +--ro group? rt-types:ip-multicast-group-address
+ +--ro rp-address? inet:ip-address
+ +--ro is-rpt? boolean
+ +--ro mode? pim-base:pim-mode
+ +--ro message-origin? inet:ip-address
+
+3.3. PIM-SM Module
+
+ The PIM-SM module covers Sparse Mode modeling, including PIM Any-
+ Source Multicast (PIM-ASM) and PIM Source-Specific Multicast (PIM-
+ SSM). This module has dependencies on the PIM base module and the
+ PIM RP module, both of which are augmented by this module.
+
+ The augmentation to the "address-family" branch of the PIM base
+ module is shown below:
+
+ module: ietf-pim-sm
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw sm
+ +--rw asm
+ | +--rw anycast-rp!
+ | | +--rw ipv4-anycast-rp* [anycast-address rp-address]
+ | | | +--rw anycast-address inet:ipv4-address
+ | | | +--rw rp-address inet:ipv4-address
+ | | +--rw ipv6-anycast-rp* [anycast-address rp-address]
+ | | +--rw anycast-address inet:ipv6-address
+ | | +--rw rp-address inet:ipv6-address
+ | +--rw spt-switch
+ | +--rw infinity! {spt-switch-infinity}?
+ | +--rw policy-name? string {spt-switch-policy}?
+ +--rw ssm!
+ +--rw range-policy? string
+
+ To support PIM-SM on an interface, this module augments the
+ "interface" branch of the PIM base module, as follows:
+
+ module: ietf-pim-sm
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface/pim-base:address-family:
+ +--rw sm!
+ +--rw passive? empty
+
+ This module also augments the PIM RP module to allow an RP to be
+ configured in PIM-SM:
+
+ module: ietf-pim-sm
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp:
+ +--rw sm!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp:
+ +--rw sm!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+
+3.4. PIM-DM Module
+
+ The PIM-DM module covers Dense Mode modeling. This module augments
+ the PIM base module, but it has no dependency on the PIM RP module.
+
+ module: ietf-pim-dm
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw dm!
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface
+ /pim-base:address-family:
+ +--rw dm!
+
+3.5. BIDIR-PIM Module
+
+ The BIDIR-PIM module covers Bidirectional PIM modeling. Like PIM-SM,
+ this module augments both the PIM base module and the PIM RP module.
+
+ The augmentations to the PIM base module, on the "address-family",
+ "interface", and "neighbor" branches, are as follows:
+
+ module: ietf-pim-bidir
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw bidir!
+
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface/pim-base:address-family:
+ +--rw bidir!
+ +--rw df-election {intf-df-election}?
+ +--rw offer-interval? uint16
+ +--rw backoff-interval? uint16
+ +--rw offer-multiplier? uint8
+
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface/pim-base:address-family
+ /pim-base:neighbors/pim-base:ipv4-neighbor:
+ +--ro bidir-capable? boolean
+
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface/pim-base:address-family
+ /pim-base:neighbors/pim-base:ipv6-neighbor:
+ +--ro bidir-capable? boolean
+
+ This module also augments the PIM RP module to extend the
+ capabilities of RPs for BIDIR-PIM mode:
+
+ module: ietf-pim-bidir
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp:
+ +--rw bidir!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp:
+ +--rw bidir!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp:
+ +--ro bidir
+ +--ro df-election
+ | +--ro ipv4-rp* [rp-address]
+ | | +--ro rp-address inet:ipv4-address
+ | +--ro ipv6-rp* [rp-address]
+ | +--ro rp-address inet:ipv6-address
+ +--ro interface-df-election
+ +--ro ipv4-rp* [rp-address interface-name]
+ | +--ro rp-address inet:ipv4-address
+ | +--ro interface-name if:interface-ref
+ | +--ro df-address? inet:ipv4-address
+ | +--ro interface-state? identityref
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro winner-metric? uint32
+ | +--ro winner-metric-preference? uint32
+ +--ro ipv6-rp* [rp-address interface-name]
+ +--ro rp-address inet:ipv6-address
+ +--ro interface-name if:interface-ref
+ +--ro df-address? inet:ipv6-address
+ +--ro interface-state? identityref
+ +--ro up-time? rt-types:timeticks64
+ +--ro winner-metric? uint32
+ +--ro winner-metric-preference? uint32
+
+4. Complete Tree Structure
+
+4.1. PIM Base Module
+
+ module: ietf-pim-base
+ augment /rt:routing/rt:control-plane-protocols:
+ +--rw pim!
+ +--rw graceful-restart
+ | +--rw enabled? boolean
+ | +--rw duration? uint16
+ +--rw address-family* [address-family]
+ | +--rw address-family identityref
+ | +--rw graceful-restart
+ | | +--rw enabled? boolean
+ | | +--rw duration? uint16
+ | +--ro statistics
+ | | +--ro discontinuity-time? yang:date-and-time
+ | | +--ro error
+ | | | +--ro assert? yang:counter64
+ | | | +--ro bsr? yang:counter64
+ | | | +--ro candidate-rp-advertisement? yang:counter64
+ | | | +--ro df-election? yang:counter64
+ | | | +--ro graft? yang:counter64
+ | | | +--ro graft-ack? yang:counter64
+ | | | +--ro hello? yang:counter64
+ | | | +--ro join-prune? yang:counter64
+ | | | +--ro register? yang:counter64
+ | | | +--ro register-stop? yang:counter64
+ | | | +--ro state-refresh? yang:counter64
+ | | | +--ro checksum? yang:counter64
+ | | | +--ro format? yang:counter64
+ | | +--ro queue
+ | | | +--ro size? uint32
+ | | | +--ro overflow? yang:counter32
+ | | +--ro received
+ | | | +--ro assert? yang:counter64
+ | | | +--ro bsr? yang:counter64
+ | | | +--ro candidate-rp-advertisement? yang:counter64
+ | | | +--ro df-election? yang:counter64
+ | | | +--ro graft? yang:counter64
+ | | | +--ro graft-ack? yang:counter64
+ | | | +--ro hello? yang:counter64
+ | | | +--ro join-prune? yang:counter64
+ | | | +--ro register? yang:counter64
+ | | | +--ro register-stop? yang:counter64
+ | | | +--ro state-refresh? yang:counter64
+ | | +--ro sent
+ | | +--ro assert? yang:counter64
+ | | +--ro bsr? yang:counter64
+ | | +--ro candidate-rp-advertisement? yang:counter64
+ | | +--ro df-election? yang:counter64
+ | | +--ro graft? yang:counter64
+ | | +--ro graft-ack? yang:counter64
+ | | +--ro hello? yang:counter64
+ | | +--ro join-prune? yang:counter64
+ | | +--ro register? yang:counter64
+ | | +--ro register-stop? yang:counter64
+ | | +--ro state-refresh? yang:counter64
+ | +--ro topology-tree-info
+ | +--ro ipv4-route* [group source-address is-rpt]
+ | | +--ro group
+ | | | rt-types:ipv4-multicast-group-address
+ | | +--ro source-address
+ | | | rt-types:ipv4-multicast-source-address
+ | | +--ro is-rpt boolean
+ | | +--ro expiration?
+ | | | rt-types:timer-value-seconds16
+ | | +--ro incoming-interface? if:interface-ref
+ | | +--ro is-spt? boolean
+ | | +--ro mode? identityref
+ | | +--ro msdp-learned? boolean
+ | | +--ro rp-address? inet:ip-address
+ | | +--ro rpf-neighbor? inet:ip-address
+ | | +--ro up-time? rt-types:timeticks64
+ | | +--ro outgoing-interface* [name]
+ | | +--ro name if:interface-ref
+ | | +--ro expiration? rt-types:timer-value-seconds16
+ | | +--ro up-time? rt-types:timeticks64
+ | | +--ro jp-state? enumeration
+ | +--ro ipv6-route* [group source-address is-rpt]
+ | +--ro group
+ | | rt-types:ipv6-multicast-group-address
+ | +--ro source-address
+ | | rt-types:ipv6-multicast-source-address
+ | +--ro is-rpt boolean
+ | +--ro expiration?
+ | | rt-types:timer-value-seconds16
+ | +--ro incoming-interface? if:interface-ref
+ | +--ro is-spt? boolean
+ | +--ro mode? identityref
+ | +--ro msdp-learned? boolean
+ | +--ro rp-address? inet:ip-address
+ | +--ro rpf-neighbor? inet:ip-address
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro outgoing-interface* [name]
+ | +--ro name if:interface-ref
+ | +--ro expiration? rt-types:timer-value-seconds16
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro jp-state? enumeration
+ +--rw interfaces
+ +--rw interface* [name]
+ +--rw name if:interface-ref
+ +--rw address-family* [address-family]
+ +--rw address-family identityref
+ +--rw bfd {bfd}?
+ | +--rw enabled? boolean
+ | +--rw local-multiplier? multiplier
+ | +--rw (interval-config-type)?
+ | +--:(tx-rx-intervals)
+ | | +--rw desired-min-tx-interval? uint32
+ | | +--rw required-min-rx-interval? uint32
+ | +--:(single-interval)
+ | {single-minimum-interval}?
+ | +--rw min-interval? uint32
+ +--rw dr-priority? uint32
+ | {intf-dr-priority}?
+ +--rw hello-interval?
+ | rt-types:timer-value-seconds16
+ | {intf-hello-interval}?
+ +--rw (hello-holdtime-or-multiplier)?
+ | +--:(holdtime) {intf-hello-holdtime}?
+ | | +--rw hello-holdtime?
+ | | rt-types:timer-value-seconds16
+ | +--:(multiplier) {intf-hello-multiplier}?
+ | +--rw hello-multiplier?
+ | rt-types:timer-multiplier
+ +--rw jp-interval?
+ | rt-types:timer-value-seconds16
+ | {intf-jp-interval}?
+ +--rw (jp-holdtime-or-multiplier)?
+ | +--:(holdtime) {intf-jp-holdtime}?
+ | | +--rw jp-holdtime?
+ | | rt-types:timer-value-seconds16
+ | +--:(multiplier) {intf-jp-multiplier}?
+ | +--rw jp-multiplier?
+ | rt-types:timer-multiplier
+ +--rw override-interval? uint16
+ | {intf-override-interval}?
+ +--rw propagation-delay? uint16
+ | {intf-propagation-delay}?
+ +--ro oper-status? enumeration
+ +--ro gen-id? uint32
+ +--ro hello-expiration?
+ | rt-types:timer-value-seconds16
+ +--ro ipv4
+ | +--ro address* inet:ipv4-address
+ | +--ro dr-address? inet:ipv4-address
+ +--ro ipv6
+ | +--ro address* inet:ipv6-address
+ | +--ro dr-address? inet:ipv6-address
+ +--ro neighbors
+ +--ro ipv4-neighbor* [address]
+ | +--ro address inet:ipv4-address
+ | +--ro bfd-state? bfd-types:state
+ | +--ro expiration?
+ | | rt-types:timer-value-seconds16
+ | +--ro dr-priority? uint32
+ | +--ro gen-id? uint32
+ | +--ro lan-prune-delay
+ | | +--ro present? boolean
+ | | +--ro override-interval? uint16
+ | | +--ro propagation-delay? uint16
+ | | +--ro t-bit? boolean
+ | +--ro up-time? rt-types:timeticks64
+ +--ro ipv6-neighbor* [address]
+ +--ro address inet:ipv6-address
+ +--ro bfd-state? bfd-types:state
+ +--ro expiration?
+ | rt-types:timer-value-seconds16
+ +--ro dr-priority? uint32
+ +--ro gen-id? uint32
+ +--ro lan-prune-delay
+ | +--ro present? boolean
+ | +--ro override-interval? uint16
+ | +--ro propagation-delay? uint16
+ | +--ro t-bit? boolean
+ +--ro up-time? rt-types:timeticks64
+
+ notifications:
+ +---n pim-neighbor-event
+ | +--ro event-type? neighbor-event-type
+ | +--ro interface-ref? leafref
+ | +--ro interface-af-ref? leafref
+ | +--ro neighbor-ipv4-ref? leafref
+ | +--ro neighbor-ipv6-ref? leafref
+ | +--ro up-time? rt-types:timeticks64
+ +---n pim-interface-event
+ +--ro event-type? interface-event-type
+ +--ro interface-ref? leafref
+ +--ro ipv4
+ | +--ro address* inet:ipv4-address
+ | +--ro dr-address? inet:ipv4-address
+ +--ro ipv6
+ +--ro address* inet:ipv6-address
+ +--ro dr-address? inet:ipv6-address
+
+4.2. PIM RP Module
+
+ module: ietf-pim-rp
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw rp
+ +--rw static-rp
+ | +--rw ipv4-rp* [rp-address]
+ | | +--rw rp-address inet:ipv4-address
+ | +--rw ipv6-rp* [rp-address]
+ | +--rw rp-address inet:ipv6-address
+ +--rw bsr {bsr}?
+ | +--rw bsr-candidate!
+ | | +--rw (interface-or-address)?
+ | | | +--:(interface) {candidate-interface}?
+ | | | | +--rw interface if:interface-ref
+ | | | +--:(ipv4-address) {candidate-ipv4}?
+ | | | | +--rw ipv4-address inet:ipv4-address
+ | | | +--:(ipv6-address) {candidate-ipv6}?
+ | | | +--rw ipv6-address inet:ipv6-address
+ | | +--rw hash-mask-length uint8
+ | | +--rw priority? uint8
+ | +--rw rp-candidate
+ | | +--rw interface* [name] {candidate-interface}?
+ | | | +--rw name if:interface-ref
+ | | | +--rw policy-name? string
+ | | | +--rw mode? identityref
+ | | +--rw ipv4-address* [address] {candidate-ipv4}?
+ | | | +--rw address inet:ipv4-address
+ | | | +--rw policy-name? string
+ | | | +--rw mode? identityref
+ | | +--rw ipv6-address* [address] {candidate-ipv6}?
+ | | +--rw address inet:ipv6-address
+ | | +--rw policy-name? string
+ | | +--rw mode? identityref
+ | +--ro bsr
+ | | +--ro address? inet:ip-address
+ | | +--ro hash-mask-length? uint8
+ | | +--ro priority? uint8
+ | | +--ro up-time? rt-types:timeticks64
+ | +--ro (election-state)? {bsr-election-state}?
+ | | +--:(candidate)
+ | | | +--ro candidate-bsr-state? enumeration
+ | | +--:(non-candidate)
+ | | +--ro non-candidate-bsr-state? enumeration
+ | +--ro bsr-next-bootstrap? uint16
+ | +--ro rp
+ | | +--ro rp-address? inet:ip-address
+ | | +--ro policy-name? string
+ | | +--ro up-time? rt-types:timeticks64
+ | +--ro rp-candidate-next-advertisement? uint16
+ +--ro rp-list
+ | +--ro ipv4-rp* [rp-address mode]
+ | | +--ro rp-address inet:ipv4-address
+ | | +--ro mode identityref
+ | | +--ro info-source-address? inet:ipv4-address
+ | | +--ro info-source-type? identityref
+ | | +--ro up-time? rt-types:timeticks64
+ | | +--ro expiration?
+ | | rt-types:timer-value-seconds16
+ | +--ro ipv6-rp* [rp-address mode]
+ | +--ro rp-address inet:ipv6-address
+ | +--ro mode identityref
+ | +--ro info-source-address? inet:ipv6-address
+ | +--ro info-source-type? identityref
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro expiration?
+ | rt-types:timer-value-seconds16
+ +--ro rp-mappings
+ +--ro ipv4-rp* [group-range rp-address]
+ | +--ro group-range inet:ipv4-prefix
+ | +--ro rp-address inet:ipv4-address
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro expiration? rt-types:timer-value-seconds16
+ +--ro ipv6-rp* [group-range rp-address]
+ +--ro group-range inet:ipv6-prefix
+ +--ro rp-address inet:ipv6-address
+ +--ro up-time? rt-types:timeticks64
+ +--ro expiration? rt-types:timer-value-seconds16
+
+ notifications:
+ +---n pim-rp-event
+ +--ro event-type? rp-event-type
+ +--ro instance-af-ref? leafref
+ +--ro group? rt-types:ip-multicast-group-address
+ +--ro rp-address? inet:ip-address
+ +--ro is-rpt? boolean
+ +--ro mode? identityref
+ +--ro message-origin? inet:ip-address
+
+4.3. PIM-SM Module
+
+ module: ietf-pim-sm
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw sm
+ +--rw asm
+ | +--rw anycast-rp!
+ | | +--rw ipv4-anycast-rp* [anycast-address rp-address]
+ | | | +--rw anycast-address inet:ipv4-address
+ | | | +--rw rp-address inet:ipv4-address
+ | | +--rw ipv6-anycast-rp* [anycast-address rp-address]
+ | | +--rw anycast-address inet:ipv6-address
+ | | +--rw rp-address inet:ipv6-address
+ | +--rw spt-switch
+ | +--rw infinity! {spt-switch-infinity}?
+ | +--rw policy-name? string {spt-switch-policy}?
+ +--rw ssm!
+ +--rw range-policy? string
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface
+ /pim-base:address-family:
+ +--rw sm!
+ +--rw passive? empty
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp
+ /pim-rp:ipv4-rp:
+ +--rw sm!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp
+ /pim-rp:ipv6-rp:
+ +--rw sm!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+
+4.4. PIM-DM Module
+
+ module: ietf-pim-dm
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw dm!
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface
+ /pim-base:address-family:
+ +--rw dm!
+
+4.5. BIDIR-PIM Module
+
+ module: ietf-pim-bidir
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family:
+ +--rw bidir!
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface
+ /pim-base:address-family:
+ +--rw bidir!
+ +--rw df-election {intf-df-election}?
+ +--rw offer-interval? uint16
+ +--rw backoff-interval? uint16
+ +--rw offer-multiplier? uint8
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp
+ /pim-rp:ipv4-rp:
+ +--rw bidir!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp/pim-rp:static-rp
+ /pim-rp:ipv6-rp:
+ +--rw bidir!
+ +--rw policy-name? string
+ +--rw override? boolean {static-rp-override}?
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:address-family/pim-rp:rp:
+ +--ro bidir
+ +--ro df-election
+ | +--ro ipv4-rp* [rp-address]
+ | | +--ro rp-address inet:ipv4-address
+ | +--ro ipv6-rp* [rp-address]
+ | +--ro rp-address inet:ipv6-address
+ +--ro interface-df-election
+ +--ro ipv4-rp* [rp-address interface-name]
+ | +--ro rp-address inet:ipv4-address
+ | +--ro interface-name if:interface-ref
+ | +--ro df-address? inet:ipv4-address
+ | +--ro interface-state? identityref
+ | +--ro up-time? rt-types:timeticks64
+ | +--ro winner-metric? uint32
+ | +--ro winner-metric-preference? uint32
+ +--ro ipv6-rp* [rp-address interface-name]
+ +--ro rp-address inet:ipv6-address
+ +--ro interface-name if:interface-ref
+ +--ro df-address? inet:ipv6-address
+ +--ro interface-state? identityref
+ +--ro up-time? rt-types:timeticks64
+ +--ro winner-metric? uint32
+ +--ro winner-metric-preference? uint32
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface
+ /pim-base:address-family/pim-base:neighbors
+ /pim-base:ipv4-neighbor:
+ +--ro bidir-capable? boolean
+ augment /rt:routing/rt:control-plane-protocols/pim-base:pim
+ /pim-base:interfaces/pim-base:interface
+ /pim-base:address-family/pim-base:neighbors
+ /pim-base:ipv6-neighbor:
+ +--ro bidir-capable? boolean
+
+5. Relationship to the PIM-STD-MIB
+
+ The following sections describe the mappings between the objects in
+ the PIM-STD-MIB defined in [RFC5060] and the YANG data nodes defined
+ in this document.
+
+5.1. pimInterfaceTable
+
+ pimInterfaceTable is mapped to pim/interfaces/interface. The key of
+ pimInterfaceTable is pimInterfaceIfIndex and pimInterfaceIPVersion,
+ while the key of the "interface" list in YANG is the node "name".
+ For each value of pimInterfaceIPVersion, the "interface" list
+ contains a corresponding sublist whose key is the node "address-
+ family".
+
+ Table 2 lists the YANG data nodes with corresponding objects of
+ pimInterfaceTable in the PIM-STD-MIB.
+
+ +========================+==================================+
+ | YANG Node | PIM-STD-MIB Object |
+ +========================+==================================+
+ | address-family | pimInterfaceAddressType |
+ +------------------------+----------------------------------+
+ | ipv4/address | pimInterfaceAddress |
+ +------------------------+ |
+ | ipv6/address | |
+ +------------------------+----------------------------------+
+ | gen-id | pimInterfaceGenerationIDValue |
+ +------------------------+----------------------------------+
+ | ipv4/dr-address | pimInterfaceDR |
+ +------------------------+ |
+ | ipv6/dr-address | |
+ +------------------------+----------------------------------+
+ | dr-priority | pimInterfaceDRPriority |
+ +------------------------+----------------------------------+
+ | hello-interval | pimInterfaceHelloInterval |
+ +------------------------+----------------------------------+
+ | hello-holdtime | pimInterfaceHelloHoldtime |
+ +------------------------+----------------------------------+
+ | jp-interval | pimInterfaceJoinPruneInterval |
+ +------------------------+----------------------------------+
+ | jp-holdtime | pimInterfaceJoinPruneHoldtime |
+ +------------------------+----------------------------------+
+ | bidir/offer-multiplier | pimInterfaceDFElectionRobustness |
+ +------------------------+----------------------------------+
+ | propagation-delay | pimInterfacePropagationDelay |
+ +------------------------+----------------------------------+
+ | override-interval | pimInterfaceOverrideInterval |
+ +------------------------+----------------------------------+
+
+ Table 2: YANG Nodes and pimInterfaceTable Objects
+
+5.2. pimNeighborTable
+
+ pimNeighborTable is mapped to pim/interfaces/interface/neighbors/
+ ipv4-neighbor and pim/interfaces/interface/neighbors/ipv6-neighbor.
+
+ Table 3 lists the YANG data nodes with corresponding objects of
+ pimNeighborTable in the PIM-STD-MIB.
+
+ +==============================+=================================+
+ | YANG Node | PIM-STD-MIB Object |
+ +==============================+=================================+
+ | ipv4-neighbor | pimNeighborAddressType |
+ +------------------------------+ |
+ | ipv6-neighbor | |
+ +------------------------------+---------------------------------+
+ | address | pimNeighborAddress |
+ +------------------------------+---------------------------------+
+ | gen-id | pimNeighborGenerationIDValue |
+ +------------------------------+---------------------------------+
+ | up-time | pimNeighborUpTime |
+ +------------------------------+---------------------------------+
+ | expiration | pimNeighborExpiryTime |
+ +------------------------------+---------------------------------+
+ | dr-priority | pimNeighborDRPriority |
+ +------------------------------+---------------------------------+
+ | lan-prune-delay/present | pimNeighborLanPruneDelayPresent |
+ +------------------------------+---------------------------------+
+ | lan-prune-delay/t-bit | pimNeighborTBit |
+ +------------------------------+---------------------------------+
+ | lan-prune-delay/propagation- | pimNeighborPropagationDelay |
+ | delay | |
+ +------------------------------+---------------------------------+
+ | lan-prune-delay/override- | pimNeighborOverrideInterval |
+ | interval | |
+ +------------------------------+---------------------------------+
+ | ietf-pim-bidir:bidir-capable | pimNeighborBidirCapable |
+ +------------------------------+---------------------------------+
+
+ Table 3: YANG Nodes and pimNeighborTable Objects
+
+5.3. pimStarGTable
+
+ pimStarGTable is mapped to pim/address-family/topology-tree-info/
+ ipv4-route and pim/address-family/topology-tree-info/ipv6-route, when
+ the value of the "source-address" leaf is "ietf-routing-types:*" and
+ the value of the "is-rpt" leaf is "false".
+
+ Table 4 lists the YANG data nodes with corresponding objects of
+ pimStarGTable in the PIM-STD-MIB.
+
+ +====================+==============================+
+ | YANG Node | PIM-STD-MIB Object |
+ +====================+==============================+
+ | ipv4-route | pimStarGAddressType |
+ +--------------------+ |
+ | ipv6-route | |
+ +--------------------+------------------------------+
+ | group | pimStarGGrpAddress |
+ +--------------------+------------------------------+
+ | up-time | pimStarGUpTime |
+ +--------------------+------------------------------+
+ | mode | pimStarGPimMode |
+ +--------------------+------------------------------+
+ | rp-address | pimStarGRPAddressType |
+ | +------------------------------+
+ | | pimStarGRPAddress |
+ +--------------------+------------------------------+
+ | rpf-neighbor | pimStarGUpstreamNeighborType |
+ | +------------------------------+
+ | | pimStarGUpstreamNeighbor |
+ +--------------------+------------------------------+
+ | incoming-interface | pimStarGRPFIfIndex |
+ +--------------------+------------------------------+
+
+ Table 4: YANG Nodes and pimStarGTable Objects
+
+ In addition, the object "pimStarGPimModeOrigin" in pimStarGTable is
+ mapped to the node "rp/rp-list/ipv4-rp/info-source-type" or the node
+ "rp/rp-list/ipv6-rp/info-source-type" in the YANG module
+ "ietf-pim-rp".
+
+5.4. pimSGTable
+
+ pimSGTable is mapped to pim/address-family/topology-tree-info/
+ ipv4-route and pim/address-family/topology-tree-info/ipv6-route, when
+ the value of the "source-address" leaf is not "ietf-routing-types:*"
+ and the value of the "is-rpt" leaf is "false".
+
+ Table 5 lists the YANG data nodes with corresponding objects of
+ pimSGTable in the PIM-STD-MIB.
+
+ +====================+==========================+
+ | YANG Node | PIM-STD-MIB Object |
+ +====================+==========================+
+ | ipv4-route | pimSGAddressType |
+ +--------------------+ |
+ | ipv6-route | |
+ +--------------------+--------------------------+
+ | group | pimSGGrpAddress |
+ +--------------------+--------------------------+
+ | source-address | pimSGSrcAddress |
+ +--------------------+--------------------------+
+ | up-time | pimSGUpTime |
+ +--------------------+--------------------------+
+ | mode | pimSGPimMode |
+ +--------------------+--------------------------+
+ | rpf-neighbor | pimStarGUpstreamNeighbor |
+ +--------------------+--------------------------+
+ | incoming-interface | pimStarGRPFIfIndex |
+ +--------------------+--------------------------+
+ | is-spt | pimSGSPTBit |
+ +--------------------+--------------------------+
+ | expiration | pimSGKeepaliveTimer |
+ +--------------------+--------------------------+
+
+ Table 5: YANG Nodes and pimSGTable Objects
+
+5.5. pimSGRptTable
+
+ pimSGRptTable is mapped to pim/address-family/topology-tree-info/
+ ipv4-route and pim/address-family/topology-tree-info/ipv6-route, when
+ the value of the "is-rpt" leaf is "true".
+
+ Table 6 lists the YANG data nodes with corresponding objects of
+ pimSGRptTable in the PIM-STD-MIB.
+
+ +================+=====================+
+ | YANG Node | PIM-STD-MIB Object |
+ +================+=====================+
+ | ipv4-route | pimStarGAddressType |
+ +----------------+ |
+ | ipv6-route | |
+ +----------------+---------------------+
+ | group | pimStarGGrpAddress |
+ +----------------+---------------------+
+ | source-address | pimSGRptSrcAddress |
+ +----------------+---------------------+
+ | up-time | pimSGRptUpTime |
+ +----------------+---------------------+
+
+ Table 6: YANG Nodes and
+ pimSGRptTable Objects
+
+5.6. pimBidirDFElectionTable
+
+ pimBidirDFElectionTable is mapped to pim/address-family/rp/bidir/
+ interface-df-election/ipv4-rp and pim/address-family/rp/bidir/
+ interface-df-election/ipv6-rp. The key of
+ pimBidirDFElectionTable includes pimBidirDFElectionIfIndex, whose
+ type is InterfaceIndex, while the YANG lists use a node "name" with
+ the type string instead.
+
+ Table 7 lists the YANG data nodes with corresponding objects of
+ pimBidirDFElectionTable in the PIM-STD-MIB.
+
+ +==========================+=====================================+
+ | YANG Node | PIM-STD-MIB Object |
+ +==========================+=====================================+
+ | ipv4-rp | pimBidirDFElectionAddressType |
+ +--------------------------+ |
+ | ipv6-rp | |
+ +--------------------------+-------------------------------------+
+ | rp-address | pimBidirDFElectionRPAddress |
+ +--------------------------+-------------------------------------+
+ | df-address | pimBidirDFElectionWinnerAddressType |
+ | +-------------------------------------+
+ | | pimBidirDFElectionWinnerAddress |
+ +--------------------------+-------------------------------------+
+ | up-time | pimBidirDFElectionWinnerUpTime |
+ +--------------------------+-------------------------------------+
+ | winner-metric-preference | pimBidirDFElectionWinnerMetricPref |
+ | +-------------------------------------+
+ | | pimBidirDFElectionWinnerMetric |
+ +--------------------------+-------------------------------------+
+ | interface-state | pimBidirDFElectionState |
+ +--------------------------+-------------------------------------+
+
+ Table 7: YANG Nodes and pimBidirDFElectionTable Objects
+
+5.7. pimStaticRPTable
+
+ pimStaticRPTable is mapped to pim/address-family/rp/static-rp/ipv4-rp
+ and pim/address-family/rp/static-rp/ipv6-rp.
+
+ Table 8 lists the YANG data nodes with corresponding objects of
+ pimStaticRPTable in the PIM-STD-MIB.
+
+ +================+============================+
+ | YANG Node | PIM-STD-MIB Object |
+ +================+============================+
+ | ipv4-rp | pimStaticRPAddressType |
+ +----------------+ |
+ | ipv6-rp | |
+ +----------------+----------------------------+
+ | rp-address | pimStaticRPRPAddress |
+ +----------------+----------------------------+
+ | bidir | pimStaticRPPimMode |
+ +----------------+ |
+ | sm | |
+ +----------------+----------------------------+
+ | bidir/override | pimStaticRPOverrideDynamic |
+ +----------------+ |
+ | sm/override | |
+ +----------------+----------------------------+
+
+ Table 8: YANG Nodes and
+ pimStaticRPTable Objects
+
+5.8. pimAnycastRPSetTable
+
+ pimAnycastRPSetTable is mapped to pim/address-family/sm/asm/anycast-
+ rp/ipv4-anycast-rp and pim/address-family/sm/asm/anycast-rp/ipv6-
+ anycast-rp.
+
+ Table 9 lists the YANG data nodes with corresponding objects of
+ pimAnycastRPSetTable in the PIM-STD-MIB.
+
+ +=================+===============================+
+ | YANG Node | PIM-STD-MIB Object |
+ +=================+===============================+
+ | ipv4-anycast-rp | pimAnycastRPSetAddressType |
+ +-----------------+ |
+ | ipv6-anycast-rp | |
+ +-----------------+-------------------------------+
+ | anycast-address | pimAnycastRPSetAnycastAddress |
+ +-----------------+-------------------------------+
+ | rp-address | pimAnycastRPSetRouterAddress |
+ +-----------------+-------------------------------+
+
+ Table 9: YANG Nodes and
+ pimAnycastRPSetTable Objects
+
+5.9. pimGroupMappingTable
+
+ pimGroupMappingTable is mapped to pim/address-family/rp/rp-mappings/
+ ipv4-rp and pim/address-family/rp/rp-mappings/ipv6-rp.
+
+ Table 10 lists the YANG data nodes with corresponding objects of
+ pimGroupMappingTable in the PIM-STD-MIB.
+
+ +============+================================+
+ | YANG Node | PIM-STD-MIB Object |
+ +============+================================+
+ | ipv4-rp | pimGroupMappingAddressType |
+ +------------+ |
+ | ipv6-rp | |
+ +------------+--------------------------------+
+ | group | pimGroupMappingGrpAddress |
+ | +--------------------------------+
+ | | pimGroupMappingGrpPrefixLength |
+ +------------+--------------------------------+
+ | ipv4-rp | pimGroupMappingRPAddressType |
+ +------------+ |
+ | ipv6-rp | |
+ +------------+--------------------------------+
+ | rp-address | pimGroupMappingRPAddress |
+ | +--------------------------------+
+ | | pimGroupMappingPimMode |
+ +------------+--------------------------------+
+
+ Table 10: YANG Nodes and
+ pimGroupMappingTable Objects
+
+ In addition, the object "pimGroupMappingPimMode" in
+ pimGroupMappingTable is mapped to the node "rp/rp-list/ipv4-rp/mode"
+ or the node "rp/rp-list/ipv6-rp/mode" in the YANG module
+ "ietf-pim-rp".
+
+6. PIM YANG Modules
+
+6.1. PIM Base Module
+
+ This module references [RFC3973], [RFC5015], [RFC5880], [RFC6991],
+ [RFC7761], [RFC8294], [RFC8343], [RFC8349], [RFC8706], and [RFC9314].
+
+ <CODE BEGINS> file "ietf-pim-base@2022-10-19.yang"
+ module ietf-pim-base {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base";
+ prefix pim-base;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-routing-types {
+ prefix rt-types;
+ reference
+ "RFC 8294: Common YANG Data Types for the Routing Area";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference
+ "RFC 8343: A YANG Data Model for Interface Management";
+ }
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing Management (NMDA
+ Version)";
+ }
+ import ietf-bfd-types {
+ prefix bfd-types;
+ reference
+ "RFC 9314: YANG Data Model for Bidirectional Forwarding
+ Detection (BFD)";
+ }
+
+ organization
+ "IETF PIM Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/pim/>
+ WG List: <mailto:pim@ietf.org>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>
+
+ Editor: Pete McAllister
+ <mailto:pete.mcallister@metaswitch.com>
+
+ Editor: Anish Peter
+ <mailto:anish.ietf@gmail.com>
+
+ Editor: Mahesh Sivakumar
+ <mailto:sivakumar.mahesh@gmail.com>
+
+ Editor: Yisong Liu
+ <mailto:liuyisong@chinamobile.com>
+
+ Editor: Fangwei Hu
+ <mailto:hufwei@gmail.com>";
+ description
+ "This module defines a collection of YANG definitions common for
+ all PIM (Protocol Independent Multicast) modes.
+
+ Copyright (c) 2022 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9128; see the
+ RFC itself for full legal notices.";
+
+ revision 2022-10-19 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ /*
+ * Features
+ */
+
+ feature bfd {
+ description
+ "Supports BFD (Bidirectional Forwarding Detection).";
+ reference
+ "RFC 5880: Bidirectional Forwarding Detection (BFD)";
+ }
+
+ feature global-graceful-restart {
+ description
+ "Global configuration for graceful restart support as per
+ RFC 8706.";
+ reference
+ "RFC 8706: Restart Signaling for IS-IS";
+ }
+
+ feature intf-dr-priority {
+ description
+ "Supports configuration of an interface DR (Designated Router)
+ priority.";
+ reference
+ "RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.3.2";
+ }
+
+ feature intf-hello-holdtime {
+ description
+ "Supports configuration of the interface Hello Holdtime.";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.3.3
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.11";
+ }
+
+ feature intf-hello-interval {
+ description
+ "Supports configuration of the interface Hello interval.";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.8
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.11";
+ }
+
+ feature intf-hello-multiplier {
+ description
+ "Supports configuration of the interface Hello multiplier
+ (the number by which the Hello interval is multiplied to
+ obtain the Hello Holdtime).";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.8
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.11";
+ }
+
+ feature intf-jp-interval {
+ description
+ "Supports configuration of the interface Join/Prune interval.";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.8
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.11";
+ }
+
+ feature intf-jp-holdtime {
+ description
+ "Supports configuration of the interface Join/Prune Holdtime.";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.8
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.11";
+ }
+
+ feature intf-jp-multiplier {
+ description
+ "Supports configuration of the interface Join/Prune
+ multiplier (the number by which the Join/Prune interval is
+ multiplied to obtain the Join/Prune Holdtime).";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.8
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.11";
+ }
+
+ feature intf-propagation-delay {
+ description
+ "Supports configuration of interface propagation delay.";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.3.5
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.3.3";
+ }
+
+ feature intf-override-interval {
+ description
+ "Supports configuration of the interface override interval.";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised),
+ Sections 4.1.1 and 4.8
+ RFC 5015: Bidirectional Protocol Independent Multicast
+ (BIDIR-PIM), Section 3.6
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.11";
+ }
+
+ feature per-af-graceful-restart {
+ description
+ "Per address family configuration for graceful restart support
+ as per RFC 8706.";
+ reference
+ "RFC 8706: Restart Signaling for IS-IS";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef interface-event-type {
+ type enumeration {
+ enum up {
+ description
+ "Neighbor status changed to 'up'.";
+ }
+ enum down {
+ description
+ "Neighbor status changed to 'down'.";
+ }
+ enum new-dr {
+ description
+ "A new DR (Designated Router) was elected on the connected
+ network.";
+ }
+ enum new-df {
+ description
+ "A new DF (Designated Forwarder) was elected on the
+ connected network.";
+ }
+ }
+ description
+ "Operational status event type for notifications.";
+ }
+
+ typedef neighbor-event-type {
+ type enumeration {
+ enum up {
+ description
+ "Neighbor status changed to 'up'.";
+ }
+ enum down {
+ description
+ "Neighbor status changed to 'down'.";
+ }
+ }
+ description
+ "Operational status event type for notifications.";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity pim-mode {
+ description
+ "The PIM mode in which a group is operating.";
+ }
+
+ identity pim-none {
+ base pim-mode;
+ description
+ "PIM is not operating.";
+ }
+
+ identity pim-bidir {
+ base pim-mode;
+ description
+ "PIM is operating in Bidirectional Mode.";
+ }
+
+ identity pim-dm {
+ base pim-mode;
+ description
+ "PIM is operating in Dense Mode (DM).";
+ }
+
+ identity pim-sm {
+ base pim-mode;
+ description
+ "PIM is operating in Sparse Mode (SM).";
+ }
+
+ identity pim-asm {
+ base pim-sm;
+ description
+ "PIM is operating in Sparse Mode with Any-Source Multicast
+ (ASM).";
+ }
+
+ identity pim-ssm {
+ base pim-sm;
+ description
+ "PIM is operating in Sparse Mode with Source-Specific
+ Multicast (SSM).";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping graceful-restart-container {
+ description
+ "A grouping defining a container of graceful restart
+ attributes.";
+ container graceful-restart {
+ leaf enabled {
+ type boolean;
+ default "false";
+ description
+ "Enables or disables graceful restart.";
+ }
+ leaf duration {
+ type uint16;
+ units "seconds";
+ default "60";
+ description
+ "Maximum time for graceful restart to finish.";
+ }
+ description
+ "Container of graceful restart attributes.";
+ }
+ } // graceful-restart-container
+
+ grouping multicast-route-attributes {
+ description
+ "A grouping defining multicast route attributes.";
+ leaf expiration {
+ type rt-types:timer-value-seconds16;
+ description
+ "When the route will expire.";
+ }
+ leaf incoming-interface {
+ type if:interface-ref;
+ description
+ "Reference to an entry in the global interface list.";
+ }
+ leaf is-spt {
+ type boolean;
+ description
+ "'true' if the SPTbit (Shortest Path Tree bit) is set to
+ indicate that forwarding is taking place on the
+ (S,G) SPT.";
+ reference
+ "RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.1.3";
+ }
+ leaf mode {
+ type identityref {
+ base pim-mode;
+ }
+ description
+ "PIM mode.";
+ }
+ leaf msdp-learned {
+ type boolean;
+ description
+ "'true' if the route is learned from MSDP (the Multicast
+ Source Discovery Protocol).";
+ }
+ leaf rp-address {
+ type inet:ip-address;
+ description
+ "RP (Rendezvous Point) address.";
+ }
+ leaf rpf-neighbor {
+ type inet:ip-address;
+ description
+ "RPF (Reverse Path Forwarding) neighbor address.";
+ }
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second) since the
+ route last transitioned into the active state.";
+ }
+ list outgoing-interface {
+ key "name";
+ description
+ "A list of outgoing interfaces.";
+ leaf name {
+ type if:interface-ref;
+ description
+ "Interface name.";
+ }
+ leaf expiration {
+ type rt-types:timer-value-seconds16;
+ description
+ "Expiration time.";
+ }
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second) since
+ the 'oper-status' setting of the interface was last
+ changed to 'up'.";
+ }
+ leaf jp-state {
+ type enumeration {
+ enum no-info {
+ description
+ "The interface has no (*,G) Join state and no timers
+ running.";
+ }
+ enum join {
+ description
+ "The interface has Join state.";
+ }
+ enum prune-pending {
+ description
+ "The router has received a Prune on this interface from
+ a downstream neighbor and is waiting to see whether
+ the Prune will be overridden by another downstream
+ router. For forwarding purposes, the Prune-Pending
+ state functions exactly like the Join state.";
+ }
+ }
+ description
+ "Join/Prune state.";
+ }
+ }
+ } // multicast-route-attributes
+
+ grouping neighbor-state-af-attributes {
+ description
+ "A grouping defining neighbor per address family attributes.";
+ leaf bfd-state {
+ type bfd-types:state;
+ description
+ "BFD (Bidirectional Forwarding Detection) status.";
+ }
+ leaf expiration {
+ type rt-types:timer-value-seconds16;
+ description
+ "Neighbor expiration time.";
+ }
+ leaf dr-priority {
+ type uint32;
+ description
+ "DR (Designated Router) priority as the preference in the DR
+ election process.";
+ }
+ leaf gen-id {
+ type uint32;
+ description
+ "The value of the Generation ID in the last Hello message
+ from the neighbor.";
+ }
+ container lan-prune-delay {
+ description
+ "The information of the LAN Prune Delay option in the Hello
+ message from the neighbor.";
+ leaf present {
+ type boolean;
+ description
+ "'true' if the LAN Prune Delay option is present in the
+ last Hello message from the neighbor.";
+ }
+ leaf override-interval {
+ when "../present = 'true'" {
+ description
+ "Available only when 'leaf present' is 'true'.";
+ }
+ type uint16;
+ units "milliseconds";
+ description
+ "The value of the Override_Interval field of the LAN Prune
+ Delay option in the last Hello message from the neighbor.
+ The neighbor uses this value to indicate a short period
+ after a Join or Prune to allow other routers on the LAN
+ to override the Join or Prune.";
+ }
+ leaf propagation-delay {
+ when "../present = 'true'" {
+ description
+ "Available only when 'leaf present' is 'true'.";
+ }
+ type uint16;
+ units "milliseconds";
+ description
+ "The value of the Propagation_Delay field of the LAN Prune
+ Delay option in the last Hello message from the neighbor.
+ The value is the propagation delay over the local link
+ expected by the neighbor.";
+ }
+ leaf t-bit {
+ when "../present = 'true'" {
+ description
+ "Available only when 'leaf present' is 'true'.";
+ }
+ type boolean;
+ description
+ "'true' if the T bit is set in the LAN Prune Delay option
+ in the last Hello message from the neighbor. This flag
+ indicates the neighbor's ability to disable Join
+ message suppression.";
+ }
+ }
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second) since
+ the neighbor relationship has been formed as reachable
+ without being timed out.";
+ }
+ } // neighbor-state-af-attributes
+
+ grouping pim-instance-af-state-ref {
+ description
+ "An absolute reference to a PIM instance address family.";
+ leaf instance-af-ref {
+ type leafref {
+ path "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:address-family/"
+ + "pim-base:address-family";
+ }
+ description
+ "Reference to a PIM instance address family.";
+ }
+ } // pim-instance-af-state-ref
+
+ grouping pim-interface-state-ref {
+ description
+ "An absolute reference to a PIM interface state.";
+ leaf interface-ref {
+ type leafref {
+ path "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface/"
+ + "pim-base:name";
+ }
+ description
+ "Reference to a PIM interface.";
+ }
+ } // pim-interface-state-ref
+
+ grouping statistics-sent-received {
+ description
+ "A grouping defining sent and received statistics
+ on PIM messages.";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised), Section 4.7.1
+ RFC 5015: Bidirectional Protocol Independent Multicast
+ (BIDIR-PIM), Section 3.7
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.9";
+ leaf assert {
+ type yang:counter64;
+ description
+ "The number of Assert messages, with the message Type
+ of 5 (RFCs 3973 and 7761).";
+ reference
+ "RFC 3973: Protocol Independent Multicast - Dense Mode
+ (PIM-DM): Protocol Specification (Revised)
+ RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised)";
+ }
+ leaf bsr {
+ type yang:counter64;
+ description
+ "The number of Bootstrap messages, with the message Type
+ of 4 (RFCs 3973 and 7761).";
+ }
+ leaf candidate-rp-advertisement {
+ type yang:counter64;
+ description
+ "The number of Candidate RP Advertisement messages, with the
+ message Type of 8 (RFCs 3973 and 7761).";
+ }
+ leaf df-election {
+ type yang:counter64;
+ description
+ "The number of DF (Designated Forwarder) election messages,
+ with the message Type of 10 (RFC 5015).";
+ reference
+ "RFC 5015: Bidirectional Protocol Independent Multicast
+ (BIDIR-PIM)";
+ }
+ leaf graft {
+ type yang:counter64;
+ description
+ "The number of Graft messages, with the message Type
+ of 6 (RFCs 3973 and 7761).";
+ }
+ leaf graft-ack {
+ type yang:counter64;
+ description
+ "The number of Graft-Ack messages, with the message Type
+ of 7 (RFCs 3973 and 7761).";
+ }
+ leaf hello {
+ type yang:counter64;
+ description
+ "The number of Hello messages, with the message Type
+ of 0 (RFCs 3973 and 7761).";
+ }
+ leaf join-prune {
+ type yang:counter64;
+ description
+ "The number of Join/Prune messages, with the message Type
+ of 3 (RFCs 3973 and 7761).";
+ }
+ leaf register {
+ type yang:counter64;
+ description
+ "The number of Register messages, with the message Type
+ of 1 (RFCs 3973 and 7761).";
+ }
+ leaf register-stop {
+ type yang:counter64;
+ description
+ "The number of Register-Stop messages, with the message Type
+ of 2 (RFCs 3973 and 7761).";
+ }
+ leaf state-refresh {
+ type yang:counter64;
+ description
+ "The number of State Refresh messages, with the message Type
+ of 9 (RFC 3973).";
+ }
+ } // statistics-sent-received
+
+ /*
+ * Data nodes
+ */
+
+ augment "/rt:routing/rt:control-plane-protocols" {
+ description
+ "PIM augmentation to the routing instance model.";
+ container pim {
+ presence "Enables the PIM protocol.";
+ description
+ "PIM configuration data and operational state data.";
+ uses graceful-restart-container {
+ if-feature "global-graceful-restart";
+ }
+ list address-family {
+ key "address-family";
+ description
+ "Each list entry for one address family.";
+ uses rt:address-family;
+ uses graceful-restart-container {
+ if-feature "per-af-graceful-restart";
+ }
+ container statistics {
+ config false;
+ description
+ "A container defining statistics attributes.";
+ leaf discontinuity-time {
+ type yang:date-and-time;
+ description
+ "The time of the most recent occasion at which any one
+ or more of the statistics counters suffered a
+ discontinuity. If no such discontinuities have
+ occurred since the last reinitialization of the local
+ management subsystem, then this node contains the time
+ the local management subsystem reinitialized
+ itself.";
+ }
+ container error {
+ description
+ "Contains error statistics.";
+ uses statistics-sent-received {
+ description
+ "Statistics counters on the PIM messages per PIM
+ message Type. Each leaf attribute counts the number
+ of PIM messages that were of a particular Type (such
+ as Hello) and contained errors preventing them from
+ being processed by PIM.
+
+ Such messages are also counted by the corresponding
+ counter of the same Type (such as Hello) in the
+ 'received' container.";
+ }
+ leaf checksum {
+ type yang:counter64;
+ description
+ "The number of PIM messages that were passed to PIM
+ and contained checksum errors.";
+ }
+ leaf format {
+ type yang:counter64;
+ description
+ "The number of PIM messages that passed checksum
+ validation but contained format errors, including
+ errors related to PIM Version, Type, and message
+ length.";
+ }
+ }
+ container queue {
+ description
+ "Contains queue statistics.";
+ leaf size {
+ type uint32;
+ description
+ "The size of the input queue.";
+ }
+ leaf overflow {
+ type yang:counter32;
+ description
+ "The number of input queue overflows.";
+ }
+ }
+ container received {
+ description
+ "Contains statistics of received messages.";
+ uses statistics-sent-received;
+ }
+ container sent {
+ description
+ "Contains statistics of sent messages.";
+ uses statistics-sent-received;
+ }
+ }
+ container topology-tree-info {
+ config false;
+ description
+ "Contains topology tree information.";
+ list ipv4-route {
+ when "../../address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "group source-address is-rpt";
+ description
+ "A list of IPv4 routes.";
+ leaf group {
+ type rt-types:ipv4-multicast-group-address;
+ description
+ "Group address.";
+ }
+ leaf source-address {
+ type rt-types:ipv4-multicast-source-address;
+ description
+ "Source address.";
+ }
+ leaf is-rpt {
+ type boolean;
+ description
+ "'true' if the tree is an RPT
+ (Rendezvous Point Tree).";
+ }
+ uses multicast-route-attributes;
+ } // ipv4-route
+ list ipv6-route {
+ when "../../address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "group source-address is-rpt";
+ description
+ "A list of IPv6 routes.";
+ leaf group {
+ type rt-types:ipv6-multicast-group-address;
+ description
+ "Group address.";
+ }
+ leaf source-address {
+ type rt-types:ipv6-multicast-source-address;
+ description
+ "Source address.";
+ }
+ leaf is-rpt {
+ type boolean;
+ description
+ "'true' if the tree is an RPT.";
+ }
+ uses multicast-route-attributes;
+ } // ipv6-route
+ } // topology-tree-info
+ } // address-family
+ container interfaces {
+ description
+ "Contains a list of interfaces.";
+ list interface {
+ key "name";
+ description
+ "List of PIM interfaces.";
+ leaf name {
+ type if:interface-ref;
+ description
+ "Reference to an entry in the global interface list.";
+ }
+ list address-family {
+ key "address-family";
+ description
+ "Each list entry for one address family.";
+ uses rt:address-family;
+ container bfd {
+ if-feature "bfd";
+ description
+ "BFD (Bidirectional Forwarding Detection)
+ operation.";
+ uses bfd-types:client-cfg-parms;
+ }
+ leaf dr-priority {
+ if-feature "intf-dr-priority";
+ type uint32;
+ default "1";
+ description
+ "DR (Designated Router) priority as the preference in
+ the DR election process.";
+ }
+ leaf hello-interval {
+ if-feature "intf-hello-interval";
+ type rt-types:timer-value-seconds16;
+ default "30";
+ description
+ "Periodic interval for Hello messages.
+ If 'infinity' or 'not-set' is used, no periodic
+ Hello messages are sent.";
+ reference
+ "RFC 3973: Protocol Independent Multicast -
+ Dense Mode (PIM-DM): Protocol Specification
+ (Revised), Section 4.8
+ RFC 7761: Protocol Independent Multicast - Sparse
+ Mode (PIM-SM): Protocol Specification (Revised),
+ Section 4.11";
+ }
+ choice hello-holdtime-or-multiplier {
+ description
+ "The Holdtime is the timer value to time out the
+ neighbor state when the timer expires.
+ The Holdtime value can be specified by either
+ (1) the given Holdtime value or (2) the calculation
+ of the Hello interval multiplied by the given value
+ of the multiplier.";
+ case holdtime {
+ if-feature "intf-hello-holdtime";
+ leaf hello-holdtime {
+ type rt-types:timer-value-seconds16;
+ default "105";
+ description
+ "The Hello Holdtime is the amount of time to
+ keep the neighbor reachable until a new
+ Hello message is received.";
+ }
+ }
+ case multiplier {
+ if-feature "intf-hello-multiplier";
+ leaf hello-multiplier {
+ type rt-types:timer-multiplier;
+ default "3";
+ description
+ "The Hello multiplier is the number by which the
+ Hello interval is multiplied to obtain the
+ Hello Holdtime.
+ The value of the Hello Holdtime is calculated
+ as:
+ hello-holdtime =
+ (multiplier + 0.5) * (hello-interval).";
+ }
+ }
+ }
+ leaf jp-interval {
+ if-feature "intf-jp-interval";
+ type rt-types:timer-value-seconds16;
+ default "60";
+ description
+ "Periodic interval between Join/Prune messages.
+ If 'infinity' or 'not-set' is used, no periodic
+ Join/Prune messages are sent.";
+ }
+ choice jp-holdtime-or-multiplier {
+ description
+ "The Join/Prune Holdtime is the amount of time a
+ receiver must keep the Join/Prune state alive.
+ The Holdtime value can be specified by either
+ (1) the given Holdtime value or (2) the calculation
+ of 'jp-interval' multiplied by the given value of
+ the multiplier.";
+ case holdtime {
+ if-feature "intf-jp-holdtime";
+ leaf jp-holdtime {
+ type rt-types:timer-value-seconds16;
+ default "210";
+ description
+ "The Join/Prune Holdtime is the amount of time a
+ receiver must keep the Join/Prune state alive.";
+ }
+ }
+ case multiplier {
+ if-feature "intf-jp-multiplier";
+ leaf jp-multiplier {
+ type rt-types:timer-multiplier;
+ default "3";
+ description
+ "The Join/Prune multiplier is the number
+ by which the Join/Prune interval is multiplied
+ to obtain the Join/Prune Holdtime.
+ The value of the Join/Prune Holdtime is
+ calculated as:
+ jp-holdtime =
+ (multiplier + 0.5) * (jp-interval).";
+ }
+ }
+ }
+ leaf override-interval {
+ if-feature "intf-override-interval";
+ type uint16;
+ units "milliseconds";
+ default "2500";
+ description
+ "A short period after a Join or Prune to allow other
+ routers on the LAN to override the Join or Prune.";
+ }
+ leaf propagation-delay {
+ if-feature "intf-propagation-delay";
+ type uint16;
+ units "milliseconds";
+ default "500";
+ description
+ "Expected propagation delay over the local link.";
+ }
+ // Interface state attributes
+ leaf oper-status {
+ type enumeration {
+ enum up {
+ description
+ "The interface is ready to pass PIM messages.";
+ }
+ enum down {
+ description
+ "The interface does not pass PIM messages.";
+ }
+ }
+ config false;
+ description
+ "PIM operational status on the interface.
+ This status is PIM specific and separate from the
+ operational status of the underlying interface.";
+ }
+ leaf gen-id {
+ type uint32;
+ config false;
+ description
+ "The value of the Generation ID this router uses to
+ insert into the PIM Hello message sent on this
+ interface.";
+ }
+ leaf hello-expiration {
+ type rt-types:timer-value-seconds16;
+ config false;
+ description
+ "Hello interval expiration time.";
+ }
+ container ipv4 {
+ when "../address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ config false;
+ description
+ "Interface state attributes for IPv4.";
+ leaf-list address {
+ type inet:ipv4-address;
+ description
+ "List of addresses on which PIM is operating.";
+ }
+ leaf dr-address {
+ type inet:ipv4-address;
+ description
+ "DR (Designated Router) address.";
+ }
+ }
+ container ipv6 {
+ when "../address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ config false;
+ description
+ "Interface state attributes for IPv6.";
+ leaf-list address {
+ type inet:ipv6-address;
+ description
+ "List of addresses on which PIM is operating.";
+ }
+ leaf dr-address {
+ type inet:ipv6-address;
+ description
+ "DR address.";
+ }
+ }
+ container neighbors {
+ config false;
+ description
+ "Information learned from neighbors through this
+ interface.";
+ list ipv4-neighbor {
+ when "../../address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "address";
+ description
+ "Neighbor state information.";
+ leaf address {
+ type inet:ipv4-address;
+ description
+ "Neighbor address.";
+ }
+ uses neighbor-state-af-attributes;
+ } // list ipv4-neighbor
+ list ipv6-neighbor {
+ when "../../address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "address";
+ description
+ "Neighbor state information.";
+ leaf address {
+ type inet:ipv6-address;
+ description
+ "Neighbor address.";
+ }
+ uses neighbor-state-af-attributes;
+ } // list ipv6-neighbor
+ } // neighbors
+ } // address-family
+ } // interface
+ } // interfaces
+ } // pim
+ } // augment
+
+ /*
+ * Notifications
+ */
+
+ notification pim-neighbor-event {
+ description
+ "Notification event for a neighbor.";
+ leaf event-type {
+ type neighbor-event-type;
+ description
+ "Event type.";
+ }
+ uses pim-interface-state-ref;
+ leaf interface-af-ref {
+ type leafref {
+ path "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface"
+ + "[pim-base:name = current()/../interface-ref]/"
+ + "pim-base:address-family/pim-base:address-family";
+ }
+ description
+ "Reference to a PIM interface address family.";
+ }
+ leaf neighbor-ipv4-ref {
+ when "../interface-af-ref = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ type leafref {
+ path "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface"
+ + "[pim-base:name = current()/../interface-ref]/"
+ + "pim-base:address-family"
+ + "[pim-base:address-family = "
+ + "current()/../interface-af-ref]/"
+ + "pim-base:neighbors/pim-base:ipv4-neighbor/"
+ + "pim-base:address";
+ }
+ description
+ "Reference to a PIM IPv4 neighbor.";
+ }
+ leaf neighbor-ipv6-ref {
+ when "../interface-af-ref = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ type leafref {
+ path "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface"
+ + "[pim-base:name = current()/../interface-ref]/"
+ + "pim-base:address-family"
+ + "[pim-base:address-family = "
+ + "current()/../interface-af-ref]/"
+ + "pim-base:neighbors/pim-base:ipv6-neighbor/"
+ + "pim-base:address";
+ }
+ description
+ "Reference to a PIM IPv6 neighbor.";
+ }
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second) since
+ the neighbor relationship has been formed as reachable
+ without being timed out.";
+ }
+ }
+
+ notification pim-interface-event {
+ description
+ "Notification event for an interface.";
+ leaf event-type {
+ type interface-event-type;
+ description
+ "Event type.";
+ }
+ uses pim-interface-state-ref;
+ container ipv4 {
+ description
+ "Contains IPv4 information.";
+ leaf-list address {
+ type inet:ipv4-address;
+ description
+ "List of addresses.";
+ }
+ leaf dr-address {
+ type inet:ipv4-address;
+ description
+ "DR (Designated Router) address.";
+ }
+ }
+ container ipv6 {
+ description
+ "Contains IPv6 information.";
+ leaf-list address {
+ type inet:ipv6-address;
+ description
+ "List of addresses.";
+ }
+ leaf dr-address {
+ type inet:ipv6-address;
+ description
+ "DR address.";
+ }
+ }
+ }
+ }
+ <CODE ENDS>
+
+6.2. PIM RP Module
+
+ This module references [RFC5059], [RFC6991], [RFC7761], [RFC8294],
+ [RFC8343], and [RFC8349].
+
+ <CODE BEGINS> file "ietf-pim-rp@2022-10-19.yang"
+ module ietf-pim-rp {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-pim-rp";
+ prefix pim-rp;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-routing-types {
+ prefix rt-types;
+ reference
+ "RFC 8294: Common YANG Data Types for the Routing Area";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference
+ "RFC 8343: A YANG Data Model for Interface Management";
+ }
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing Management (NMDA
+ Version)";
+ }
+ import ietf-pim-base {
+ prefix pim-base;
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ organization
+ "IETF PIM Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/pim/>
+ WG List: <mailto:pim@ietf.org>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>
+
+ Editor: Pete McAllister
+ <mailto:pete.mcallister@metaswitch.com>
+
+ Editor: Anish Peter
+ <mailto:anish.ietf@gmail.com>
+
+ Editor: Mahesh Sivakumar
+ <mailto:sivakumar.mahesh@gmail.com>
+
+ Editor: Yisong Liu
+ <mailto:liuyisong@chinamobile.com>
+
+ Editor: Fangwei Hu
+ <mailto:hufwei@gmail.com>";
+ description
+ "This YANG module defines a PIM (Protocol Independent Multicast)
+ RP (Rendezvous Point) model.
+
+ Copyright (c) 2022 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9128; see the
+ RFC itself for full legal notices.";
+
+ revision 2022-10-19 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ /*
+ * Features
+ */
+
+ feature bsr {
+ description
+ "This feature indicates that the system supports BSRs
+ (Bootstrap Routers).";
+ reference
+ "RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol
+ Independent Multicast (PIM)";
+ }
+
+ feature bsr-election-state {
+ if-feature "bsr";
+ description
+ "This feature indicates that the system supports providing
+ BSR election state.";
+ reference
+ "RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol
+ Independent Multicast (PIM)";
+ }
+
+ feature static-rp-override {
+ description
+ "This feature indicates that the system supports configuration
+ of the static RP (Rendezvous Point) that overrides the RP
+ discoveries from other mechanisms.";
+ reference
+ "RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 3.7";
+ }
+
+ feature candidate-interface {
+ description
+ "This feature indicates that the system supports using
+ an interface to configure a BSR or RP candidate.";
+ }
+
+ feature candidate-ipv4 {
+ description
+ "This feature indicates that the system supports using
+ an IPv4 address to configure a BSR or RP candidate.";
+ }
+
+ feature candidate-ipv6 {
+ description
+ "This feature indicates that the system supports using
+ an IPv6 address to configure a BSR or RP candidate.";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef rp-event-type {
+ type enumeration {
+ enum invalid-jp {
+ description
+ "An invalid Join/Prune message has been received.";
+ }
+ enum invalid-register {
+ description
+ "An invalid Register message has been received.";
+ }
+ enum mapping-created {
+ description
+ "A new mapping has been created.";
+ }
+ enum mapping-deleted {
+ description
+ "A mapping has been deleted.";
+ }
+ }
+ description
+ "Operational status event type for notifications.";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity rp-mode {
+ description
+ "The mode of an RP, which can be SM (Sparse Mode) or
+ BIDIR (Bidirectional).";
+ }
+
+ identity rp-info-source-type {
+ description
+ "The information source of an RP.";
+ }
+
+ identity static {
+ base rp-info-source-type;
+ description
+ "The RP is statically configured.";
+ }
+
+ identity bootstrap {
+ base rp-info-source-type;
+ description
+ "The RP is learned from a Bootstrap.";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping rp-mapping-state-attributes {
+ description
+ "Grouping of RP mapping attributes.";
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second) since
+ the RP mapping or the RP became actively available.";
+ }
+ leaf expiration {
+ type rt-types:timer-value-seconds16;
+ description
+ "Expiration time.";
+ }
+ } // rp-mapping-state-attributes
+
+ grouping rp-state-attributes {
+ description
+ "Grouping of RP state attributes.";
+ leaf info-source-type {
+ type identityref {
+ base rp-info-source-type;
+ }
+ description
+ "The information source of an RP.";
+ } // info-source-type
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second) since
+ the RP became actively available.";
+ }
+ leaf expiration {
+ type rt-types:timer-value-seconds16;
+ description
+ "Expiration time.";
+ }
+ } // rp-state-attributes
+
+ grouping static-rp-attributes {
+ description
+ "Grouping of static RP attributes, used in augmenting
+ modules.";
+ leaf policy-name {
+ type string;
+ description
+ "The string value is the name to uniquely identify a
+ policy that contains one or more policy rules used to
+ determine which multicast group addresses are mapped
+ to this statically configured RP address.
+ If a policy is not specified, the entire multicast address
+ space is mapped.
+ The definition of such a policy is outside the scope
+ of this document.";
+ }
+ leaf override {
+ if-feature "static-rp-override";
+ type boolean;
+ default "false";
+ description
+ "When there is a conflict between static RPs and dynamic RPs,
+ setting this attribute to 'true' will ask the system to use
+ static RPs.";
+ }
+ } // static-rp-attributes
+
+ grouping rp-candidate-attributes {
+ description
+ "Grouping of RP candidate attributes.";
+ leaf policy-name {
+ type string;
+ description
+ "The string value is the name to uniquely identify a
+ policy that contains one or more policy rules used to
+ accept or reject certain multicast groups.
+ If a policy is not specified, the entire multicast address
+ space is accepted.
+ The definition of such a policy is outside the scope
+ of this document.";
+ }
+ leaf mode {
+ type identityref {
+ base rp-mode;
+ }
+ description
+ "The mode of an RP, which can be SM (Sparse Mode) or BIDIR
+ (Bidirectional). Each of these modes is defined in a
+ separate YANG module. If a system supports an RP mode,
+ the corresponding YANG module is implemented.
+ When the value of this leaf is not specified, the default
+ value is the supported mode if only one mode is implemented,
+ or the default value is SM if both SM and BIDIR are
+ implemented.";
+ }
+ } // rp-candidate-attributes
+
+ /*
+ * Configuration data nodes
+ */
+
+ augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/"
+ + "pim-base:address-family" {
+ description
+ "PIM RP augmentation.";
+ container rp {
+ description
+ "PIM RP configuration data.";
+ container static-rp {
+ description
+ "Contains static RP attributes.";
+ list ipv4-rp {
+ when "../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "rp-address";
+ description
+ "A list of IPv4 RP addresses.";
+ leaf rp-address {
+ type inet:ipv4-address;
+ description
+ "Specifies a static RP address.";
+ }
+ }
+ list ipv6-rp {
+ when "../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "rp-address";
+ description
+ "A list of IPv6 RP addresses.";
+ leaf rp-address {
+ type inet:ipv6-address;
+ description
+ "Specifies a static RP address.";
+ }
+ }
+ } // static-rp
+ container bsr {
+ if-feature "bsr";
+ description
+ "Contains BSR (Bootstrap Router) attributes.";
+ container bsr-candidate {
+ presence "Present to serve as a BSR candidate.";
+ description
+ "BSR candidate attributes.";
+ choice interface-or-address {
+ description
+ "Use either an interface or an IP address.";
+ case interface {
+ if-feature "candidate-interface";
+ leaf interface {
+ type if:interface-ref;
+ mandatory true;
+ description
+ "Interface to be used by a BSR.";
+ }
+ }
+ case ipv4-address {
+ when "../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ if-feature "candidate-ipv4";
+ leaf ipv4-address {
+ type inet:ipv4-address;
+ mandatory true;
+ description
+ "IP address to be used by a BSR.";
+ }
+ }
+ case ipv6-address {
+ when "../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ if-feature "candidate-ipv6";
+ leaf ipv6-address {
+ type inet:ipv6-address;
+ mandatory true;
+ description
+ "IP address to be used by a BSR.";
+ }
+ }
+ }
+ leaf hash-mask-length {
+ type uint8 {
+ range "0..128";
+ }
+ mandatory true;
+ description
+ "Value contained in BSR messages used by all routers to
+ hash (map) to an RP.";
+ }
+ leaf priority {
+ type uint8 {
+ range "0..255";
+ }
+ default "64";
+ description
+ "BSR election priority among different candidate BSRs.
+ A larger value has a higher priority over a smaller
+ value.";
+ }
+ } // bsr-candidate
+ container rp-candidate {
+ description
+ "Contains RP candidate attributes.";
+ list interface {
+ if-feature "candidate-interface";
+ key "name";
+ description
+ "A list of RP candidates.";
+ leaf name {
+ type if:interface-ref;
+ description
+ "Interface that the RP candidate uses.";
+ }
+ uses rp-candidate-attributes;
+ }
+ list ipv4-address {
+ when "../../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ if-feature "candidate-ipv4";
+ key "address";
+ description
+ "A list of RP candidate addresses.";
+ leaf address {
+ type inet:ipv4-address;
+ description
+ "IPv4 address that the RP candidate uses.";
+ }
+ uses rp-candidate-attributes;
+ }
+ list ipv6-address {
+ when "../../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ if-feature "candidate-ipv6";
+ key "address";
+ description
+ "A list of RP candidate addresses.";
+ leaf address {
+ type inet:ipv6-address;
+ description
+ "IPv6 address that the RP candidate uses.";
+ }
+ uses rp-candidate-attributes;
+ }
+ }
+ // BSR state attributes
+ container bsr {
+ config false;
+ description
+ "BSR information.";
+ leaf address {
+ type inet:ip-address;
+ description
+ "BSR address.";
+ }
+ leaf hash-mask-length {
+ type uint8 {
+ range "0..128";
+ }
+ description
+ "Hash mask length.";
+ }
+ leaf priority {
+ type uint8 {
+ range "0..255";
+ }
+ description
+ "Priority.";
+ }
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second)
+ since the BSR came up.";
+ }
+ }
+ choice election-state {
+ if-feature "bsr-election-state";
+ config false;
+ description
+ "BSR election state.";
+ case candidate {
+ leaf candidate-bsr-state {
+ type enumeration {
+ enum candidate {
+ description
+ "The router is a candidate to be the BSR for the
+ scope zone, but currently another router is the
+ preferred BSR.";
+ }
+ enum pending {
+ description
+ "The router is a candidate to be the BSR for the
+ scope zone. Currently, no other router is the
+ preferred BSR, but this router is not yet the
+ elected BSR. This is a temporary state that
+ prevents rapid thrashing of the choice of BSR
+ during BSR election.";
+ }
+ enum elected {
+ description
+ "The router is the elected BSR for the
+ scope zone, and it must perform all of the
+ BSR functions.";
+ }
+ }
+ description
+ "Candidate-BSR (C-BSR) state.";
+ reference
+ "RFC 5059: Bootstrap Router (BSR) Mechanism for
+ Protocol Independent Multicast (PIM),
+ Section 3.1.1";
+ }
+ }
+ case non-candidate {
+ leaf non-candidate-bsr-state {
+ type enumeration {
+ enum no-info {
+ description
+ "The router has no information about this scope
+ zone.";
+ }
+ enum accept-any {
+ description
+ "The router does not know of an active BSR and
+ will accept the first Bootstrap message it sees
+ that provides the new BSR's identity and the
+ RP-Set.";
+ }
+ enum accept {
+ description
+ "The router knows the identity of the current
+ BSR and is using the RP-Set provided by that
+ BSR. Only Bootstrap messages from that BSR or
+ from a Candidate-BSR (C-BSR) with higher weight
+ than the current BSR will be accepted.";
+ }
+ }
+ description
+ "Non-Candidate-BSR state.";
+ reference
+ "RFC 5059: Bootstrap Router (BSR) Mechanism for
+ Protocol Independent Multicast (PIM),
+ Section 3.1.2";
+ }
+ }
+ } // election-state
+ leaf bsr-next-bootstrap {
+ type uint16;
+ units "seconds";
+ config false;
+ description
+ "The remaining time interval in seconds until the next
+ Bootstrap will be sent.";
+ }
+ container rp {
+ config false;
+ description
+ "State information of the RP.";
+ leaf rp-address {
+ type inet:ip-address;
+ description
+ "RP address.";
+ }
+ leaf policy-name {
+ type string;
+ description
+ "The string value is the name to uniquely identify a
+ policy that contains one or more policy rules used to
+ accept or reject certain multicast groups.
+ If a policy is not specified, the entire multicast
+ address space is accepted.
+ The definition of such a policy is outside the scope
+ of this document.";
+ }
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second)
+ since the RP became actively available.";
+ }
+ }
+ leaf rp-candidate-next-advertisement {
+ type uint16;
+ units "seconds";
+ config false;
+ description
+ "The remaining time interval in seconds until the next
+ RP candidate advertisement will be sent.";
+ }
+ } // bsr
+ container rp-list {
+ config false;
+ description
+ "Contains a list of RPs.";
+ list ipv4-rp {
+ when "../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "rp-address mode";
+ description
+ "A list of IPv4 RP addresses.";
+ leaf rp-address {
+ type inet:ipv4-address;
+ description
+ "RP address.";
+ }
+ leaf mode {
+ type identityref {
+ base rp-mode;
+ }
+ description
+ "RP mode.";
+ }
+ leaf info-source-address {
+ type inet:ipv4-address;
+ description
+ "The address where RP information is learned.";
+ }
+ uses rp-state-attributes;
+ }
+ list ipv6-rp {
+ when "../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "rp-address mode";
+ description
+ "A list of IPv6 RP addresses.";
+ leaf rp-address {
+ type inet:ipv6-address;
+ description
+ "RP address.";
+ }
+ leaf mode {
+ type identityref {
+ base rp-mode;
+ }
+ description
+ "RP mode.";
+ }
+ leaf info-source-address {
+ type inet:ipv6-address;
+ description
+ "The address where RP information is learned.";
+ }
+ uses rp-state-attributes;
+ }
+ } // rp-list
+ container rp-mappings {
+ config false;
+ description
+ "Contains a list of group-to-RP mappings.";
+ list ipv4-rp {
+ when "../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "group-range rp-address";
+ description
+ "A list of group-to-RP mappings.";
+ leaf group-range {
+ type inet:ipv4-prefix;
+ description
+ "Group range presented in the format of a prefix.";
+ }
+ leaf rp-address {
+ type inet:ipv4-address;
+ description
+ "RP address.";
+ }
+ uses rp-mapping-state-attributes;
+ }
+ list ipv6-rp {
+ when "../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "group-range rp-address";
+ description
+ "A list of IPv6 RP addresses.";
+ leaf group-range {
+ type inet:ipv6-prefix;
+ description
+ "Group range presented in the format of a prefix.";
+ }
+ leaf rp-address {
+ type inet:ipv6-address;
+ description
+ "RP address.";
+ }
+ uses rp-mapping-state-attributes;
+ }
+ } // rp-mappings
+ } // rp
+ } // augment
+
+ /*
+ * Notifications
+ */
+
+ notification pim-rp-event {
+ description
+ "Notification event for an RP.";
+ leaf event-type {
+ type rp-event-type;
+ description
+ "Event type.";
+ }
+ uses pim-base:pim-instance-af-state-ref;
+ leaf group {
+ type rt-types:ip-multicast-group-address;
+ description
+ "Group address.";
+ }
+ leaf rp-address {
+ type inet:ip-address;
+ description
+ "RP address.";
+ }
+ leaf is-rpt {
+ type boolean;
+ description
+ "'true' if the tree is an RPT (Rendezvous Point Tree).";
+ }
+ leaf mode {
+ type identityref {
+ base pim-base:pim-mode;
+ }
+ description
+ "PIM mode.";
+ }
+ leaf message-origin {
+ type inet:ip-address;
+ description
+ "Where the message originated.";
+ }
+ }
+ }
+ <CODE ENDS>
+
+6.3. PIM-SM Module
+
+ This module references [RFC4607], [RFC6991], [RFC7761], and
+ [RFC8349].
+
+ <CODE BEGINS> file "ietf-pim-sm@2022-10-19.yang"
+ module ietf-pim-sm {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-pim-sm";
+ prefix pim-sm;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing Management (NMDA
+ Version)";
+ }
+ import ietf-pim-base {
+ prefix pim-base;
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+ import ietf-pim-rp {
+ prefix pim-rp;
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ organization
+ "IETF PIM Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/pim/>
+ WG List: <mailto:pim@ietf.org>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>
+
+ Editor: Pete McAllister
+ <mailto:pete.mcallister@metaswitch.com>
+
+ Editor: Anish Peter
+ <mailto:anish.ietf@gmail.com>
+
+ Editor: Mahesh Sivakumar
+ <mailto:sivakumar.mahesh@gmail.com>
+
+ Editor: Yisong Liu
+ <mailto:liuyisong@chinamobile.com>
+
+ Editor: Fangwei Hu
+ <mailto:hufwei@gmail.com>";
+ description
+ "This YANG module defines a PIM (Protocol Independent Multicast)
+ SM (Sparse Mode) model.
+
+ Copyright (c) 2022 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9128; see the
+ RFC itself for full legal notices.";
+
+ revision 2022-10-19 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ /*
+ * Features
+ */
+
+ feature spt-switch-infinity {
+ description
+ "This feature indicates that the system supports the
+ configuration choice of whether to trigger switchover from
+ the RPT (Rendezvous Point Tree) to the SPT (Shortest Path
+ Tree).";
+ reference
+ "RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.2";
+ }
+
+ feature spt-switch-policy {
+ description
+ "This feature indicates that the system supports configuring
+ the policy for switchover from the RPT to the SPT.";
+ reference
+ "RFC 7761: Protocol Independent Multicast - Sparse Mode
+ (PIM-SM): Protocol Specification (Revised), Section 4.2";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity rp-sm {
+ base pim-rp:rp-mode;
+ description
+ "SM (Sparse Mode).";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping static-rp-sm-container {
+ description
+ "Grouping that contains SM attributes for static RPs.";
+ container sm {
+ presence "Indicates support for PIM-SM.";
+ description
+ "PIM-SM configuration data.";
+ uses pim-rp:static-rp-attributes;
+ } // sm
+ } // static-rp-sm-container
+
+ /*
+ * Configuration data nodes
+ */
+
+ augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/"
+ + "pim-base:address-family" {
+ description
+ "PIM-SM augmentation.";
+ container sm {
+ description
+ "PIM-SM configuration data.";
+ container asm {
+ description
+ "ASM (Any-Source Multicast) attributes.";
+ container anycast-rp {
+ presence "Present to enable an Anycast-RP
+ (Rendezvous Point).";
+ description
+ "Anycast-RP attributes.";
+ list ipv4-anycast-rp {
+ when "../../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "anycast-address rp-address";
+ description
+ "A list of IPv4 Anycast-RP settings. Only applicable
+ when 'pim-base:address-family' is IPv4.";
+ leaf anycast-address {
+ type inet:ipv4-address;
+ description
+ "IP address of the Anycast-RP set. This IP address
+ is used by the multicast groups or sources to join
+ or register.";
+ }
+ leaf rp-address {
+ type inet:ipv4-address;
+ description
+ "IP address of the router configured with an
+ Anycast-RP. This is the IP address where the
+ Register messages are forwarded.";
+ }
+ }
+ list ipv6-anycast-rp {
+ when "../../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "anycast-address rp-address";
+ description
+ "A list of IPv6 Anycast-RP settings. Only applicable
+ when 'pim-base:address-family' is IPv6.";
+ leaf anycast-address {
+ type inet:ipv6-address;
+ description
+ "IP address of the Anycast-RP set. This IP address
+ is used by the multicast groups or sources to join
+ or register.";
+ }
+ leaf rp-address {
+ type inet:ipv6-address;
+ description
+ "IP address of the router configured with an
+ Anycast-RP. This is the IP address where the
+ Register messages are forwarded.";
+ }
+ }
+ }
+ container spt-switch {
+ description
+ "SPT (Shortest Path Tree) switching attributes.";
+ container infinity {
+ if-feature "spt-switch-infinity";
+ presence "Present if the SPT switchover threshold is set
+ to infinity, according to the policy specified
+ below.";
+ description
+ "The receiver's DR (Designated Router) never triggers
+ switchover from the RPT to the SPT.";
+ leaf policy-name {
+ if-feature "spt-switch-policy";
+ type string;
+ description
+ "The string value is the name to uniquely identify a
+ policy that contains one or more policy rules used
+ to accept or reject certain multicast groups.
+ The groups accepted by this policy have the SPT
+ switchover threshold set to infinity, meaning that
+ they will stay on the shared tree forever.
+ If a policy is not specified, the entire multicast
+ address space is accepted.
+ The definition of such a policy is outside the scope
+ of this document.";
+ }
+ } // infinity
+ }
+ } // asm
+ container ssm {
+ presence "Present to enable SSM (Source-Specific
+ Multicast).";
+ description
+ "SSM attributes.";
+ leaf range-policy {
+ type string;
+ description
+ "The string value is the name to uniquely identify a
+ policy that contains one or more policy rules used
+ to accept or reject certain multicast groups.
+ The groups accepted by this policy define the multicast
+ group range used by SSM.
+ If a policy is not specified, the default SSM multicast
+ group range is used.
+ The default SSM multicast group range is 232.0.0.0/8
+ for IPv4 and ff3x::/96 for IPv6, where x represents any
+ valid scope identifier.
+ The definition of such a policy is outside the scope
+ of this document.";
+ reference
+ "RFC 4607: Source-Specific Multicast for IP";
+ }
+ } // ssm
+ } // sm
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/"
+ + "pim-base:interfaces/pim-base:interface/"
+ + "pim-base:address-family" {
+ description
+ "PIM-SM augmentation.";
+ container sm {
+ presence "Present to enable PIM-SM.";
+ description
+ "PIM-SM configuration data.";
+ leaf passive {
+ type empty;
+ description
+ "Specifies that no PIM messages are sent or accepted on
+ this PIM interface, but the interface can be included in a
+ multicast forwarding entry.";
+ }
+ } // sm
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/"
+ + "pim-base:address-family/pim-rp:rp/"
+ + "pim-rp:static-rp/pim-rp:ipv4-rp" {
+ description
+ "PIM-SM augmentation.";
+ uses static-rp-sm-container;
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/"
+ + "pim-base:address-family/pim-rp:rp/"
+ + "pim-rp:static-rp/pim-rp:ipv6-rp" {
+ description
+ "PIM-SM augmentation.";
+ uses static-rp-sm-container;
+ } // augment
+
+ }
+ <CODE ENDS>
+
+6.4. PIM-DM Module
+
+ This module references [RFC3973] and [RFC8349].
+
+ <CODE BEGINS> file "ietf-pim-dm@2022-10-19.yang"
+ module ietf-pim-dm {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-pim-dm";
+ prefix pim-dm;
+
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing Management (NMDA
+ Version)";
+ }
+ import ietf-pim-base {
+ prefix pim-base;
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ organization
+ "IETF PIM Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/pim/>
+ WG List: <mailto:pim@ietf.org>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>
+
+ Editor: Pete McAllister
+ <mailto:pete.mcallister@metaswitch.com>
+
+ Editor: Anish Peter
+ <mailto:anish.ietf@gmail.com>
+
+ Editor: Mahesh Sivakumar
+ <mailto:sivakumar.mahesh@gmail.com>
+
+ Editor: Yisong Liu
+ <mailto:liuyisong@chinamobile.com>
+
+ Editor: Fangwei Hu
+ <mailto:hufwei@gmail.com>";
+ description
+ "This YANG module defines a PIM (Protocol Independent Multicast)
+ DM (Dense Mode) model.
+
+ Copyright (c) 2022 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9128; see the
+ RFC itself for full legal notices.";
+
+ revision 2022-10-19 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ /*
+ * Configuration data nodes
+ */
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:address-family" {
+ description
+ "PIM-DM augmentation.";
+ container dm {
+ presence "Present to enable PIM-DM.";
+ description
+ "PIM-DM configuration data.";
+ } // dm
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface/"
+ + "pim-base:address-family" {
+ description
+ "PIM-DM augmentation to 'pim-base:interface'.";
+ container dm {
+ presence "Present to enable PIM-DM.";
+ description
+ "PIM-DM configuration data.";
+ } // dm
+ } // augment
+
+ }
+ <CODE ENDS>
+
+6.5. BIDIR-PIM Module
+
+ This module references [RFC5015], [RFC6991], [RFC8294], [RFC8343],
+ and [RFC8349].
+
+ <CODE BEGINS> file "ietf-pim-bidir@2022-10-19.yang"
+ module ietf-pim-bidir {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-pim-bidir";
+ prefix pim-bidir;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-routing-types {
+ prefix rt-types;
+ reference
+ "RFC 8294: Common YANG Data Types for the Routing Area";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference
+ "RFC 8343: A YANG Data Model for Interface Management";
+ }
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing Management (NMDA
+ Version)";
+ }
+ import ietf-pim-base {
+ prefix pim-base;
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+ import ietf-pim-rp {
+ prefix pim-rp;
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ organization
+ "IETF PIM Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/pim/>
+ WG List: <mailto:pim@ietf.org>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>
+
+ Editor: Pete McAllister
+ <mailto:pete.mcallister@metaswitch.com>
+
+ Editor: Anish Peter
+ <mailto:anish.ietf@gmail.com>
+
+ Editor: Mahesh Sivakumar
+ <mailto:sivakumar.mahesh@gmail.com>
+
+ Editor: Yisong Liu
+ <mailto:liuyisong@chinamobile.com>
+
+ Editor: Fangwei Hu
+ <mailto:hufwei@gmail.com>";
+ description
+ "This YANG module defines a PIM (Protocol Independent Multicast)
+ BIDIR (Bidirectional) mode model.
+
+ Copyright (c) 2022 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9128; see the
+ RFC itself for full legal notices.";
+
+ revision 2022-10-19 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 9128: A YANG Data Model for Protocol Independent
+ Multicast (PIM)";
+ }
+
+ /*
+ * Features
+ */
+
+ feature intf-df-election {
+ description
+ "Supports configuration of interface DF election.";
+ reference
+ "RFC 5015: Bidirectional Protocol Independent Multicast
+ (BIDIR-PIM), Section 3.5";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity rp-bidir {
+ base pim-rp:rp-mode;
+ description
+ "BIDIR mode.";
+ }
+
+ identity df-state {
+ description
+ "DF (Designated Forwarder) election state type.";
+ reference
+ "RFC 5015: Bidirectional Protocol Independent Multicast
+ (BIDIR-PIM)";
+ }
+
+ identity df-state-offer {
+ base df-state;
+ description
+ "Initial election state. When in the Offer state, a router
+ thinks it can eventually become the winner and periodically
+ generates Offer messages.";
+ }
+
+ identity df-state-lose {
+ base df-state;
+ description
+ "Either (1) there is a different election winner or
+ (2) no router on the link has a path to the RPA
+ (Rendezvous Point Address).";
+ }
+
+ identity df-state-win {
+ base df-state;
+ description
+ "The router is the acting DF without any contest.";
+ }
+
+ identity df-state-backoff {
+ base df-state;
+ description
+ "The router is the acting DF, but another router has made a
+ bid to take over.";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping static-rp-bidir-container {
+ description
+ "Grouping that contains BIDIR attributes for a static RP
+ (Rendezvous Point).";
+ container bidir {
+ presence "Indicates support for BIDIR mode.";
+ description
+ "PIM-BIDIR configuration data.";
+ uses pim-rp:static-rp-attributes;
+ } // bidir
+ } // static-rp-bidir-container
+
+ grouping interface-df-election-state-attributes {
+ description
+ "Grouping that contains the state attributes of a DF election
+ on an interface.";
+ leaf interface-state {
+ type identityref {
+ base df-state;
+ }
+ description
+ "Interface state with respect to the DF election.";
+ }
+ leaf up-time {
+ type rt-types:timeticks64;
+ description
+ "The number of time ticks (hundredths of a second) since the
+ current DF has been elected as the winner.";
+ }
+ leaf winner-metric {
+ type uint32;
+ description
+ "The unicast routing metric used by the DF to reach the RP.
+ The value is announced by the DF.";
+ }
+ leaf winner-metric-preference {
+ type uint32;
+ description
+ "The preference value assigned to the unicast routing
+ protocol that the DF used to obtain the route to the RP.
+ The value is announced by the DF.";
+ }
+ } // interface-df-election-state-attributes
+
+ /*
+ * Configuration data and operational state data nodes
+ */
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:address-family" {
+ description
+ "PIM-BIDIR augmentation.";
+ container bidir {
+ presence "Present to enable BIDIR mode.";
+ description
+ "PIM-BIDIR configuration data.";
+ } // bidir
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface/"
+ + "pim-base:address-family" {
+ description
+ "PIM-BIDIR augmentation.";
+ container bidir {
+ presence "Present to enable BIDIR mode.";
+ description
+ "PIM-BIDIR configuration data.";
+ container df-election {
+ if-feature "intf-df-election";
+ description
+ "DF election attributes.";
+ leaf offer-interval {
+ type uint16;
+ units "milliseconds";
+ default "100";
+ description
+ "Offer interval. Specifies the interval between
+ repeated DF election messages.";
+ }
+ leaf backoff-interval {
+ type uint16;
+ units "milliseconds";
+ default "1000";
+ description
+ "This is the interval that the acting DF waits between
+ receiving a better DF Offer and sending the Pass message
+ to transfer DF responsibility.";
+ }
+ leaf offer-multiplier {
+ type uint8;
+ default "3";
+ description
+ "This is the number of transmission attempts for
+ DF election messages.
+ When a DF election Offer or Winner message fails to be
+ received, the message is retransmitted.
+ 'offer-multiplier' sets the minimum number of DF
+ election messages that must fail to be received for DF
+ election to fail.
+ If a router receives from a neighbor a better offer than
+ its own, the router stops participating in the election
+ for a period of 'offer-multiplier' * 'offer-interval'.
+ Eventually, all routers except the best candidate stop
+ sending Offer messages.";
+ }
+ } // df-election
+ } // bidir
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:address-family/pim-rp:rp/"
+ + "pim-rp:static-rp/pim-rp:ipv4-rp" {
+ description
+ "PIM-BIDIR augmentation.";
+ uses static-rp-bidir-container;
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:address-family/pim-rp:rp/"
+ + "pim-rp:static-rp/pim-rp:ipv6-rp" {
+ description
+ "PIM-BIDIR augmentation.";
+ uses static-rp-bidir-container;
+ } // augment
+
+ /*
+ * Operational state data nodes
+ */
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:address-family/pim-rp:rp" {
+ description
+ "PIM-BIDIR augmentation to RP state data.";
+ container bidir {
+ config false;
+ description
+ "PIM-BIDIR state data.";
+ container df-election {
+ description
+ "DF election data.";
+ list ipv4-rp {
+ when "../../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "rp-address";
+ description
+ "A list of IPv4 RP addresses.";
+ leaf rp-address {
+ type inet:ipv4-address;
+ description
+ "The address of the RP.";
+ }
+ } // ipv4-rp
+ list ipv6-rp {
+ when "../../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "rp-address";
+ description
+ "A list of IPv6 RP addresses.";
+ leaf rp-address {
+ type inet:ipv6-address;
+ description
+ "The address of the RP.";
+ }
+ } // ipv6-rp
+ } // df-election
+ container interface-df-election {
+ description
+ "Interface DF election data.";
+ list ipv4-rp {
+ when "../../../../pim-base:address-family = 'rt:ipv4'" {
+ description
+ "Only applicable to an IPv4 address family.";
+ }
+ key "rp-address interface-name";
+ description
+ "A list of IPv4 RP addresses.";
+ leaf rp-address {
+ type inet:ipv4-address;
+ description
+ "The address of the RP.";
+ }
+ leaf interface-name {
+ type if:interface-ref;
+ description
+ "The name of the interface for which the DF state is
+ being maintained.";
+ }
+ leaf df-address {
+ type inet:ipv4-address;
+ description
+ "The address of the elected DF, which is the winner of
+ the DF election process.";
+ }
+ uses interface-df-election-state-attributes;
+ } // ipv4-rp
+ list ipv6-rp {
+ when "../../../../pim-base:address-family = 'rt:ipv6'" {
+ description
+ "Only applicable to an IPv6 address family.";
+ }
+ key "rp-address interface-name";
+ description
+ "A list of IPv6 RP addresses.";
+ leaf rp-address {
+ type inet:ipv6-address;
+ description
+ "The address of the RP.";
+ }
+ leaf interface-name {
+ type if:interface-ref;
+ description
+ "The name of the interface for which the DF state is
+ being maintained.";
+ }
+ leaf df-address {
+ type inet:ipv6-address;
+ description
+ "DF address.";
+ }
+ uses interface-df-election-state-attributes;
+ } // ipv6-rp
+ } // interface-df-election
+ }
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface/"
+ + "pim-base:address-family/pim-base:neighbors/"
+ + "pim-base:ipv4-neighbor" {
+ description
+ "PIM-BIDIR augmentation to the IPv4 neighbor state data.";
+ leaf bidir-capable {
+ type boolean;
+ description
+ "'true' if the neighbor is using the Bidirectional Capable
+ option in the last Hello message.";
+ }
+ } // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "pim-base:pim/pim-base:interfaces/pim-base:interface/"
+ + "pim-base:address-family/pim-base:neighbors/"
+ + "pim-base:ipv6-neighbor" {
+ description
+ "PIM-BIDIR augmentation to the IPv6 neighbor state data.";
+ leaf bidir-capable {
+ type boolean;
+ description
+ "'true' if the neighbor is using the Bidirectional Capable
+ option in the last Hello message.";
+ }
+ } // augment
+
+ }
+ <CODE ENDS>
+
+7. Security Considerations
+
+ The YANG modules specified in this document define a schema for data
+ that is designed to be accessed via network management protocols such
+ as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
+ is the secure transport layer, and the mandatory-to-implement secure
+ transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
+ is HTTPS, and the mandatory-to-implement secure transport is TLS
+ [RFC8446].
+
+ The Network Configuration Access Control Model (NACM) [RFC8341]
+ provides the means to restrict access for particular NETCONF or
+ RESTCONF users to a preconfigured subset of all available NETCONF or
+ RESTCONF protocol operations and content.
+
+ There are a number of data nodes defined in these YANG modules that
+ are writable/creatable/deletable (i.e., config true, which is the
+ default). These data nodes may be considered sensitive or vulnerable
+ in some network environments. Write operations (e.g., edit-config)
+ to these data nodes without proper protection can have a negative
+ effect on network operations. These are the subtrees and data nodes
+ and their sensitivity/vulnerability:
+
+ pim-base:graceful-restart
+ This subtree specifies the configuration for PIM graceful restart
+ at the global level on a device. Modifying the configuration can
+ cause temporary interruption to the multicast routing during
+ restart.
+
+ pim-base:address-family/pim-base:graceful-restart
+ This subtree specifies the per-address-family configuration for
+ PIM graceful restart on a device. Modifying the configuration can
+ cause temporary interruption to the multicast routing during
+ restart.
+
+ pim-base:address-family/pim-rp:pim-rp:rp
+ This subtree specifies the configuration for the PIM Rendezvous
+ Point (RP) on a device. Modifying the configuration can cause RP
+ malfunctions.
+
+ pim-base:address-family/pim-sm:sm
+ This subtree specifies the configuration for PIM Sparse Mode
+ (PIM-SM) on a device. Modifying the configuration can cause
+ multicast traffic to be disabled or rerouted in PIM-SM.
+
+ pim-base:address-family/pim-dm:dm
+ This subtree specifies the configuration for PIM Dense Mode
+ (PIM-DM) on a device. Modifying the configuration can cause
+ multicast traffic to be disabled or rerouted in PIM-DM.
+
+ pim-base:address-family/pim-bidir:bidir
+ This subtree specifies the configuration for PIM Bidirectional
+ Mode (BIDIR-PIM) on a device. Modifying the configuration can
+ cause multicast traffic to be disabled or rerouted in BIDIR-PIM.
+
+ pim-base:interfaces
+ This subtree specifies the configuration for the PIM interfaces on
+ a device. Modifying the configuration can cause the PIM protocol
+ to get insufficient or incorrect information.
+
+ These subtrees are all under "/rt:routing/rt:control-plane-protocols/
+ pim-base:pim".
+
+ Unauthorized access to any data node of these subtrees can adversely
+ affect the multicast routing subsystem of both the local device and
+ the network. This may lead to network malfunctions, delivery of
+ packets to inappropriate destinations, and other problems.
+
+ Some of the readable data nodes in these YANG modules may be
+ considered sensitive or vulnerable in some network environments. It
+ is thus important to control read access (e.g., via get, get-config,
+ or notification) to these data nodes. These are the subtrees and
+ data nodes and their sensitivity/vulnerability:
+
+ /rt:routing/rt:control-plane-protocols/pim-base:pim
+
+ Unauthorized access to any data node of the above subtree can
+ disclose the operational state information of PIM on this device.
+
+8. IANA Considerations
+
+ IANA has registered the following namespace URIs in the "IETF XML
+ Registry" [RFC3688]:
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-pim-base
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-pim-bidir
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-pim-dm
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-pim-rp
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-pim-sm
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+ IANA has registered the following YANG modules in the "YANG Module
+ Names" registry [RFC6020]:
+
+ Name: ietf-pim-base
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-pim-base
+ Prefix: pim-base
+ Reference: RFC 9128
+
+ Name: ietf-pim-bidir
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-pim-bidir
+ Prefix: pim-bidir
+ Reference: RFC 9128
+
+ Name: ietf-pim-dm
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-pim-dm
+ Prefix: pim-dm
+ Reference: RFC 9128
+
+ Name: ietf-pim-rp
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-pim-rp
+ Prefix: pim-rp
+ Reference: RFC 9128
+
+ Name: ietf-pim-sm
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-pim-sm
+ Prefix: pim-sm
+ Reference: RFC 9128
+
+9. References
+
+9.1. Normative References
+
+ [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific
+ Multicast (SSM)", RFC 3569, DOI 10.17487/RFC3569, July
+ 2003, <https://www.rfc-editor.org/info/rfc3569>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC3973] Adams, A., Nicholas, J., and W. Siadak, "Protocol
+ Independent Multicast - Dense Mode (PIM-DM): Protocol
+ Specification (Revised)", RFC 3973, DOI 10.17487/RFC3973,
+ January 2005, <https://www.rfc-editor.org/info/rfc3973>.
+
+ [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for
+ IP", RFC 4607, DOI 10.17487/RFC4607, August 2006,
+ <https://www.rfc-editor.org/info/rfc4607>.
+
+ [RFC4610] Farinacci, D. and Y. Cai, "Anycast-RP Using Protocol
+ Independent Multicast (PIM)", RFC 4610,
+ DOI 10.17487/RFC4610, August 2006,
+ <https://www.rfc-editor.org/info/rfc4610>.
+
+ [RFC5015] Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano,
+ "Bidirectional Protocol Independent Multicast (BIDIR-
+ PIM)", RFC 5015, DOI 10.17487/RFC5015, October 2007,
+ <https://www.rfc-editor.org/info/rfc5015>.
+
+ [RFC5059] Bhaskar, N., Gall, A., Lingard, J., and S. Venaas,
+ "Bootstrap Router (BSR) Mechanism for Protocol Independent
+ Multicast (PIM)", RFC 5059, DOI 10.17487/RFC5059, January
+ 2008, <https://www.rfc-editor.org/info/rfc5059>.
+
+ [RFC5060] Sivaramu, R., Lingard, J., McWalter, D., Joshi, B., and A.
+ Kessler, "Protocol Independent Multicast MIB", RFC 5060,
+ DOI 10.17487/RFC5060, January 2008,
+ <https://www.rfc-editor.org/info/rfc5060>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+ [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
+ Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
+ <https://www.rfc-editor.org/info/rfc6242>.
+
+ [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
+ RFC 6991, DOI 10.17487/RFC6991, July 2013,
+ <https://www.rfc-editor.org/info/rfc6991>.
+
+ [RFC7761] Fenner, B., Handley, M., Holbrook, H., Kouvelas, I.,
+ Parekh, R., Zhang, Z., and L. Zheng, "Protocol Independent
+ Multicast - Sparse Mode (PIM-SM): Protocol Specification
+ (Revised)", STD 83, RFC 7761, DOI 10.17487/RFC7761, March
+ 2016, <https://www.rfc-editor.org/info/rfc7761>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
+ "Common YANG Data Types for the Routing Area", RFC 8294,
+ DOI 10.17487/RFC8294, December 2017,
+ <https://www.rfc-editor.org/info/rfc8294>.
+
+ [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
+ Access Control Model", STD 91, RFC 8341,
+ DOI 10.17487/RFC8341, March 2018,
+ <https://www.rfc-editor.org/info/rfc8341>.
+
+ [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
+ and R. Wilton, "Network Management Datastore Architecture
+ (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
+ <https://www.rfc-editor.org/info/rfc8342>.
+
+ [RFC8343] Bjorklund, M., "A YANG Data Model for Interface
+ Management", RFC 8343, DOI 10.17487/RFC8343, March 2018,
+ <https://www.rfc-editor.org/info/rfc8343>.
+
+ [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
+ Routing Management (NMDA Version)", RFC 8349,
+ DOI 10.17487/RFC8349, March 2018,
+ <https://www.rfc-editor.org/info/rfc8349>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [RFC9314] Jethanandani, M., Ed., Rahman, R., Ed., Zheng, L., Ed.,
+ Pallagatti, S., and G. Mirsky, "YANG Data Model for
+ Bidirectional Forwarding Detection (BFD)", RFC 9314,
+ DOI 10.17487/RFC9314, September 2022,
+ <https://www.rfc-editor.org/info/rfc9314>.
+
+9.2. Informative References
+
+ [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A.
+ Thyagarajan, "Internet Group Management Protocol, Version
+ 3", RFC 3376, DOI 10.17487/RFC3376, October 2002,
+ <https://www.rfc-editor.org/info/rfc3376>.
+
+ [RFC3618] Fenner, B., Ed. and D. Meyer, Ed., "Multicast Source
+ Discovery Protocol (MSDP)", RFC 3618,
+ DOI 10.17487/RFC3618, October 2003,
+ <https://www.rfc-editor.org/info/rfc3618>.
+
+ [RFC3810] Vida, R., Ed. and L. Costa, Ed., "Multicast Listener
+ Discovery Version 2 (MLDv2) for IPv6", RFC 3810,
+ DOI 10.17487/RFC3810, June 2004,
+ <https://www.rfc-editor.org/info/rfc3810>.
+
+ [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection
+ (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010,
+ <https://www.rfc-editor.org/info/rfc5880>.
+
+ [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B.
+ Thomas, "Label Distribution Protocol Extensions for Point-
+ to-Multipoint and Multipoint-to-Multipoint Label Switched
+ Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011,
+ <https://www.rfc-editor.org/info/rfc6388>.
+
+ [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG",
+ RFC 7951, DOI 10.17487/RFC7951, August 2016,
+ <https://www.rfc-editor.org/info/rfc7951>.
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+ [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of
+ Documents Containing YANG Data Models", BCP 216, RFC 8407,
+ DOI 10.17487/RFC8407, October 2018,
+ <https://www.rfc-editor.org/info/rfc8407>.
+
+ [RFC8706] Ginsberg, L. and P. Wells, "Restart Signaling for IS-IS",
+ RFC 8706, DOI 10.17487/RFC8706, February 2020,
+ <https://www.rfc-editor.org/info/rfc8706>.
+
+Appendix A. Data Tree Example
+
+ This appendix contains an example of an instance data tree, in JSON
+ encoding [RFC7951], containing both configuration data and state
+ data.
+
+ lo0: 2001:db8:0:200::1 (RP address)
+ | +-------+ |
+ | | Router| |
+ eth21 +---+ R2 +---+ eth23
+ | | (RP) | |
+ | +-------+ | lo0: 2001:db8:0:300::1
+ | +-------+ | | +-------+ |
+ | | Router| | | | Router| |
+ eth10 +--+ R1 +---+ eth12 eth32 +---+ R3 +--+ eth30
+ | | | | | | | |
+ | +-------+ | +-------+ |
+ +-------+ | | +-------+ | +-------+
+ | | | | | Router| | | | |
+ | +--+ +---+ R4 +---+ +-------+ +--+ |
+ | | | | | | | | Router| | | |
+ +-------+ | | +-------+ +---+ R5 | | +-------+
+ Source | | | Receiver
+ | +-------+
+
+ The configuration instance data tree for Router R3 in the above
+ figure could be as follows:
+
+ {
+ "ietf-interfaces:interfaces": {
+ "interface": [
+ {
+ "name": "lo0",
+ "description": "R3 loopback interface.",
+ "type": "iana-if-type:softwareLoopback",
+ "ietf-ip:ipv6": {
+ "address": [
+ {
+ "ip": "2001:db8:0:300::1",
+ "prefix-length": 64
+ }
+ ]
+ }
+ },
+ {
+ "name": "eth30",
+ "description": "An interface connected to the receiver.",
+ "type": "iana-if-type:ethernetCsmacd",
+ "ietf-ip:ipv6": {
+ "forwarding": true
+ }
+ },
+ {
+ "name": "eth32",
+ "description": "An interface connected to the RP (R2).",
+ "type": "iana-if-type:ethernetCsmacd",
+ "ietf-ip:ipv6": {
+ "forwarding": true
+ }
+ }
+ ]
+ },
+ "ietf-routing:routing": {
+ "router-id": "203.0.113.3",
+ "control-plane-protocols": {
+ "ietf-pim-base:pim": {
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "ietf-pim-rp:rp": {
+ "static-rp": {
+ "ipv6-rp": [
+ {
+ "rp-address": "2001:db8:0:200::1",
+ "ietf-pim-sm:sm": {
+ }
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "interfaces": {
+ "interface": [
+ {
+ "name": "lo0",
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "hello-interval": "infinity",
+ "ietf-pim-sm:sm": {
+ }
+ }
+ ]
+ },
+ {
+ "name": "eth30",
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "ietf-pim-sm:sm": {
+ }
+ }
+ ]
+ },
+ {
+ "name": "eth32",
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "ietf-pim-sm:sm": {
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+
+ The corresponding operational state data for Router R3 could be as
+ follows:
+
+ {
+ "ietf-interfaces:interfaces": {
+ "interface": [
+ {
+ "name": "lo0",
+ "description": "R3 loopback interface.",
+ "type": "iana-if-type:softwareLoopback",
+ "phys-address": "00:00:5e:00:53:03",
+ "oper-status": "up",
+ "statistics": {
+ "discontinuity-time": "2018-01-23T12:34:56-05:00"
+ },
+ "ietf-ip:ipv6": {
+ "mtu": 1500,
+ "address": [
+ {
+ "ip": "2001:db8:0:300::1",
+ "prefix-length": 64,
+ "origin": "static",
+ "status": "preferred"
+ },
+ {
+ "ip": "fe80::200:5eff:fe00:5303",
+ "prefix-length": 64,
+ "origin": "link-layer",
+ "status": "preferred"
+ }
+ ],
+ "neighbor": [
+ ]
+ }
+ },
+ {
+ "name": "eth30",
+ "description": "An interface connected to the receiver.",
+ "type": "iana-if-type:ethernetCsmacd",
+ "phys-address": "00:00:5e:00:53:30",
+ "oper-status": "up",
+ "statistics": {
+ "discontinuity-time": "2018-01-23T12:34:56-05:00"
+ },
+ "ietf-ip:ipv6": {
+ "forwarding": true,
+ "mtu": 1500,
+ "address": [
+ {
+ "ip": "fe80::200:5eff:fe00:5330",
+ "prefix-length": 64,
+ "origin": "link-layer",
+ "status": "preferred"
+ }
+ ],
+ "neighbor": [
+ ]
+ }
+ },
+ {
+ "name": "eth32",
+ "description": "An interface connected to the RP (R2).",
+ "type": "iana-if-type:ethernetCsmacd",
+ "phys-address": "00:00:5e:00:53:32",
+ "oper-status": "up",
+ "statistics": {
+ "discontinuity-time": "2018-01-23T12:34:56-05:00"
+ },
+ "ietf-ip:ipv6": {
+ "forwarding": true,
+ "mtu": 1500,
+ "address": [
+ {
+ "ip": "fe80::200:5eff:fe00:5332",
+ "prefix-length": 64,
+ "origin": "link-layer",
+ "status": "preferred"
+ }
+ ],
+ "neighbor": [
+ {
+ "ip": "fe80::200:5eff:fe00:5323",
+ "link-layer-address": "00:00:5e:00:53:23",
+ "origin": "dynamic",
+ "is-router": [null],
+ "state": "reachable"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "ietf-routing:routing": {
+ "router-id": "203.0.113.1",
+ "interfaces": {
+ "interface": [
+ "lo0",
+ "eth30",
+ "eth32"
+ ]
+ },
+ "control-plane-protocols": {
+ "ietf-pim-base:pim": {
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "statistics": {
+ "discontinuity-time": "2018-01-23T12:34:56-05:00"
+ },
+ "topology-tree-info": {
+ "ipv6-route": [
+ {
+ "group": "ff06::1",
+ "source-address": "*",
+ "is-rpt": true,
+ "expiration": 16,
+ "incoming-interface": "eth32",
+ "is-spt": false,
+ "mode": "pim-asm",
+ "msdp-learned": false,
+ "rp-address": "2001:db8:0:200::1",
+ "rpf-neighbor": "fe80::200:5eff:fe00:5323",
+ "up-time": 123400,
+ "outgoing-interface": [
+ {
+ "name": "eth30",
+ "expiration": 36,
+ "up-time": 223400,
+ "jp-state": "join"
+ }
+ ]
+ },
+ {
+ "group": "ff06::1",
+ "source-address": "2001:db8:1:1::100",
+ "is-rpt": false,
+ "expiration": 8,
+ "incoming-interface": "eth32",
+ "is-spt": true,
+ "mode": "pim-asm",
+ "msdp-learned": false,
+ "rp-address": "2001:db8:0:200::1",
+ "rpf-neighbor": "fe80::200:5eff:fe00:5323",
+ "up-time": 5200,
+ "outgoing-interface": [
+ {
+ "name": "eth30",
+ "expiration": 6,
+ "up-time": 5600,
+ "jp-state": "join"
+ }
+ ]
+ }
+ ]
+ },
+ "ietf-pim-rp:rp": {
+ "static-rp": {
+ "ipv6-rp": [
+ {
+ "rp-address": "2001:db8:0:200::1",
+ "ietf-pim-sm:sm": {
+ }
+ }
+ ]
+ },
+ "rp-list": {
+ "ipv6-rp": [
+ {
+ "rp-address": "2001:db8:0:200::1",
+ "mode": "ietf-pim-sm:rp-sm",
+ "info-source-type": "static",
+ "up-time": 323400,
+ "expiration": "not-set"
+ }
+ ]
+ },
+ "rp-mappings": {
+ "ipv6-rp": [
+ {
+ "group-range": "ff06::1/128",
+ "rp-address": "2001:db8:0:200::1",
+ "up-time": 123400,
+ "expiration": "36"
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "interfaces": {
+ "interface": [
+ {
+ "name": "lo0",
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "hello-interval": "infinity",
+ "ietf-pim-sm:sm": {
+ },
+ "oper-status": "up",
+ "gen-id": 103689,
+ "hello-expiration": "infinity",
+ "ipv6": {
+ "address": [
+ "fe80::200:5eff:fe00:5303"
+ ],
+ "dr-address": "fe80::200:5eff:fe00:5303"
+ },
+ "neighbors": {
+ "ipv6-neighbor": [
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "eth30",
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "ietf-pim-sm:sm": {
+ },
+ "oper-status": "up",
+ "gen-id": 203689,
+ "hello-expiration": 18,
+ "ipv6": {
+ "address": [
+ "fe80::200:5eff:fe00:5330"
+ ],
+ "dr-address": "fe80::200:5eff:fe00:5330"
+ },
+ "neighbors": {
+ "ipv6-neighbor": [
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "eth32",
+ "address-family": [
+ {
+ "address-family": "ietf-routing:ipv6",
+ "ietf-pim-sm:sm": {
+ },
+ "oper-status": "up",
+ "gen-id": 303689,
+ "hello-expiration": 21,
+ "ipv6": {
+ "address": [
+ "fe80::200:5eff:fe00:5332"
+ ],
+ "dr-address": "fe80::200:5eff:fe00:5332"
+ },
+ "neighbors": {
+ "ipv6-neighbor": [
+ {
+ "address": "fe80::200:5eff:fe00:5323",
+ "expiration": 28,
+ "dr-priority": 1,
+ "gen-id": 102,
+ "lan-prune-delay": {
+ "present": false
+ },
+ "up-time": 323500
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+
+Acknowledgments
+
+ The authors would like to thank Steve Baillargeon, Feng Guo, Robert
+ Kebler, Tanmoy Kundu, and Stig Venaas for their valuable
+ contributions.
+
+Authors' Addresses
+
+ Xufeng Liu
+ IBM Corporation
+ 2300 Dulles Station Blvd.
+ Herndon, VA 20171
+ United States of America
+ Email: xufeng.liu.ietf@gmail.com
+
+
+ Pete McAllister
+ Metaswitch Networks
+ 100 Church Street
+ Enfield
+ EN2 6BQ
+ United Kingdom
+ Email: pete.mcallister@metaswitch.com
+
+
+ Anish Peter
+ Individual
+ Email: anish.ietf@gmail.com
+
+
+ Mahesh Sivakumar
+ Juniper Networks
+ 1133 Innovation Way
+ Sunnyvale, California
+ United States of America
+ Email: sivakumar.mahesh@gmail.com
+
+
+ Yisong Liu
+ China Mobile
+ China Mobile Innovation Building
+ 32 Xuanwumen West Street
+ Beijing
+ 100053
+ China
+ Email: liuyisong@chinamobile.com
+
+
+ Fangwei Hu
+ Individual Contributor
+ 86 Bohang Road
+ Shanghai
+ Shanghai, 200126
+ China
+ Email: hufwei@gmail.com