rfc9128v2.txt | rfc9128.txt | |||
---|---|---|---|---|
skipping to change at line 13 ¶ | skipping to change at line 13 ¶ | |||
Request for Comments: 9128 Volta Networks | Request for Comments: 9128 Volta Networks | |||
Category: Standards Track P. McAllister | Category: Standards Track P. McAllister | |||
ISSN: 2070-1721 Metaswitch Networks | ISSN: 2070-1721 Metaswitch Networks | |||
A. Peter | A. Peter | |||
Individual | Individual | |||
M. Sivakumar | M. Sivakumar | |||
Juniper Networks | Juniper Networks | |||
Y. Liu | Y. Liu | |||
Huawei Technologies | Huawei Technologies | |||
F. Hu | F. Hu | |||
ZTE Corporation | Individual Contributor | |||
September 2021 | September 2021 | |||
YANG Data Model for Protocol Independent Multicast (PIM) | YANG Data Model for Protocol Independent Multicast (PIM) | |||
Abstract | Abstract | |||
This document defines a YANG data model that can be used to configure | This document defines a YANG data model that can be used to configure | |||
and manage devices supporting Protocol Independent Multicast (PIM). | and manage devices supporting Protocol Independent Multicast (PIM). | |||
The model covers the PIM protocol configuration, operational state, | The model covers the PIM protocol configuration, operational state, | |||
and event notifications data. | and event notifications data. | |||
skipping to change at line 70 ¶ | skipping to change at line 70 ¶ | |||
2. Design of Data Model | 2. Design of Data Model | |||
2.1. Scope of Model | 2.1. Scope of Model | |||
2.2. Optional Capabilities | 2.2. Optional Capabilities | |||
2.3. Datastore Applicability | 2.3. Datastore Applicability | |||
2.4. Module and Hierarchy Organization | 2.4. Module and Hierarchy Organization | |||
2.5. Position of Address Family in Hierarchy | 2.5. Position of Address Family in Hierarchy | |||
3. Module Structure | 3. Module Structure | |||
3.1. PIM Base Module | 3.1. PIM Base Module | |||
3.1.1. High-Level Structure | 3.1.1. High-Level Structure | |||
3.1.2. Global Data | 3.1.2. Global Data | |||
3.1.3. Per Address Family Data | 3.1.3. Per-Address-Family Data | |||
3.1.4. PIM Interface Modeling | 3.1.4. PIM Interface Modeling | |||
3.1.5. Neighbor Modeling | 3.1.5. Neighbor Modeling | |||
3.1.6. Notifications | 3.1.6. Notifications | |||
3.2. PIM RP Module | 3.2. PIM RP Module | |||
3.2.1. Static RPs | 3.2.1. Static RPs | |||
3.2.2. BSRs | 3.2.2. BSRs | |||
3.2.3. RP State Data | 3.2.3. RP State Data | |||
3.2.4. RP-to-Group Mappings | 3.2.4. RP-to-Group Mappings | |||
3.2.5. Notifications | 3.2.5. Notifications | |||
3.3. PIM-SM Module | 3.3. PIM-SM Module | |||
3.4. PIM-DM Module | 3.4. PIM-DM Module | |||
3.5. PIM-BIDIR Module | 3.5. BIDIR-PIM Module | |||
4. Complete Tree Structure | 4. Complete Tree Structure | |||
4.1. PIM Base Module | 4.1. PIM Base Module | |||
4.2. PIM RP Module | 4.2. PIM RP Module | |||
4.3. PIM-SM Module | 4.3. PIM-SM Module | |||
4.4. PIM-DM Module | 4.4. PIM-DM Module | |||
4.5. PIM-BIDIR Module | 4.5. BIDIR-PIM Module | |||
5. Relationship to the PIM-STD-MIB | 5. Relationship to the PIM-STD-MIB | |||
5.1. pimInterfaceTable | 5.1. pimInterfaceTable | |||
5.2. pimNeighborTable | 5.2. pimNeighborTable | |||
5.3. pimStarGTable | 5.3. pimStarGTable | |||
5.4. pimSGTable | 5.4. pimSGTable | |||
5.5. pimSGRptTable | 5.5. pimSGRptTable | |||
5.6. pimBidirDFElectionTable | 5.6. pimBidirDFElectionTable | |||
5.7. pimStaticRPTable | 5.7. pimStaticRPTable | |||
5.8. pimAnycastRPSetTable | 5.8. pimAnycastRPSetTable | |||
5.9. pimGroupMappingTable | 5.9. pimGroupMappingTable | |||
6. PIM YANG Modules | 6. PIM YANG Modules | |||
6.1. PIM Base Module | 6.1. PIM Base Module | |||
6.2. PIM RP Module | 6.2. PIM RP Module | |||
6.3. PIM-SM Module | 6.3. PIM-SM Module | |||
6.4. PIM-DM Module | 6.4. PIM-DM Module | |||
6.5. PIM-BIDIR Module | 6.5. BIDIR-PIM Module | |||
7. Security Considerations | 7. Security Considerations | |||
8. IANA Considerations | 8. IANA Considerations | |||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
9.2. Informative References | 9.2. Informative References | |||
Appendix A. Data Tree Example | Appendix A. Data Tree Example | |||
Acknowledgments | Acknowledgments | |||
Authors' Addresses | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
YANG [RFC7950] is a data modeling language that was introduced to | YANG [RFC7950] is a data modeling language that was introduced to | |||
model the configuration and operational state of a device managed | model the configuration and operational state of a device managed | |||
using network management protocols such as the Network Configuration | using network management protocols such as the Network Configuration | |||
Protocol (NETCONF) [RFC6241] or RESTCONF [RFC8040]. YANG is now also | Protocol (NETCONF) [RFC6241] or RESTCONF [RFC8040]. YANG is now also | |||
being used as a component of other management interfaces, such as | being used as a component of other management interfaces, such as | |||
CLIs. | command-line interfaces (CLIs). | |||
This document defines a YANG data model that can be used to configure | This document defines a YANG data model that can be used to configure | |||
and manage devices supporting Protocol Independent Multicast (PIM). | and manage devices supporting Protocol Independent Multicast (PIM). | |||
This model supports the core PIM protocol, as well as many other | This model supports the core PIM protocol, as well as many other | |||
features; see Section 2.1. Non-core features are defined as optional | features; see Section 2.1. Non-core features are defined as optional | |||
in the provided data model. | in the provided data model. | |||
1.1. Terminology | 1.1. Terminology | |||
The terminology for describing YANG data models is found in | The terminology for describing YANG data models is found in | |||
[RFC7950]. | [RFC7950]. | |||
The following abbreviations are used in this document and the defined | The following abbreviations are used in this document and the defined | |||
model: | model: | |||
ASM: Any-Source Multicast service model [RFC3569] [RFC4607] | ASM: Any-Source Multicast service model [RFC3569] [RFC4607] | |||
BFD: Bidirectional Forwarding Detection [RFC5880] | BFD: Bidirectional Forwarding Detection [RFC5880] | |||
BIDIR-PIM: Protocol Independent Multicast - Bidirectional Mode | ||||
[RFC5015] | ||||
BSR: Bootstrap Router [RFC5059] | BSR: Bootstrap Router [RFC5059] | |||
DF: Designated Forwarder [RFC5015] | DF: Designated Forwarder [RFC5015] | |||
DR: Designated Router [RFC7761] | DR: Designated Router [RFC7761] | |||
IGMP: Internet Group Management Protocol [RFC3376] | IGMP: Internet Group Management Protocol [RFC3376] | |||
MLD: Multicast Listener Discovery [RFC3810] | MLD: Multicast Listener Discovery [RFC3810] | |||
skipping to change at line 163 ¶ | skipping to change at line 166 ¶ | |||
MRIB: Multicast Routing Information Base [RFC3973] [RFC5015] | MRIB: Multicast Routing Information Base [RFC3973] [RFC5015] | |||
[RFC7761] | [RFC7761] | |||
MSDP: Multicast Source Discovery Protocol [RFC3618] | MSDP: Multicast Source Discovery Protocol [RFC3618] | |||
mVPN: Multicast VPN | mVPN: Multicast VPN | |||
PIM: Protocol Independent Multicast [RFC3973] [RFC5015] | PIM: Protocol Independent Multicast [RFC3973] [RFC5015] | |||
[RFC7761] | [RFC7761] | |||
PIM-BIDIR: Protocol Independent Multicast - Bidirectional Mode | ||||
[RFC5015] | ||||
PIM-DM: Protocol Independent Multicast - Dense Mode [RFC3973] | PIM-DM: Protocol Independent Multicast - Dense Mode [RFC3973] | |||
PIM-SM: Protocol Independent Multicast - Sparse Mode [RFC7761] | PIM-SM: Protocol Independent Multicast - Sparse Mode [RFC7761] | |||
RP: Rendezvous Point [RFC7761] | RP: Rendezvous Point [RFC7761] | |||
RPA: Rendezvous Point Address [RFC5015] | RPA: Rendezvous Point Address [RFC5015] | |||
RPF: Reverse Path Forwarding [RFC3973] [RFC5015] [RFC7761] | RPF: Reverse Path Forwarding [RFC3973] [RFC5015] [RFC7761] | |||
skipping to change at line 198 ¶ | skipping to change at line 198 ¶ | |||
[RFC8340]. | [RFC8340]. | |||
In addition, the following notation is used as a placeholder at the | 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: | location of the name of a tree node, to represent a section of nodes: | |||
<summary description of a section of nodes> | <summary description of a section of nodes> | |||
1.3. Prefixes in Data Node Names | 1.3. Prefixes in Data Node Names | |||
In this document, names of data nodes, actions, and other data model | In this document, names of data nodes, actions, and other data model | |||
objects are often used without a prefix, as long as it is clear from | objects are often used without a prefix, as long as the context | |||
the context in which YANG module each name is defined. Otherwise, | clearly indicates the YANG module in which each name is defined. | |||
names are prefixed using the standard prefix associated with the | Otherwise, names are prefixed using the standard prefix associated | |||
corresponding YANG module, as shown in Table 1. | with the corresponding YANG module, as shown in Table 1. | |||
+===========+====================+===========+ | +===========+====================+===========+ | |||
| Prefix | YANG Module | Reference | | | Prefix | YANG Module | Reference | | |||
+===========+====================+===========+ | +===========+====================+===========+ | |||
| yang | ietf-yang-types | [RFC6991] | | | yang | ietf-yang-types | [RFC6991] | | |||
+-----------+--------------------+-----------+ | +-----------+--------------------+-----------+ | |||
| inet | ietf-inet-types | [RFC6991] | | | inet | ietf-inet-types | [RFC6991] | | |||
+-----------+--------------------+-----------+ | +-----------+--------------------+-----------+ | |||
| if | ietf-interfaces | [RFC8343] | | | if | ietf-interfaces | [RFC8343] | | |||
+-----------+--------------------+-----------+ | +-----------+--------------------+-----------+ | |||
skipping to change at line 369 ¶ | skipping to change at line 369 ¶ | |||
The high-level structure of the model is shown below: | The high-level structure of the model is shown below: | |||
module: ietf-pim-base | module: ietf-pim-base | |||
augment /rt:routing/rt:control-plane-protocols: | augment /rt:routing/rt:control-plane-protocols: | |||
+--rw pim! | +--rw pim! | |||
+--rw <global configuration> | +--rw <global configuration> | |||
+--ro <global operational state> | +--ro <global operational state> | |||
+--rw address-family* [address-family] | +--rw address-family* [address-family] | |||
| +--rw address-family identityref | | +--rw address-family identityref | |||
| +--rw <per address family configuration> | | +--rw <per-address-family configuration> | |||
| +--ro <per address family operational state> | | +--ro <per-address-family operational state> | |||
+--rw interfaces | +--rw interfaces | |||
+--rw interface* [name] | +--rw interface* [name] | |||
+--rw name if:interface-ref | +--rw name if:interface-ref | |||
+--rw address-family* [address-family] | +--rw address-family* [address-family] | |||
+--rw address-family identityref | +--rw address-family identityref | |||
+--rw <per interface configuration> | +--rw <per interface configuration> | |||
+--ro <per interface operational state> | +--ro <per interface operational state> | |||
+--ro neighbors | +--ro neighbors | |||
+--ro ipv4-neighbor* [address] | +--ro ipv4-neighbor* [address] | |||
| +--ro address inet:ipv4-address | | +--ro address inet:ipv4-address | |||
| +--ro <IPv4 per neighbor operational state> | | +--ro <IPv4 per-neighbor operational state> | |||
+--ro ipv6-neighbor* [address] | +--ro ipv6-neighbor* [address] | |||
+--ro address inet:ipv6-address | +--ro address inet:ipv6-address | |||
+--ro <IPv4 per neighbor operational state> | +--ro <IPv4 per-neighbor operational state> | |||
The presence of the top-level container "pim" enables the PIM | The presence of the top-level container "pim" enables the PIM | |||
protocols. | protocols. | |||
3.1.2. Global Data | 3.1.2. Global Data | |||
The global configuration data and operational state data cover | The global configuration data and operational state data cover | |||
support for graceful restart in the PIM base model. Additional | support for graceful restart in the PIM base model. Additional | |||
features can be added by augmentation if required by an | features can be added by augmentation if required by an | |||
implementation. | implementation. | |||
3.1.3. Per Address Family Data | 3.1.3. Per-Address-Family Data | |||
Support for per address family data is shown below: | Support for per-address-family data is shown below: | |||
+--rw pim! | +--rw pim! | |||
+--rw address-family* [address-family] | +--rw address-family* [address-family] | |||
| +--rw address-family identityref | | +--rw address-family identityref | |||
| +--rw graceful-restart | | +--rw graceful-restart | |||
... | ... | |||
| +--ro statistics | | +--ro statistics | |||
| | +--ro discontinuity-time? yang:date-and-time | | | +--ro discontinuity-time? yang:date-and-time | |||
| | +--ro error | | | +--ro error | |||
| | | +--ro assert? yang:counter32 | | | | +--ro assert? yang:counter32 | |||
skipping to change at line 575 ¶ | skipping to change at line 575 ¶ | |||
+--rw rp | +--rw rp | |||
+--rw static-rp | +--rw static-rp | |||
... | ... | |||
+--rw bsr {bsr}? | +--rw bsr {bsr}? | |||
... | ... | |||
+--ro rp-list | +--ro rp-list | |||
... | ... | |||
+--ro rp-mappings | +--ro rp-mappings | |||
... | ... | |||
This module is shared by PIM-SM and PIM-BIDIR mode but is not shared | This module is shared by PIM-SM and BIDIR-PIM mode but is not shared | |||
by PIM-DM. The PIM-SM module and the PIM-BIDIR module augment this | by PIM-DM. The PIM-SM module and the BIDIR-PIM module augment this | |||
module to cover mode-specific data. | module to cover mode-specific data. | |||
The following sections describe the features and capabilities covered | The following sections describe the features and capabilities covered | |||
in this module. | in this module. | |||
3.2.1. Static RPs | 3.2.1. Static RPs | |||
Static RPs can be configured by using the following portion of the | Static RPs can be configured by using the following portion of the | |||
module: | module: | |||
skipping to change at line 645 ¶ | skipping to change at line 645 ¶ | |||
| +--ro rp | | +--ro rp | |||
| | +--ro rp-address? inet:ip-address | | | +--ro rp-address? inet:ip-address | |||
| | +--ro policy-name? string | | | +--ro policy-name? string | |||
| | +--ro up-time? rt-types:timeticks64 | | | +--ro up-time? rt-types:timeticks64 | |||
| +--ro rp-candidate-next-advertisement? uint16 | | +--ro rp-candidate-next-advertisement? uint16 | |||
3.2.3. RP State Data | 3.2.3. RP State Data | |||
This portion of the model provides the operational state information | This portion of the model provides the operational state information | |||
for all RPs on the router, including the statically configured RPs | for all RPs on the router, including the statically configured RPs | |||
and the BSR elected RPs. | and the BSR-elected RPs. | |||
+--rw rp | +--rw rp | |||
+--ro rp-list | +--ro rp-list | |||
| +--ro ipv4-rp* [rp-address mode] | | +--ro ipv4-rp* [rp-address mode] | |||
| | +--ro rp-address inet:ipv4-address | | | +--ro rp-address inet:ipv4-address | |||
| | +--ro mode identityref | | | +--ro mode identityref | |||
| | +--ro info-source-address? inet:ipv4-address | | | +--ro info-source-address? inet:ipv4-address | |||
| | +--ro info-source-type? identityref | | | +--ro info-source-type? identityref | |||
| | +--ro up-time? rt-types:timeticks64 | | | +--ro up-time? rt-types:timeticks64 | |||
| | +--ro expiration? rt-types:timer-value-seconds16 | | | +--ro expiration? rt-types:timer-value-seconds16 | |||
skipping to change at line 763 ¶ | skipping to change at line 763 ¶ | |||
module: ietf-pim-dm | module: ietf-pim-dm | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:address-family: | /pim-base:address-family: | |||
+--rw dm! | +--rw dm! | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:interfaces/pim-base:interface | /pim-base:interfaces/pim-base:interface | |||
/pim-base:address-family: | /pim-base:address-family: | |||
+--rw dm! | +--rw dm! | |||
3.5. PIM-BIDIR Module | 3.5. BIDIR-PIM Module | |||
The PIM-BIDIR module covers Bidirectional PIM modeling. Like PIM-SM, | The BIDIR-PIM module covers Bidirectional PIM modeling. Like PIM-SM, | |||
this module augments both the PIM base module and the PIM RP module. | this module augments both the PIM base module and the PIM RP module. | |||
The augmentations to the PIM base module, on the "address-family", | The augmentations to the PIM base module, on the "address-family", | |||
"interface", and "neighbor" branches, are as follows: | "interface", and "neighbor" branches, are as follows: | |||
module: ietf-pim-bidir | module: ietf-pim-bidir | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:address-family: | /pim-base:address-family: | |||
+--rw bidir! | +--rw bidir! | |||
skipping to change at line 795 ¶ | skipping to change at line 795 ¶ | |||
/pim-base:interfaces/pim-base:interface/pim-base:address-family | /pim-base:interfaces/pim-base:interface/pim-base:address-family | |||
/pim-base:neighbors/pim-base:ipv4-neighbor: | /pim-base:neighbors/pim-base:ipv4-neighbor: | |||
+--ro bidir-capable? boolean | +--ro bidir-capable? boolean | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:interfaces/pim-base:interface/pim-base:address-family | /pim-base:interfaces/pim-base:interface/pim-base:address-family | |||
/pim-base:neighbors/pim-base:ipv6-neighbor: | /pim-base:neighbors/pim-base:ipv6-neighbor: | |||
+--ro bidir-capable? boolean | +--ro bidir-capable? boolean | |||
This module also augments the PIM RP module to extend the | This module also augments the PIM RP module to extend the | |||
capabilities of RPs for PIM-BIDIR mode: | capabilities of RPs for BIDIR-PIM mode: | |||
module: ietf-pim-bidir | module: ietf-pim-bidir | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | 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: | /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: | |||
+--rw bidir! | +--rw bidir! | |||
+--rw policy-name? string | +--rw policy-name? string | |||
+--rw override? boolean {static-rp-override}? | +--rw override? boolean {static-rp-override}? | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | 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: | /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: | |||
skipping to change at line 844 ¶ | skipping to change at line 844 ¶ | |||
+--ro winner-metric-preference? uint32 | +--ro winner-metric-preference? uint32 | |||
4. Complete Tree Structure | 4. Complete Tree Structure | |||
4.1. PIM Base Module | 4.1. PIM Base Module | |||
module: ietf-pim-base | module: ietf-pim-base | |||
augment /rt:routing/rt:control-plane-protocols: | augment /rt:routing/rt:control-plane-protocols: | |||
+--rw pim! | +--rw pim! | |||
+--rw graceful-restart | +--rw graceful-restart | |||
| +--rw enabled? boolean | | +--rw enable? boolean | |||
| +--rw duration? uint16 | | +--rw duration? uint16 | |||
+--rw address-family* [address-family] | +--rw address-family* [address-family] | |||
| +--rw address-family identityref | | +--rw address-family identityref | |||
| +--rw graceful-restart | | +--rw graceful-restart | |||
| | +--rw enabled? boolean | | | +--rw enable? boolean | |||
| | +--rw duration? uint16 | | | +--rw duration? uint16 | |||
| +--ro statistics | | +--ro statistics | |||
| | +--ro discontinuity-time? yang:date-and-time | | | +--ro discontinuity-time? yang:date-and-time | |||
| | +--ro error | | | +--ro error | |||
| | | +--ro assert? yang:counter64 | | | | +--ro assert? yang:counter64 | |||
| | | +--ro bsr? yang:counter64 | | | | +--ro bsr? yang:counter64 | |||
| | | +--ro candidate-rp-advertisement? yang:counter64 | | | | +--ro candidate-rp-advertisement? yang:counter64 | |||
| | | +--ro df-election? yang:counter64 | | | | +--ro df-election? yang:counter64 | |||
| | | +--ro graft? yang:counter64 | | | | +--ro graft? yang:counter64 | |||
| | | +--ro graft-ack? yang:counter64 | | | | +--ro graft-ack? yang:counter64 | |||
skipping to change at line 1169 ¶ | skipping to change at line 1169 ¶ | |||
module: ietf-pim-dm | module: ietf-pim-dm | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:address-family: | /pim-base:address-family: | |||
+--rw dm! | +--rw dm! | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:interfaces/pim-base:interface | /pim-base:interfaces/pim-base:interface | |||
/pim-base:address-family: | /pim-base:address-family: | |||
+--rw dm! | +--rw dm! | |||
4.5. PIM-BIDIR Module | 4.5. BIDIR-PIM Module | |||
module: ietf-pim-bidir | module: ietf-pim-bidir | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:address-family: | /pim-base:address-family: | |||
+--rw bidir! | +--rw bidir! | |||
augment /rt:routing/rt:control-plane-protocols/pim-base:pim | augment /rt:routing/rt:control-plane-protocols/pim-base:pim | |||
/pim-base:interfaces/pim-base:interface | /pim-base:interfaces/pim-base:interface | |||
/pim-base:address-family: | /pim-base:address-family: | |||
+--rw bidir! | +--rw bidir! | |||
+--rw df-election {intf-df-election}? | +--rw df-election {intf-df-election}? | |||
skipping to change at line 1347 ¶ | skipping to change at line 1347 ¶ | |||
+--------------------+ | | +--------------------+ | | |||
| ipv6-route | | | | ipv6-route | | | |||
+--------------------+------------------------------+ | +--------------------+------------------------------+ | |||
| group | pimStarGGrpAddress | | | group | pimStarGGrpAddress | | |||
+--------------------+------------------------------+ | +--------------------+------------------------------+ | |||
| up-time | pimStarGUpTime | | | up-time | pimStarGUpTime | | |||
+--------------------+------------------------------+ | +--------------------+------------------------------+ | |||
| mode | pimStarGPimMode | | | mode | pimStarGPimMode | | |||
+--------------------+------------------------------+ | +--------------------+------------------------------+ | |||
| rp-address | pimStarGRPAddressType | | | rp-address | pimStarGRPAddressType | | |||
+--------------------+------------------------------+ | | +------------------------------+ | |||
| rp-address | pimStarGRPAddress | | | | pimStarGRPAddress | | |||
+--------------------+------------------------------+ | +--------------------+------------------------------+ | |||
| rpf-neighbor | pimStarGUpstreamNeighborType | | | rpf-neighbor | pimStarGUpstreamNeighborType | | |||
+--------------------+------------------------------+ | | +------------------------------+ | |||
| rpf-neighbor | pimStarGUpstreamNeighbor | | | | pimStarGUpstreamNeighbor | | |||
+--------------------+------------------------------+ | +--------------------+------------------------------+ | |||
| incoming-interface | pimStarGRPFIfIndex | | | incoming-interface | pimStarGRPFIfIndex | | |||
+--------------------+------------------------------+ | +--------------------+------------------------------+ | |||
Table 4: YANG Nodes and pimStarGTable Objects | Table 4: YANG Nodes and pimStarGTable Objects | |||
In addition, the object "pimStarGPimModeOrigin" in pimStarGTable is | In addition, the object "pimStarGPimModeOrigin" in pimStarGTable is | |||
mapped to the node "rp/rp-list/ipv4-rp/info-source-type" or the node | 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 | "rp/rp-list/ipv6-rp/info-source-type" in the YANG module | |||
"ietf-pim-rp". | "ietf-pim-rp". | |||
skipping to change at line 1454 ¶ | skipping to change at line 1454 ¶ | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
| rp-address | pimBidirDFElectionRPAddress | | | rp-address | pimBidirDFElectionRPAddress | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
| df-address | pimBidirDFElectionWinnerAddressType | | | df-address | pimBidirDFElectionWinnerAddressType | | |||
| +-------------------------------------+ | | +-------------------------------------+ | |||
| | pimBidirDFElectionWinnerAddress | | | | pimBidirDFElectionWinnerAddress | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
| up-time | pimBidirDFElectionWinnerUpTime | | | up-time | pimBidirDFElectionWinnerUpTime | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
| winner-metric-preference | pimBidirDFElectionWinnerMetricPref | | | winner-metric-preference | pimBidirDFElectionWinnerMetricPref | | |||
+--------------------------+-------------------------------------+ | | +-------------------------------------+ | |||
| winner-metric-preference | pimBidirDFElectionWinnerMetric | | | | pimBidirDFElectionWinnerMetric | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
| interface-state | pimBidirDFElectionState | | | interface-state | pimBidirDFElectionState | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
Table 7: YANG Nodes and pimBidirDFElectionTable Objects | Table 7: YANG Nodes and pimBidirDFElectionTable Objects | |||
5.7. pimStaticRPTable | 5.7. pimStaticRPTable | |||
pimStaticRPTable is mapped to pim/address-family/rp/static-rp/ipv4-rp | pimStaticRPTable is mapped to pim/address-family/rp/static-rp/ipv4-rp | |||
and pim/address-family/rp/static-rp/ipv6-rp. | and pim/address-family/rp/static-rp/ipv6-rp. | |||
skipping to change at line 1565 ¶ | skipping to change at line 1565 ¶ | |||
This module references [RFC3973], [RFC5015], [RFC5880], [RFC6991], | This module references [RFC3973], [RFC5015], [RFC5880], [RFC6991], | |||
[RFC7761], [RFC8294], [RFC8343], [RFC8349], [RFC8706], and [RFC9127]. | [RFC7761], [RFC8294], [RFC8343], [RFC8349], [RFC8706], and [RFC9127]. | |||
<CODE BEGINS> file "ietf-pim-base@2021-09-03.yang" | <CODE BEGINS> file "ietf-pim-base@2021-09-03.yang" | |||
module ietf-pim-base { | module ietf-pim-base { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; | namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; | |||
prefix pim-base; | prefix pim-base; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix inet; | |||
reference | reference | |||
"RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix "yang"; | prefix yang; | |||
reference | reference | |||
"RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
} | } | |||
import ietf-routing-types { | import ietf-routing-types { | |||
prefix "rt-types"; | prefix rt-types; | |||
reference | reference | |||
"RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix if; | |||
reference | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
} | } | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
Version)"; | Version)"; | |||
} | } | |||
import ietf-bfd-types { | import ietf-bfd-types { | |||
prefix "bfd-types"; | prefix bfd-types; | |||
reference | reference | |||
"RFC 9127: YANG Data Model for Bidirectional Forwarding | "RFC 9127: YANG Data Model for Bidirectional Forwarding | |||
Detection (BFD)"; | Detection (BFD)"; | |||
} | } | |||
organization | organization | |||
"IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/pim/> | "WG Web: <https://datatracker.ietf.org/wg/pim/> | |||
WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
Editor: Xufeng Liu | Editor: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Pete McAllister | Editor: Pete McAllister | |||
<mailto:pete.mcallister@metaswitch.com> | <mailto:pete.mcallister@metaswitch.com> | |||
skipping to change at line 1701 ¶ | skipping to change at line 1695 ¶ | |||
"Supports configuration of the interface Hello interval."; | "Supports configuration of the interface Hello interval."; | |||
reference | reference | |||
"RFC 3973: Protocol Independent Multicast - Dense Mode | "RFC 3973: Protocol Independent Multicast - Dense Mode | |||
(PIM-DM): Protocol Specification (Revised), Section 4.8 | (PIM-DM): Protocol Specification (Revised), Section 4.8 | |||
RFC 7761: Protocol Independent Multicast - Sparse Mode | RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.11"; | (PIM-SM): Protocol Specification (Revised), Section 4.11"; | |||
} | } | |||
feature intf-hello-multiplier { | feature intf-hello-multiplier { | |||
description | description | |||
"Supports configuration of the interface Hello multiplier."; | "Supports configuration of the interface Hello multiplier | |||
(the number by which the Hello interval is multiplied to | ||||
obtain the Hello Holdtime)."; | ||||
reference | reference | |||
"RFC 3973: Protocol Independent Multicast - Dense Mode | "RFC 3973: Protocol Independent Multicast - Dense Mode | |||
(PIM-DM): Protocol Specification (Revised), Section 4.8 | (PIM-DM): Protocol Specification (Revised), Section 4.8 | |||
RFC 7761: Protocol Independent Multicast - Sparse Mode | RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.11"; | (PIM-SM): Protocol Specification (Revised), Section 4.11"; | |||
} | } | |||
feature intf-jp-interval { | feature intf-jp-interval { | |||
description | description | |||
"Supports configuration of the interface Join/Prune interval."; | "Supports configuration of the interface Join/Prune interval."; | |||
skipping to change at line 1732 ¶ | skipping to change at line 1728 ¶ | |||
reference | reference | |||
"RFC 3973: Protocol Independent Multicast - Dense Mode | "RFC 3973: Protocol Independent Multicast - Dense Mode | |||
(PIM-DM): Protocol Specification (Revised), Section 4.8 | (PIM-DM): Protocol Specification (Revised), Section 4.8 | |||
RFC 7761: Protocol Independent Multicast - Sparse Mode | RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.11"; | (PIM-SM): Protocol Specification (Revised), Section 4.11"; | |||
} | } | |||
feature intf-jp-multiplier { | feature intf-jp-multiplier { | |||
description | description | |||
"Supports configuration of the interface Join/Prune | "Supports configuration of the interface Join/Prune | |||
multiplier."; | multiplier (the number by which the Join/Prune interval is | |||
multiplied to obtain the Join/Prune Holdtime)."; | ||||
reference | reference | |||
"RFC 3973: Protocol Independent Multicast - Dense Mode | "RFC 3973: Protocol Independent Multicast - Dense Mode | |||
(PIM-DM): Protocol Specification (Revised), Section 4.8 | (PIM-DM): Protocol Specification (Revised), Section 4.8 | |||
RFC 7761: Protocol Independent Multicast - Sparse Mode | RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.11"; | (PIM-SM): Protocol Specification (Revised), Section 4.11"; | |||
} | } | |||
feature intf-propagation-delay { | feature intf-propagation-delay { | |||
description | description | |||
"Supports configuration of interface propagation delay."; | "Supports configuration of interface propagation delay."; | |||
skipping to change at line 1755 ¶ | skipping to change at line 1752 ¶ | |||
(PIM-DM): Protocol Specification (Revised), Section 4.3.5 | (PIM-DM): Protocol Specification (Revised), Section 4.3.5 | |||
RFC 7761: Protocol Independent Multicast - Sparse Mode | RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.3.3"; | (PIM-SM): Protocol Specification (Revised), Section 4.3.3"; | |||
} | } | |||
feature intf-override-interval { | feature intf-override-interval { | |||
description | description | |||
"Supports configuration of the interface override interval."; | "Supports configuration of the interface override interval."; | |||
reference | reference | |||
"RFC 3973: Protocol Independent Multicast - Dense Mode | "RFC 3973: Protocol Independent Multicast - Dense Mode | |||
(PIM-DM): Protocol Specification (Revised), Section 4.3.3 | (PIM-DM): Protocol Specification (Revised), | |||
Sections 4.1.1 and 4.8 | ||||
RFC 5015: Bidirectional Protocol Independent Multicast | RFC 5015: Bidirectional Protocol Independent Multicast | |||
(BIDIR-PIM), Section 3.6 | (BIDIR-PIM), Section 3.6 | |||
RFC 7761: Protocol Independent Multicast - Sparse Mode | RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.11"; | (PIM-SM): Protocol Specification (Revised), Section 4.11"; | |||
} | } | |||
feature per-af-graceful-restart { | feature per-af-graceful-restart { | |||
description | description | |||
"Per address family configuration for graceful restart support | "Per address family configuration for graceful restart support | |||
as per RFC 8706."; | as per RFC 8706."; | |||
skipping to change at line 1856 ¶ | skipping to change at line 1862 ¶ | |||
identity pim-ssm { | identity pim-ssm { | |||
base pim-sm; | base pim-sm; | |||
description | description | |||
"PIM is operating in Sparse Mode with Source-Specific | "PIM is operating in Sparse Mode with Source-Specific | |||
Multicast (SSM)."; | Multicast (SSM)."; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping graceful-restart-container { | grouping graceful-restart-container { | |||
description | description | |||
"A grouping defining a container of graceful restart | "A grouping defining a container of graceful restart | |||
attributes."; | attributes."; | |||
container graceful-restart { | container graceful-restart { | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"Enables or disables graceful restart."; | "Enables or disables graceful restart."; | |||
} | } | |||
leaf duration { | leaf duration { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
default 60; | default "60"; | |||
description | description | |||
"Maximum time for graceful restart to finish."; | "Maximum time for graceful restart to finish."; | |||
} | } | |||
description | description | |||
"Container of graceful restart attributes."; | "Container of graceful restart attributes."; | |||
} | } | |||
} // graceful-restart-container | } // graceful-restart-container | |||
grouping multicast-route-attributes { | grouping multicast-route-attributes { | |||
description | description | |||
skipping to change at line 1901 ¶ | skipping to change at line 1907 ¶ | |||
"Reference to an entry in the global interface list."; | "Reference to an entry in the global interface list."; | |||
} | } | |||
leaf is-spt { | leaf is-spt { | |||
type boolean; | type boolean; | |||
description | description | |||
"'true' if the SPTbit (Shortest Path Tree bit) is set to | "'true' if the SPTbit (Shortest Path Tree bit) is set to | |||
indicate that forwarding is taking place on the | indicate that forwarding is taking place on the | |||
(S,G) SPT."; | (S,G) SPT."; | |||
reference | reference | |||
"RFC 7761: Protocol Independent Multicast - Sparse Mode | "RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.1.3"; | (PIM-SM): Protocol Specification (Revised), Section 4.1.3"; | |||
} | } | |||
leaf mode { | leaf mode { | |||
type identityref { | type identityref { | |||
base pim-mode; | base pim-mode; | |||
} | } | |||
description | description | |||
"PIM mode."; | "PIM mode."; | |||
} | } | |||
leaf msdp-learned { | leaf msdp-learned { | |||
type boolean; | type boolean; | |||
skipping to change at line 1936 ¶ | skipping to change at line 1942 ¶ | |||
leaf up-time { | leaf up-time { | |||
type rt-types:timeticks64; | type rt-types:timeticks64; | |||
description | description | |||
"The number of time ticks (hundredths of a second) since the | "The number of time ticks (hundredths of a second) since the | |||
route last transitioned into the active state."; | route last transitioned into the active state."; | |||
} | } | |||
list outgoing-interface { | list outgoing-interface { | |||
key "name"; | key "name"; | |||
description | description | |||
"A list of outgoing interfaces."; | "A list of outgoing interfaces."; | |||
leaf name { | leaf name { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"Interface name."; | "Interface name."; | |||
} | } | |||
leaf expiration { | leaf expiration { | |||
type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
description | description | |||
"Expiration time."; | "Expiration time."; | |||
} | } | |||
leaf up-time { | leaf up-time { | |||
type rt-types:timeticks64; | type rt-types:timeticks64; | |||
description | description | |||
"The number of time ticks (hundredths of a second) since | "The number of time ticks (hundredths of a second) since | |||
the 'oper-status' setting of the interface was last | the 'oper-status' setting of the interface was last | |||
changed to 'up'."; | changed to 'up'."; | |||
} | } | |||
leaf jp-state { | leaf jp-state { | |||
type enumeration { | type enumeration { | |||
enum "no-info" { | enum no-info { | |||
description | description | |||
"The interface has no (*,G) Join state and no timers | "The interface has no (*,G) Join state and no timers | |||
running."; | running."; | |||
} | } | |||
enum "join" { | enum join { | |||
description | description | |||
"The interface has Join state."; | "The interface has Join state."; | |||
} | } | |||
enum "prune-pending" { | enum prune-pending { | |||
description | description | |||
"The router has received a Prune on this interface from | "The router has received a Prune on this interface from | |||
a downstream neighbor and is waiting to see whether | a downstream neighbor and is waiting to see whether | |||
the Prune will be overridden by another downstream | the Prune will be overridden by another downstream | |||
router. For forwarding purposes, the Prune-Pending | router. For forwarding purposes, the Prune-Pending | |||
state functions exactly like the Join state."; | state functions exactly like the Join state."; | |||
} | } | |||
} | } | |||
description | description | |||
"Join/Prune state."; | "Join/Prune state."; | |||
skipping to change at line 2024 ¶ | skipping to change at line 2026 ¶ | |||
description | description | |||
"'true' if the LAN Prune Delay option is present in the | "'true' if the LAN Prune Delay option is present in the | |||
last Hello message from the neighbor."; | last Hello message from the neighbor."; | |||
} | } | |||
leaf override-interval { | leaf override-interval { | |||
when "../present = 'true'" { | when "../present = 'true'" { | |||
description | description | |||
"Available only when 'leaf present' is 'true'."; | "Available only when 'leaf present' is 'true'."; | |||
} | } | |||
type uint16; | type uint16; | |||
units milliseconds; | units "milliseconds"; | |||
description | description | |||
"The value of the Override_Interval field of the LAN Prune | "The value of the Override_Interval field of the LAN Prune | |||
Delay option in the last Hello message from the neighbor. | Delay option in the last Hello message from the neighbor. | |||
The neighbor uses this value to indicate a short period | The neighbor uses this value to indicate a short period | |||
after a Join or Prune to allow other routers on the LAN | after a Join or Prune to allow other routers on the LAN | |||
to override the Join or Prune."; | to override the Join or Prune."; | |||
} | } | |||
leaf propagation-delay { | leaf propagation-delay { | |||
when "../present = 'true'" { | when "../present = 'true'" { | |||
description | description | |||
"Available only when 'leaf present' is 'true'."; | "Available only when 'leaf present' is 'true'."; | |||
} | } | |||
type uint16; | type uint16; | |||
units milliseconds; | units "milliseconds"; | |||
description | description | |||
"The value of the Propagation_Delay field of the LAN Prune | "The value of the Propagation_Delay field of the LAN Prune | |||
Delay option in the last Hello message from the neighbor. | Delay option in the last Hello message from the neighbor. | |||
The value is the propagation delay over the local link | The value is the propagation delay over the local link | |||
expected by the neighbor."; | expected by the neighbor."; | |||
} | } | |||
leaf t-bit { | leaf t-bit { | |||
when "../present = 'true'" { | when "../present = 'true'" { | |||
description | description | |||
"Available only when 'leaf present' is 'true'."; | "Available only when 'leaf present' is 'true'."; | |||
skipping to change at line 2073 ¶ | skipping to change at line 2075 ¶ | |||
without being timed out."; | without being timed out."; | |||
} | } | |||
} // neighbor-state-af-attributes | } // neighbor-state-af-attributes | |||
grouping pim-instance-af-state-ref { | grouping pim-instance-af-state-ref { | |||
description | description | |||
"An absolute reference to a PIM instance address family."; | "An absolute reference to a PIM instance address family."; | |||
leaf instance-af-ref { | leaf instance-af-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:address-family/" | + "pim-base:pim/pim-base:address-family/" | |||
+ "pim-base:address-family"; | + "pim-base:address-family"; | |||
} | } | |||
description | description | |||
"Reference to a PIM instance address family."; | "Reference to a PIM instance address family."; | |||
} | } | |||
} // pim-instance-af-state-ref | } // pim-instance-af-state-ref | |||
grouping pim-interface-state-ref { | grouping pim-interface-state-ref { | |||
description | description | |||
"An absolute reference to a PIM interface state."; | "An absolute reference to a PIM interface state."; | |||
leaf interface-ref { | leaf interface-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface/" | + "pim-base:pim/pim-base:interfaces/pim-base:interface/" | |||
+ "pim-base:name"; | + "pim-base:name"; | |||
} | } | |||
description | description | |||
"Reference to a PIM interface."; | "Reference to a PIM interface."; | |||
} | } | |||
} // pim-interface-state-ref | } // pim-interface-state-ref | |||
grouping statistics-sent-received { | grouping statistics-sent-received { | |||
description | description | |||
"A grouping defining sent and received statistics | "A grouping defining sent and received statistics | |||
on PIM messages."; | on PIM messages."; | |||
skipping to change at line 2189 ¶ | skipping to change at line 2191 ¶ | |||
} | } | |||
} // statistics-sent-received | } // statistics-sent-received | |||
/* | /* | |||
* Data nodes | * Data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols" { | augment "/rt:routing/rt:control-plane-protocols" { | |||
description | description | |||
"PIM augmentation to the routing instance model."; | "PIM augmentation to the routing instance model."; | |||
container pim { | container pim { | |||
presence | presence "Enables the PIM protocol."; | |||
"Enables the PIM protocol."; | ||||
description | description | |||
"PIM configuration data and operational state data."; | "PIM configuration data and operational state data."; | |||
uses graceful-restart-container { | uses graceful-restart-container { | |||
if-feature global-graceful-restart; | if-feature "global-graceful-restart"; | |||
} | } | |||
list address-family { | list address-family { | |||
key "address-family"; | key "address-family"; | |||
description | description | |||
"Each list entry for one address family."; | "Each list entry for one address family."; | |||
uses rt:address-family; | uses rt:address-family; | |||
uses graceful-restart-container { | uses graceful-restart-container { | |||
if-feature per-af-graceful-restart; | if-feature "per-af-graceful-restart"; | |||
} | } | |||
container statistics { | container statistics { | |||
config false; | config false; | |||
description | description | |||
"A container defining statistics attributes."; | "A container defining statistics attributes."; | |||
leaf discontinuity-time { | leaf discontinuity-time { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
description | description | |||
"The time of the most recent occasion at which any one | "The time of the most recent occasion at which any one | |||
or more of the statistics counters suffered a | or more of the statistics counters suffered a | |||
discontinuity. If no such discontinuities have | discontinuity. If no such discontinuities have | |||
skipping to change at line 2358 ¶ | skipping to change at line 2350 ¶ | |||
leaf name { | leaf name { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"Reference to an entry in the global interface list."; | "Reference to an entry in the global interface list."; | |||
} | } | |||
list address-family { | list address-family { | |||
key "address-family"; | key "address-family"; | |||
description | description | |||
"Each list entry for one address family."; | "Each list entry for one address family."; | |||
uses rt:address-family; | uses rt:address-family; | |||
container bfd { | container bfd { | |||
if-feature bfd; | if-feature "bfd"; | |||
description | description | |||
"BFD (Bidirectional Forwarding Detection) | "BFD (Bidirectional Forwarding Detection) | |||
operation."; | operation."; | |||
uses bfd-types:client-cfg-parms; | uses bfd-types:client-cfg-parms; | |||
} | } | |||
leaf dr-priority { | leaf dr-priority { | |||
if-feature intf-dr-priority; | if-feature "intf-dr-priority"; | |||
type uint32; | type uint32; | |||
default 1; | default "1"; | |||
description | description | |||
"DR (Designated Router) priority as the preference in | "DR (Designated Router) priority as the preference in | |||
the DR election process."; | the DR election process."; | |||
} | } | |||
leaf hello-interval { | leaf hello-interval { | |||
if-feature intf-hello-interval; | if-feature "intf-hello-interval"; | |||
type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
default 30; | default "30"; | |||
description | description | |||
"Periodic interval for Hello messages. | "Periodic interval for Hello messages. | |||
If 'infinity' or 'not-set' is used, no periodic | If 'infinity' or 'not-set' is used, no periodic | |||
Hello messages are sent."; | Hello messages are sent."; | |||
reference | reference | |||
"RFC 3973: Protocol Independent Multicast - | "RFC 3973: Protocol Independent Multicast - | |||
Dense Mode (PIM-DM): Protocol Specification | Dense Mode (PIM-DM): Protocol Specification | |||
(Revised), Section 4.8 | (Revised), Section 4.8 | |||
RFC 7761: Protocol Independent Multicast - Sparse | RFC 7761: Protocol Independent Multicast - Sparse | |||
Mode (PIM-SM): Protocol Specification (Revised), | Mode (PIM-SM): Protocol Specification (Revised), | |||
skipping to change at line 2399 ¶ | skipping to change at line 2390 ¶ | |||
} | } | |||
choice hello-holdtime-or-multiplier { | choice hello-holdtime-or-multiplier { | |||
description | description | |||
"The Holdtime is the timer value to time out the | "The Holdtime is the timer value to time out the | |||
neighbor state when the timer expires. | neighbor state when the timer expires. | |||
The Holdtime value can be specified by either | The Holdtime value can be specified by either | |||
(1) the given Holdtime value or (2) the calculation | (1) the given Holdtime value or (2) the calculation | |||
of the Hello interval multiplied by the given value | of the Hello interval multiplied by the given value | |||
of the multiplier."; | of the multiplier."; | |||
case holdtime { | case holdtime { | |||
if-feature intf-hello-holdtime; | if-feature "intf-hello-holdtime"; | |||
leaf hello-holdtime { | leaf hello-holdtime { | |||
type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
default 105; | default "105"; | |||
description | description | |||
"The Hello Holdtime is the amount of time to | "The Hello Holdtime is the amount of time to | |||
keep the neighbor reachable until a new | keep the neighbor reachable until a new | |||
Hello message is received."; | Hello message is received."; | |||
} | } | |||
} | } | |||
case multiplier { | case multiplier { | |||
if-feature intf-hello-multiplier; | if-feature "intf-hello-multiplier"; | |||
leaf hello-multiplier { | leaf hello-multiplier { | |||
type rt-types:timer-multiplier; | type rt-types:timer-multiplier; | |||
default 3; | default "3"; | |||
description | description | |||
"The Hello multiplier is the number by which the | "The Hello multiplier is the number by which the | |||
Hello interval is multiplied to obtain the | Hello interval is multiplied to obtain the | |||
Hello Holdtime. | Hello Holdtime. | |||
The value of the Hello Holdtime is calculated | The value of the Hello Holdtime is calculated | |||
as: | as: | |||
hello-holdtime = | hello-holdtime = | |||
(multiplier + 0.5) * (hello-interval)."; | (multiplier + 0.5) * (hello-interval)."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf jp-interval { | leaf jp-interval { | |||
if-feature intf-jp-interval; | if-feature "intf-jp-interval"; | |||
type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
default 60; | default "60"; | |||
description | description | |||
"Periodic interval between Join/Prune messages. | "Periodic interval between Join/Prune messages. | |||
If 'infinity' or 'not-set' is used, no periodic | If 'infinity' or 'not-set' is used, no periodic | |||
Join/Prune messages are sent."; | Join/Prune messages are sent."; | |||
} | } | |||
choice jp-holdtime-or-multiplier { | choice jp-holdtime-or-multiplier { | |||
description | description | |||
"The Join/Prune Holdtime is the amount of time a | "The Join/Prune Holdtime is the amount of time a | |||
receiver must keep the Join/Prune state alive. | receiver must keep the Join/Prune state alive. | |||
The Holdtime value can be specified by either | The Holdtime value can be specified by either | |||
(1) the given Holdtime value or (2) the calculation | (1) the given Holdtime value or (2) the calculation | |||
of 'jp-interval' multiplied by the given value of | of 'jp-interval' multiplied by the given value of | |||
the multiplier."; | the multiplier."; | |||
case holdtime { | case holdtime { | |||
if-feature intf-jp-holdtime; | if-feature "intf-jp-holdtime"; | |||
leaf jp-holdtime { | leaf jp-holdtime { | |||
type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
default 210; | default "210"; | |||
description | description | |||
"The Join/Prune Holdtime is the amount of time a | "The Join/Prune Holdtime is the amount of time a | |||
receiver must keep the Join/Prune state alive."; | receiver must keep the Join/Prune state alive."; | |||
} | } | |||
} | } | |||
case multiplier { | case multiplier { | |||
if-feature intf-jp-multiplier; | if-feature "intf-jp-multiplier"; | |||
leaf jp-multiplier { | leaf jp-multiplier { | |||
type rt-types:timer-multiplier; | type rt-types:timer-multiplier; | |||
default 3; | default "3"; | |||
description | description | |||
"The Join/Prune multiplier is the number | "The Join/Prune multiplier is the number | |||
by which the Join/Prune interval is multiplied | by which the Join/Prune interval is multiplied | |||
to obtain the Join/Prune Holdtime. | to obtain the Join/Prune Holdtime. | |||
The value of the Join/Prune Holdtime is | The value of the Join/Prune Holdtime is | |||
calculated as: | calculated as: | |||
jp-holdtime = | jp-holdtime = | |||
(multiplier + 0.5) * (jp-interval)."; | (multiplier + 0.5) * (jp-interval)."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf override-interval { | leaf override-interval { | |||
if-feature intf-override-interval; | if-feature "intf-override-interval"; | |||
type uint16; | type uint16; | |||
units milliseconds; | units "milliseconds"; | |||
default 2500; | default "2500"; | |||
description | description | |||
"A short period after a Join or Prune to allow other | "A short period after a Join or Prune to allow other | |||
routers on the LAN to override the Join or Prune."; | routers on the LAN to override the Join or Prune."; | |||
} | } | |||
leaf propagation-delay { | leaf propagation-delay { | |||
if-feature intf-propagation-delay; | if-feature "intf-propagation-delay"; | |||
type uint16; | type uint16; | |||
units milliseconds; | units "milliseconds"; | |||
default 500; | default "500"; | |||
description | description | |||
"Expected propagation delay over the local link."; | "Expected propagation delay over the local link."; | |||
} | } | |||
// Interface state attributes | // Interface state attributes | |||
leaf oper-status { | leaf oper-status { | |||
type enumeration { | type enumeration { | |||
enum up { | enum up { | |||
description | description | |||
"The interface is ready to pass PIM messages."; | "The interface is ready to pass PIM messages."; | |||
} | } | |||
enum down { | enum down { | |||
description | description | |||
"The interface does not pass PIM messages."; | "The interface does not pass PIM messages."; | |||
skipping to change at line 2613 ¶ | skipping to change at line 2604 ¶ | |||
"Notification event for a neighbor."; | "Notification event for a neighbor."; | |||
leaf event-type { | leaf event-type { | |||
type neighbor-event-type; | type neighbor-event-type; | |||
description | description | |||
"Event type."; | "Event type."; | |||
} | } | |||
uses pim-interface-state-ref; | uses pim-interface-state-ref; | |||
leaf interface-af-ref { | leaf interface-af-ref { | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface" | + "pim-base:pim/pim-base:interfaces/pim-base:interface" | |||
+ "[pim-base:name = current()/../interface-ref]/" | + "[pim-base:name = current()/../interface-ref]/" | |||
+ "pim-base:address-family/pim-base:address-family"; | + "pim-base:address-family/pim-base:address-family"; | |||
} | } | |||
description | description | |||
"Reference to a PIM interface address family."; | "Reference to a PIM interface address family."; | |||
} | } | |||
leaf neighbor-ipv4-ref { | leaf neighbor-ipv4-ref { | |||
when "../interface-af-ref = 'rt:ipv4'" { | when "../interface-af-ref = 'rt:ipv4'" { | |||
description | description | |||
"Only applicable to an IPv4 address family."; | "Only applicable to an IPv4 address family."; | |||
} | } | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface" | + "pim-base:pim/pim-base:interfaces/pim-base:interface" | |||
+ "[pim-base:name = current()/../interface-ref]/" | + "[pim-base:name = current()/../interface-ref]/" | |||
+ "pim-base:address-family" | + "pim-base:address-family" | |||
+ "[pim-base:address-family = " | + "[pim-base:address-family = " | |||
+ "current()/../interface-af-ref]/" | + "current()/../interface-af-ref]/" | |||
+ "pim-base:neighbors/pim-base:ipv4-neighbor/" | + "pim-base:neighbors/pim-base:ipv4-neighbor/" | |||
+ "pim-base:address"; | + "pim-base:address"; | |||
} | } | |||
description | description | |||
"Reference to a PIM IPv4 neighbor."; | "Reference to a PIM IPv4 neighbor."; | |||
} | } | |||
leaf neighbor-ipv6-ref { | leaf neighbor-ipv6-ref { | |||
when "../interface-af-ref = 'rt:ipv6'" { | when "../interface-af-ref = 'rt:ipv6'" { | |||
description | description | |||
"Only applicable to an IPv6 address family."; | "Only applicable to an IPv6 address family."; | |||
} | } | |||
type leafref { | type leafref { | |||
path "/rt:routing/rt:control-plane-protocols/" | path "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface" | + "pim-base:pim/pim-base:interfaces/pim-base:interface" | |||
+ "[pim-base:name = current()/../interface-ref]/" | + "[pim-base:name = current()/../interface-ref]/" | |||
+ "pim-base:address-family" | + "pim-base:address-family" | |||
+ "[pim-base:address-family = " | + "[pim-base:address-family = " | |||
+ "current()/../interface-af-ref]/" | + "current()/../interface-af-ref]/" | |||
+ "pim-base:neighbors/pim-base:ipv6-neighbor/" | + "pim-base:neighbors/pim-base:ipv6-neighbor/" | |||
+ "pim-base:address"; | + "pim-base:address"; | |||
} | } | |||
description | description | |||
"Reference to a PIM IPv6 neighbor."; | "Reference to a PIM IPv6 neighbor."; | |||
} | } | |||
leaf up-time { | leaf up-time { | |||
type rt-types:timeticks64; | type rt-types:timeticks64; | |||
description | description | |||
"The number of time ticks (hundredths of a second) since | "The number of time ticks (hundredths of a second) since | |||
the neighbor relationship has been formed as reachable | the neighbor relationship has been formed as reachable | |||
without being timed out."; | without being timed out."; | |||
skipping to change at line 2717 ¶ | skipping to change at line 2709 ¶ | |||
This module references [RFC5059], [RFC6991], [RFC7761], [RFC8294], | This module references [RFC5059], [RFC6991], [RFC7761], [RFC8294], | |||
[RFC8343], and [RFC8349]. | [RFC8343], and [RFC8349]. | |||
<CODE BEGINS> file "ietf-pim-rp@2021-09-03.yang" | <CODE BEGINS> file "ietf-pim-rp@2021-09-03.yang" | |||
module ietf-pim-rp { | module ietf-pim-rp { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-pim-rp"; | namespace "urn:ietf:params:xml:ns:yang:ietf-pim-rp"; | |||
prefix pim-rp; | prefix pim-rp; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix inet; | |||
reference | reference | |||
"RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
} | } | |||
import ietf-routing-types { | import ietf-routing-types { | |||
prefix "rt-types"; | prefix rt-types; | |||
reference | reference | |||
"RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix if; | |||
reference | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
} | } | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
Version)"; | Version)"; | |||
} | } | |||
import ietf-pim-base { | import ietf-pim-base { | |||
prefix "pim-base"; | prefix pim-base; | |||
reference | reference | |||
"RFC 9128: A YANG Data Model for Protocol Independent | "RFC 9128: A YANG Data Model for Protocol Independent | |||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
organization | organization | |||
"IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/pim/> | "WG Web: <https://datatracker.ietf.org/wg/pim/> | |||
WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
Editor: Xufeng Liu | Editor: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Pete McAllister | Editor: Pete McAllister | |||
<mailto:pete.mcallister@metaswitch.com> | <mailto:pete.mcallister@metaswitch.com> | |||
skipping to change at line 2811 ¶ | skipping to change at line 2798 ¶ | |||
feature bsr { | feature bsr { | |||
description | description | |||
"This feature indicates that the system supports BSRs | "This feature indicates that the system supports BSRs | |||
(Bootstrap Routers)."; | (Bootstrap Routers)."; | |||
reference | reference | |||
"RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol | "RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol | |||
Independent Multicast (PIM)"; | Independent Multicast (PIM)"; | |||
} | } | |||
feature bsr-election-state { | feature bsr-election-state { | |||
if-feature bsr; | if-feature "bsr"; | |||
description | description | |||
"This feature indicates that the system supports providing | "This feature indicates that the system supports providing | |||
BSR election state."; | BSR election state."; | |||
reference | reference | |||
"RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol | "RFC 5059: Bootstrap Router (BSR) Mechanism for Protocol | |||
Independent Multicast (PIM)"; | Independent Multicast (PIM)"; | |||
} | } | |||
feature static-rp-override { | feature static-rp-override { | |||
description | description | |||
"This feature indicates that the system supports configuration | "This feature indicates that the system supports configuration | |||
of static RP (Rendezvous Point) override."; | of the static RP (Rendezvous Point) that overrides the RP | |||
discoveries from other mechanisms."; | ||||
reference | reference | |||
"RFC 7761: Protocol Independent Multicast - Sparse Mode | "RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 3.7"; | (PIM-SM): Protocol Specification (Revised), Section 3.7"; | |||
} | } | |||
feature candidate-interface { | feature candidate-interface { | |||
description | description | |||
"This feature indicates that the system supports using | "This feature indicates that the system supports using | |||
an interface to configure a BSR or RP candidate."; | an interface to configure a BSR or RP candidate."; | |||
} | } | |||
skipping to change at line 2956 ¶ | skipping to change at line 2949 ¶ | |||
"The string value is the name to uniquely identify a | "The string value is the name to uniquely identify a | |||
policy that contains one or more policy rules used to | policy that contains one or more policy rules used to | |||
determine which multicast group addresses are mapped | determine which multicast group addresses are mapped | |||
to this statically configured RP address. | to this statically configured RP address. | |||
If a policy is not specified, the entire multicast address | If a policy is not specified, the entire multicast address | |||
space is mapped. | space is mapped. | |||
The definition of such a policy is outside the scope | The definition of such a policy is outside the scope | |||
of this document."; | of this document."; | |||
} | } | |||
leaf override { | leaf override { | |||
if-feature static-rp-override; | if-feature "static-rp-override"; | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"When there is a conflict between static RPs and dynamic RPs, | "When there is a conflict between static RPs and dynamic RPs, | |||
setting this attribute to 'true' will ask the system to use | setting this attribute to 'true' will ask the system to use | |||
static RPs."; | static RPs."; | |||
} | } | |||
} // static-rp-attributes | } // static-rp-attributes | |||
grouping rp-candidate-attributes { | grouping rp-candidate-attributes { | |||
description | description | |||
"Grouping of RP candidate attributes."; | "Grouping of RP candidate attributes."; | |||
skipping to change at line 3001 ¶ | skipping to change at line 2994 ¶ | |||
or the default value is SM if both SM and BIDIR are | or the default value is SM if both SM and BIDIR are | |||
implemented."; | implemented."; | |||
} | } | |||
} // rp-candidate-attributes | } // rp-candidate-attributes | |||
/* | /* | |||
* Configuration data nodes | * Configuration data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | |||
+ "pim-base:address-family" { | + "pim-base:address-family" { | |||
description | description | |||
"PIM RP augmentation."; | "PIM RP augmentation."; | |||
container rp { | container rp { | |||
description | description | |||
"PIM RP configuration data."; | "PIM RP configuration data."; | |||
container static-rp { | container static-rp { | |||
description | description | |||
"Contains static RP attributes."; | "Contains static RP attributes."; | |||
list ipv4-rp { | list ipv4-rp { | |||
when "../../../pim-base:address-family = 'rt:ipv4'" { | when "../../../pim-base:address-family = 'rt:ipv4'" { | |||
description | description | |||
"Only applicable to an IPv4 address family."; | "Only applicable to an IPv4 address family."; | |||
} | } | |||
key "rp-address"; | key "rp-address"; | |||
description | description | |||
skipping to change at line 3042 ¶ | skipping to change at line 3032 ¶ | |||
key "rp-address"; | key "rp-address"; | |||
description | description | |||
"A list of IPv6 RP addresses."; | "A list of IPv6 RP addresses."; | |||
leaf rp-address { | leaf rp-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"Specifies a static RP address."; | "Specifies a static RP address."; | |||
} | } | |||
} | } | |||
} // static-rp | } // static-rp | |||
container bsr { | container bsr { | |||
if-feature bsr; | if-feature "bsr"; | |||
description | description | |||
"Contains BSR (Bootstrap Router) attributes."; | "Contains BSR (Bootstrap Router) attributes."; | |||
container bsr-candidate { | container bsr-candidate { | |||
presence | presence "Present to serve as a BSR candidate."; | |||
"Present to serve as a BSR candidate"; | ||||
description | description | |||
"BSR candidate attributes."; | "BSR candidate attributes."; | |||
choice interface-or-address { | choice interface-or-address { | |||
description | description | |||
"Use either an interface or an IP address."; | "Use either an interface or an IP address."; | |||
case interface { | case interface { | |||
if-feature candidate-interface; | if-feature "candidate-interface"; | |||
leaf interface { | leaf interface { | |||
type if:interface-ref; | type if:interface-ref; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Interface to be used by a BSR."; | "Interface to be used by a BSR."; | |||
} | } | |||
} | } | |||
case ipv4-address { | case ipv4-address { | |||
when "../../../pim-base:address-family = 'rt:ipv4'" { | when "../../../pim-base:address-family = 'rt:ipv4'" { | |||
description | description | |||
"Only applicable to an IPv4 address family."; | "Only applicable to an IPv4 address family."; | |||
} | } | |||
if-feature candidate-ipv4; | if-feature "candidate-ipv4"; | |||
leaf ipv4-address { | leaf ipv4-address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"IP address to be used by a BSR."; | "IP address to be used by a BSR."; | |||
} | } | |||
} | } | |||
case ipv6-address { | case ipv6-address { | |||
when "../../../pim-base:address-family = 'rt:ipv6'" { | when "../../../pim-base:address-family = 'rt:ipv6'" { | |||
description | description | |||
"Only applicable to an IPv6 address family."; | "Only applicable to an IPv6 address family."; | |||
} | } | |||
if-feature candidate-ipv6; | if-feature "candidate-ipv6"; | |||
leaf ipv6-address { | leaf ipv6-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"IP address to be used by a BSR."; | "IP address to be used by a BSR."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf hash-mask-length { | ||||
leaf hash-mask-length{ | ||||
type uint8 { | type uint8 { | |||
range "0..128"; | range "0..128"; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Value contained in BSR messages used by all routers to | "Value contained in BSR messages used by all routers to | |||
hash (map) to an RP."; | hash (map) to an RP."; | |||
} | } | |||
leaf priority { | leaf priority { | |||
type uint8 { | type uint8 { | |||
range "0..255"; | range "0..255"; | |||
} | } | |||
default 64; | default "64"; | |||
description | description | |||
"BSR election priority among different candidate BSRs. | "BSR election priority among different candidate BSRs. | |||
A larger value has a higher priority over a smaller | A larger value has a higher priority over a smaller | |||
value."; | value."; | |||
} | } | |||
} // bsr-candidate | } // bsr-candidate | |||
container rp-candidate { | container rp-candidate { | |||
description | description | |||
"Contains RP candidate attributes."; | "Contains RP candidate attributes."; | |||
list interface { | list interface { | |||
if-feature candidate-interface; | if-feature "candidate-interface"; | |||
key "name"; | key "name"; | |||
description | description | |||
"A list of RP candidates."; | "A list of RP candidates."; | |||
leaf name { | leaf name { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"Interface that the RP candidate uses."; | "Interface that the RP candidate uses."; | |||
} | } | |||
uses rp-candidate-attributes; | uses rp-candidate-attributes; | |||
} | } | |||
skipping to change at line 3130 ¶ | skipping to change at line 3114 ¶ | |||
key "name"; | key "name"; | |||
description | description | |||
"A list of RP candidates."; | "A list of RP candidates."; | |||
leaf name { | leaf name { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"Interface that the RP candidate uses."; | "Interface that the RP candidate uses."; | |||
} | } | |||
uses rp-candidate-attributes; | uses rp-candidate-attributes; | |||
} | } | |||
list ipv4-address { | list ipv4-address { | |||
when "../../../../pim-base:address-family = 'rt:ipv4'" { | when "../../../../pim-base:address-family = 'rt:ipv4'" { | |||
description | description | |||
"Only applicable to an IPv4 address family."; | "Only applicable to an IPv4 address family."; | |||
} | } | |||
if-feature candidate-ipv4; | if-feature "candidate-ipv4"; | |||
key "address"; | key "address"; | |||
description | description | |||
"A list of RP candidate addresses."; | "A list of RP candidate addresses."; | |||
leaf address { | leaf address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"IPv4 address that the RP candidate uses."; | "IPv4 address that the RP candidate uses."; | |||
} | } | |||
uses rp-candidate-attributes; | uses rp-candidate-attributes; | |||
} | } | |||
skipping to change at line 3147 ¶ | skipping to change at line 3130 ¶ | |||
key "address"; | key "address"; | |||
description | description | |||
"A list of RP candidate addresses."; | "A list of RP candidate addresses."; | |||
leaf address { | leaf address { | |||
type inet:ipv4-address; | type inet:ipv4-address; | |||
description | description | |||
"IPv4 address that the RP candidate uses."; | "IPv4 address that the RP candidate uses."; | |||
} | } | |||
uses rp-candidate-attributes; | uses rp-candidate-attributes; | |||
} | } | |||
list ipv6-address { | list ipv6-address { | |||
when "../../../../pim-base:address-family = 'rt:ipv6'" { | when "../../../../pim-base:address-family = 'rt:ipv6'" { | |||
description | description | |||
"Only applicable to an IPv6 address family."; | "Only applicable to an IPv6 address family."; | |||
} | } | |||
if-feature candidate-ipv6; | if-feature "candidate-ipv6"; | |||
key "address"; | key "address"; | |||
description | description | |||
"A list of RP candidate addresses."; | "A list of RP candidate addresses."; | |||
leaf address { | leaf address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"IPv6 address that the RP candidate uses."; | "IPv6 address that the RP candidate uses."; | |||
} | } | |||
uses rp-candidate-attributes; | uses rp-candidate-attributes; | |||
} | } | |||
skipping to change at line 3198 ¶ | skipping to change at line 3179 ¶ | |||
"Priority."; | "Priority."; | |||
} | } | |||
leaf up-time { | leaf up-time { | |||
type rt-types:timeticks64; | type rt-types:timeticks64; | |||
description | description | |||
"The number of time ticks (hundredths of a second) | "The number of time ticks (hundredths of a second) | |||
since the BSR came up."; | since the BSR came up."; | |||
} | } | |||
} | } | |||
choice election-state { | choice election-state { | |||
if-feature bsr-election-state; | if-feature "bsr-election-state"; | |||
config false; | config false; | |||
description | description | |||
"BSR election state."; | "BSR election state."; | |||
case candidate { | case candidate { | |||
leaf candidate-bsr-state { | leaf candidate-bsr-state { | |||
type enumeration { | type enumeration { | |||
enum "candidate" { | enum candidate { | |||
description | description | |||
"The router is a candidate to be the BSR for the | "The router is a candidate to be the BSR for the | |||
scope zone, but currently another router is the | scope zone, but currently another router is the | |||
preferred BSR."; | preferred BSR."; | |||
} | } | |||
enum "pending" { | enum pending { | |||
description | description | |||
"The router is a candidate to be the BSR for the | "The router is a candidate to be the BSR for the | |||
scope zone. Currently, no other router is the | scope zone. Currently, no other router is the | |||
preferred BSR, but this router is not yet the | preferred BSR, but this router is not yet the | |||
elected BSR. This is a temporary state that | elected BSR. This is a temporary state that | |||
prevents rapid thrashing of the choice of BSR | prevents rapid thrashing of the choice of BSR | |||
during BSR election."; | during BSR election."; | |||
} | } | |||
enum "elected" { | enum elected { | |||
description | description | |||
"The router is the elected BSR for the | "The router is the elected BSR for the | |||
scope zone, and it must perform all of the | scope zone, and it must perform all of the | |||
BSR functions."; | BSR functions."; | |||
} | } | |||
} | } | |||
description | description | |||
"Candidate-BSR (C-BSR) state."; | "Candidate-BSR (C-BSR) state."; | |||
reference | reference | |||
"RFC 5059: Bootstrap Router (BSR) Mechanism for | "RFC 5059: Bootstrap Router (BSR) Mechanism for | |||
Protocol Independent Multicast (PIM), | Protocol Independent Multicast (PIM), | |||
Section 3.1.1"; | Section 3.1.1"; | |||
} | } | |||
} | } | |||
case "non-candidate" { | case non-candidate { | |||
leaf non-candidate-bsr-state { | leaf non-candidate-bsr-state { | |||
type enumeration { | type enumeration { | |||
enum "no-info" { | enum no-info { | |||
description | description | |||
"The router has no information about this scope | "The router has no information about this scope | |||
zone."; | zone."; | |||
} | } | |||
enum "accept-any" { | enum accept-any { | |||
description | description | |||
"The router does not know of an active BSR and | "The router does not know of an active BSR and | |||
will accept the first Bootstrap message it sees | will accept the first Bootstrap message it sees | |||
that provides the new BSR's identity and the | that provides the new BSR's identity and the | |||
RP-Set."; | RP-Set."; | |||
} | } | |||
enum "accept" { | enum accept { | |||
description | description | |||
"The router knows the identity of the current | "The router knows the identity of the current | |||
BSR and is using the RP-Set provided by that | BSR and is using the RP-Set provided by that | |||
BSR. Only Bootstrap messages from that BSR or | BSR. Only Bootstrap messages from that BSR or | |||
from a Candidate-BSR (C-BSR) with higher weight | from a Candidate-BSR (C-BSR) with higher weight | |||
than the current BSR will be accepted."; | than the current BSR will be accepted."; | |||
} | } | |||
} | } | |||
description | description | |||
"Non-Candidate-BSR state."; | "Non-Candidate-BSR state."; | |||
reference | reference | |||
"RFC 5059: Bootstrap Router (BSR) Mechanism for | "RFC 5059: Bootstrap Router (BSR) Mechanism for | |||
Protocol Independent Multicast (PIM), | Protocol Independent Multicast (PIM), | |||
Section 3.1.2"; | Section 3.1.2"; | |||
} | } | |||
} | } | |||
} // election-state | } // election-state | |||
leaf bsr-next-bootstrap { | leaf bsr-next-bootstrap { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
config false; | config false; | |||
description | description | |||
"The remaining time interval in seconds until the next | "The remaining time interval in seconds until the next | |||
Bootstrap will be sent."; | Bootstrap will be sent."; | |||
} | } | |||
container rp { | container rp { | |||
config false; | config false; | |||
description | description | |||
"State information of the RP."; | "State information of the RP."; | |||
leaf rp-address { | leaf rp-address { | |||
type inet:ip-address; | type inet:ip-address; | |||
description | description | |||
"RP address."; | "RP address."; | |||
} | } | |||
leaf policy-name { | leaf policy-name { | |||
skipping to change at line 3306 ¶ | skipping to change at line 3286 ¶ | |||
} | } | |||
leaf up-time { | leaf up-time { | |||
type rt-types:timeticks64; | type rt-types:timeticks64; | |||
description | description | |||
"The number of time ticks (hundredths of a second) | "The number of time ticks (hundredths of a second) | |||
since the RP became actively available."; | since the RP became actively available."; | |||
} | } | |||
} | } | |||
leaf rp-candidate-next-advertisement { | leaf rp-candidate-next-advertisement { | |||
type uint16; | type uint16; | |||
units seconds; | units "seconds"; | |||
config false; | config false; | |||
description | description | |||
"The remaining time interval in seconds until the next | "The remaining time interval in seconds until the next | |||
RP candidate advertisement will be sent."; | RP candidate advertisement will be sent."; | |||
} | } | |||
} // bsr | } // bsr | |||
container rp-list { | container rp-list { | |||
config false; | config false; | |||
description | description | |||
"Contains a list of RPs."; | "Contains a list of RPs."; | |||
list ipv4-rp { | list ipv4-rp { | |||
when "../../../pim-base:address-family = 'rt:ipv4'" { | when "../../../pim-base:address-family = 'rt:ipv4'" { | |||
description | description | |||
"Only applicable to an IPv4 address family."; | "Only applicable to an IPv4 address family."; | |||
} | } | |||
key "rp-address mode"; | key "rp-address mode"; | |||
skipping to change at line 3479 ¶ | skipping to change at line 3456 ¶ | |||
This module references [RFC4607], [RFC6991], [RFC7761], and | This module references [RFC4607], [RFC6991], [RFC7761], and | |||
[RFC8349]. | [RFC8349]. | |||
<CODE BEGINS> file "ietf-pim-sm@2021-09-03.yang" | <CODE BEGINS> file "ietf-pim-sm@2021-09-03.yang" | |||
module ietf-pim-sm { | module ietf-pim-sm { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-pim-sm"; | namespace "urn:ietf:params:xml:ns:yang:ietf-pim-sm"; | |||
prefix pim-sm; | prefix pim-sm; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix inet; | |||
reference | reference | |||
"RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
} | } | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
Version)"; | Version)"; | |||
} | } | |||
import ietf-pim-base { | import ietf-pim-base { | |||
prefix "pim-base"; | prefix pim-base; | |||
reference | reference | |||
"RFC 9128: A YANG Data Model for Protocol Independent | "RFC 9128: A YANG Data Model for Protocol Independent | |||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
import ietf-pim-rp { | import ietf-pim-rp { | |||
prefix "pim-rp"; | prefix pim-rp; | |||
reference | reference | |||
"RFC 9128: A YANG Data Model for Protocol Independent | "RFC 9128: A YANG Data Model for Protocol Independent | |||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
organization | organization | |||
"IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/pim/> | "WG Web: <https://datatracker.ietf.org/wg/pim/> | |||
WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
Editor: Xufeng Liu | Editor: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Pete McAllister | Editor: Pete McAllister | |||
<mailto:pete.mcallister@metaswitch.com> | <mailto:pete.mcallister@metaswitch.com> | |||
skipping to change at line 3551 ¶ | skipping to change at line 3523 ¶ | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 9128; see the | This version of this YANG module is part of RFC 9128; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2021-09-03 { | revision 2021-09-03 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC 7761: Protocol Independent Multicast - Sparse Mode | "RFC 9128: A YANG Data Model for Protocol Independent | |||
(PIM-SM): Protocol Specification (Revised), Section 4.2 | ||||
RFC 9128: A YANG Data Model for Protocol Independent | ||||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
/* | /* | |||
* Features | * Features | |||
*/ | */ | |||
feature spt-switch-infinity { | feature spt-switch-infinity { | |||
description | description | |||
"This feature indicates that the system supports the | "This feature indicates that the system supports the | |||
configuration choice of whether to trigger switchover from | configuration choice of whether to trigger switchover from | |||
the RPT (Rendezvous Point Tree) to the SPT (Shortest Path | the RPT (Rendezvous Point Tree) to the SPT (Shortest Path | |||
Tree)."; | Tree)."; | |||
reference | reference | |||
"RFC 7761: Protocol Independent Multicast - Sparse Mode | "RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.2"; | (PIM-SM): Protocol Specification (Revised), Section 4.2"; | |||
} | } | |||
skipping to change at line 3583 ¶ | skipping to change at line 3554 ¶ | |||
"This feature indicates that the system supports configuring | "This feature indicates that the system supports configuring | |||
the policy for switchover from the RPT to the SPT."; | the policy for switchover from the RPT to the SPT."; | |||
reference | reference | |||
"RFC 7761: Protocol Independent Multicast - Sparse Mode | "RFC 7761: Protocol Independent Multicast - Sparse Mode | |||
(PIM-SM): Protocol Specification (Revised), Section 4.2"; | (PIM-SM): Protocol Specification (Revised), Section 4.2"; | |||
} | } | |||
/* | /* | |||
* Identities | * Identities | |||
*/ | */ | |||
identity rp-sm { | identity rp-sm { | |||
base pim-rp:rp-mode; | base pim-rp:rp-mode; | |||
description | description | |||
"SM (Sparse Mode)."; | "SM (Sparse Mode)."; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping static-rp-sm-container { | grouping static-rp-sm-container { | |||
description | description | |||
"Grouping that contains SM attributes for static RPs."; | "Grouping that contains SM attributes for static RPs."; | |||
container sm { | container sm { | |||
presence | presence "Indicates support for PIM-SM."; | |||
"Indicates support for PIM-SM."; | ||||
description | description | |||
"PIM-SM configuration data."; | "PIM-SM configuration data."; | |||
uses pim-rp:static-rp-attributes; | uses pim-rp:static-rp-attributes; | |||
} // sm | } // sm | |||
} // static-rp-sm-container | } // static-rp-sm-container | |||
/* | /* | |||
* Configuration data nodes | * Configuration data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | |||
+ "pim-base:address-family" { | + "pim-base:address-family" { | |||
description | description | |||
"PIM-SM augmentation."; | "PIM-SM augmentation."; | |||
container sm { | container sm { | |||
description | description | |||
"PIM-SM configuration data."; | "PIM-SM configuration data."; | |||
container asm { | container asm { | |||
description | description | |||
"ASM (Any-Source Multicast) attributes."; | "ASM (Any-Source Multicast) attributes."; | |||
container anycast-rp { | container anycast-rp { | |||
presence | presence "Present to enable an Anycast-RP | |||
"Present to enable an Anycast-RP (Rendezvous Point)."; | (Rendezvous Point)."; | |||
description | description | |||
"Anycast-RP attributes."; | "Anycast-RP attributes."; | |||
list ipv4-anycast-rp { | list ipv4-anycast-rp { | |||
when "../../../../pim-base:address-family = 'rt:ipv4'" { | when "../../../../pim-base:address-family = 'rt:ipv4'" { | |||
description | description | |||
"Only applicable to an IPv4 address family."; | "Only applicable to an IPv4 address family."; | |||
} | } | |||
key "anycast-address rp-address"; | key "anycast-address rp-address"; | |||
description | description | |||
"A list of IPv4 Anycast-RP settings. Only applicable | "A list of IPv4 Anycast-RP settings. Only applicable | |||
when 'pim-base:address-family' is IPv4."; | when 'pim-base:address-family' is IPv4."; | |||
leaf anycast-address { | leaf anycast-address { | |||
skipping to change at line 3668 ¶ | skipping to change at line 3635 ¶ | |||
description | description | |||
"A list of IPv6 Anycast-RP settings. Only applicable | "A list of IPv6 Anycast-RP settings. Only applicable | |||
when 'pim-base:address-family' is IPv6."; | when 'pim-base:address-family' is IPv6."; | |||
leaf anycast-address { | leaf anycast-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"IP address of the Anycast-RP set. This IP address | "IP address of the Anycast-RP set. This IP address | |||
is used by the multicast groups or sources to join | is used by the multicast groups or sources to join | |||
or register."; | or register."; | |||
} | } | |||
leaf rp-address { | leaf rp-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"IP address of the router configured with an | "IP address of the router configured with an | |||
Anycast-RP. This is the IP address where the | Anycast-RP. This is the IP address where the | |||
Register messages are forwarded."; | Register messages are forwarded."; | |||
} | } | |||
} | } | |||
} | } | |||
container spt-switch { | container spt-switch { | |||
description | description | |||
"SPT (Shortest Path Tree) switching attributes."; | "SPT (Shortest Path Tree) switching attributes."; | |||
container infinity { | container infinity { | |||
if-feature spt-switch-infinity; | if-feature "spt-switch-infinity"; | |||
presence | presence "Present if the SPT switchover threshold is set | |||
"Present if the SPT switchover threshold is set to | to infinity, according to the policy specified | |||
infinity, according to the policy specified below."; | below."; | |||
description | description | |||
"The receiver's DR (Designated Router) never triggers | "The receiver's DR (Designated Router) never triggers | |||
switchover from the RPT to the SPT."; | switchover from the RPT to the SPT."; | |||
leaf policy-name { | leaf policy-name { | |||
if-feature spt-switch-policy; | if-feature "spt-switch-policy"; | |||
type string; | type string; | |||
description | description | |||
"The string value is the name to uniquely identify a | "The string value is the name to uniquely identify a | |||
policy that contains one or more policy rules used | policy that contains one or more policy rules used | |||
to accept or reject certain multicast groups. | to accept or reject certain multicast groups. | |||
The groups accepted by this policy have the SPT | The groups accepted by this policy have the SPT | |||
switchover threshold set to infinity, meaning that | switchover threshold set to infinity, meaning that | |||
they will stay on the shared tree forever. | they will stay on the shared tree forever. | |||
If a policy is not specified, the entire multicast | If a policy is not specified, the entire multicast | |||
address space is accepted. | address space is accepted. | |||
skipping to change at line 3708 ¶ | skipping to change at line 3673 ¶ | |||
switchover threshold set to infinity, meaning that | switchover threshold set to infinity, meaning that | |||
they will stay on the shared tree forever. | they will stay on the shared tree forever. | |||
If a policy is not specified, the entire multicast | If a policy is not specified, the entire multicast | |||
address space is accepted. | address space is accepted. | |||
The definition of such a policy is outside the scope | The definition of such a policy is outside the scope | |||
of this document."; | of this document."; | |||
} | } | |||
} // infinity | } // infinity | |||
} | } | |||
} // asm | } // asm | |||
container ssm { | container ssm { | |||
presence | presence "Present to enable SSM (Source-Specific | |||
"Present to enable SSM (Source-Specific Multicast)."; | Multicast)."; | |||
description | description | |||
"SSM attributes."; | "SSM attributes."; | |||
leaf range-policy { | leaf range-policy { | |||
type string; | type string; | |||
description | description | |||
"The string value is the name to uniquely identify a | "The string value is the name to uniquely identify a | |||
policy that contains one or more policy rules used | policy that contains one or more policy rules used | |||
to accept or reject certain multicast groups. | to accept or reject certain multicast groups. | |||
The groups accepted by this policy define the multicast | The groups accepted by this policy define the multicast | |||
group range used by SSM. | group range used by SSM. | |||
If a policy is not specified, the default SSM multicast | If a policy is not specified, the default SSM multicast | |||
group range is used. | group range is used. | |||
skipping to change at line 3738 ¶ | skipping to change at line 3701 ¶ | |||
The definition of such a policy is outside the scope | The definition of such a policy is outside the scope | |||
of this document."; | of this document."; | |||
reference | reference | |||
"RFC 4607: Source-Specific Multicast for IP"; | "RFC 4607: Source-Specific Multicast for IP"; | |||
} | } | |||
} // ssm | } // ssm | |||
} // sm | } // sm | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | |||
+ "pim-base:interfaces/pim-base:interface/" | + "pim-base:interfaces/pim-base:interface/" | |||
+ "pim-base:address-family" { | + "pim-base:address-family" { | |||
description | description | |||
"PIM-SM augmentation."; | "PIM-SM augmentation."; | |||
container sm { | container sm { | |||
presence "Present to enable PIM-SM."; | presence "Present to enable PIM-SM."; | |||
description | description | |||
"PIM-SM configuration data."; | "PIM-SM configuration data."; | |||
leaf passive { | leaf passive { | |||
type empty; | type empty; | |||
description | description | |||
"Specifies that no PIM messages are sent or accepted on | "Specifies that no PIM messages are sent or accepted on | |||
this PIM interface, but the interface can be included in a | this PIM interface, but the interface can be included in a | |||
multicast forwarding entry."; | multicast forwarding entry."; | |||
} | } | |||
} // sm | } // sm | |||
} // augment | } // augment | |||
skipping to change at line 3759 ¶ | skipping to change at line 3720 ¶ | |||
type empty; | type empty; | |||
description | description | |||
"Specifies that no PIM messages are sent or accepted on | "Specifies that no PIM messages are sent or accepted on | |||
this PIM interface, but the interface can be included in a | this PIM interface, but the interface can be included in a | |||
multicast forwarding entry."; | multicast forwarding entry."; | |||
} | } | |||
} // sm | } // sm | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | |||
+ "pim-base:address-family/pim-rp:rp/" | + "pim-base:address-family/pim-rp:rp/" | |||
+ "pim-rp:static-rp/pim-rp:ipv4-rp" { | + "pim-rp:static-rp/pim-rp:ipv4-rp" { | |||
description | description | |||
"PIM-SM augmentation."; | "PIM-SM augmentation."; | |||
uses static-rp-sm-container; | uses static-rp-sm-container; | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" | |||
+ "pim-base:address-family/pim-rp:rp/" | + "pim-base:address-family/pim-rp:rp/" | |||
+ "pim-rp:static-rp/pim-rp:ipv6-rp" { | + "pim-rp:static-rp/pim-rp:ipv6-rp" { | |||
description | description | |||
"PIM-SM augmentation."; | "PIM-SM augmentation."; | |||
uses static-rp-sm-container; | uses static-rp-sm-container; | |||
} // augment | } // augment | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
6.4. PIM-DM Module | 6.4. PIM-DM Module | |||
This module references [RFC3973] and [RFC8349]. | This module references [RFC3973] and [RFC8349]. | |||
<CODE BEGINS> file "ietf-pim-dm@2021-09-03.yang" | <CODE BEGINS> file "ietf-pim-dm@2021-09-03.yang" | |||
module ietf-pim-dm { | module ietf-pim-dm { | |||
yang-version 1.1; | yang-version 1.1; | |||
skipping to change at line 3789 ¶ | skipping to change at line 3749 ¶ | |||
This module references [RFC3973] and [RFC8349]. | This module references [RFC3973] and [RFC8349]. | |||
<CODE BEGINS> file "ietf-pim-dm@2021-09-03.yang" | <CODE BEGINS> file "ietf-pim-dm@2021-09-03.yang" | |||
module ietf-pim-dm { | module ietf-pim-dm { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-pim-dm"; | namespace "urn:ietf:params:xml:ns:yang:ietf-pim-dm"; | |||
prefix pim-dm; | prefix pim-dm; | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
Version)"; | Version)"; | |||
} | } | |||
import ietf-pim-base { | import ietf-pim-base { | |||
prefix "pim-base"; | prefix pim-base; | |||
reference | reference | |||
"RFC 9128: A YANG Data Model for Protocol Independent | "RFC 9128: A YANG Data Model for Protocol Independent | |||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
organization | organization | |||
"IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/pim/> | "WG Web: <https://datatracker.ietf.org/wg/pim/> | |||
WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
Editor: Xufeng Liu | Editor: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Pete McAllister | Editor: Pete McAllister | |||
<mailto:pete.mcallister@metaswitch.com> | <mailto:pete.mcallister@metaswitch.com> | |||
skipping to change at line 3848 ¶ | skipping to change at line 3805 ¶ | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 9128; see the | This version of this YANG module is part of RFC 9128; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2021-09-03 { | revision 2021-09-03 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC 3973: Protocol Independent Multicast - Dense Mode | "RFC 9128: A YANG Data Model for Protocol Independent | |||
(PIM-DM): Protocol Specification (Revised) | ||||
RFC 9128: A YANG Data Model for Protocol Independent | ||||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
/* | /* | |||
* Configuration data nodes | * Configuration data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:address-family" { | + "pim-base:pim/pim-base:address-family" { | |||
description | description | |||
"PIM-DM augmentation."; | "PIM-DM augmentation."; | |||
container dm { | container dm { | |||
presence "Present to enable PIM-DM."; | presence "Present to enable PIM-DM."; | |||
description | description | |||
"PIM-DM configuration data."; | "PIM-DM configuration data."; | |||
} // dm | } // dm | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface/" | + "pim-base:pim/pim-base:interfaces/pim-base:interface/" | |||
+ "pim-base:address-family" { | + "pim-base:address-family" { | |||
description | description | |||
"PIM-DM augmentation to 'pim-base:interface'."; | "PIM-DM augmentation to 'pim-base:interface'."; | |||
container dm { | container dm { | |||
presence "Present to enable PIM-DM."; | presence "Present to enable PIM-DM."; | |||
description | description | |||
"PIM-DM configuration data."; | "PIM-DM configuration data."; | |||
} // dm | } // dm | |||
} // augment | } // augment | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
6.5. PIM-BIDIR Module | 6.5. BIDIR-PIM Module | |||
This module references [RFC5015], [RFC6991], [RFC8294], [RFC8343], | This module references [RFC5015], [RFC6991], [RFC8294], [RFC8343], | |||
and [RFC8349]. | and [RFC8349]. | |||
<CODE BEGINS> file "ietf-pim-bidir@2021-09-03.yang" | <CODE BEGINS> file "ietf-pim-bidir@2021-09-03.yang" | |||
module ietf-pim-bidir { | module ietf-pim-bidir { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-pim-bidir"; | namespace "urn:ietf:params:xml:ns:yang:ietf-pim-bidir"; | |||
prefix pim-bidir; | prefix pim-bidir; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix "inet"; | prefix inet; | |||
reference | reference | |||
"RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
} | } | |||
import ietf-routing-types { | import ietf-routing-types { | |||
prefix "rt-types"; | prefix rt-types; | |||
reference | reference | |||
"RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix if; | |||
reference | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
} | } | |||
import ietf-routing { | import ietf-routing { | |||
prefix "rt"; | prefix rt; | |||
reference | reference | |||
"RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
Version)"; | Version)"; | |||
} | } | |||
import ietf-pim-base { | import ietf-pim-base { | |||
prefix "pim-base"; | prefix pim-base; | |||
reference | reference | |||
"RFC 9128: A YANG Data Model for Protocol Independent | "RFC 9128: A YANG Data Model for Protocol Independent | |||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
import ietf-pim-rp { | import ietf-pim-rp { | |||
prefix "pim-rp"; | prefix pim-rp; | |||
reference | reference | |||
"RFC 9128: A YANG Data Model for Protocol Independent | "RFC 9128: A YANG Data Model for Protocol Independent | |||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
organization | organization | |||
"IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/pim/> | "WG Web: <https://datatracker.ietf.org/wg/pim/> | |||
WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
Editor: Xufeng Liu | Editor: Xufeng Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Editor: Pete McAllister | Editor: Pete McAllister | |||
<mailto:pete.mcallister@metaswitch.com> | <mailto:pete.mcallister@metaswitch.com> | |||
skipping to change at line 3981 ¶ | skipping to change at line 3928 ¶ | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 9128; see the | This version of this YANG module is part of RFC 9128; see the | |||
RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
revision 2021-09-03 { | revision 2021-09-03 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC 5015: Bidirectional Protocol Independent Multicast | "RFC 9128: A YANG Data Model for Protocol Independent | |||
(BIDIR-PIM) | ||||
RFC 9128: A YANG Data Model for Protocol Independent | ||||
Multicast (PIM)"; | Multicast (PIM)"; | |||
} | } | |||
/* | /* | |||
* Features | * Features | |||
*/ | */ | |||
feature intf-df-election { | feature intf-df-election { | |||
description | description | |||
"Supports configuration of interface DF election."; | "Supports configuration of interface DF election."; | |||
reference | reference | |||
"RFC 5015: Bidirectional Protocol Independent Multicast | "RFC 5015: Bidirectional Protocol Independent Multicast | |||
(BIDIR-PIM), Section 3.5"; | (BIDIR-PIM), Section 3.5"; | |||
} | } | |||
/* | /* | |||
* Identities | * Identities | |||
skipping to change at line 4047 ¶ | skipping to change at line 3994 ¶ | |||
identity df-state-backoff { | identity df-state-backoff { | |||
base df-state; | base df-state; | |||
description | description | |||
"The router is the acting DF, but another router has made a | "The router is the acting DF, but another router has made a | |||
bid to take over."; | bid to take over."; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping static-rp-bidir-container { | grouping static-rp-bidir-container { | |||
description | description | |||
"Grouping that contains BIDIR attributes for a static RP | "Grouping that contains BIDIR attributes for a static RP | |||
(Rendezvous Point)."; | (Rendezvous Point)."; | |||
container bidir { | container bidir { | |||
presence | presence "Indicates support for BIDIR mode."; | |||
"Indicates support for BIDIR mode."; | ||||
description | description | |||
"PIM-BIDIR configuration data."; | "PIM-BIDIR configuration data."; | |||
uses pim-rp:static-rp-attributes; | uses pim-rp:static-rp-attributes; | |||
} // bidir | } // bidir | |||
} // static-rp-bidir-container | } // static-rp-bidir-container | |||
grouping interface-df-election-state-attributes { | grouping interface-df-election-state-attributes { | |||
description | description | |||
"Grouping that contains the state attributes of a DF election | "Grouping that contains the state attributes of a DF election | |||
on an interface."; | on an interface."; | |||
leaf interface-state { | leaf interface-state { | |||
type identityref { | type identityref { | |||
skipping to change at line 4098 ¶ | skipping to change at line 4044 ¶ | |||
protocol that the DF used to obtain the route to the RP. | protocol that the DF used to obtain the route to the RP. | |||
The value is announced by the DF."; | The value is announced by the DF."; | |||
} | } | |||
} // interface-df-election-state-attributes | } // interface-df-election-state-attributes | |||
/* | /* | |||
* Configuration data and operational state data nodes | * Configuration data and operational state data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:address-family" { | + "pim-base:pim/pim-base:address-family" { | |||
description | description | |||
"PIM-BIDIR augmentation."; | "PIM-BIDIR augmentation."; | |||
container bidir { | container bidir { | |||
presence "Present to enable BIDIR mode."; | presence "Present to enable BIDIR mode."; | |||
description | description | |||
"PIM-BIDIR configuration data."; | "PIM-BIDIR configuration data."; | |||
} // bidir | } // bidir | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface/" | + "pim-base:pim/pim-base:interfaces/pim-base:interface/" | |||
+ "pim-base:address-family" { | + "pim-base:address-family" { | |||
description | description | |||
"PIM-BIDIR augmentation."; | "PIM-BIDIR augmentation."; | |||
container bidir { | container bidir { | |||
presence "Present to enable BIDIR mode."; | presence "Present to enable BIDIR mode."; | |||
description | description | |||
"PIM-BIDIR configuration data."; | "PIM-BIDIR configuration data."; | |||
container df-election { | container df-election { | |||
if-feature intf-df-election; | if-feature "intf-df-election"; | |||
description | description | |||
"DF election attributes."; | "DF election attributes."; | |||
leaf offer-interval { | leaf offer-interval { | |||
type uint16; | type uint16; | |||
units milliseconds; | units "milliseconds"; | |||
default 100; | default "100"; | |||
description | description | |||
"Offer interval. Specifies the interval between | "Offer interval. Specifies the interval between | |||
repeated DF election messages."; | repeated DF election messages."; | |||
} | } | |||
leaf backoff-interval { | leaf backoff-interval { | |||
type uint16; | type uint16; | |||
units milliseconds; | units "milliseconds"; | |||
default 1000; | default "1000"; | |||
description | description | |||
"This is the interval that the acting DF waits between | "This is the interval that the acting DF waits between | |||
receiving a better DF Offer and sending the Pass message | receiving a better DF Offer and sending the Pass message | |||
to transfer DF responsibility."; | to transfer DF responsibility."; | |||
} | } | |||
leaf offer-multiplier { | leaf offer-multiplier { | |||
type uint8; | type uint8; | |||
default 3; | default "3"; | |||
description | description | |||
"This is the number of transmission attempts for | "This is the number of transmission attempts for | |||
DF election messages. | DF election messages. | |||
When a DF election Offer or Winner message fails to be | When a DF election Offer or Winner message fails to be | |||
received, the message is retransmitted. | received, the message is retransmitted. | |||
'offer-multiplier' sets the minimum number of DF | 'offer-multiplier' sets the minimum number of DF | |||
election messages that must fail to be received for DF | election messages that must fail to be received for DF | |||
election to fail. | election to fail. | |||
If a router receives from a neighbor a better offer than | If a router receives from a neighbor a better offer than | |||
its own, the router stops participating in the election | its own, the router stops participating in the election | |||
for a period of 'offer-multiplier' * 'offer-interval'. | for a period of 'offer-multiplier' * 'offer-interval'. | |||
Eventually, all routers except the best candidate stop | Eventually, all routers except the best candidate stop | |||
sending Offer messages."; | sending Offer messages."; | |||
} | } | |||
} // df-election | } // df-election | |||
} // bidir | } // bidir | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:address-family/pim-rp:rp/" | + "pim-base:pim/pim-base:address-family/pim-rp:rp/" | |||
+ "pim-rp:static-rp/pim-rp:ipv4-rp" { | + "pim-rp:static-rp/pim-rp:ipv4-rp" { | |||
description | description | |||
"PIM-BIDIR augmentation."; | "PIM-BIDIR augmentation."; | |||
uses static-rp-bidir-container; | uses static-rp-bidir-container; | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:address-family/pim-rp:rp/" | + "pim-base:pim/pim-base:address-family/pim-rp:rp/" | |||
+ "pim-rp:static-rp/pim-rp:ipv6-rp" { | + "pim-rp:static-rp/pim-rp:ipv6-rp" { | |||
description | description | |||
"PIM-BIDIR augmentation."; | "PIM-BIDIR augmentation."; | |||
uses static-rp-bidir-container; | uses static-rp-bidir-container; | |||
} // augment | } // augment | |||
/* | /* | |||
* Operational state data nodes | * Operational state data nodes | |||
*/ | */ | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:address-family/pim-rp:rp" { | + "pim-base:pim/pim-base:address-family/pim-rp:rp" { | |||
description | description | |||
"PIM-BIDIR augmentation to RP state data."; | "PIM-BIDIR augmentation to RP state data."; | |||
container bidir { | container bidir { | |||
config false; | config false; | |||
description | description | |||
"PIM-BIDIR state data."; | "PIM-BIDIR state data."; | |||
container df-election { | container df-election { | |||
description | description | |||
"DF election data."; | "DF election data."; | |||
list ipv4-rp { | list ipv4-rp { | |||
when "../../../../pim-base:address-family = 'rt:ipv4'" { | when "../../../../pim-base:address-family = 'rt:ipv4'" { | |||
description | description | |||
skipping to change at line 4271 ¶ | skipping to change at line 4211 ¶ | |||
description | description | |||
"A list of IPv6 RP addresses."; | "A list of IPv6 RP addresses."; | |||
leaf rp-address { | leaf rp-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"The address of the RP."; | "The address of the RP."; | |||
} | } | |||
leaf interface-name { | leaf interface-name { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"The address of the RP."; | "The name of the interface for which the DF state is | |||
being maintained."; | ||||
} | } | |||
leaf df-address { | leaf df-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description | description | |||
"DF address."; | "DF address."; | |||
} | } | |||
uses interface-df-election-state-attributes; | uses interface-df-election-state-attributes; | |||
} // ipv6-rp | } // ipv6-rp | |||
} // interface-df-election | } // interface-df-election | |||
} | } | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface/" | + "pim-base:pim/pim-base:interfaces/pim-base:interface/" | |||
+ "pim-base:address-family/pim-base:neighbors/" | + "pim-base:address-family/pim-base:neighbors/" | |||
+ "pim-base:ipv4-neighbor" { | + "pim-base:ipv4-neighbor" { | |||
description | description | |||
"PIM-BIDIR augmentation to the IPv4 neighbor state data."; | "PIM-BIDIR augmentation to the IPv4 neighbor state data."; | |||
leaf bidir-capable { | leaf bidir-capable { | |||
type boolean; | type boolean; | |||
description | description | |||
"'true' if the neighbor is using the Bidirectional Capable | "'true' if the neighbor is using the Bidirectional Capable | |||
option in the last Hello message."; | option in the last Hello message."; | |||
} | } | |||
} // augment | } // augment | |||
augment "/rt:routing/rt:control-plane-protocols/" | augment "/rt:routing/rt:control-plane-protocols/" | |||
+ "pim-base:pim/pim-base:interfaces/pim-base:interface/" | + "pim-base:pim/pim-base:interfaces/pim-base:interface/" | |||
+ "pim-base:address-family/pim-base:neighbors/" | + "pim-base:address-family/pim-base:neighbors/" | |||
+ "pim-base:ipv6-neighbor" { | + "pim-base:ipv6-neighbor" { | |||
description | description | |||
"PIM-BIDIR augmentation to the IPv6 neighbor state data."; | "PIM-BIDIR augmentation to the IPv6 neighbor state data."; | |||
leaf bidir-capable { | leaf bidir-capable { | |||
type boolean; | type boolean; | |||
description | description | |||
"'true' if the neighbor is using the Bidirectional Capable | "'true' if the neighbor is using the Bidirectional Capable | |||
option in the last Hello message."; | option in the last Hello message."; | |||
} | } | |||
} // augment | } // augment | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
7. Security Considerations | 7. Security Considerations | |||
The YANG modules specified in this document define a schema for data | The YANG modules specified in this document define a schema for data | |||
that is designed to be accessed via network management protocols such | that is designed to be accessed via network management protocols such | |||
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
is the secure transport layer, and the mandatory-to-implement secure | is the secure transport layer, and the mandatory-to-implement secure | |||
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
skipping to change at line 4344 ¶ | skipping to change at line 4286 ¶ | |||
effect on network operations. These are the subtrees and data nodes | effect on network operations. These are the subtrees and data nodes | |||
and their sensitivity/vulnerability: | and their sensitivity/vulnerability: | |||
pim-base:graceful-restart | pim-base:graceful-restart | |||
This subtree specifies the configuration for PIM graceful restart | This subtree specifies the configuration for PIM graceful restart | |||
at the global level on a device. Modifying the configuration can | at the global level on a device. Modifying the configuration can | |||
cause temporary interruption to the multicast routing during | cause temporary interruption to the multicast routing during | |||
restart. | restart. | |||
pim-base:address-family/pim-base:graceful-restart | pim-base:address-family/pim-base:graceful-restart | |||
This subtree specifies the per address family configuration for | This subtree specifies the per-address-family configuration for | |||
PIM graceful restart on a device. Modifying the configuration can | PIM graceful restart on a device. Modifying the configuration can | |||
cause temporary interruption to the multicast routing during | cause temporary interruption to the multicast routing during | |||
restart. | restart. | |||
pim-base:address-family/pim-rp:pim-rp:rp | pim-base:address-family/pim-rp:pim-rp:rp | |||
This subtree specifies the configuration for the PIM Rendezvous | This subtree specifies the configuration for the PIM Rendezvous | |||
Point (RP) on a device. Modifying the configuration can cause RP | Point (RP) on a device. Modifying the configuration can cause RP | |||
malfunctions. | malfunctions. | |||
pim-base:address-family/pim-sm:sm | pim-base:address-family/pim-sm:sm | |||
skipping to change at line 4366 ¶ | skipping to change at line 4308 ¶ | |||
(PIM-SM) on a device. Modifying the configuration can cause | (PIM-SM) on a device. Modifying the configuration can cause | |||
multicast traffic to be disabled or rerouted in PIM-SM. | multicast traffic to be disabled or rerouted in PIM-SM. | |||
pim-base:address-family/pim-dm:dm | pim-base:address-family/pim-dm:dm | |||
This subtree specifies the configuration for PIM Dense Mode | This subtree specifies the configuration for PIM Dense Mode | |||
(PIM-DM) on a device. Modifying the configuration can cause | (PIM-DM) on a device. Modifying the configuration can cause | |||
multicast traffic to be disabled or rerouted in PIM-DM. | multicast traffic to be disabled or rerouted in PIM-DM. | |||
pim-base:address-family/pim-bidir:bidir | pim-base:address-family/pim-bidir:bidir | |||
This subtree specifies the configuration for PIM Bidirectional | This subtree specifies the configuration for PIM Bidirectional | |||
Mode (PIM-BIDIR) on a device. Modifying the configuration can | Mode (BIDIR-PIM) on a device. Modifying the configuration can | |||
cause multicast traffic to be disabled or rerouted in PIM-BIDIR. | cause multicast traffic to be disabled or rerouted in BIDIR-PIM. | |||
pim-base:interfaces | pim-base:interfaces | |||
This subtree specifies the configuration for the PIM interfaces on | This subtree specifies the configuration for the PIM interfaces on | |||
a device. Modifying the configuration can cause the PIM protocol | a device. Modifying the configuration can cause the PIM protocol | |||
to get insufficient or incorrect information. | to get insufficient or incorrect information. | |||
These subtrees are all under "/rt:routing/rt:control-plane-protocols/ | These subtrees are all under "/rt:routing/rt:control-plane-protocols/ | |||
pim-base:pim". | pim-base:pim". | |||
Unauthorized access to any data node of these subtrees can adversely | Unauthorized access to any data node of these subtrees can adversely | |||
skipping to change at line 4999 ¶ | skipping to change at line 4941 ¶ | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
Acknowledgments | Acknowledgments | |||
The authors would like to thank Steve Baillargeon, Guo Feng, Robert | The authors would like to thank Steve Baillargeon, Feng Guo, Robert | |||
Kebler, Tanmoy Kundu, and Stig Venaas for their valuable | Kebler, Tanmoy Kundu, and Stig Venaas for their valuable | |||
contributions. | contributions. | |||
Authors' Addresses | Authors' Addresses | |||
Xufeng Liu | Xufeng Liu | |||
Volta Networks | Volta Networks | |||
Email: xufeng.liu.ietf@gmail.com | Email: xufeng.liu.ietf@gmail.com | |||
skipping to change at line 5042 ¶ | skipping to change at line 4984 ¶ | |||
Yisong Liu | Yisong Liu | |||
Huawei Technologies | Huawei Technologies | |||
Huawei Administration Building | Huawei Administration Building | |||
Longgang | Longgang | |||
Guangdong, 518129 | Guangdong, 518129 | |||
China | China | |||
Email: liuyisong@chinamobile.com | Email: liuyisong@chinamobile.com | |||
Fangwei Hu | Fangwei Hu | |||
ZTE Corporation | Individual Contributor | |||
889 Bibo Road | 86 Bohang Road | |||
Shanghai | Shanghai | |||
Shanghai, 201203 | Shanghai, 200126 | |||
China | China | |||
Email: hufwei@gmail.com | Email: hufwei@gmail.com | |||
End of changes. 218 change blocks. | ||||
267 lines changed or deleted | 208 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |