idnits 2.17.1 draft-ietf-pim-yang-17.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- == There are 1 instance of lines with multicast IPv4 addresses in the document. If these are generic example addresses, they should be changed to use the 233.252.0.x range defined in RFC 5771 Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 605 has weird spacing: '...address ine...' == Line 607 has weird spacing: '...address ine...' == Line 624 has weird spacing: '...-length uin...' == Line 688 has weird spacing: '...address ine...' == Line 693 has weird spacing: '...address ine...' == (15 more instances...) -- The document date (May 19, 2018) is 2141 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) ** Downref: Normative reference to an Informational RFC: RFC 3569 ** Downref: Normative reference to an Experimental RFC: RFC 3973 ** Obsolete normative reference: RFC 5246 (Obsoleted by RFC 8446) ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-17) exists of draft-ietf-bfd-yang-13 -- Obsolete informational reference (is this intentional?): RFC 5306 (Obsoleted by RFC 8706) Summary: 4 errors (**), 0 flaws (~~), 9 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 PIM Working Group X. Liu 3 Internet-Draft Volta Networks 4 Intended status: Standards Track P. McAllister 5 Expires: November 20, 2018 Metaswitch Networks 6 A. Peter 7 Individual 8 M. Sivakumar 9 Juniper Networks 10 Y. Liu 11 Huawei Technologies 12 F. Hu 13 ZTE Corporation 14 May 19, 2018 16 A YANG Data Model for Protocol Independent Multicast (PIM) 17 draft-ietf-pim-yang-17 19 Abstract 21 This document defines a YANG data model that can be used to configure 22 and manage devices supporting Protocol Independent Multicast (PIM). 23 The model covers the PIM protocol configuration, operational state, 24 and event notifications data. 26 Status of This Memo 28 This Internet-Draft is submitted in full conformance with the 29 provisions of BCP 78 and BCP 79. 31 Internet-Drafts are working documents of the Internet Engineering 32 Task Force (IETF). Note that other groups may also distribute 33 working documents as Internet-Drafts. The list of current Internet- 34 Drafts is at https://datatracker.ietf.org/drafts/current/. 36 Internet-Drafts are draft documents valid for a maximum of six months 37 and may be updated, replaced, or obsoleted by other documents at any 38 time. It is inappropriate to use Internet-Drafts as reference 39 material or to cite them other than as "work in progress." 41 This Internet-Draft will expire on November 20, 2018. 43 Copyright Notice 45 Copyright (c) 2018 IETF Trust and the persons identified as the 46 document authors. All rights reserved. 48 This document is subject to BCP 78 and the IETF Trust's Legal 49 Provisions Relating to IETF Documents 50 (https://trustee.ietf.org/license-info) in effect on the date of 51 publication of this document. Please review these documents 52 carefully, as they describe your rights and restrictions with respect 53 to this document. Code Components extracted from this document must 54 include Simplified BSD License text as described in Section 4.e of 55 the Trust Legal Provisions and are provided without warranty as 56 described in the Simplified BSD License. 58 Table of Contents 60 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 61 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 62 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5 63 1.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 5 64 2. Design of Data Model . . . . . . . . . . . . . . . . . . . . 6 65 2.1. Scope of Model . . . . . . . . . . . . . . . . . . . . . 6 66 2.2. Optional Capabilities . . . . . . . . . . . . . . . . . . 6 67 2.3. Datastore Applicability . . . . . . . . . . . . . . . . . 7 68 2.4. Module and Hierarchy Organization . . . . . . . . . . . . 7 69 2.5. Position of Address Family in Hierarchy . . . . . . . . . 7 70 3. Module Structure . . . . . . . . . . . . . . . . . . . . . . 8 71 3.1. PIM Base Module . . . . . . . . . . . . . . . . . . . . . 8 72 3.1.1. High-Level Structure . . . . . . . . . . . . . . . . 8 73 3.1.2. Global Data . . . . . . . . . . . . . . . . . . . . . 9 74 3.1.3. Per Address Family Data . . . . . . . . . . . . . . . 9 75 3.1.4. PIM Interface Modeling . . . . . . . . . . . . . . . 11 76 3.1.5. Neighbor Modeling . . . . . . . . . . . . . . . . . . 12 77 3.1.6. Notifications . . . . . . . . . . . . . . . . . . . . 12 78 3.2. PIM RP Module . . . . . . . . . . . . . . . . . . . . . . 13 79 3.2.1. Static RP . . . . . . . . . . . . . . . . . . . . . . 14 80 3.2.2. BSR . . . . . . . . . . . . . . . . . . . . . . . . . 14 81 3.2.3. RP State Data . . . . . . . . . . . . . . . . . . . . 15 82 3.2.4. RP to Group Mappings . . . . . . . . . . . . . . . . 16 83 3.2.5. Notifications . . . . . . . . . . . . . . . . . . . . 16 84 3.3. PIM-SM Module . . . . . . . . . . . . . . . . . . . . . . 17 85 3.4. PIM-DM Module . . . . . . . . . . . . . . . . . . . . . . 18 86 3.5. PIM-BIDIR Module . . . . . . . . . . . . . . . . . . . . 18 87 4. Complete Tree Structure . . . . . . . . . . . . . . . . . . . 20 88 4.1. PIM Base Module . . . . . . . . . . . . . . . . . . . . . 20 89 4.2. PIM RP Module . . . . . . . . . . . . . . . . . . . . . . 25 90 4.3. PIM-SM Module . . . . . . . . . . . . . . . . . . . . . . 26 91 4.4. PIM-DM Module . . . . . . . . . . . . . . . . . . . . . . 27 92 4.5. PIM-BIDIR Module . . . . . . . . . . . . . . . . . . . . 28 93 5. Relationship to the PIM-STD-MIB . . . . . . . . . . . . . . . 29 94 5.1. pimInterfaceTable . . . . . . . . . . . . . . . . . . . . 29 95 5.2. pimNeighborTable . . . . . . . . . . . . . . . . . . . . 30 96 5.3. pimStarGTable . . . . . . . . . . . . . . . . . . . . . . 31 97 5.4. pimSGTable . . . . . . . . . . . . . . . . . . . . . . . 32 98 5.5. pimSGRptTable . . . . . . . . . . . . . . . . . . . . . . 32 99 5.6. pimBidirDFElectionTable . . . . . . . . . . . . . . . . . 33 100 5.7. pimStaticRPTable . . . . . . . . . . . . . . . . . . . . 33 101 5.8. pimAnycastRPSetTable . . . . . . . . . . . . . . . . . . 34 102 5.9. pimGroupMappingTable . . . . . . . . . . . . . . . . . . 34 103 6. PIM YANG Modules . . . . . . . . . . . . . . . . . . . . . . 35 104 6.1. PIM base module . . . . . . . . . . . . . . . . . . . . . 35 105 6.2. PIM RP Module . . . . . . . . . . . . . . . . . . . . . . 58 106 6.3. PIM-SM Module . . . . . . . . . . . . . . . . . . . . . . 73 107 6.4. PIM-DM Module . . . . . . . . . . . . . . . . . . . . . . 79 108 6.5. PIM-BIDIR Module . . . . . . . . . . . . . . . . . . . . 81 109 7. Implementation Status . . . . . . . . . . . . . . . . . . . . 89 110 8. Security Considerations . . . . . . . . . . . . . . . . . . . 90 111 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 92 112 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 93 113 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 93 114 11.1. Normative References . . . . . . . . . . . . . . . . . . 93 115 11.2. Informative References . . . . . . . . . . . . . . . . . 96 116 Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 97 117 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 105 119 1. Introduction 121 YANG [RFC7950] is a data modeling language that was introduced to 122 model the configuration and operational state of a device managed 123 using network management protocols such as NETCONF [RFC6241] or 124 RESTCONF [RFC8040]. YANG is now also being used as a component of 125 other management interfaces, such as CLIs. 127 This document defines a YANG data model that can be used to configure 128 and manage devices supporting Protocol Independent Multicast (PIM). 129 This model supports the core PIM protocol, as well as many other 130 features described in Section 2.1. Non-core features are defined as 131 optional in the provided data model. 133 1.1. Terminology 135 The terminology for describing YANG data models is found in 136 [RFC7950]. 138 The following abbreviations are used in this document and the defined 139 model: 141 ASM: 142 Any-Source Multicast service model [RFC3569] [RFC4607]. 144 BFD: 145 Bidirectional Forwarding Detection [RFC5880]. 147 BSR: 148 Bootstrap Router [RFC5059]. 150 DF: 151 Designated Forwarder [RFC5015]. 153 DR: 154 Designated Router [RFC7761]. 156 IGMP: 157 Internet Group Management Protocol [RFC3376]. 159 MLD: 160 Multicast Listener Discovery [RFC3810]. 162 MSDP: 163 Multicast Source Discovery Protocol [RFC3618]. 165 mLDP: 166 Multipoint extensions for LDP [RFC6388]. 168 MRIB: 169 Multicast Routing Information Base [RFC3973] [RFC5015] [RFC7761]. 171 mVPN: 172 Multicast VPN. 174 PIM: 175 Protocol Independent Multicast. [RFC3973] [RFC5015] [RFC7761]. 177 PIM-BIDIR: 178 Protocol Independent Multicast - Bidirectional Mode [RFC5015]. 180 PIM-DM: 181 Protocol Independent Multicast - Dense Mode [RFC3973]. 183 PIM-SM: 184 Protocol Independent Multicast - Sparse Mode [RFC7761]. 186 RP: 187 Rendezvous Point. [RFC7761]. 189 RPA: 190 Rendezvous Point Address. [RFC5015]. 192 RPF: 193 Reverse Path Forwarding. [RFC3973] [RFC5015] [RFC7761]. 195 RPT: 196 Rendezvous-Point Tree. [RFC7761]. 198 SPT: 199 Shortest Path Tree. [RFC7761]. 201 SSM: 202 Source-Specific Multicast service model [RFC3569] [RFC4607]. 204 VRF: 205 Virtual Routing and Forwarding. 207 1.2. Tree Diagrams 209 Tree diagrams used in this document follow the notation defined in 210 [RFC8340]. 212 In addition, the following notation is used as a placeholder at the 213 location of the name of a tree node, to represent a section of nodes: 215 217 1.3. Prefixes in Data Node Names 219 In this document, names of data nodes, actions, and other data model 220 objects are often used without a prefix, as long as it is clear from 221 the context in which YANG module each name is defined. Otherwise, 222 names are prefixed using the standard prefix associated with the 223 corresponding YANG module, as shown in Table 1. 225 +-----------+--------------------+---------------------+ 226 | Prefix | YANG module | Reference | 227 +-----------+--------------------+---------------------+ 228 | yang | ietf-yang-types | [RFC6991] | 229 | inet | ietf-inet-types | [RFC6991] | 230 | if | ietf-interfaces | [RFC8343] | 231 | rt | ietf-routing | [RFC8349] | 232 | rt-types | ietf-routing-types | [RFC8294] | 233 | bfd-types | ietf-bfd-types | [I-D.ietf-bfd-yang] | 234 +-----------+--------------------+---------------------+ 236 Table 1: Prefixes and Corresponding YANG Modules 238 2. Design of Data Model 240 2.1. Scope of Model 242 The model covers PIM Sparse Mode [RFC7761], including the Source- 243 Specific subset [RFC3569] [RFC4607], Dense Mode [RFC3973], and Bi- 244 directional PIM [RFC5015]. 246 The PIM extensions represented in the model include BSR [RFC5059] and 247 Anycast-RP [RFC4610]. 249 The data model can be used to configure and manage these protocol 250 features. The operational state data and statistics can be retrieved 251 by this model. The protocol specific notifications are also defined 252 in the model. 254 This model does not cover other multicast protocols such as IGMP/MLD, 255 MSDP, mVPN, or mLDP in-band signalling. It does not cover any 256 configuration required to generate the MRIB. These will be specified 257 in separate documents. 259 2.2. Optional Capabilities 261 This model is designed to represent the capabilities of devices 262 supporting PIM with various specifications, including some with basic 263 subsets of the PIM protocol. The main design goals of this document 264 are that any major now-existing implementation may be said to support 265 the base model, and that the configuration of all implementations 266 meeting the specification is easy to express through some combination 267 of the features in the base model and simple vendor augmentations. 269 There is also value in widely-supported features being standardized, 270 to save work for individual vendors, and so that mapping between 271 different vendors' configuration is not needlessly complicated. 272 Therefore, these modules declare a number of features representing 273 capabilities that not all deployed devices support. 275 The extensive use of feature declarations should also substantially 276 simplify the capability negotiation process for a vendor's PIM 277 implementation. 279 On the other hand, operational state parameters are not so widely 280 designated as features, as there are many cases where the defaulting 281 of an operational state parameter would not cause any harm to the 282 system, and it is much more likely that an implementation without 283 native support for a piece of operational state would be able to 284 derive a suitable value for a state variable that is not natively 285 supported. 287 For the same reason, wide constant ranges (for example, timer maxima 288 and minima) are used in the model. It is expected that vendors will 289 augment the model with any specific extensions and restrictions 290 needed to adapt it to their vendor-specific implementation. 292 2.3. Datastore Applicability 294 This model conforms to the Network Management Datastore Architecture 295 (NMDA) [RFC8342]. The operational state data is combined with the 296 associated configuration data in the same hierarchy 297 [I-D.ietf-netmod-rfc6087bis]. 299 2.4. Module and Hierarchy Organization 301 This model defines several separate modules for modelling PIM 302 configuration, defined below. Again, this separation makes it easier 303 to express the specific capabilities of a PIM device. The module 304 organization, along with the usage of the YANG extensible features 305 such as identity, allows the model to be easily augmented for new 306 capabilities. 308 The hierarchy of PIM configuration is designed so that objects that 309 are only relevant for one situation or feature are collected in a 310 container for that feature. For example, the configuration for PIM- 311 SM that is not relevant for an SSM-only implementation is collected 312 in an ASM container. 314 Where fields are not genuinely essential to protocol operation, they 315 are marked as optional. Some fields are essential but have a default 316 specified, so they need not be explicitly configured. 318 This module structure also applies, where applicable, to the 319 operational state and notifications of the model. 321 2.5. Position of Address Family in Hierarchy 323 This document contains address-family as a node in the hierarchy 324 multiple times: both under the interface list, and under the PIM 325 instance. 327 The reasoning for this is to make it easier for implementations in 328 which configuration options are not supported for specific address 329 families. 331 For these implementations, the restriction that interface 332 configuration must be address-family independent may either be 333 expressed as a vendor augmentation of an address-family-independent 334 parameter above the address-family level, or by a constraint on the 335 base model objects of a form similar to: 337 deviation "/rt:routing/rt:control-plane-protocols/" 338 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 339 + "pim-base:address-family" { 341 deviate add { 342 must "(address-family = 'rt:ipv4' and dr-priority = " 343 + "../address-family[address-family = 'rt:ipv6']/" 344 + "dr-priority) or " 345 + "(address-family = 'rt:ipv6' and dr-priority = " 346 + "../address-family[address-family = 'rt:ipv4']/" 347 + "dr-priority)" { 348 error-message 349 "Error: IPv6 DR priority must match IPv4 DR priority."; 350 error-app-tag "dr-priority-mismatch"; 351 } 352 } 353 } 355 3. Module Structure 357 3.1. PIM Base Module 359 The PIM base module defines the base framework not specific to any 360 PIM mode, and is imported by the other modules. The base module by 361 itself does not provide sufficient data for any PIM mode to operate. 362 Other mode specific and feature specific modules need to be 363 implemented in addition to this module, depending on the feature set 364 required by the implementation. 366 This model augments the core routing data model "ietf-routing" 367 specified in [RFC8349]. The PIM base model augments "/rt:routing/ 368 rt:control-plane-protocols" as opposed to augmenting "/rt:routing/ 369 rt:control-plane-protocols/rt:control-plane-protocol", as the latter 370 would allow multiple protocol instances, while the PIM protocol is 371 designed to be enabled or disabled as a single protocol instance on a 372 network instance or a logical network element. 374 3.1.1. High-Level Structure 376 The high-level structure of the model is shown below: 378 module: ietf-pim-base 379 augment /rt:routing/rt:control-plane-protocols: 380 +--rw pim! 381 +--rw 382 +--ro 383 +--rw address-family* [address-family] 384 | +--rw address-family identityref 385 | +--rw 386 | +--ro 387 +--rw interfaces 388 +--rw interface* [name] 389 +--rw name if:interface-ref 390 +--rw address-family* [address-family] 391 +--rw address-family identityref 392 +--rw 393 +--ro 394 +--ro neighbors 395 +--ro ipv4-neighbor* [address] 396 | +--ro address inet:ipv4-address 397 | +--ro 398 +--ro ipv6-neighbor* [address] 399 +--ro address inet:ipv6-address 400 +--ro 402 The presence of the top-level container "pim" enables the PIM 403 protocols. 405 3.1.2. Global Data 407 The global configuration and operational state data covers the 408 support for graceful restart in the PIM base model. Additional 409 features can be added by augmentation if required by an 410 implementation. 412 3.1.3. Per Address Family Data 414 The support for per address family data is shown below: 416 +--rw pim! 417 +--rw address-family* [address-family] 418 | +--rw address-family identityref 419 | +--rw graceful-restart 420 ... 421 | +--ro statistics 422 | | +--ro discontinuity-time? yang:date-and-time 423 | | +--ro error 424 | | | +--ro assert? yang:counter32 425 ... 426 | | +--ro queue 427 | | | +--ro size? uint32 428 | | | +--ro overflow? yang:counter32 429 | | +--ro received 430 | | | +--ro assert? yang:counter32 431 ... 432 | | +--ro sent 433 | | +--ro assert? yang:counter32 434 ... 435 | +--ro topology-tree-info 436 | | +--ro ipv4-route* [group source-address is-rpt] 437 | | | +--ro group 438 | | | | rt-types:ipv4-multicast-group-address 439 | | | +--ro source-address 440 | | | | rt-types:ipv4-multicast-source-address 441 | | | +--ro is-rpt boolean 442 | | +--ro ipv6-route* [group source-address is-rpt] 443 | | +--ro group 444 | | | rt-types:ipv6-multicast-group-address 445 | | +--ro source-address 446 | | | rt-types:ipv6-multicast-source-address 447 | | +--ro is-rpt boolean 448 ... 449 | | +--ro incoming-interface? if:interface-ref 450 ... 451 | | +--ro outgoing-interface* [name] 452 | | +--ro name if:interface-ref 453 | | +--ro expiration? rt-types:timer-value-seconds16 454 | | +--ro up-time? rt-types:timeticks64 455 | | +--ro jp-state? enumeration 457 This is the location that most of the PIM RP module (ietf-pim-rp) 458 augments. Each of the mode specific modules also augments this 459 schema tree. 461 3.1.4. PIM Interface Modeling 463 The configuration and operational state data of PIM interfaces is 464 modeled as below: 466 +--rw pim! 467 +--rw interfaces 468 +--rw interface* [name] 469 +--rw name if:interface-ref 470 +--rw address-family* [address-family] 471 +--rw address-family identityref 472 +--rw bfd {bfd}? 473 ... 474 +--rw dr-priority? uint32 {intf-dr-priority}? 475 +--rw hello-interval? rt-types:timer-value-seconds16 476 | {intf-hello-interval}? 477 +--rw (hello-holdtime-or-multiplier)? 478 | +--:(holdtime) {intf-hello-holdtime}? 479 | | +--rw hello-holdtime? 480 | | rt-types:timer-value-seconds16 481 | +--:(multiplier) {intf-hello-multiplier}? 482 | +--rw hello-multiplier? 483 | rt-types:timer-multiplier 484 +--rw jp-interval? rt-types:timer-value-seconds16 485 | {intf-jp-interval}? 486 +--rw (jp-holdtime-or-multiplier)? 487 | +--:(holdtime) {intf-jp-holdtime}? 488 | | +--rw jp-holdtime? 489 | | rt-types:timer-value-seconds16 490 | +--:(multiplier) {intf-jp-multiplier}? 491 | +--rw jp-multiplier? 492 | rt-types:timer-multiplier 493 +--rw override-interval? uint16 494 | {intf-override-interval}? 495 +--rw propagation-delay? uint16 496 | {intf-propagation-delay}? 497 +--ro oper-status? enumeration 498 +--ro gen-id? uint32 499 +--ro hello-expiration? rt-types:timer-value-seconds16 500 +--ro ipv4 501 | +--ro address* inet:ipv4-address 502 | +--ro dr-address? inet:ipv4-address 503 +--ro ipv6 504 | +--ro address* inet:ipv6-address 505 | +--ro dr-address? inet:ipv6-address 507 The support for bfd is achieved by using a grouping provided by an 508 external module ietf-bfd-types, defined in [I-D.ietf-bfd-yang]. 510 3.1.5. Neighbor Modeling 512 For each PIM interface, there can be a list of neighbors, which 513 contain operational state data. To model such data, the following 514 structure is specified: 516 +--rw pim! 517 +--rw interfaces 518 +--rw interface* [name] 519 +--rw address-family* [address-family] 520 +--ro neighbors 521 +--ro ipv4-neighbor* [address] 522 | +--ro address inet:ipv4-address 523 | +--ro bfd-status? enumeration 524 | +--ro expiration? 525 | | rt-types:timer-value-seconds16 526 | +--ro dr-priority? uint32 527 | +--ro gen-id? uint32 528 | +--ro lan-prune-delay 529 | | +--ro present? boolean 530 | | +--ro override-interval? uint16 531 | | +--ro propagation-delay? uint16 532 | | +--ro t-bit? boolean 533 | +--ro up-time? rt-types:timeticks64 534 +--ro ipv6-neighbor* [address] 535 +--ro address inet:ipv6-address 536 +--ro bfd-status? enumeration 537 +--ro expiration? 538 | rt-types:timer-value-seconds16 539 +--ro dr-priority? uint32 540 +--ro gen-id? uint32 541 +--ro lan-prune-delay 542 | +--ro present? boolean 543 | +--ro override-interval? uint16 544 | +--ro propagation-delay? uint16 545 | +--ro t-bit? boolean 546 +--ro up-time? rt-types:timeticks64 548 3.1.6. Notifications 550 The PIM base module also defines the notifications for PIM interface 551 and neighbor events, as shown below: 553 notifications: 554 +---n pim-neighbor-event 555 | +--ro event-type? neighbor-event-type 556 | +--ro interface-ref? leafref 557 | +--ro interface-af-ref? leafref 558 | +--ro neighbor-ipv4-ref? leafref 559 | +--ro neighbor-ipv6-ref? leafref 560 | +--ro up-time? rt-types:timeticks64 561 +---n pim-interface-event 562 +--ro event-type? interface-event-type 563 +--ro interface-ref? leafref 564 +--ro ipv4 565 | +--ro address* inet:ipv4-address 566 | +--ro dr-address? inet:ipv4-address 567 +--ro ipv6 568 +--ro address* inet:ipv6-address 569 +--ro dr-address? inet:ipv6-address 571 3.2. PIM RP Module 573 The PIM RP module augments the PIM base module to define the 574 configuration and operational state information scoped to RP related 575 features: 577 module: ietf-pim-rp 578 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 579 /pim-base:address-family: 580 +--rw rp 581 +--rw static-rp 582 ... 583 +--rw bsr {bsr}? 584 ... 585 +--ro rp-list 586 ... 587 +--ro rp-mappings 588 ... 590 This module is shared by the PIM-SM mode and the PIM-BIDIR mode, but 591 not by the PIM-DM mode. PIM-SM module and PIM-BIDIR module augment 592 this module to cover mode specific data. 594 The following sections describe the features and capabilities covered 595 in this module. 597 3.2.1. Static RP 599 Static RPs can be configured by using the following portion of the 600 module: 602 +--rw rp 603 +--rw static-rp 604 | +--rw ipv4-rp* [rp-address] 605 | | +--rw rp-address inet:ipv4-address 606 | +--rw ipv6-rp* [rp-address] 607 | +--rw rp-address inet:ipv6-address 609 3.2.2. BSR 611 The support for BSR includes both configuration data and operational 612 state data, as shown below: 614 +--rw rp 615 +--rw bsr {bsr}? 616 | +--rw bsr-candidate! 617 | | +--rw (interface-or-address)? 618 | | | +--:(interface) {candidate-interface}? 619 | | | | +--rw interface if:interface-ref 620 | | | +--:(ipv4-address) {candidate-ipv4}? 621 | | | | +--rw ipv4-address inet:ipv4-address 622 | | | +--:(ipv6-address) {candidate-ipv6}? 623 | | | +--rw ipv6-address inet:ipv6-address 624 | | +--rw hash-mask-length uint8 625 | | +--rw priority? uint8 626 | +--rw rp-candidate 627 | | +--rw interface* [name] {candidate-interface}? 628 | | | +--rw name if:interface-ref 629 | | | +--rw policy-name? string 630 | | | +--rw mode? identityref 631 | | +--rw ipv4-address* [address] {candidate-ipv4}? 632 | | | +--rw address inet:ipv4-address 633 | | | +--rw policy-name? string 634 | | | +--rw mode? identityref 635 | | +--rw ipv6-address* [address] {candidate-ipv6}? 636 | | +--rw address inet:ipv6-address 637 | | +--rw policy-name? string 638 | | +--rw mode? identityref 639 | +--ro bsr 640 | | +--ro address? inet:ip-address 641 | | +--ro hash-mask-length? uint8 642 | | +--ro priority? uint8 643 | | +--ro up-time? rt-types:timeticks64 644 | +--ro (election-state)? {bsr-election-state}? 645 | | +--:(candidate) 646 | | | +--ro candidate-bsr-state? enumeration 647 | | +--:(non-candidate) 648 | | +--ro non-candidate-bsr-state? enumeration 649 | +--ro bsr-next-bootstrap? uint16 650 | +--ro rp 651 | | +--ro rp-address? inet:ip-address 652 | | +--ro policy-name? string 653 | | +--ro up-time? rt-types:timeticks64 654 | +--ro rp-candidate-next-advertisement? uint16 656 3.2.3. RP State Data 658 This portion of the model provides the operational state information 659 for all RPs on the router, including the statically configured RPs 660 and the BSR elected RPs. 662 +--rw rp 663 +--ro rp-list 664 | +--ro ipv4-rp* [rp-address mode] 665 | | +--ro rp-address inet:ipv4-address 666 | | +--ro mode identityref 667 | | +--ro info-source-address? inet:ipv4-address 668 | | +--ro info-source-type? identityref 669 | | +--ro up-time? rt-types:timeticks64 670 | | +--ro expiration? rt-types:timer-value-seconds16 671 | +--ro ipv6-rp* [rp-address mode] 672 | +--ro rp-address inet:ipv6-address 673 | +--ro mode identityref 674 | +--ro info-source-address? inet:ipv6-address 675 | +--ro info-source-type? identityref 676 | +--ro up-time? rt-types:timeticks64 677 | +--ro expiration? rt-types:timer-value-seconds16 679 3.2.4. RP to Group Mappings 681 The operational state data of the mappings between RPs and multicast 682 groups is modeled as follows: 684 +--rw rp 685 +--ro rp-mappings 686 +--ro ipv4-rp* [group rp-address] 687 | +--ro group inet:ipv4-prefix 688 | +--ro rp-address inet:ipv4-address 689 | +--ro up-time? rt-types:timeticks64 690 | +--ro expiration? rt-types:timer-value-seconds16 691 +--ro ipv6-rp* [group rp-address] 692 +--ro group inet:ipv6-prefix 693 +--ro rp-address inet:ipv6-address 694 +--ro up-time? rt-types:timeticks64 695 +--ro expiration? rt-types:timer-value-seconds16 697 3.2.5. Notifications 699 The PIM RP module also defines the notifications for RP related 700 events, as shown below: 702 notifications: 703 +---n pim-rp-event 704 +--ro event-type? rp-event-type 705 +--ro instance-af-ref? leafref 706 +--ro group? rt-types:ip-multicast-group-address 707 +--ro rp-address? inet:ip-address 708 +--ro is-rpt? boolean 709 +--ro mode? pim-base:pim-mode 710 +--ro message-origin? inet:ip-address 712 3.3. PIM-SM Module 714 The PIM-SM module covers Sparse Mode modeling, including PIM-ASM and 715 PIM-SSM. This module has dependencies on PIM base module and PIM RP 716 module, both of which are augmented by this module. 718 The augmentation to the address-family branch of the PIM base module 719 is shown below: 721 module: ietf-pim-sm 722 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 723 /pim-base:address-family: 724 +--rw sm 725 +--rw asm 726 | +--rw anycast-rp! 727 | | +--rw ipv4-anycast-rp* [anycast-address rp-address] 728 | | | +--rw anycast-address inet:ipv4-address 729 | | | +--rw rp-address inet:ipv4-address 730 | | +--rw ipv6-anycast-rp* [anycast-address rp-address] 731 | | +--rw anycast-address inet:ipv6-address 732 | | +--rw rp-address inet:ipv6-address 733 | +--rw spt-switch 734 | +--rw infinity! {spt-switch-infinity}? 735 | +--rw policy-name? string {spt-switch-policy}? 736 +--rw ssm! 737 +--rw range-policy? string 739 To support SM mode on an interface, this module augments the 740 interface branch of the PIM base module, as follows: 742 module: ietf-pim-sm 743 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 744 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 745 +--rw sm! 746 +--rw passive? empty 748 This module also augments the PIM RP module to allow an RP to be 749 configured in the PIM-SM mode: 751 module: ietf-pim-sm 752 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 753 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: 754 +--rw sm! 755 +--rw policy-name? string 756 +--rw override? boolean {static-rp-override}? 757 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 758 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: 759 +--rw sm! 760 +--rw policy-name? string 761 +--rw override? boolean {static-rp-override}? 763 3.4. PIM-DM Module 765 The PIM-DM module covers Dense Mode modeling. This module augments 766 the PIM base module, but it has no dependency on the PIM RP module. 768 module: ietf-pim-dm 769 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 770 /pim-base:address-family: 771 +--rw dm! 772 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 773 /pim-base:interfaces/pim-base:interface 774 /pim-base:address-family: 775 +--rw dm! 777 3.5. PIM-BIDIR Module 779 The PIM-BIDIR module covers Bidirectional PIM modeling. Like PIM-SM, 780 this module augments both PIM base module and PIM RP module. 782 The followings are the augmentations to the PIM base module, on the 783 address-family, the interface, and the neighbor branches: 785 module: ietf-pim-bidir 786 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 787 /pim-base:address-family: 788 +--rw bidir! 790 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 791 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 792 +--rw bidir! 793 +--rw df-election {intf-df-election}? 794 +--rw offer-interval? uint16 795 +--rw backoff-interval? uint16 796 +--rw offer-multiplier? uint8 798 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 799 /pim-base:interfaces/pim-base:interface/pim-base:address-family 800 /pim-base:neighbors/pim-base:ipv4-neighbor: 801 +--ro bidir-capable? boolean 803 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 804 /pim-base:interfaces/pim-base:interface/pim-base:address-family 805 /pim-base:neighbors/pim-base:ipv6-neighbor: 806 +--ro bidir-capable? boolean 808 This module also augments the PIM RP module to extend the 809 capabilities of RP for the PIM-BIDIR mode: 811 module: ietf-pim-bidir 812 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 813 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: 814 +--rw bidir! 815 +--rw policy-name? string 816 +--rw override? boolean {static-rp-override}? 818 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 819 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: 820 +--rw bidir! 821 +--rw policy-name? string 822 +--rw override? boolean {static-rp-override}? 824 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 825 /pim-base:address-family/pim-rp:rp: 826 +--ro bidir 827 +--ro df-election 828 | +--ro ipv4-rp* [rp-address] 829 | | +--ro rp-address inet:ipv4-address 830 | +--ro ipv6-rp* [rp-address] 831 | +--ro rp-address inet:ipv6-address 832 +--ro interface-df-election 833 +--ro ipv4-rp* [rp-address interface-name] 834 | +--ro rp-address inet:ipv4-address 835 | +--ro interface-name if:interface-ref 836 | +--ro df-address? inet:ipv4-address 837 | +--ro interface-state? identityref 838 | +--ro up-time? rt-types:timeticks64 839 | +--ro winner-metric? uint32 840 | +--ro winner-metric-preference? uint32 841 +--ro ipv6-rp* [rp-address interface-name] 842 +--ro rp-address inet:ipv6-address 843 +--ro interface-name if:interface-ref 844 +--ro df-address? inet:ipv6-address 845 +--ro interface-state? identityref 846 +--ro up-time? rt-types:timeticks64 847 +--ro winner-metric? uint32 848 +--ro winner-metric-preference? uint32 850 4. Complete Tree Structure 852 4.1. PIM Base Module 854 module: ietf-pim-base 855 augment /rt:routing/rt:control-plane-protocols: 856 +--rw pim! 857 +--rw graceful-restart 858 | +--rw enabled? boolean 859 | +--rw duration? uint16 860 +--rw address-family* [address-family] 861 | +--rw address-family identityref 862 | +--rw graceful-restart 863 | | +--rw enabled? boolean 864 | | +--rw duration? uint16 865 | +--ro statistics 866 | | +--ro discontinuity-time? yang:date-and-time 867 | | +--ro error 868 | | | +--ro assert? yang:counter64 869 | | | +--ro bsr? yang:counter64 870 | | | +--ro candidate-rp-advertisement? yang:counter64 871 | | | +--ro df-election? yang:counter64 872 | | | +--ro graft? yang:counter64 873 | | | +--ro graft-ack? yang:counter64 874 | | | +--ro hello? yang:counter64 875 | | | +--ro join-prune? yang:counter64 876 | | | +--ro register? yang:counter64 877 | | | +--ro register-stop? yang:counter64 878 | | | +--ro state-refresh? yang:counter64 879 | | | +--ro checksum? yang:counter64 880 | | | +--ro format? yang:counter64 881 | | +--ro queue 882 | | | +--ro size? uint32 883 | | | +--ro overflow? yang:counter32 884 | | +--ro received 885 | | | +--ro assert? yang:counter64 886 | | | +--ro bsr? yang:counter64 887 | | | +--ro candidate-rp-advertisement? yang:counter64 888 | | | +--ro df-election? yang:counter64 889 | | | +--ro graft? yang:counter64 890 | | | +--ro graft-ack? yang:counter64 891 | | | +--ro hello? yang:counter64 892 | | | +--ro join-prune? yang:counter64 893 | | | +--ro register? yang:counter64 894 | | | +--ro register-stop? yang:counter64 895 | | | +--ro state-refresh? yang:counter64 896 | | +--ro sent 897 | | +--ro assert? yang:counter64 898 | | +--ro bsr? yang:counter64 899 | | +--ro candidate-rp-advertisement? yang:counter64 900 | | +--ro df-election? yang:counter64 901 | | +--ro graft? yang:counter64 902 | | +--ro graft-ack? yang:counter64 903 | | +--ro hello? yang:counter64 904 | | +--ro join-prune? yang:counter64 905 | | +--ro register? yang:counter64 906 | | +--ro register-stop? yang:counter64 907 | | +--ro state-refresh? yang:counter64 908 | +--ro topology-tree-info 909 | +--ro ipv4-route* [group source-address is-rpt] 910 | | +--ro group 911 | | | rt-types:ipv4-multicast-group-address 912 | | +--ro source-address 913 | | | rt-types:ipv4-multicast-source-address 914 | | +--ro is-rpt boolean 915 | | +--ro expiration? 916 | | | rt-types:timer-value-seconds16 917 | | +--ro incoming-interface? if:interface-ref 918 | | +--ro is-spt? boolean 919 | | +--ro mode? identityref 920 | | +--ro msdp-learned? boolean 921 | | +--ro rp-address? inet:ip-address 922 | | +--ro rpf-neighbor? inet:ip-address 923 | | +--ro up-time? rt-types:timeticks64 924 | | +--ro outgoing-interface* [name] 925 | | +--ro name if:interface-ref 926 | | +--ro expiration? rt-types:timer-value-seconds16 927 | | +--ro up-time? rt-types:timeticks64 928 | | +--ro jp-state? enumeration 929 | +--ro ipv6-route* [group source-address is-rpt] 930 | +--ro group 931 | | rt-types:ipv6-multicast-group-address 932 | +--ro source-address 933 | | rt-types:ipv6-multicast-source-address 934 | +--ro is-rpt boolean 935 | +--ro expiration? 936 | | rt-types:timer-value-seconds16 937 | +--ro incoming-interface? if:interface-ref 938 | +--ro is-spt? boolean 939 | +--ro mode? identityref 940 | +--ro msdp-learned? boolean 941 | +--ro rp-address? inet:ip-address 942 | +--ro rpf-neighbor? inet:ip-address 943 | +--ro up-time? rt-types:timeticks64 944 | +--ro outgoing-interface* [name] 945 | +--ro name if:interface-ref 946 | +--ro expiration? rt-types:timer-value-seconds16 947 | +--ro up-time? rt-types:timeticks64 948 | +--ro jp-state? enumeration 949 +--rw interfaces 950 +--rw interface* [name] 951 +--rw name if:interface-ref 952 +--rw address-family* [address-family] 953 +--rw address-family identityref 954 +--rw bfd {bfd}? 955 | +--rw enable? boolean 956 | +--rw local-multiplier? multiplier 957 | +--rw (interval-config-type)? 958 | +--:(tx-rx-intervals) 959 | | +--rw desired-min-tx-interval uint32 960 | | +--rw required-min-rx-interval uint32 961 | +--:(single-interval) 962 | +--rw min-interval uint32 963 +--rw dr-priority? uint32 964 | {intf-dr-priority}? 965 +--rw hello-interval? 966 | rt-types:timer-value-seconds16 967 | {intf-hello-interval}? 968 +--rw (hello-holdtime-or-multiplier)? 969 | +--:(holdtime) {intf-hello-holdtime}? 970 | | +--rw hello-holdtime? 971 | | rt-types:timer-value-seconds16 972 | +--:(multiplier) {intf-hello-multiplier}? 973 | +--rw hello-multiplier? 974 | rt-types:timer-multiplier 975 +--rw jp-interval? 976 | rt-types:timer-value-seconds16 977 | {intf-jp-interval}? 978 +--rw (jp-holdtime-or-multiplier)? 979 | +--:(holdtime) {intf-jp-holdtime}? 980 | | +--rw jp-holdtime? 981 | | rt-types:timer-value-seconds16 982 | +--:(multiplier) {intf-jp-multiplier}? 983 | +--rw jp-multiplier? 984 | rt-types:timer-multiplier 985 +--rw override-interval? uint16 986 | {intf-override-interval}? 987 +--rw propagation-delay? uint16 988 | {intf-propagation-delay}? 989 +--ro oper-status? enumeration 990 +--ro gen-id? uint32 991 +--ro hello-expiration? 992 | rt-types:timer-value-seconds16 993 +--ro ipv4 994 | +--ro address* inet:ipv4-address 995 | +--ro dr-address? inet:ipv4-address 996 +--ro ipv6 997 | +--ro address* inet:ipv6-address 998 | +--ro dr-address? inet:ipv6-address 999 +--ro neighbors 1000 +--ro ipv4-neighbor* [address] 1001 | +--ro address inet:ipv4-address 1002 | +--ro bfd-state? bfd-types:state 1003 | +--ro expiration? 1004 | | rt-types:timer-value-seconds16 1005 | +--ro dr-priority? uint32 1006 | +--ro gen-id? uint32 1007 | +--ro lan-prune-delay 1008 | | +--ro present? boolean 1009 | | +--ro override-interval? uint16 1010 | | +--ro propagation-delay? uint16 1011 | | +--ro t-bit? boolean 1012 | +--ro up-time? rt-types:timeticks64 1013 +--ro ipv6-neighbor* [address] 1014 +--ro address inet:ipv6-address 1015 +--ro bfd-state? bfd-types:state 1016 +--ro expiration? 1017 | rt-types:timer-value-seconds16 1018 +--ro dr-priority? uint32 1019 +--ro gen-id? uint32 1020 +--ro lan-prune-delay 1021 | +--ro present? boolean 1022 | +--ro override-interval? uint16 1023 | +--ro propagation-delay? uint16 1024 | +--ro t-bit? boolean 1025 +--ro up-time? rt-types:timeticks64 1027 notifications: 1028 +---n pim-neighbor-event 1029 | +--ro event-type? neighbor-event-type 1030 | +--ro interface-ref? leafref 1031 | +--ro interface-af-ref? leafref 1032 | +--ro neighbor-ipv4-ref? leafref 1033 | +--ro neighbor-ipv6-ref? leafref 1034 | +--ro up-time? rt-types:timeticks64 1035 +---n pim-interface-event 1036 +--ro event-type? interface-event-type 1037 +--ro interface-ref? leafref 1038 +--ro ipv4 1039 | +--ro address* inet:ipv4-address 1040 | +--ro dr-address? inet:ipv4-address 1041 +--ro ipv6 1042 +--ro address* inet:ipv6-address 1043 +--ro dr-address? inet:ipv6-address 1045 4.2. PIM RP Module 1047 module: ietf-pim-rp 1048 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1049 /pim-base:address-family: 1050 +--rw rp 1051 +--rw static-rp 1052 | +--rw ipv4-rp* [rp-address] 1053 | | +--rw rp-address inet:ipv4-address 1054 | +--rw ipv6-rp* [rp-address] 1055 | +--rw rp-address inet:ipv6-address 1056 +--rw bsr {bsr}? 1057 | +--rw bsr-candidate! 1058 | | +--rw (interface-or-address)? 1059 | | | +--:(interface) {candidate-interface}? 1060 | | | | +--rw interface if:interface-ref 1061 | | | +--:(ipv4-address) {candidate-ipv4}? 1062 | | | | +--rw ipv4-address inet:ipv4-address 1063 | | | +--:(ipv6-address) {candidate-ipv6}? 1064 | | | +--rw ipv6-address inet:ipv6-address 1065 | | +--rw hash-mask-length uint8 1066 | | +--rw priority? uint8 1067 | +--rw rp-candidate 1068 | | +--rw interface* [name] {candidate-interface}? 1069 | | | +--rw name if:interface-ref 1070 | | | +--rw policy-name? string 1071 | | | +--rw mode? identityref 1072 | | +--rw ipv4-address* [address] {candidate-ipv4}? 1073 | | | +--rw address inet:ipv4-address 1074 | | | +--rw policy-name? string 1075 | | | +--rw mode? identityref 1076 | | +--rw ipv6-address* [address] {candidate-ipv6}? 1077 | | +--rw address inet:ipv6-address 1078 | | +--rw policy-name? string 1079 | | +--rw mode? identityref 1080 | +--ro bsr 1081 | | +--ro address? inet:ip-address 1082 | | +--ro hash-mask-length? uint8 1083 | | +--ro priority? uint8 1084 | | +--ro up-time? rt-types:timeticks64 1085 | +--ro (election-state)? {bsr-election-state}? 1086 | | +--:(candidate) 1087 | | | +--ro candidate-bsr-state? enumeration 1088 | | +--:(non-candidate) 1089 | | +--ro non-candidate-bsr-state? enumeration 1090 | +--ro bsr-next-bootstrap? uint16 1091 | +--ro rp 1092 | | +--ro rp-address? inet:ip-address 1093 | | +--ro policy-name? string 1094 | | +--ro up-time? rt-types:timeticks64 1095 | +--ro rp-candidate-next-advertisement? uint16 1096 +--ro rp-list 1097 | +--ro ipv4-rp* [rp-address mode] 1098 | | +--ro rp-address inet:ipv4-address 1099 | | +--ro mode identityref 1100 | | +--ro info-source-address? inet:ipv4-address 1101 | | +--ro info-source-type? identityref 1102 | | +--ro up-time? rt-types:timeticks64 1103 | | +--ro expiration? 1104 | | rt-types:timer-value-seconds16 1105 | +--ro ipv6-rp* [rp-address mode] 1106 | +--ro rp-address inet:ipv6-address 1107 | +--ro mode identityref 1108 | +--ro info-source-address? inet:ipv6-address 1109 | +--ro info-source-type? identityref 1110 | +--ro up-time? rt-types:timeticks64 1111 | +--ro expiration? 1112 | rt-types:timer-value-seconds16 1113 +--ro rp-mappings 1114 +--ro ipv4-rp* [group-range rp-address] 1115 | +--ro group-range inet:ipv4-prefix 1116 | +--ro rp-address inet:ipv4-address 1117 | +--ro up-time? rt-types:timeticks64 1118 | +--ro expiration? rt-types:timer-value-seconds16 1119 +--ro ipv6-rp* [group-range rp-address] 1120 +--ro group-range inet:ipv6-prefix 1121 +--ro rp-address inet:ipv6-address 1122 +--ro up-time? rt-types:timeticks64 1123 +--ro expiration? rt-types:timer-value-seconds16 1125 notifications: 1126 +---n pim-rp-event 1127 +--ro event-type? rp-event-type 1128 +--ro instance-af-ref? leafref 1129 +--ro group? rt-types:ip-multicast-group-address 1130 +--ro rp-address? inet:ip-address 1131 +--ro is-rpt? boolean 1132 +--ro mode? identityref 1133 +--ro message-origin? inet:ip-address 1135 4.3. PIM-SM Module 1136 module: ietf-pim-sm 1137 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1138 /pim-base:address-family: 1139 +--rw sm 1140 +--rw asm 1141 | +--rw anycast-rp! 1142 | | +--rw ipv4-anycast-rp* [anycast-address rp-address] 1143 | | | +--rw anycast-address inet:ipv4-address 1144 | | | +--rw rp-address inet:ipv4-address 1145 | | +--rw ipv6-anycast-rp* [anycast-address rp-address] 1146 | | +--rw anycast-address inet:ipv6-address 1147 | | +--rw rp-address inet:ipv6-address 1148 | +--rw spt-switch 1149 | +--rw infinity! {spt-switch-infinity}? 1150 | +--rw policy-name? string {spt-switch-policy}? 1151 +--rw ssm! 1152 +--rw range-policy? string 1153 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1154 /pim-base:interfaces/pim-base:interface 1155 /pim-base:address-family: 1156 +--rw sm! 1157 +--rw passive? empty 1158 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1159 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp 1160 /pim-rp:ipv4-rp: 1161 +--rw sm! 1162 +--rw policy-name? string 1163 +--rw override? boolean {static-rp-override}? 1164 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1165 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp 1166 /pim-rp:ipv6-rp: 1167 +--rw sm! 1168 +--rw policy-name? string 1169 +--rw override? boolean {static-rp-override}? 1171 4.4. PIM-DM Module 1173 module: ietf-pim-dm 1174 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1175 /pim-base:address-family: 1176 +--rw dm! 1177 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1178 /pim-base:interfaces/pim-base:interface 1179 /pim-base:address-family: 1180 +--rw dm! 1182 4.5. PIM-BIDIR Module 1184 module: ietf-pim-bidir 1185 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1186 /pim-base:address-family: 1187 +--rw bidir! 1188 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1189 /pim-base:interfaces/pim-base:interface 1190 /pim-base:address-family: 1191 +--rw bidir! 1192 +--rw df-election {intf-df-election}? 1193 +--rw offer-interval? uint16 1194 +--rw backoff-interval? uint16 1195 +--rw offer-multiplier? uint8 1196 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1197 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp 1198 /pim-rp:ipv4-rp: 1199 +--rw bidir! 1200 +--rw policy-name? string 1201 +--rw override? boolean {static-rp-override}? 1202 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1203 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp 1204 /pim-rp:ipv6-rp: 1205 +--rw bidir! 1206 +--rw policy-name? string 1207 +--rw override? boolean {static-rp-override}? 1208 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1209 /pim-base:address-family/pim-rp:rp: 1210 +--ro bidir 1211 +--ro df-election 1212 | +--ro ipv4-rp* [rp-address] 1213 | | +--ro rp-address inet:ipv4-address 1214 | +--ro ipv6-rp* [rp-address] 1215 | +--ro rp-address inet:ipv6-address 1216 +--ro interface-df-election 1217 +--ro ipv4-rp* [rp-address interface-name] 1218 | +--ro rp-address inet:ipv4-address 1219 | +--ro interface-name if:interface-ref 1220 | +--ro df-address? inet:ipv4-address 1221 | +--ro interface-state? identityref 1222 | +--ro up-time? rt-types:timeticks64 1223 | +--ro winner-metric? uint32 1224 | +--ro winner-metric-preference? uint32 1225 +--ro ipv6-rp* [rp-address interface-name] 1226 +--ro rp-address inet:ipv6-address 1227 +--ro interface-name if:interface-ref 1228 +--ro df-address? inet:ipv6-address 1229 +--ro interface-state? identityref 1230 +--ro up-time? rt-types:timeticks64 1231 +--ro winner-metric? uint32 1232 +--ro winner-metric-preference? uint32 1233 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1234 /pim-base:interfaces/pim-base:interface 1235 /pim-base:address-family/pim-base:neighbors 1236 /pim-base:ipv4-neighbor: 1237 +--ro bidir-capable? boolean 1238 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 1239 /pim-base:interfaces/pim-base:interface 1240 /pim-base:address-family/pim-base:neighbors 1241 /pim-base:ipv6-neighbor: 1242 +--ro bidir-capable? boolean 1244 5. Relationship to the PIM-STD-MIB 1246 The following sections describe the mappings between the objects in 1247 the PIM-STD-MIB defined in [RFC5060] and the YANG data nodes defined 1248 in this document. 1250 5.1. pimInterfaceTable 1252 pimInterfaceTable is mapped to pim/interfaces/interface. The key of 1253 pimInterfaceTable is pimInterfaceIfIndex and pimInterfaceIPVersion, 1254 while the key of the "interface" list in YANG is the node "name". 1255 For each value of pimInterfaceIPVersion, the "interface" list 1256 contains a corresponding sublist whose key is the node "address- 1257 family". 1259 The following table lists the YANG data nodes with corresponding 1260 objects of pimInterfaceTable in the PIM-STD-MIB. 1262 +------------------------+----------------------------------+ 1263 | YANG node | PIM-STD-MIB object | 1264 +------------------------+----------------------------------+ 1265 | address-family | pimInterfaceAddressType | 1266 | ipv4/address | pimInterfaceAddress | 1267 | ipv6/address | | 1268 | gen-id | pimInterfaceGenerationIDValue | 1269 | ipv4/dr-address | pimInterfaceDR | 1270 | ipv6/dr-address | | 1271 | dr-priority | pimInterfaceDRPriority | 1272 | hello-interval | pimInterfaceHelloInterval | 1273 | hello-holdtime | pimInterfaceHelloHoldtime | 1274 | jp-interval | pimInterfaceJoinPruneInterval | 1275 | jp-holdtime | pimInterfaceJoinPruneHoldtime | 1276 | bidir/offer-multiplier | pimInterfaceDFElectionRobustness | 1277 | propagation-delay | pimInterfacePropagationDelay | 1278 | override-interval | pimInterfaceOverrideInterval | 1279 +------------------------+----------------------------------+ 1281 Table 2: YANG Nodes and pimInterfaceTable Objects 1283 5.2. pimNeighborTable 1285 pimNeighborTable is mapped to pim/interfaces/interface/neighbors/ 1286 ipv4-neighbor and pim/interfaces/interface/neighbors/ipv6-neighbor. 1288 The following table lists the YANG data nodes with corresponding 1289 objects of pimNeighborTable in the PIM-STD-MIB. 1291 +------------------------------+---------------------------------+ 1292 | YANG node | PIM-STD-MIB object | 1293 +------------------------------+---------------------------------+ 1294 | ipv4-neighbor | pimNeighborAddressType | 1295 | ipv6-neighbor | | 1296 | address | pimNeighborAddress | 1297 | gen-id | pimNeighborGenerationIDValue | 1298 | up-time | pimNeighborUpTime | 1299 | expiration | pimNeighborExpiryTime | 1300 | dr-priority | pimNeighborDRPriority | 1301 | lan-prune-delay/present | pimNeighborLanPruneDelayPresent | 1302 | lan-prune-delay/t-bit | pimNeighborTBit | 1303 | lan-prune-delay/ | pimNeighborPropagationDelay | 1304 | propagation-delay | | 1305 | lan-prune-delay/ | pimNeighborOverrideInterval | 1306 | override-interval | | 1307 | ietf-pim-bidir:bidir-capable | pimNeighborBidirCapable | 1308 +------------------------------+---------------------------------+ 1310 Table 3: YANG Nodes and pimNeighborTable Objects 1312 5.3. pimStarGTable 1314 pimStarGTable is mapped to pim/address-family/topology-tree-info/ 1315 ipv4-route and pim/address-family/topology-tree-info/ipv6-route, when 1316 the value of source-address leaf is "ietf-routing-types:*" and the 1317 value of is-rpt leaf is "false". 1319 The following table lists the YANG data nodes with corresponding 1320 objects of pimStarGTable in the PIM-STD-MIB. 1322 +--------------------+------------------------------+ 1323 | YANG node | PIM-STD-MIB object | 1324 +--------------------+------------------------------+ 1325 | ipv4-route | pimStarGAddressType | 1326 | ipv6-route | | 1327 | group | pimStarGGrpAddress | 1328 | up-time | pimStarGUpTime | 1329 | mode | pimStarGPimMode | 1330 | rp-address | pimStarGRPAddressType | 1331 | rp-address | pimStarGRPAddress | 1332 | rpf-neighbor | pimStarGUpstreamNeighborType | 1333 | rpf-neighbor | pimStarGUpstreamNeighbor | 1334 | incoming-interface | pimStarGRPFIfIndex | 1335 +--------------------+------------------------------+ 1337 Table 4: YANG Nodes and pimStarGTable Objects 1339 In addtion, the object pimStarGPimModeOrigin in pimStarGTable is 1340 mapped to the node rp/rp-list/ipv4-rp/info-source-type or the node 1341 rp/rp-list/ipv6-rp/info-source-type in the YANG module ietf-pim-rp. 1343 5.4. pimSGTable 1345 pimSGTable is mapped to pim/address-family/topology-tree-info/ 1346 ipv4-route and pim/address-family/topology-tree-info/ipv6-route, when 1347 the value of source-address leaf is not "ietf-routing-types:*" and 1348 the value of is-rpt leaf is "false". 1350 The following table lists the YANG data nodes with corresponding 1351 objects of pimSGTable in the PIM-STD-MIB. 1353 +--------------------+--------------------------+ 1354 | YANG node | PIM-STD-MIB object | 1355 +--------------------+--------------------------+ 1356 | ipv4-route | pimSGAddressType | 1357 | ipv6-route | | 1358 | group | pimSGGrpAddress | 1359 | source-address | pimSGSrcAddress | 1360 | up-time | pimSGUpTime | 1361 | mode | pimSGPimMode | 1362 | rpf-neighbor | pimStarGUpstreamNeighbor | 1363 | incoming-interface | pimStarGRPFIfIndex | 1364 | is-spt | pimSGSPTBit | 1365 | expiration | pimSGKeepaliveTimer | 1366 +--------------------+--------------------------+ 1368 Table 5: YANG Nodes and pimSGTable Objects 1370 5.5. pimSGRptTable 1372 pimSGRptTable is mapped to pim/address-family/topology-tree-info/ 1373 ipv4-route and pim/address-family/topology-tree-info/ipv6-route, when 1374 the value of is-rpt leaf is "true". 1376 The following table lists the YANG data nodes with corresponding 1377 objects of pimSGRptTable in the PIM-STD-MIB. 1379 +----------------+---------------------+ 1380 | YANG node | PIM-STD-MIB object | 1381 +----------------+---------------------+ 1382 | ipv4-route | pimStarGAddressType | 1383 | ipv6-route | | 1384 | group | pimStarGGrpAddress | 1385 | source-address | pimSGRptSrcAddress | 1386 | up-time | pimSGRptUpTime | 1387 +----------------+---------------------+ 1389 Table 6: YANG Nodes and pimSGRptTable Objects 1391 5.6. pimBidirDFElectionTable 1393 pimBidirDFElectionTable is mapped to pim/address-family/rp/bidir/ 1394 interface-df-election/ipv4-rp and pim/address-family/rp/bidir/ 1395 interface-df-election/ipv6-rp. The key of 1396 pimBidirDFElectionTable includes pimBidirDFElectionIfIndex whose type 1397 is InterfaceIndex, while the YANG lists use a node "name" with the 1398 type string instead. 1400 The following table lists the YANG data nodes with corresponding 1401 objects of pimBidirDFElectionTable in the PIM-STD-MIB. 1403 +--------------------------+-------------------------------------+ 1404 | YANG node | PIM-STD-MIB object | 1405 +--------------------------+-------------------------------------+ 1406 | ipv4-rp | pimBidirDFElectionAddressType | 1407 | ipv6-rp | | 1408 | rp-address | pimBidirDFElectionRPAddress | 1409 | df-address | pimBidirDFElectionWinnerAddressType | 1410 | | pimBidirDFElectionWinnerAddress | 1411 | up-time | pimBidirDFElectionWinnerUpTime | 1412 | winner-metric-preference | pimBidirDFElectionWinnerMetricPref | 1413 | winner-metric-preference | pimBidirDFElectionWinnerMetric | 1414 | interface-state | pimBidirDFElectionState | 1415 +--------------------------+-------------------------------------+ 1417 Table 7: YANG Nodes and pimBidirDFElectionTable Objects 1419 5.7. pimStaticRPTable 1421 pimStaticRPTable is mapped to pim/address-family/rp/static-rp/ipv4-rp 1422 and pim/address-family/rp/static-rp/ipv6-rp. 1424 The following table lists the YANG data nodes with corresponding 1425 objects of pimStaticRPTable in the PIM-STD-MIB. 1427 +----------------+----------------------------+ 1428 | YANG node | PIM-STD-MIB object | 1429 +----------------+----------------------------+ 1430 | ipv4-rp | pimStaticRPAddressType | 1431 | ipv6-rp | | 1432 | rp-address | pimStaticRPRPAddress | 1433 | bidir | pimStaticRPPimMode | 1434 | sm | | 1435 | bidir/override | pimStaticRPOverrideDynamic | 1436 | sm/override | | 1437 +----------------+----------------------------+ 1439 Table 8: YANG Nodes and pimStaticRPTable Objects 1441 5.8. pimAnycastRPSetTable 1443 pimAnycastRPSetTable is mapped to pim/address-family/sm/asm/anycast- 1444 rp/ipv4-anycast-rp and pim/address-family/sm/asm/anycast-rp/ipv6- 1445 anycast-rp. 1447 The following table lists the YANG data nodes with corresponding 1448 objects of pimAnycastRPSetTable in the PIM-STD-MIB. 1450 +-----------------+-------------------------------+ 1451 | YANG node | PIM-STD-MIB object | 1452 +-----------------+-------------------------------+ 1453 | ipv4-anycast-rp | pimAnycastRPSetAddressType | 1454 | ipv6-anycast-rp | | 1455 | anycast-address | pimAnycastRPSetAnycastAddress | 1456 | rp-address | pimAnycastRPSetRouterAddress | 1457 +-----------------+-------------------------------+ 1459 Table 9: YANG Nodes and pimAnycastRPSetTable Objects 1461 5.9. pimGroupMappingTable 1463 pimGroupMappingTable is mapped to pim/address-family/rp/rp-mappings/ 1464 ipv4-rp and pim/address-family/rp/rp-mappings/ipv6-rp. 1466 The following table lists the YANG data nodes with corresponding 1467 objects of pimGroupMappingTable in the PIM-STD-MIB. 1469 +------------+--------------------------------+ 1470 | YANG node | PIM-STD-MIB object | 1471 +------------+--------------------------------+ 1472 | ipv4-rp | pimGroupMappingAddressType | 1473 | ipv6-rp | | 1474 | group | pimGroupMappingGrpAddress | 1475 | | pimGroupMappingGrpPrefixLength | 1476 | ipv4-rp | pimGroupMappingRPAddressType | 1477 | ipv6-rp | | 1478 | rp-address | pimGroupMappingRPAddress | 1479 | | pimGroupMappingPimMode | 1480 +------------+--------------------------------+ 1482 Table 10: YANG Nodes and pimGroupMappingTable Objects 1484 In addtion, the object pimGroupMappingPimMode in 1485 pimGroupMappingTable is mapped to the node rp/rp-list/ipv4-rp/mode or 1486 the node rp/rp-list/ipv6-rp/mode in the YANG module ietf-pim-rp. 1488 6. PIM YANG Modules 1490 6.1. PIM base module 1492 This module references [RFC3973], [RFC5015], [RFC5306], [RFC5880], 1493 and [RFC7761]. 1495 file "ietf-pim-base@2018-04-16.yang" 1496 module ietf-pim-base { 1497 yang-version 1.1; 1498 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; 1499 prefix pim-base; 1501 import ietf-inet-types { 1502 prefix "inet"; 1503 } 1505 import ietf-yang-types { 1506 prefix "yang"; 1507 } 1509 import ietf-routing-types { 1510 prefix "rt-types"; 1511 } 1513 import ietf-interfaces { 1514 prefix "if"; 1515 } 1516 import ietf-routing { 1517 prefix "rt"; 1518 } 1520 import ietf-bfd-types { 1521 prefix "bfd-types"; 1522 } 1524 organization 1525 "IETF PIM Working Group"; 1527 contact 1528 "WG Web: 1529 WG List: 1531 Editor: Xufeng Liu 1532 1534 Editor: Pete McAllister 1535 1537 Editor: Anish Peter 1538 1540 Editor: Mahesh Sivakumar 1541 1543 Editor: Yisong Liu 1544 1546 Editor: Fangwei Hu 1547 "; 1549 description 1550 "The module defines a collection of YANG definitions common for 1551 all PIM (Protocol Independent Multicast) modes. 1553 Copyright (c) 2018 IETF Trust and the persons identified as 1554 authors of the code. All rights reserved. 1556 Redistribution and use in source and binary forms, with or 1557 without modification, is permitted pursuant to, and subject to 1558 the license terms contained in, the Simplified BSD License set 1559 forth in Section 4.c of the IETF Trust's Legal Provisions 1560 Relating to IETF Documents 1561 (http://trustee.ietf.org/license-info). 1563 This version of this YANG module is part of RFC XXXX; see the 1564 RFC itself for full legal notices."; 1566 revision 2018-04-16 { 1567 description 1568 "Initial revision."; 1569 reference 1570 "RFC XXXX: A YANG Data Model for PIM"; 1571 } 1573 /* 1574 * Features 1575 */ 1576 feature bfd { 1577 description 1578 "Support BFD (Bidirectional Forwarding Detection)."; 1579 reference 1580 "RFC5880: Bidirectional Forwarding Detection (BFD)"; 1581 } 1583 feature global-graceful-restart { 1584 description 1585 "Global configuration for graceful restart support as per 1586 RFC5306."; 1587 } 1589 feature intf-dr-priority { 1590 description 1591 "Support configuration of interface DR (Designated Router) 1592 priority."; 1593 reference 1594 "RFC7761: Protocol Independent Multicast - Sparse Mode 1595 (PIM-SM): Protocol Specification (Revised). Sec. 4.3.2."; 1596 } 1598 feature intf-hello-holdtime { 1599 description 1600 "Support configuration of interface hello holdtime."; 1601 reference 1602 "RFC3973: Protocol Independent Multicast - Dense Mode 1603 (PIM-DM): Protocol Specification (Revised). Sec. 4.3.3. 1604 RFC7761: Protocol Independent Multicast - Sparse Mode 1605 (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; 1606 } 1608 feature intf-hello-interval { 1609 description 1610 "Support configuration of interface hello interval."; 1611 reference 1612 "RFC3973: Protocol Independent Multicast - Dense Mode 1613 (PIM-DM): Protocol Specification (Revised). Sec. 4.8. 1614 RFC7761: Protocol Independent Multicast - Sparse Mode 1615 (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; 1616 } 1618 feature intf-hello-multiplier { 1619 description 1620 "Support configuration of interface hello multiplier."; 1621 reference 1622 "RFC3973: Protocol Independent Multicast - Dense Mode 1623 (PIM-DM): Protocol Specification (Revised). Sec. 4.8. 1624 RFC7761: Protocol Independent Multicast - Sparse Mode 1625 (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; 1626 } 1628 feature intf-jp-interval { 1629 description 1630 "Support configuration of interface join prune interval."; 1631 reference 1632 "RFC3973: Protocol Independent Multicast - Dense Mode 1633 (PIM-DM): Protocol Specification (Revised). Sec. 4.8. 1634 RFC7761: Protocol Independent Multicast - Sparse Mode 1635 (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; 1636 } 1638 feature intf-jp-holdtime { 1639 description 1640 "Support configuration of interface join prune holdtime."; 1641 reference 1642 "RFC3973: Protocol Independent Multicast - Dense Mode 1643 (PIM-DM): Protocol Specification (Revised). Sec. 4.8. 1644 RFC7761: Protocol Independent Multicast - Sparse Mode 1645 (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; 1646 } 1648 feature intf-jp-multiplier { 1649 description 1650 "Support configuration of interface join prune multiplier."; 1651 reference 1652 "RFC3973: Protocol Independent Multicast - Dense Mode 1653 (PIM-DM): Protocol Specification (Revised). Sec. 4.8. 1654 RFC7761: Protocol Independent Multicast - Sparse Mode 1655 (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; 1656 } 1658 feature intf-propagation-delay { 1659 description 1660 "Support configuration of interface propagation delay."; 1661 reference 1662 "RFC3973: Protocol Independent Multicast - Dense Mode 1663 (PIM-DM): Protocol Specification (Revised). Sec. 4.3.5. 1664 RFC7761: Protocol Independent Multicast - Sparse Mode 1665 (PIM-SM): Protocol Specification (Revised). Sec. 4.3.3."; 1666 } 1668 feature intf-override-interval { 1669 description 1670 "Support configuration of interface override interval."; 1671 reference 1672 "RFC3973: Protocol Independent Multicast - Dense Mode 1673 (PIM-DM): Protocol Specification (Revised). Sec. 4.3.3. 1674 RFC5015: Bidirectional Protocol Independent Multicast 1675 (BIDIR-PIM). Sec. 3.6. 1676 RFC7761: Protocol Independent Multicast - Sparse Mode 1677 (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; 1678 } 1680 feature per-af-graceful-restart { 1681 description 1682 "Per address family configuration for graceful restart support 1683 as per RFC5306."; 1684 } 1686 /* 1687 * Typedefs 1688 */ 1689 typedef interface-event-type { 1690 type enumeration { 1691 enum up { 1692 description 1693 "Neighbor status changed to up."; 1694 } 1695 enum down { 1696 description 1697 "Neighbor status changed to down."; 1698 } 1699 enum new-dr { 1700 description 1701 "A new DR (Designated Router) was elected on the connected 1702 network."; 1703 } 1704 enum new-df { 1705 description 1706 "A new DF (Designated Forwarder) was elected on the 1707 connected network."; 1709 } 1710 } 1711 description "Operational status event type for notifications."; 1712 } 1714 typedef neighbor-event-type { 1715 type enumeration { 1716 enum up { 1717 description 1718 "Neighbor status changed to up."; 1719 } 1720 enum down { 1721 description 1722 "Neighbor status changed to down."; 1723 } 1724 } 1725 description "Operational status event type for notifications."; 1726 } 1728 /* 1729 * Identities 1730 */ 1731 identity pim-mode { 1732 description 1733 "The PIM mode in which a group is operating."; 1734 } 1735 identity pim-none { 1736 base pim-mode; 1737 description 1738 "PIM is not operating."; 1739 } 1740 identity pim-bidir { 1741 base pim-mode; 1742 description 1743 "PIM operates in the Bidirectional Mode."; 1744 } 1745 identity pim-dm { 1746 base pim-mode; 1747 description 1748 "PIM operates in the Dense Mode (DM)."; 1749 } 1750 identity pim-sm { 1751 base pim-mode; 1752 description 1753 "PIM operates in the Sparse Mode (SM)."; 1754 } 1755 identity pim-asm { 1756 base pim-sm; 1757 description 1758 "PIM operates in the Sparse Mode with Any Source Multicast 1759 (ASM)."; 1760 } 1761 identity pim-ssm { 1762 base pim-sm; 1763 description 1764 "PIM operates in the Sparse Mode with Source-Specific 1765 Multicast (SSM)."; 1766 } 1768 /* 1769 * Groupings 1770 */ 1771 grouping graceful-restart-container { 1772 description 1773 "A grouping defining a container of graceful restart 1774 attributes."; 1775 container graceful-restart { 1776 leaf enabled { 1777 type boolean; 1778 default false; 1779 description 1780 "Enable or disable graceful restart."; 1781 } 1782 leaf duration { 1783 type uint16; 1784 units seconds; 1785 default 60; 1786 description 1787 "Maximum time for graceful restart to finish."; 1788 } 1789 description 1790 "Container of graceful restart attributes."; 1791 } 1792 } // graceful-restart-container 1794 grouping multicast-route-attributes { 1795 description 1796 "A grouping defining multicast route attributes."; 1798 leaf expiration { 1799 type rt-types:timer-value-seconds16; 1800 description "When the route will expire."; 1801 } 1802 leaf incoming-interface { 1803 type if:interface-ref; 1804 description 1805 "Reference to an entry in the global interface 1806 list."; 1807 } 1808 leaf is-spt { 1809 type boolean; 1810 description 1811 "'true' if SPT (Shortest Path Tree) bit is set to indicate 1812 forwarding is taking place on the (S,G) Shortest Path Tree 1813 (SPT)."; 1814 reference 1815 "RFC7761: Protocol Independent Multicast - Sparse Mode 1816 (PIM-SM): Protocol Specification (Revised). Sec. 4.1.3."; 1817 } 1818 leaf mode { 1819 type identityref { 1820 base pim-mode; 1821 } 1822 description "PIM mode."; 1823 } 1824 leaf msdp-learned { 1825 type boolean; 1826 description 1827 "'true' if route is learned from MSDP (Multicast Source 1828 Discovery Protocol)."; 1829 } 1830 leaf rp-address { 1831 type inet:ip-address; 1832 description "RP (Rendezvous Point) address."; 1833 } 1834 leaf rpf-neighbor { 1835 type inet:ip-address; 1836 description "RPF (Reverse Path Forwarding) neighbor address."; 1837 } 1838 leaf up-time { 1839 type rt-types:timeticks64; 1840 description 1841 "The number of time ticks (hundredths of a second) since the 1842 route last transitioned into the active state."; 1843 } 1844 list outgoing-interface { 1845 key "name"; 1846 description 1847 "A list of outgoing interfaces."; 1849 leaf name { 1850 type if:interface-ref; 1851 description 1852 "Interface name."; 1854 } 1856 leaf expiration { 1857 type rt-types:timer-value-seconds16; 1858 description "Expiring time."; 1859 } 1861 leaf up-time { 1862 type rt-types:timeticks64; 1863 description 1864 "The number of time ticks (hundredths of a second) since 1865 the oper-status of the interface was last changed to 1866 'up'."; 1867 } 1869 leaf jp-state { 1870 type enumeration { 1871 enum "no-info" { 1872 description 1873 "The interface has no (*,G) Join state and no timers 1874 running."; 1875 } 1876 enum "join" { 1877 description 1878 "The interface has Join state."; 1879 } 1880 enum "prune-pending" { 1881 description 1882 "The router has received a Prune on this interface from 1883 a downstream neighbor and is waiting to see whether 1884 the prune will be overridden by another downstream 1885 router. For forwarding purposes, the Prune-Pending 1886 state functions exactly like the Join state."; 1887 } 1888 } 1889 description "Join-prune state."; 1890 } 1891 } 1892 } // multicast-route-attributes 1894 grouping neighbor-state-af-attributes { 1895 description 1896 "A grouping defining neighbor per address family attributes."; 1897 leaf bfd-state { 1898 type bfd-types:state; 1899 description "BFD (Bidirectional Forwarding Detection) status."; 1900 } 1901 leaf expiration { 1902 type rt-types:timer-value-seconds16; 1903 description "Neighbor expiring time."; 1904 } 1905 leaf dr-priority { 1906 type uint32; 1907 description 1908 "DR (Designated Router) priority as the preference in the DR 1909 election process."; 1910 } 1911 leaf gen-id { 1912 type uint32; 1913 description 1914 "The value of the Generation ID in the last Hello message 1915 from the neighbor."; 1916 } 1917 container lan-prune-delay { 1918 description 1919 "The information of the LAN Prune Delay option in the Hello 1920 message from the neighbor."; 1921 leaf present { 1922 type boolean; 1923 description 1924 "'true' if the LAN Prune Delay option is present in the 1925 last Hello message from the neighbor."; 1926 } 1927 leaf override-interval { 1928 when "../present = 'true'" { 1929 description 1930 "Available only when the leaf present is 'true'."; 1931 } 1932 type uint16; 1933 units milliseconds; 1934 description 1935 "The value of the Override_Interval field of the LAN Prune 1936 Delay option in the last Hello message from the neighbor. 1937 The neighbor uses this value to indicate a short period 1938 after a Join or Prune to allow other routers on the LAN 1939 to override the Join or Prune."; 1940 } 1941 leaf propagation-delay { 1942 when "../present = 'true'" { 1943 description 1944 "Available only when the leaf present is 'true'."; 1945 } 1946 type uint16; 1947 units milliseconds; 1948 description 1949 "The value of the Propagation_Delay field of the LAN Prune 1950 Delay option in the last Hello message from the neighbor. 1951 The value is the propagation delay over the local link 1952 expected by the neighbor."; 1953 } 1954 leaf t-bit { 1955 when "../present = 'true'" { 1956 description 1957 "Available only when the leaf present is 'true'."; 1958 } 1959 type boolean; 1960 description 1961 "'true' if the T bit is set in the LAN Prune Delay option 1962 in the last Hello message from the neighbor. This flag 1963 indicates the neighbor's capability to disable Join 1964 message suppression."; 1965 } 1966 } 1967 leaf up-time { 1968 type rt-types:timeticks64; 1969 description 1970 "The number of time ticks (hundredths of a second) since 1971 the neighbor relationship has been formed as reachable 1972 without beeing timed out."; 1973 } 1974 } // neighbor-state-af-attributes 1976 grouping pim-instance-af-state-ref { 1977 description 1978 "An absolute reference to a PIM instance address family."; 1979 leaf instance-af-ref { 1980 type leafref { 1981 path "/rt:routing/rt:control-plane-protocols/" 1982 + "pim-base:pim/pim-base:address-family/" 1983 + "pim-base:address-family"; 1984 } 1985 description 1986 "Reference to a PIM instance address family."; 1987 } 1988 } // pim-instance-af-state-ref 1990 grouping pim-interface-state-ref { 1991 description 1992 "An absolute reference to a PIM interface state."; 1993 leaf interface-ref { 1994 type leafref { 1995 path "/rt:routing/rt:control-plane-protocols/" 1996 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 1997 + "pim-base:name"; 1999 } 2000 description 2001 "Reference to a PIM interface."; 2002 } 2003 } // pim-interface-state-ref 2005 grouping statistics-sent-received { 2006 description 2007 "A grouping defining sent and received statistics 2008 on PIM messages."; 2009 reference 2010 "RFC3973: Protocol Independent Multicast - Dense Mode 2011 (PIM-DM): Protocol Specification (Revised). Sec. 4.7.1. 2012 RFC5015: Bidirectional Protocol Independent Multicast 2013 (BIDIR-PIM). Sec. 3.7. 2014 RFC7761: Protocol Independent Multicast - Sparse Mode 2015 (PIM-SM): Protocol Specification (Revised). Sec. 4.9."; 2016 leaf assert { 2017 type yang:counter64; 2018 description 2019 "The number of Assert messages, with the message Type 2020 of 5 in RFC3973 and RFC7761."; 2021 } 2022 leaf bsr { 2023 type yang:counter64; 2024 description 2025 "The number of Bootstrap messages, with the message Type 2026 of 4 in RFC3973 and RFC7761."; 2027 } 2028 leaf candidate-rp-advertisement { 2029 type yang:counter64; 2030 description 2031 "The number of Candidate RP Advertisement messages, with the 2032 message Type of 8 in RFC3973 and RFC7761."; 2033 } 2034 leaf df-election { 2035 type yang:counter64; 2036 description 2037 "The number of DF (Designated Forwarder) Election messages, 2038 with the message Type of 10 in RFC5015."; 2039 } 2040 leaf graft { 2041 type yang:counter64; 2042 description 2043 "The number of Graft messages, with the message Type 2044 of 6 in RFC3973 and RFC7761."; 2045 } 2046 leaf graft-ack { 2047 type yang:counter64; 2048 description 2049 "The number of Graft-Ack messages, with the message Type 2050 of 7 in RFC3973 and RFC7761."; 2051 } 2052 leaf hello { 2053 type yang:counter64; 2054 description 2055 "The number of Hello messages, with the message Type 2056 of 0 in RFC3973 and RFC7761."; 2057 } 2058 leaf join-prune { 2059 type yang:counter64; 2060 description 2061 "The number of Join/Prune messages, with the message Type 2062 of 3 in RFC3973 and RFC7761."; 2063 } 2064 leaf register { 2065 type yang:counter64; 2066 description 2067 "The number of Register messages, with the message Type 2068 of 1 in RFC3973 and RFC7761."; 2069 } 2070 leaf register-stop { 2071 type yang:counter64; 2072 description 2073 "The number of Register Stop messages, with the message Type 2074 of 2 in RFC3973 and RFC7761."; 2075 } 2076 leaf state-refresh { 2077 type yang:counter64; 2078 description 2079 "The number of State Refresh messages, with the message Type 2080 of 9 in RFC3973."; 2081 } 2082 } // statistics-sent-received 2084 /* 2085 * Data nodes 2086 */ 2088 augment "/rt:routing/rt:control-plane-protocols" { 2089 description 2090 "PIM augmentation to the routing instance model."; 2092 container pim { 2093 presence 2094 "Enables the PIM protocol."; 2096 description 2097 "PIM configuration and operational data."; 2099 uses graceful-restart-container { 2100 if-feature global-graceful-restart; 2101 } 2103 list address-family { 2104 key "address-family"; 2105 description 2106 "Each list entry for one address family."; 2107 uses rt:address-family; 2108 uses graceful-restart-container { 2109 if-feature per-af-graceful-restart; 2110 } 2112 container statistics { 2113 config false; 2114 description "A container defining statistics attributes."; 2115 leaf discontinuity-time { 2116 type yang:date-and-time; 2117 description 2118 "The time on the most recent occasion at which any one 2119 or more of the statistic counters suffered a 2120 discontinuity. If no such discontinuities have 2121 occurred since the last re-initialization of the local 2122 management subsystem, then this node contains the time 2123 the local management subsystem re-initialized 2124 itself."; 2125 } 2126 container error { 2127 description "Containing error statistics."; 2128 uses statistics-sent-received { 2129 description 2130 "Statistic counters on the PIM messages per PIM 2131 message Type. Each leaf attribute counts the number 2132 of PIM messages that were of a particular Type (such 2133 as Hello) and contained errors preventing them from 2134 being processed by PIM. 2136 Such messages are also counted by the corresponding 2137 counter of the same Type (such as Hello) in the 2138 'received' container."; 2139 } 2140 leaf checksum { 2141 type yang:counter64; 2142 description 2143 "The number of PIM messages that were passed to PIM 2144 and contained checksum errors."; 2145 } 2146 leaf format { 2147 type yang:counter64; 2148 description 2149 "The number of PIM messages that passed checksum 2150 validation but contained format errors, including 2151 the errors such as PIM Version, Type, and message 2152 length."; 2153 } 2154 } 2155 container queue { 2156 description "Containing queue statistics."; 2157 leaf size { 2158 type uint32; 2159 description 2160 "The size of the input queue."; 2161 } 2162 leaf overflow { 2163 type yang:counter32; 2164 description 2165 "The number of the input queue overflows."; 2166 } 2167 } 2168 container received { 2169 description 2170 "Containing statistics of received messages."; 2171 uses statistics-sent-received; 2172 } 2173 container sent { 2174 description 2175 "Containing statistics of sent messages."; 2176 uses statistics-sent-received; 2177 } 2178 } 2180 container topology-tree-info { 2181 config false; 2182 description "Containing topology tree information."; 2183 list ipv4-route { 2184 when "../../address-family = 'rt:ipv4'" { 2185 description 2186 "Only applicable to IPv4 address family."; 2187 } 2188 key "group source-address is-rpt"; 2189 description "A list of IPv4 routes."; 2190 leaf group { 2191 type rt-types:ipv4-multicast-group-address; 2192 description "Group address."; 2193 } 2194 leaf source-address { 2195 type rt-types:ipv4-multicast-source-address; 2196 description "Source address."; 2197 } 2198 leaf is-rpt { 2199 type boolean; 2200 description 2201 "'true' if the tree is RPT (Rendezvous-Point Tree)."; 2202 } 2204 uses multicast-route-attributes; 2205 } // ipv4-route 2207 list ipv6-route { 2208 when "../../address-family = 'rt:ipv6'" { 2209 description 2210 "Only applicable to IPv6 address family."; 2211 } 2212 key "group source-address is-rpt"; 2213 description "A list of IPv6 routes."; 2214 leaf group { 2215 type rt-types:ipv6-multicast-group-address; 2216 description "Group address."; 2217 } 2218 leaf source-address { 2219 type rt-types:ipv6-multicast-source-address; 2220 description "Source address."; 2221 } 2222 leaf is-rpt { 2223 type boolean; 2224 description 2225 "'true' if the tree is RPT (Rendezvous-Point Tree)."; 2226 } 2228 uses multicast-route-attributes; 2229 } // ipv6-route 2230 } // topology-tree-info 2231 } // address-family 2233 container interfaces { 2234 description 2235 "Containing a list of interfaces."; 2236 list interface { 2237 key "name"; 2238 description 2239 "List of pim interfaces."; 2241 leaf name { 2242 type if:interface-ref; 2243 description 2244 "Reference to an entry in the global interface 2245 list."; 2246 } 2247 list address-family { 2248 key "address-family"; 2249 description 2250 "Each list entry for one address family."; 2251 uses rt:address-family; 2253 container bfd { 2254 if-feature bfd; 2255 description 2256 "BFD (Bidirectional Forwarding Detection) 2257 operation."; 2258 uses bfd-types:client-cfg-parms; 2259 } 2260 leaf dr-priority { 2261 if-feature intf-dr-priority; 2262 type uint32; 2263 default 1; 2264 description 2265 "DR (Designated Router) priority as the preference in 2266 the DR election process."; 2267 } 2268 leaf hello-interval { 2269 if-feature intf-hello-interval; 2270 type rt-types:timer-value-seconds16; 2271 default 30; 2272 description 2273 "Periodic interval for Hello messages. 2274 If 'infinity' or 'not-set' is used, no periodic 2275 Hello messages are sent."; 2276 reference 2277 "RFC3973: Protocol Independent Multicast - Dense Mode 2278 (PIM-DM): Protocol Specification (Revised). 2279 Sec. 4.8. 2280 RFC7761: Protocol Independent Multicast - Sparse 2281 Mode (PIM-SM): Protocol Specification (Revised). 2282 Sec. 4.11."; 2283 } 2284 choice hello-holdtime-or-multiplier { 2285 description 2286 "Holdtime is timer value to time out the neighbor 2287 state when the timer expires. 2288 The holdtime value can be specified either by the 2289 given holdtime value or by the calculation of the 2290 hello-interval multiplied by the given value of the 2291 multiplier."; 2292 case holdtime { 2293 if-feature intf-hello-holdtime; 2294 leaf hello-holdtime { 2295 type rt-types:timer-value-seconds16; 2296 default 105; 2297 description 2298 "Hello holdtime is the amount of time to keep 2299 the neighbor reachable until a new Hello message 2300 is received."; 2301 } 2302 } 2303 case multiplier { 2304 if-feature intf-hello-multiplier; 2305 leaf hello-multiplier { 2306 type rt-types:timer-multiplier; 2307 default 3; 2308 description 2309 "Hello multiplier is the number by which the 2310 hello interval is multplied to obtain the Hello 2311 holdtime. 2312 The value of the Hello holdtime is calculated 2313 as: 2314 hello-holdtime = 2315 (multiplier + 0.5) * (hello-interval)"; 2316 } 2317 } 2318 } 2319 leaf jp-interval { 2320 if-feature intf-jp-interval; 2321 type rt-types:timer-value-seconds16; 2322 default 60; 2323 description 2324 "Periodic interval between Join/Prune messages. 2325 If 'infinity' or 'not-set' is used, no periodic 2326 Join/Prune messages are sent."; 2327 } 2328 choice jp-holdtime-or-multiplier { 2329 description 2330 "Join/Prune holdtime is the amount of time a receiver 2331 must keep the Join/Prune state alive. 2332 The holdtime value can be specified either by the 2333 given holdtime value or by the calculation of the 2334 jp-interval multiplied by the given value of the 2335 multiplier."; 2336 case holdtime { 2337 if-feature intf-jp-holdtime; 2338 leaf jp-holdtime { 2339 type rt-types:timer-value-seconds16; 2340 default 210; 2341 description 2342 "Join/Prune holdtime is the amount of time a 2343 receiver must keep the Join/Prune state alive."; 2344 } 2345 } 2346 case multiplier { 2347 if-feature intf-jp-multiplier; 2348 leaf jp-multiplier { 2349 type rt-types:timer-multiplier; 2350 default 3; 2351 description 2352 "Join prune multiplier is the number by which the 2353 join prune interval is multplied to obtain the 2354 Join/Prune holdtime. 2355 The value of the Join/Prune holdtime is 2356 calculated as: 2357 jp-holdtime = 2358 (multiplier + 0.5) * (jp-interval)"; 2359 } 2360 } 2361 } 2362 leaf override-interval { 2363 if-feature intf-override-interval; 2364 type uint16; 2365 units milliseconds; 2366 default 2500; 2367 description 2368 "A short period after a Join or Prune to allow other 2369 routers on the LAN to override the Join or Prune."; 2370 } 2371 leaf propagation-delay { 2372 if-feature intf-propagation-delay; 2373 type uint16; 2374 units milliseconds; 2375 default 500; 2376 description 2377 "Expected propagation delay over the local link."; 2378 } 2380 // Interface state attributes 2381 leaf oper-status { 2382 type enumeration { 2383 enum up { 2384 description 2385 "The interface is ready to pass PIM messages."; 2386 } 2387 enum down { 2388 description 2389 "The interface does not pass PIM messages."; 2390 } 2391 } 2392 config false; 2393 description 2394 "PIM operational status on the interface. 2395 This status is PIM specific and separate from the 2396 operational status of the underlying interface."; 2397 } 2398 leaf gen-id { 2399 type uint32; 2400 config false; 2401 description 2402 "The value of the Generation ID this router uses to 2403 insert in the PIM Hello message sent on this 2404 interface."; 2405 } 2406 leaf hello-expiration { 2407 type rt-types:timer-value-seconds16; 2408 config false; 2409 description "Hello interval expiration time."; 2410 } 2411 container ipv4 { 2412 when "../address-family = 'rt:ipv4'" { 2413 description 2414 "Only applicable to IPv4 address family."; 2415 } 2416 config false; 2417 description "Interface state attributes for IPv4."; 2418 leaf-list address { 2419 type inet:ipv4-address; 2420 description 2421 "List of addresses on which PIM is operating."; 2422 } 2423 leaf dr-address { 2424 type inet:ipv4-address; 2425 description "DR (Designated Router) address."; 2426 } 2427 } 2428 container ipv6 { 2429 when "../address-family = 'rt:ipv6'" { 2430 description 2431 "Only applicable to IPv6 address family."; 2432 } 2433 config false; 2434 description "Interface state attributes for IPv6."; 2435 leaf-list address { 2436 type inet:ipv6-address; 2437 description 2438 "List of addresses on which PIM is operating."; 2439 } 2440 leaf dr-address { 2441 type inet:ipv6-address; 2442 description "DR (Designated Router) address."; 2443 } 2444 } 2445 container neighbors { 2446 config false; 2447 description 2448 "Information learned from neighbors through this 2449 interface."; 2450 list ipv4-neighbor { 2451 when "../../address-family = 'rt:ipv4'" { 2452 description 2453 "Only applicable to IPv4 address family."; 2454 } 2455 key "address"; 2456 description "Neighbor state information."; 2457 leaf address { 2458 type inet:ipv4-address; 2459 description "Neighbor address."; 2460 } 2461 uses neighbor-state-af-attributes; 2462 } // list ipv4-neighbor 2463 list ipv6-neighbor { 2464 when "../../address-family = 'rt:ipv6'" { 2465 description 2466 "Only applicable to IPv6 address family."; 2467 } 2468 key "address"; 2469 description "Neighbor state information."; 2470 leaf address { 2471 type inet:ipv6-address; 2472 description "Neighbor address."; 2473 } 2474 uses neighbor-state-af-attributes; 2475 } // list ipv6-neighbor 2476 } // neighbors 2477 } // address-family 2478 } // interface 2479 } // interfaces 2480 } // pim 2482 } // augment 2484 /* 2485 * Notifications 2486 */ 2487 notification pim-neighbor-event { 2488 description "Notification event for neighbor."; 2489 leaf event-type { 2490 type neighbor-event-type; 2491 description "Event type."; 2492 } 2493 uses pim-interface-state-ref; 2494 leaf interface-af-ref { 2495 type leafref { 2496 path "/rt:routing/rt:control-plane-protocols/" 2497 + "pim-base:pim/pim-base:interfaces/pim-base:interface" 2498 + "[pim-base:name = current()/../interface-ref]/" 2499 + "pim-base:address-family/pim-base:address-family"; 2500 } 2501 description 2502 "Reference to a PIM interface address family."; 2503 } 2504 leaf neighbor-ipv4-ref { 2505 when "../interface-af-ref = 'rt:ipv4'" { 2506 description "Only applicable to IPv4 address family."; 2507 } 2508 type leafref { 2509 path "/rt:routing/rt:control-plane-protocols/" 2510 + "pim-base:pim/pim-base:interfaces/pim-base:interface" 2511 + "[pim-base:name = current()/../interface-ref]/" 2512 + "pim-base:address-family" 2513 + "[pim-base:address-family = " 2514 + "current()/../interface-af-ref]/" 2515 + "pim-base:neighbors/pim-base:ipv4-neighbor/" 2516 + "pim-base:address"; 2517 } 2518 description 2519 "Reference to a PIM IPv4 neighbor."; 2520 } 2521 leaf neighbor-ipv6-ref { 2522 when "../interface-af-ref = 'rt:ipv6'" { 2523 description "Only applicable to IPv6 address family."; 2524 } 2525 type leafref { 2526 path "/rt:routing/rt:control-plane-protocols/" 2527 + "pim-base:pim/pim-base:interfaces/pim-base:interface" 2528 + "[pim-base:name = current()/../interface-ref]/" 2529 + "pim-base:address-family" 2530 + "[pim-base:address-family = " 2531 + "current()/../interface-af-ref]/" 2532 + "pim-base:neighbors/pim-base:ipv6-neighbor/" 2533 + "pim-base:address"; 2534 } 2535 description 2536 "Reference to a PIM IPv6 neighbor."; 2537 } 2538 leaf up-time { 2539 type rt-types:timeticks64; 2540 description 2541 "The number of time ticks (hundredths of a second) since 2542 the neighbor relationship has been formed as reachable 2543 without beeing timed out."; 2544 } 2545 } 2546 notification pim-interface-event { 2547 description "Notification event for interface."; 2548 leaf event-type { 2549 type interface-event-type; 2550 description "Event type."; 2551 } 2552 uses pim-interface-state-ref; 2553 container ipv4 { 2554 description "Containing IPv4 information."; 2555 leaf-list address { 2556 type inet:ipv4-address; 2557 description "List of addresses."; 2558 } 2559 leaf dr-address { 2560 type inet:ipv4-address; 2561 description "DR (Designated Router) address."; 2562 } 2563 } 2564 container ipv6 { 2565 description "Containing IPv6 information."; 2566 leaf-list address { 2567 type inet:ipv6-address; 2568 description "List of addresses."; 2569 } 2570 leaf dr-address { 2571 type inet:ipv6-address; 2572 description "DR (Designated Router) address."; 2573 } 2574 } 2575 } 2576 } 2577 2579 6.2. PIM RP Module 2581 This module references [RFC5059] and [RFC7761]. 2583 file "ietf-pim-rp@2018-04-16.yang" 2584 module ietf-pim-rp { 2585 yang-version 1.1; 2586 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-rp"; 2587 prefix pim-rp; 2589 import ietf-inet-types { 2590 prefix "inet"; 2591 } 2593 import ietf-routing-types { 2594 prefix "rt-types"; 2595 } 2597 import ietf-interfaces { 2598 prefix "if"; 2599 } 2601 import ietf-routing { 2602 prefix "rt"; 2603 } 2605 import ietf-pim-base { 2606 prefix "pim-base"; 2607 } 2609 organization 2610 "IETF PIM Working Group"; 2612 contact 2613 "WG Web: 2614 WG List: 2616 Editor: Xufeng Liu 2617 2619 Editor: Pete McAllister 2620 2622 Editor: Anish Peter 2623 2625 Editor: Mahesh Sivakumar 2626 2628 Editor: Yisong Liu 2629 2631 Editor: Fangwei Hu 2632 "; 2634 description 2635 "The YANG module defines a PIM (Protocol Independent Multicast) 2636 RP (Rendezvous Point) model. 2638 Copyright (c) 2018 IETF Trust and the persons identified as 2639 authors of the code. All rights reserved. 2641 Redistribution and use in source and binary forms, with or 2642 without modification, is permitted pursuant to, and subject to 2643 the license terms contained in, the Simplified BSD License set 2644 forth in Section 4.c of the IETF Trust's Legal Provisions 2645 Relating to IETF Documents 2646 (http://trustee.ietf.org/license-info). 2648 This version of this YANG module is part of RFC XXXX; see the 2649 RFC itself for full legal notices."; 2651 revision 2018-04-16 { 2652 description 2653 "Initial revision."; 2654 reference 2655 "RFC XXXX: A YANG Data Model for PIM"; 2656 } 2658 /* 2659 * Features 2660 */ 2661 feature bsr { 2662 description 2663 "This feature indicates that the system supports BSR 2664 (Bootstrap Router)."; 2665 reference 2666 "RFC5059: Bootstrap Router (BSR) Mechanism for Protocol 2667 Independent Multicast (PIM)."; 2668 } 2670 feature bsr-election-state { 2671 if-feature bsr; 2672 description 2673 "This feature indicates that the system supports providing 2674 BSR election state."; 2675 reference 2676 "RFC5059: Bootstrap Router (BSR) Mechanism for Protocol 2677 Independent Multicast (PIM)."; 2678 } 2680 feature static-rp-override { 2681 description 2682 "This feature indicates that the system supports configuration 2683 of static RP (Rendezvous Point) override."; 2684 reference 2685 "RFC7761: Protocol Independent Multicast - Sparse Mode 2686 (PIM-SM): Protocol Specification (Revised). Sec. 3.7."; 2687 } 2689 feature candidate-interface { 2690 description 2691 "This feature indicates that the system supports using 2692 an interface to configure a BSR or RP candidate."; 2693 } 2695 feature candidate-ipv4 { 2696 description 2697 "This feature indicates that the system supports using 2698 an IPv4 address to configure a BSR or RP candidate."; 2699 } 2701 feature candidate-ipv6 { 2702 description 2703 "This feature indicates that the system supports using 2704 an IPv6 address to configure a BSR or RP candidate."; 2705 } 2707 /* 2708 * Typedefs 2709 */ 2710 typedef rp-event-type { 2711 type enumeration { 2712 enum invalid-jp { 2713 description 2714 "An invalid JP (Join/Prune) message has been received."; 2715 } 2716 enum invalid-register { 2717 description 2718 "An invalid register message has been received."; 2719 } 2720 enum mapping-created { 2721 description 2722 "A new mapping has been created."; 2723 } 2724 enum mapping-deleted { 2725 description 2726 "A mapping has been deleted."; 2727 } 2728 } 2729 description "Operational status event type for notifications."; 2730 } 2732 /* 2733 * Identities 2734 */ 2735 identity rp-mode { 2736 description 2737 "The mode of an RP, which can be SM (Sparse Mode) or 2738 BIDIR (bi-directional)."; 2739 } 2741 identity rp-info-source-type { 2742 description 2743 "The information source of an RP."; 2744 } 2745 identity static { 2746 base rp-info-source-type; 2747 description 2748 "The RP is statically configured."; 2749 } 2750 identity bootstrap { 2751 base rp-info-source-type; 2752 description 2753 "The RP is learned from bootstrap."; 2754 } 2756 /* 2757 * Groupings 2758 */ 2759 grouping rp-mapping-state-attributes { 2760 description 2761 "Grouping of RP mapping attributes."; 2762 leaf up-time { 2763 type rt-types:timeticks64; 2764 description 2765 "The number of time ticks (hundredths of a second) since 2766 the RP mapping or the RP became actively available."; 2767 } 2768 leaf expiration { 2769 type rt-types:timer-value-seconds16; 2770 description "Expiration time."; 2771 } 2772 } // rp-mapping-state-attributes 2774 grouping rp-state-attributes { 2775 description 2776 "Grouping of RP state attributes."; 2777 leaf info-source-type { 2778 type identityref { 2779 base rp-info-source-type; 2780 } 2781 description "The information source of an RP."; 2782 } // info-source-type 2783 leaf up-time { 2784 type rt-types:timeticks64; 2785 description 2786 "The number of time ticks (hundredths of a second) since 2787 the RP became actively available."; 2788 } 2789 leaf expiration { 2790 type rt-types:timer-value-seconds16; 2791 description "Expiration time."; 2792 } 2793 } // rp-state-attributes 2795 grouping static-rp-attributes { 2796 description 2797 "Grouping of static RP attributes, used in augmenting 2798 modules."; 2799 leaf policy-name { 2800 type string; 2801 description 2802 "The string value is the name to uniquely identify a 2803 policy that contains one or more policy rules used to 2804 determine which multicast group addresses are mapped 2805 to this statically configured RP address. 2806 If a policy is not specified, the entire multicast address 2807 space is mapped. 2808 The definition of such a policy is outside the scope 2809 of this document."; 2810 } 2811 leaf override { 2812 if-feature static-rp-override; 2813 type boolean; 2814 default false; 2815 description 2816 "When there is a conflict between static RP and dynamic 2817 RP, setting this attribute to 'true' will ask the 2818 system to use static RP."; 2819 } 2820 } // static-rp-attributes 2822 grouping rp-candidate-attributes { 2823 description 2824 "Grouping of RP candidate attributes."; 2825 leaf policy-name { 2826 type string; 2827 description 2828 "The string value is the name to uniquely identify a 2829 policy that contains one or more policy rules used to 2830 accept or reject certain multicast groups. 2831 If a policy is not specified, the entire multicast address 2832 space is accepted. 2833 The definition of such a policy is outside the scope 2834 of this document."; 2835 } 2836 leaf mode { 2837 type identityref { 2838 base rp-mode; 2839 } 2840 description 2841 "The mode of an RP, which can be SM (Sparse Mode) or BIDIR 2842 (bi-directional), each of them is defined in a saparate YNAG 2843 module. If a system supports an RP mode, the corresponding 2844 YANG module is implemented. 2845 When the value of this leaf is not specified, the default 2846 value is the supported mode if only one mode is implemented, 2847 or the default value is SM (Sparce Mode) if both SM and 2848 BIDIR are implemented."; 2849 } 2850 } // rp-candidate-attributes 2852 /* 2853 * Configuration data nodes 2854 */ 2856 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 2857 + "pim-base:address-family" { 2858 description "PIM RP augmentation."; 2860 container rp { 2861 description 2862 "PIM RP configuration data."; 2864 container static-rp { 2865 description 2866 "Containing static RP attributes."; 2867 list ipv4-rp { 2868 when "../../../pim-base:address-family = 'rt:ipv4'" { 2869 description 2870 "Only applicable to IPv4 address family."; 2871 } 2872 key "rp-address"; 2873 description 2874 "A list of IPv4 RP addresses."; 2875 leaf rp-address { 2876 type inet:ipv4-address; 2877 description 2878 "Specifies a static RP address."; 2879 } 2880 } 2882 list ipv6-rp { 2883 when "../../../pim-base:address-family = 'rt:ipv6'" { 2884 description 2885 "Only applicable to IPv6 address family."; 2886 } 2887 key "rp-address"; 2888 description 2889 "A list of IPv6 RP addresses."; 2890 leaf rp-address { 2891 type inet:ipv6-address; 2892 description 2893 "Specifies a static RP address."; 2894 } 2895 } 2896 } // static-rp 2898 container bsr { 2899 if-feature bsr; 2900 description 2901 "Containing BSR (BootStrap Router) attributes."; 2902 container bsr-candidate { 2903 presence 2904 "Present to serve as a BSR candidate"; 2905 description 2906 "BSR candidate attributes."; 2908 choice interface-or-address { 2909 description 2910 "Use either interface or ip-address."; 2911 case interface { 2912 if-feature candidate-interface; 2913 leaf interface { 2914 type if:interface-ref; 2915 mandatory true; 2916 description 2917 "Interface to be used by BSR."; 2918 } 2919 } 2920 case ipv4-address { 2921 when "../../../pim-base:address-family = 'rt:ipv4'" { 2922 description 2923 "Only applicable to IPv4 address family."; 2924 } 2925 if-feature candidate-ipv4; 2926 leaf ipv4-address { 2927 type inet:ipv4-address; 2928 mandatory true; 2929 description 2930 "IP address to be used by BSR."; 2931 } 2932 } 2933 case ipv6-address { 2934 when "../../../pim-base:address-family = 'rt:ipv6'" { 2935 description 2936 "Only applicable to IPv6 address family."; 2937 } 2938 if-feature candidate-ipv6; 2939 leaf ipv6-address { 2940 type inet:ipv6-address; 2941 mandatory true; 2942 description 2943 "IP address to be used by BSR."; 2944 } 2945 } 2946 } 2948 leaf hash-mask-length{ 2949 type uint8 { 2950 range "0..128"; 2951 } 2952 mandatory true; 2953 description 2954 "Value contained in BSR messages used by all routers to 2955 hash (map) to an RP."; 2956 } 2958 leaf priority { 2959 type uint8 { 2960 range "0..255"; 2962 } 2963 default 64; 2964 description 2965 "BSR election priority among different candidate BSRs. 2966 A larger value has a higher priority over a smaller 2967 value."; 2968 } 2969 } // bsr-candidate 2971 container rp-candidate { 2972 description 2973 "Containing RP candidate attributes."; 2974 list interface { 2975 if-feature candidate-interface; 2976 key "name"; 2977 description 2978 "A list of RP candidates"; 2979 leaf name { 2980 type if:interface-ref; 2981 description 2982 "Interface that the RP candidate uses."; 2983 } 2984 uses rp-candidate-attributes; 2985 } 2987 list ipv4-address { 2988 when "../../../../pim-base:address-family = 'rt:ipv4'" { 2989 description 2990 "Only applicable to IPv4 address family."; 2991 } 2992 if-feature candidate-ipv4; 2993 key "address"; 2994 description 2995 "A list of RP candidate addresses."; 2996 leaf address { 2997 type inet:ipv4-address; 2998 description 2999 "IPv4 address that the RP candidate uses."; 3000 } 3001 uses rp-candidate-attributes; 3002 } 3004 list ipv6-address { 3005 when "../../../../pim-base:address-family = 'rt:ipv6'" { 3006 description 3007 "Only applicable to IPv6 address family."; 3008 } 3009 if-feature candidate-ipv6; 3010 key "address"; 3011 description 3012 "A list of RP candidate addresses."; 3013 leaf address { 3014 type inet:ipv6-address; 3015 description 3016 "IPv6 address that the RP candidate uses."; 3017 } 3018 uses rp-candidate-attributes; 3019 } 3020 } 3022 // BSR state attributes. 3023 container bsr { 3024 config false; 3025 description 3026 "BSR information."; 3027 leaf address { 3028 type inet:ip-address; 3029 description "BSR address"; 3030 } 3031 leaf hash-mask-length { 3032 type uint8 { 3033 range "0..128"; 3034 } 3035 description "Hash mask length."; 3036 } 3037 leaf priority { 3038 type uint8 { 3039 range "0..255"; 3040 } 3041 description "Priority."; 3042 } 3043 leaf up-time { 3044 type rt-types:timeticks64; 3045 description 3046 "The number of time ticks (hundredths of a second) 3047 since the BSR became up."; 3048 } 3049 } 3050 choice election-state { 3051 if-feature bsr-election-state; 3052 config false; 3053 description "BSR election state."; 3054 case candidate { 3055 leaf candidate-bsr-state { 3056 type enumeration { 3057 enum "candidate" { 3058 description 3059 "The router is a candidate to be the BSR for the 3060 scope zone, but currently another router is the 3061 preferred BSR."; 3062 } 3063 enum "pending" { 3064 description 3065 "The router is a candidate to be the BSR for the 3066 scope zone. Currently, no other router is the 3067 preferred BSR, but this router is not yet the 3068 elected BSR. This is a temporary state that 3069 prevents rapid thrashing of the choice of BSR 3070 during BSR election."; 3071 } 3072 enum "elected" { 3073 description 3074 "The router is the elected BSR for the scope zone 3075 and it must perform all the BSR functions."; 3076 } 3077 } 3078 description 3079 "Candidate-BSR state."; 3080 reference 3081 "RFC5059, Section 3.1.1."; 3082 } 3083 } 3084 case "non-candidate" { 3085 leaf non-candidate-bsr-state { 3086 type enumeration { 3087 enum "no-info" { 3088 description 3089 "The router has no information about this scope 3090 zone."; 3091 } 3092 enum "accept-any" { 3093 description 3094 "The router does not know of an active BSR, and 3095 will accept the first Bootstrap message it sees 3096 as giving the new BSR's identity and the 3097 RP-Set."; 3098 } 3099 enum "accept" { 3100 description 3101 "The router knows the identity of the current 3102 BSR, and is using the RP-Set provided by that 3103 BSR. Only Bootstrap messages from that BSR or 3104 from a Candidate-BSR (C-BSR) with higher weight 3105 than the current BSR will be accepted."; 3107 } 3108 } 3109 description 3110 "Non-candidate-BSR state."; 3111 reference 3112 "RFC5059, Section 3.1.2."; 3113 } 3114 } 3115 } // election-state 3116 leaf bsr-next-bootstrap { 3117 type uint16; 3118 units seconds; 3119 config false; 3120 description 3121 "The remaining time interval in seconds until the next 3122 bootstrap will be sent."; 3123 } 3125 container rp { 3126 config false; 3127 description 3128 "State information of the RP."; 3129 leaf rp-address { 3130 type inet:ip-address; 3131 description "RP address."; 3132 } 3133 leaf policy-name { 3134 type string; 3135 description 3136 "The string value is the name to uniquely identify a 3137 policy that contains one or more policy rules used to 3138 accept or reject certain multicast groups. 3139 If a policy is not specified, the entire multicast 3140 address space is accepted. 3141 The definition of such a policy is outside the scope 3142 of this document."; 3143 } 3144 leaf up-time { 3145 type rt-types:timeticks64; 3146 description 3147 "The number of time ticks (hundredths of a second) 3148 since the RP became actively available."; 3149 } 3150 } 3151 leaf rp-candidate-next-advertisement { 3152 type uint16; 3153 units seconds; 3154 config false; 3155 description 3156 "The remaining time interval in seconds until the next 3157 RP candidate advertisement will be sent."; 3158 } 3159 } // bsr 3161 container rp-list { 3162 config false; 3163 description 3164 "Containing a list of RPs."; 3165 list ipv4-rp { 3166 when "../../../pim-base:address-family = 'rt:ipv4'" { 3167 description 3168 "Only applicable to IPv4 address family."; 3169 } 3170 key "rp-address mode"; 3171 description 3172 "A list of IPv4 RP addresses."; 3173 leaf rp-address { 3174 type inet:ipv4-address; 3175 description 3176 "RP address."; 3177 } 3178 leaf mode { 3179 type identityref { 3180 base rp-mode; 3181 } 3182 description 3183 "RP mode."; 3184 } 3185 leaf info-source-address { 3186 type inet:ipv4-address; 3187 description 3188 "The address where RP information is learned."; 3189 } 3190 uses rp-state-attributes; 3191 } 3193 list ipv6-rp { 3194 when "../../../pim-base:address-family = 'rt:ipv6'" { 3195 description 3196 "Only applicable to IPv6 address family."; 3197 } 3198 key "rp-address mode"; 3199 description 3200 "A list of IPv6 RP addresses."; 3201 leaf rp-address { 3202 type inet:ipv6-address; 3203 description 3204 "RP address."; 3205 } 3206 leaf mode { 3207 type identityref { 3208 base rp-mode; 3209 } 3210 description 3211 "RP mode."; 3212 } 3213 leaf info-source-address { 3214 type inet:ipv6-address; 3215 description 3216 "The address where RP information is learned."; 3217 } 3218 uses rp-state-attributes; 3219 } 3220 } // rp-list 3222 container rp-mappings { 3223 config false; 3224 description 3225 "Containing a list of group-to-RP mappings."; 3226 list ipv4-rp { 3227 when "../../../pim-base:address-family = 'rt:ipv4'" { 3228 description 3229 "Only applicable to IPv4 address family."; 3230 } 3231 key "group-range rp-address"; 3232 description 3233 "A list of group-to-RP mappings."; 3234 leaf group-range { 3235 type inet:ipv4-prefix; 3236 description 3237 "Group range presented in the format of prefix."; 3238 } 3239 leaf rp-address { 3240 type inet:ipv4-address; 3241 description 3242 "RP address."; 3243 } 3244 uses rp-mapping-state-attributes; 3245 } 3247 list ipv6-rp { 3248 when "../../../pim-base:address-family = 'rt:ipv6'" { 3249 description 3250 "Only applicable to IPv6 address family."; 3252 } 3253 key "group-range rp-address"; 3254 description 3255 "A list of IPv6 RP addresses."; 3256 leaf group-range { 3257 type inet:ipv6-prefix; 3258 description 3259 "Group range presented in the format of prefix."; 3260 } 3261 leaf rp-address { 3262 type inet:ipv6-address; 3263 description 3264 "RP address."; 3265 } 3266 uses rp-mapping-state-attributes; 3267 } 3268 } // rp-mappings 3269 } // rp 3270 } // augment 3272 /* 3273 * Notifications 3274 */ 3275 notification pim-rp-event { 3276 description "Notification event for RP."; 3277 leaf event-type { 3278 type rp-event-type; 3279 description "Event type."; 3280 } 3281 uses pim-base:pim-instance-af-state-ref; 3282 leaf group { 3283 type rt-types:ip-multicast-group-address; 3284 description "Group address."; 3285 } 3286 leaf rp-address { 3287 type inet:ip-address; 3288 description "RP address."; 3289 } 3290 leaf is-rpt { 3291 type boolean; 3292 description "'true' if the tree is RPT (RP-Tree)."; 3293 } 3294 leaf mode { 3295 type identityref { 3296 base pim-base:pim-mode; 3297 } 3298 description "PIM mode."; 3299 } 3300 leaf message-origin { 3301 type inet:ip-address; 3302 description "Where the message is originated."; 3303 } 3304 } 3305 } 3306 3308 6.3. PIM-SM Module 3310 This module references [RFC4607] and [RFC7761]. 3312 file "ietf-pim-sm@2018-04-16.yang" 3313 module ietf-pim-sm { 3314 yang-version 1.1; 3315 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-sm"; 3316 prefix pim-sm; 3318 import ietf-inet-types { 3319 prefix "inet"; 3320 } 3322 import ietf-routing { 3323 prefix "rt"; 3324 } 3326 import ietf-pim-base { 3327 prefix "pim-base"; 3328 } 3330 import ietf-pim-rp { 3331 prefix "pim-rp"; 3332 } 3334 organization 3335 "IETF PIM Working Group"; 3337 contact 3338 "WG Web: 3339 WG List: 3341 Editor: Xufeng Liu 3342 3344 Editor: Pete McAllister 3345 3347 Editor: Anish Peter 3348 3350 Editor: Mahesh Sivakumar 3351 3353 Editor: Yisong Liu 3354 3356 Editor: Fangwei Hu 3357 "; 3359 description 3360 "The YANG module defines a PIM (Protocol Independent Multicast) 3361 SM (Sparse Mode) model. 3363 Copyright (c) 2018 IETF Trust and the persons identified as 3364 authors of the code. All rights reserved. 3366 Redistribution and use in source and binary forms, with or 3367 without modification, is permitted pursuant to, and subject to 3368 the license terms contained in, the Simplified BSD License set 3369 forth in Section 4.c of the IETF Trust's Legal Provisions 3370 Relating to IETF Documents 3371 (http://trustee.ietf.org/license-info). 3373 This version of this YANG module is part of RFC XXXX; see the 3374 RFC itself for full legal notices."; 3376 revision 2018-04-16 { 3377 description 3378 "Initial revision."; 3379 reference 3380 "RFC XXXX: A YANG Data Model for PIM. 3381 RFC7761: Protocol Independent Multicast - Sparse Mode 3382 (PIM-SM): Protocol Specification (Revised). Sec. 4.2."; 3383 } 3385 /* 3386 * Features 3387 */ 3388 feature spt-switch-infinity { 3389 description 3390 "This feature indicates that the system supports configuration 3391 choice whether to trigger the switchover from the RPT 3392 (Rendezvous Point Tree) to the SPT (Shortest Path Tree)."; 3393 reference 3394 "RFC7761: Protocol Independent Multicast - Sparse Mode 3395 (PIM-SM): Protocol Specification (Revised). Sec. 4.2."; 3396 } 3398 feature spt-switch-policy { 3399 description 3400 "This feature indicates that the system supports configuring 3401 policy for the switchover from the RPT to the SPT."; 3402 reference 3403 "RFC7761: Protocol Independent Multicast - Sparse Mode 3404 (PIM-SM): Protocol Specification (Revised). Sec. 4.2."; 3405 } 3407 /* 3408 * Identities 3409 */ 3410 identity rp-sm { 3411 base pim-rp:rp-mode; 3412 description 3413 "SM (Sparse Mode)."; 3414 } 3416 /* 3417 * Groupings 3418 */ 3419 grouping static-rp-sm-container { 3420 description 3421 "Grouping that contains SM attributes for static RP."; 3422 container sm { 3423 presence 3424 "Indicate the support of sparse mode."; 3425 description 3426 "PIM SM configuration data."; 3428 uses pim-rp:static-rp-attributes; 3429 } // sm 3430 } // static-rp-sm-container 3432 /* 3433 * Configuration data nodes 3434 */ 3435 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 3436 + "pim-base:address-family" { 3437 description "PIM SM augmentation."; 3439 container sm { 3440 description 3441 "PIM SM configuration data."; 3443 container asm { 3444 description 3445 "ASM (Any Source Multicast) attributes."; 3447 container anycast-rp { 3448 presence 3449 "Present to enable anycast RP (Rendezvous Point)."; 3450 description 3451 "Anycast RP attributes."; 3453 list ipv4-anycast-rp { 3454 when "../../../../pim-base:address-family = 'rt:ipv4'" { 3455 description 3456 "Only applicable to IPv4 address family."; 3457 } 3458 key "anycast-address rp-address"; 3459 description 3460 "A list of IPv4 anycast RP settings, only applicable 3461 when pim-base:address-family is IPv4."; 3462 leaf anycast-address { 3463 type inet:ipv4-address; 3464 description 3465 "IP address of the anycast RP set. This IP address 3466 is used by the multicast groups or sources to join 3467 or register."; 3468 } 3470 leaf rp-address { 3471 type inet:ipv4-address; 3472 description 3473 "IP address of the router configured with anycast 3474 RP. This is the IP address where the Register 3475 messages are forwarded."; 3476 } 3477 } 3478 list ipv6-anycast-rp { 3479 when "../../../../pim-base:address-family = 'rt:ipv6'" { 3480 description 3481 "Only applicable to IPv6 address family."; 3482 } 3483 key "anycast-address rp-address"; 3484 description 3485 "A list of IPv6 anycast RP settings, only applicable 3486 when pim-base:address-family is IPv6."; 3487 leaf anycast-address { 3488 type inet:ipv6-address; 3489 description 3490 "IP address of the anycast RP set. This IP address 3491 is used by the multicast groups or sources to join 3492 or register."; 3493 } 3495 leaf rp-address { 3496 type inet:ipv6-address; 3497 description 3498 "IP address of the router configured with anycast 3499 RP. This is the IP address where the Register 3500 messages are forwarded."; 3501 } 3502 } 3503 } 3505 container spt-switch { 3506 description 3507 "SPT (Shortest Path Tree) switching attributes."; 3508 container infinity { 3509 if-feature spt-switch-infinity; 3510 presence 3511 "Present if SPT switchover threshold is set to 3512 infinity, according to the policy specified below."; 3513 description 3514 "The receiver's DR (Designated Router) never triggers 3515 the switchover from the RPT to the SPT."; 3516 leaf policy-name { 3517 if-feature spt-switch-policy; 3518 type string; 3519 description 3520 "The string value is the name to uniquely identify a 3521 policy that contains one or more policy rules used 3522 to accept or reject certain multicast groups. 3523 The groups accepted by this policy have the SPT 3524 switchover threshold set to infinity, meaning that 3525 they will stay on the shared tree forever. 3526 If a policy is not specified, the entire multicast 3527 address space is accepted. 3528 The definition of such a policy is outside the scope 3529 of this document."; 3530 } 3531 } // infinity 3532 } 3533 } // asm 3535 container ssm { 3536 presence 3537 "Present to enable SSM (Source-Specific Multicast)."; 3538 description 3539 "SSM (Source-Specific Multicast) attributes."; 3541 leaf range-policy { 3542 type string; 3543 description 3544 "The string value is the name to uniquely identify a 3545 policy that contains one or more policy rules used 3546 to accept or reject certain multicast groups. 3547 The groups accepted by this policy define the multicast 3548 group rang used by SSM. 3549 If a policy is not specified, the default SSM multicast 3550 group rang is used. 3551 The default SSM multicast group range is 232.0.0.0/8 for 3552 IPv4 and ff3x::/96 for IPv6 where x reprents any valid 3553 scope identifier. 3554 The definition of such a policy is outside the scope 3555 of this document."; 3556 reference 3557 "RFC4607: Source-Specific Multicast for IP."; 3558 } 3559 } // ssm 3560 } // sm 3561 } // augment 3563 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 3564 + "pim-base:interfaces/pim-base:interface/" 3565 + "pim-base:address-family" { 3566 description "PIM SM augmentation."; 3568 container sm { 3569 presence "Present to enable sparse-mode."; 3570 description 3571 "PIM SM configuration data."; 3573 leaf passive { 3574 type empty; 3575 description 3576 "Specifies that no PIM messages are sent or accepted on 3577 this PIM interface, but the interface can be included in a 3578 multicast forwarding entry."; 3579 } 3580 } // sm 3581 } // augment 3583 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 3584 + "pim-base:address-family/pim-rp:rp/" 3585 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 3586 description "PIM SM augmentation."; 3587 uses static-rp-sm-container; 3588 } // augment 3590 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 3591 + "pim-base:address-family/pim-rp:rp/" 3592 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 3593 description "PIM SM augmentation."; 3595 uses static-rp-sm-container; 3596 } // augment 3597 } 3598 3600 6.4. PIM-DM Module 3602 This module references [RFC3973]. 3604 file "ietf-pim-dm@2018-04-16.yang" 3605 module ietf-pim-dm { 3606 yang-version 1.1; 3607 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-dm"; 3608 prefix pim-dm; 3610 import ietf-routing { 3611 prefix "rt"; 3612 } 3614 import ietf-pim-base { 3615 prefix "pim-base"; 3616 } 3618 organization 3619 "IETF PIM Working Group"; 3621 contact 3622 "WG Web: 3623 WG List: 3625 Editor: Xufeng Liu 3626 3628 Editor: Pete McAllister 3629 3631 Editor: Anish Peter 3632 3634 Editor: Mahesh Sivakumar 3635 3637 Editor: Yisong Liu 3638 3640 Editor: Fangwei Hu 3641 "; 3643 description 3644 "The YANG module defines a PIM (Protocol Independent Multicast) 3645 DM (Dense Mode) model. 3647 Copyright (c) 2018 IETF Trust and the persons identified as 3648 authors of the code. All rights reserved. 3650 Redistribution and use in source and binary forms, with or 3651 without modification, is permitted pursuant to, and subject to 3652 the license terms contained in, the Simplified BSD License set 3653 forth in Section 4.c of the IETF Trust's Legal Provisions 3654 Relating to IETF Documents 3655 (http://trustee.ietf.org/license-info). 3657 This version of this YANG module is part of RFC XXXX; see the 3658 RFC itself for full legal notices."; 3660 revision 2018-04-16 { 3661 description 3662 "Initial revision."; 3663 reference 3664 "RFC XXXX: A YANG Data Model for PIM. 3665 RFC 3973: Protocol Independent Multicast - Dense Mode 3666 (PIM-DM): Protocol Specification (Revised)."; 3667 } 3669 /* 3670 * Configuration data nodes 3671 */ 3673 augment "/rt:routing/rt:control-plane-protocols/" 3674 + "pim-base:pim/pim-base:address-family" { 3675 description "PIM DM (Dense Mode) augmentation."; 3677 container dm { 3678 presence "Present to enable dense-mode."; 3679 description 3680 "PIM DM configuration data."; 3681 } // Dm 3683 } // augment 3685 augment "/rt:routing/rt:control-plane-protocols/" 3686 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 3687 + "pim-base:address-family" { 3688 description "PIM DM augmentation to PIM base interface."; 3690 container dm { 3691 presence "Present to enable dense-mode."; 3692 description 3693 "PIM DM configuration data."; 3694 } // sm 3695 } // augment 3696 } 3697 3699 6.5. PIM-BIDIR Module 3701 This module references [RFC5015]. 3703 file "ietf-pim-bidir@2018-04-16.yang" 3704 module ietf-pim-bidir { 3705 yang-version 1.1; 3706 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-bidir"; 3707 prefix pim-bidir; 3709 import ietf-inet-types { 3710 prefix "inet"; 3711 } 3713 import ietf-routing-types { 3714 prefix "rt-types"; 3715 } 3717 import ietf-interfaces { 3718 prefix "if"; 3719 } 3721 import ietf-routing { 3722 prefix "rt"; 3723 } 3725 import ietf-pim-base { 3726 prefix "pim-base"; 3727 } 3728 import ietf-pim-rp { 3729 prefix "pim-rp"; 3730 } 3732 organization 3733 "IETF PIM Working Group"; 3735 contact 3736 "WG Web: 3737 WG List: 3739 Editor: Xufeng Liu 3740 3742 Editor: Pete McAllister 3743 3745 Editor: Anish Peter 3746 3748 Editor: Mahesh Sivakumar 3749 3751 Editor: Yisong Liu 3752 3754 Editor: Fangwei Hu 3755 "; 3757 description 3758 "The YANG module defines a PIM (Protocol Independent Multicast) 3759 BIDIR (Bidirectional) mode model. 3761 Copyright (c) 2018 IETF Trust and the persons identified as 3762 authors of the code. All rights reserved. 3764 Redistribution and use in source and binary forms, with or 3765 without modification, is permitted pursuant to, and subject to 3766 the license terms contained in, the Simplified BSD License set 3767 forth in Section 4.c of the IETF Trust's Legal Provisions 3768 Relating to IETF Documents 3769 (http://trustee.ietf.org/license-info). 3771 This version of this YANG module is part of RFC XXXX; see the 3772 RFC itself for full legal notices."; 3774 revision 2018-04-16 { 3775 description 3776 "Initial revision."; 3777 reference 3778 "RFC XXXX: A YANG Data Model for PIM. 3779 RFC5015: Bidirectional Protocol Independent Multicast 3780 (BIDIR-PIM)."; 3782 } 3784 /* 3785 * Features 3786 */ 3787 feature intf-df-election { 3788 description 3789 "Support configuration of interface DF election."; 3790 reference 3791 "RFC5015: Bidirectional Protocol Independent Multicast 3792 (BIDIR-PIM). Sec. 3.5."; 3793 } 3795 /* 3796 * Identities 3797 */ 3798 identity rp-bidir { 3799 base pim-rp:rp-mode; 3800 description 3801 "BIDIR (Bidirectional) mode."; 3802 } 3804 identity df-state { 3805 description 3806 "DF (Designated Forwarder) election state type."; 3807 reference 3808 "RFC5015: Bidirectional Protocol Independent Multicast 3809 (BIDIR-PIM)."; 3810 } 3812 identity df-state-offer { 3813 base df-state; 3814 description 3815 "Initial election state. When in the Offer state, a router 3816 thinks it can eventually become the winner and periodically 3817 generates Offer messages."; 3818 } 3820 identity df-state-lose { 3821 base df-state; 3822 description 3823 "There either is a different election winner or that no 3824 router on the link has a path to the RPA (Rendezvous-Point 3825 Address)."; 3826 } 3828 identity df-state-win { 3829 base df-state; 3830 description 3831 "The router is the acting DF without any contest."; 3832 } 3834 identity df-state-backoff { 3835 base df-state; 3836 description 3837 "The router is the acting DF but another router has made a 3838 bid to take over."; 3839 } 3841 /* 3842 * Groupings 3843 */ 3844 grouping static-rp-bidir-container { 3845 description 3846 "Grouping that contains BIDIR (Bidirectional) attributes for 3847 static RP (Rendezvous-Point)."; 3848 container bidir { 3849 presence 3850 "Indicate the support of BIDIR mode."; 3851 description 3852 "PIM BIDIR configuration data."; 3854 uses pim-rp:static-rp-attributes; 3855 } // bidir 3856 } // static-rp-bidir-container 3858 grouping interface-df-election-state-attributes { 3859 description 3860 "Grouping that contains the state attributes of a DF election 3861 on an interface."; 3862 leaf interface-state { 3863 type identityref { 3864 base df-state; 3865 } 3866 description 3867 "Interface state with respect to the DF election."; 3868 } 3869 leaf up-time { 3870 type rt-types:timeticks64; 3871 description 3872 "The number of time ticks (hundredths of a second) since the 3873 current DF has been elected as the winner."; 3874 } 3875 leaf winner-metric { 3876 type uint32; 3877 description 3878 "The unicast routing metric used by the DF to reach the RP. 3879 The value is announced by the DF."; 3880 } 3881 leaf winner-metric-preference { 3882 type uint32; 3883 description 3884 "The preference value assigned to the unicast routing 3885 protocol that the DF used to obtain the route to the RP. 3886 The value is announced by the DF."; 3887 } 3888 } // interface-df-election-state-attributes 3890 /* 3891 * Configuration data and operational state date nodes 3892 */ 3894 augment "/rt:routing/rt:control-plane-protocols/" 3895 + "pim-base:pim/pim-base:address-family" { 3896 description "PIM BIDIR (Bidirectional) augmentation."; 3898 container bidir { 3899 presence "Present to enable BIDIR mode."; 3900 description 3901 "PIM BIDIR configuration data."; 3902 } // bidir 3903 } // augment 3905 augment "/rt:routing/rt:control-plane-protocols/" 3906 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 3907 + "pim-base:address-family" { 3908 description "PIM BIDIR augmentation."; 3910 container bidir { 3911 presence "Present to enable BIDIR mode."; 3912 description 3913 "PIM BIDIR configuration data."; 3914 container df-election { 3915 if-feature intf-df-election; 3916 description 3917 "DF election attributes."; 3918 leaf offer-interval { 3919 type uint16; 3920 units milliseconds; 3921 default 100; 3922 description 3923 "Offer interval specifies the interval between repeated 3924 DF election messages."; 3925 } 3926 leaf backoff-interval { 3927 type uint16; 3928 units milliseconds; 3929 default 1000; 3930 description 3931 "This is the interval that the acting DF waits between 3932 receiving a better DF Offer and sending the Pass message 3933 to transfer DF responsibility"; 3934 } 3935 leaf offer-multiplier { 3936 type uint8; 3937 default 3; 3938 description 3939 "This is number of transmission attempts for DF election 3940 messages. 3941 When a DF election Offer or Winner message fails to be 3942 received, the message is retransmitted. 3943 The offer-multiplier sets the minimum number of DF 3944 election messages that must fail to be received for DF 3945 election to fail. 3946 If a router receives from a neighbor a better offer than 3947 its own, the router stops participating in the election 3948 for a period of offer-multiplier * offer-interval. 3949 Eventually, all routers except the best candidate stop 3950 sending Offer messages."; 3951 } 3952 } // df-election 3953 } // bidir 3954 } // augment 3956 augment "/rt:routing/rt:control-plane-protocols/" 3957 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 3958 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 3959 description "PIM BIDIR augmentation."; 3961 uses static-rp-bidir-container; 3962 } // augment 3964 augment "/rt:routing/rt:control-plane-protocols/" 3965 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 3966 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 3967 description "PIM BIDIR augmentation."; 3968 uses static-rp-bidir-container; 3969 } // augment 3971 /* 3972 * Operational state data nodes 3973 */ 3975 augment "/rt:routing/rt:control-plane-protocols/" 3976 + "pim-base:pim/pim-base:address-family/pim-rp:rp" { 3977 description "PIM BIDIR augmentation to RP state data."; 3979 container bidir { 3980 config false; 3981 description 3982 "PIM BIDIR state data."; 3983 container df-election { 3984 description 3985 "DF election data."; 3986 list ipv4-rp { 3987 when "../../../../pim-base:address-family = 'rt:ipv4'" { 3988 description 3989 "Only applicable to IPv4 address family."; 3990 } 3991 key "rp-address"; 3992 description 3993 "A list of IPv4 RP addresses."; 3994 leaf rp-address { 3995 type inet:ipv4-address; 3996 description 3997 "The address of the RP."; 3998 } 3999 } // ipv4-rp 4000 list ipv6-rp { 4001 when "../../../../pim-base:address-family = 'rt:ipv6'" { 4002 description 4003 "Only applicable to IPv6 address family."; 4004 } 4005 key "rp-address"; 4006 description 4007 "A list of IPv6 RP addresses."; 4008 leaf rp-address { 4009 type inet:ipv6-address; 4010 description 4011 "The address of the RP."; 4012 } 4013 } // ipv6-rp 4014 } // df-election 4015 container interface-df-election { 4016 description 4017 "Interface DF election data."; 4018 list ipv4-rp { 4019 when "../../../../pim-base:address-family = 'rt:ipv4'" { 4020 description 4021 "Only applicable to IPv4 address family."; 4022 } 4023 key "rp-address interface-name"; 4024 description 4025 "A list of IPv4 RP addresses."; 4026 leaf rp-address { 4027 type inet:ipv4-address; 4028 description 4029 "The address of the RP."; 4030 } 4031 leaf interface-name { 4032 type if:interface-ref; 4033 description 4034 "The name of the interface for which the DF state is 4035 being maintained."; 4036 } 4037 leaf df-address { 4038 type inet:ipv4-address; 4039 description 4040 "The address of the elected DF, which is the winner of 4041 the DF Election process."; 4042 } 4043 uses interface-df-election-state-attributes; 4044 } // ipv4-rp 4045 list ipv6-rp { 4046 when "../../../../pim-base:address-family = 'rt:ipv6'" { 4047 description 4048 "Only applicable to IPv6 address family."; 4049 } 4050 key "rp-address interface-name"; 4051 description 4052 "A list of IPv6 RP addresses."; 4053 leaf rp-address { 4054 type inet:ipv6-address; 4055 description 4056 "The address of the RP."; 4057 } 4058 leaf interface-name { 4059 type if:interface-ref; 4060 description 4061 "The address of the RP."; 4062 } 4063 leaf df-address { 4064 type inet:ipv6-address; 4065 description 4066 "DF address."; 4067 } 4068 uses interface-df-election-state-attributes; 4069 } // ipv6-rp 4070 } // interface-df-election 4071 } 4072 } // augment 4074 augment "/rt:routing/rt:control-plane-protocols/" 4075 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 4076 + "pim-base:address-family/pim-base:neighbors/" 4077 + "pim-base:ipv4-neighbor" { 4078 description 4079 "PIM BIDIR augmentation to the IPv4 neighbor state data."; 4080 leaf bidir-capable { 4081 type boolean; 4082 description 4083 "'true' if the neighbor is using the Bidirectional Capable 4084 option in the last Hello message."; 4085 } 4086 } // augment 4088 augment "/rt:routing/rt:control-plane-protocols/" 4089 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 4090 + "pim-base:address-family/pim-base:neighbors/" 4091 + "pim-base:ipv6-neighbor" { 4092 description 4093 "PIM BIDIR augmentation to the IPv6 neighbor state data."; 4094 leaf bidir-capable { 4095 type boolean; 4096 description 4097 "'true' if the neighbor is using the Bidirectional Capable 4098 option in the last Hello message."; 4099 } 4100 } // augment 4101 } 4102 4104 7. Implementation Status 4106 This section to be removed by the RFC editor. 4108 This section records the status of known implementations of the 4109 protocol defined by this specification at the time of posting of this 4110 Internet-Draft, and is based on a proposal described in [RFC7942]. 4111 The description of implementations in this section is intended to 4112 assist the IETF in its decision processes in progressing drafts to 4113 RFCs. Please note that the listing of any individual implementation 4114 here does not imply endorsement by the IETF. Furthermore, no effort 4115 has been spent to verify the information presented here that was 4116 supplied by IETF contributors. This is not intended as, and must not 4117 be construed to be, a catalog of available implementations or their 4118 features. Readers are advised to note that other implementations may 4119 exist. 4121 According to RFC 7942, "this will allow reviewers and working groups 4122 to assign due consideration to documents that have the benefit of 4123 running code, which may serve as evidence of valuable experimentation 4124 and feedback that have made the implemented protocols more mature. 4125 It is up to the individual working groups to use this information as 4126 they see fit". 4128 This document is the work result of the PIM working group's YANG 4129 multicast design team. The following wiki page contains the 4130 information on the design team members, the meeting discussions, 4131 lists of modeled features, and which features are supported by which 4132 existing implementations: 4134 https://trac.ietf.org/trac/pim/wiki/yang 4136 8. Security Considerations 4138 The YANG module specified in this document defines a schema for data 4139 that is designed to be accessed via network management protocols such 4140 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 4141 is the secure transport layer, and the mandatory-to-implement secure 4142 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 4143 is HTTPS, and the mandatory-to-implement secure transport is TLS 4144 [RFC5246]. 4146 The NETCONF access control model [RFC6536] provides the means to 4147 restrict access for particular NETCONF or RESTCONF users to a 4148 preconfigured subset of all available NETCONF or RESTCONF protocol 4149 operations and content. 4151 There are a number of data nodes defined in this YANG module that are 4152 writable/creatable/deletable (i.e., config true, which is the 4153 default). These data nodes may be considered sensitive or vulnerable 4154 in some network environments. Write operations (e.g., edit-config) 4155 to these data nodes without proper protection can have a negative 4156 effect on network operations. These are the subtrees and data nodes 4157 and their sensitivity/vulnerability: 4159 pim-base:graceful-restart 4160 This subtree specifies the configuration for the PIM graceful 4161 restart at the global level on a device. Modifying the 4162 configuration can cause temporary interruption to the multicast 4163 routing during restart. 4165 pim-base:address-family/pim-base:graceful-restart 4166 This subtree specifies the per address family configuration for 4167 the PIM graceful restart on a device. Modifying the configuration 4168 can cause temporary interruption to the multicast routing during 4169 restart. 4171 pim-base:address-family/pim-rp:pim-rp:rp 4172 This subtree specifies the configuration for the PIM Rendezvous 4173 Point (RP) on a device. Modifying the configuration can cause RP 4174 malfunctions. 4176 pim-base:address-family/pim-sm:sm 4177 This subtree specifies the configuration for the PIM Sparse Mode 4178 (PIM-SM) on a device. Modifying the configuration can cause 4179 multicast traffic disabled or rerouted in PIM-SM. 4181 pim-base:address-family/pim-dm:dm 4182 This subtree specifies the configuration for the PIM Dense Mode 4183 (PIM-DM) on a device. Modifying the configuration can cause 4184 multicast traffic disabled or rerouted in PIM-DM. 4186 pim-base:address-family/pim-bidir:bidir 4187 This subtree specifies the configuration for the PIM Bidirectional 4188 Mode (PIM-BIDIR) on a device. Modifying the configuration can 4189 cause multicast traffic disabled or rerouted in PIM-BIDIR. 4191 pim-base:interfaces 4192 This subtree specifies the configuration for the PIM interfaces on 4193 a device. Modifying the configuration can cause the PIM protocol 4194 to get insufficient or incorrect information. 4196 These subtrees are all nnder /rt:routing/rt:control-plane-protocols/ 4197 pim-base:pim. 4199 Unauthorized access to any data node of these subtrees can adversely 4200 affect the multicast routing subsystem of both the local device and 4201 the network. This may lead to network malfunctions, delivery of 4202 packets to inappropriate destinations, and other problems. 4204 Some of the readable data nodes in this YANG module may be considered 4205 sensitive or vulnerable in some network environments. It is thus 4206 important to control read access (e.g., via get, get-config, or 4207 notification) to these data nodes. These are the subtrees and data 4208 nodes and their sensitivity/vulnerability: 4210 /rt:routing/rt:control-plane-protocols/pim-base:pim 4212 Unauthorized access to any data node of the above subtree can 4213 disclose the operational state information of PIM on this device. 4215 9. IANA Considerations 4217 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 4218 actual RFC number (and remove this note). 4220 This document registers the following namespace URIs in the IETF XML 4221 registry [RFC3688]: 4223 -------------------------------------------------------------------- 4224 URI: urn:ietf:params:xml:ns:yang:ietf-pim-base 4225 Registrant Contact: The IESG. 4226 XML: N/A, the requested URI is an XML namespace. 4227 -------------------------------------------------------------------- 4229 -------------------------------------------------------------------- 4230 URI: urn:ietf:params:xml:ns:yang:ietf-pim-bidir 4231 Registrant Contact: The IESG. 4232 XML: N/A, the requested URI is an XML namespace. 4233 -------------------------------------------------------------------- 4235 -------------------------------------------------------------------- 4236 URI: urn:ietf:params:xml:ns:yang:ietf-pim-dm 4237 Registrant Contact: The IESG. 4238 XML: N/A, the requested URI is an XML namespace. 4239 -------------------------------------------------------------------- 4241 -------------------------------------------------------------------- 4242 URI: urn:ietf:params:xml:ns:yang:ietf-pim-rp 4243 Registrant Contact: The IESG. 4244 XML: N/A, the requested URI is an XML namespace. 4245 -------------------------------------------------------------------- 4247 -------------------------------------------------------------------- 4248 URI: urn:ietf:params:xml:ns:yang:ietf-pim-sm 4249 Registrant Contact: The IESG. 4250 XML: N/A, the requested URI is an XML namespace. 4251 -------------------------------------------------------------------- 4253 This document registers the following YANG modules in the YANG Module 4254 Names registry [RFC7950]: 4256 -------------------------------------------------------------------- 4257 name: ietf-pim-base 4258 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-base 4259 prefix: pim-base 4260 reference: RFC XXXX 4261 -------------------------------------------------------------------- 4263 -------------------------------------------------------------------- 4264 name: ietf-pim-bidir 4265 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-bidir 4266 prefix: pim-bidir 4267 reference: RFC XXXX 4268 -------------------------------------------------------------------- 4270 -------------------------------------------------------------------- 4271 name: ietf-pim-dm 4272 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-dm 4273 prefix: pim-dm 4274 reference: RFC XXXX 4275 -------------------------------------------------------------------- 4277 -------------------------------------------------------------------- 4278 name: ietf-pim-rp 4279 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-rp 4280 prefix: pim-rp 4281 reference: RFC XXXX 4282 -------------------------------------------------------------------- 4284 -------------------------------------------------------------------- 4285 name: ietf-pim-sm 4286 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-sm 4287 prefix: pim-sm 4288 reference: RFC XXXX 4289 -------------------------------------------------------------------- 4291 10. Acknowledgements 4293 The authors would like to thank Steve Baillargeon, Guo Feng, Robert 4294 Kebler, Tanmoy Kundu, and Stig Venaas for their valuable 4295 contributions. 4297 11. References 4299 11.1. Normative References 4301 [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific 4302 Multicast (SSM)", RFC 3569, DOI 10.17487/RFC3569, July 4303 2003, . 4305 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 4306 DOI 10.17487/RFC3688, January 2004, 4307 . 4309 [RFC3973] Adams, A., Nicholas, J., and W. Siadak, "Protocol 4310 Independent Multicast - Dense Mode (PIM-DM): Protocol 4311 Specification (Revised)", RFC 3973, DOI 10.17487/RFC3973, 4312 January 2005, . 4314 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 4315 IP", RFC 4607, DOI 10.17487/RFC4607, August 2006, 4316 . 4318 [RFC4610] Farinacci, D. and Y. Cai, "Anycast-RP Using Protocol 4319 Independent Multicast (PIM)", RFC 4610, 4320 DOI 10.17487/RFC4610, August 2006, 4321 . 4323 [RFC5015] Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano, 4324 "Bidirectional Protocol Independent Multicast (BIDIR- 4325 PIM)", RFC 5015, DOI 10.17487/RFC5015, October 2007, 4326 . 4328 [RFC5059] Bhaskar, N., Gall, A., Lingard, J., and S. Venaas, 4329 "Bootstrap Router (BSR) Mechanism for Protocol Independent 4330 Multicast (PIM)", RFC 5059, DOI 10.17487/RFC5059, January 4331 2008, . 4333 [RFC5060] Sivaramu, R., Lingard, J., McWalter, D., Joshi, B., and A. 4334 Kessler, "Protocol Independent Multicast MIB", RFC 5060, 4335 DOI 10.17487/RFC5060, January 2008, 4336 . 4338 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 4339 (TLS) Protocol Version 1.2", RFC 5246, 4340 DOI 10.17487/RFC5246, August 2008, 4341 . 4343 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 4344 and A. Bierman, Ed., "Network Configuration Protocol 4345 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 4346 . 4348 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 4349 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 4350 . 4352 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 4353 Protocol (NETCONF) Access Control Model", RFC 6536, 4354 DOI 10.17487/RFC6536, March 2012, 4355 . 4357 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 4358 RFC 6991, DOI 10.17487/RFC6991, July 2013, 4359 . 4361 [RFC7761] Fenner, B., Handley, M., Holbrook, H., Kouvelas, I., 4362 Parekh, R., Zhang, Z., and L. Zheng, "Protocol Independent 4363 Multicast - Sparse Mode (PIM-SM): Protocol Specification 4364 (Revised)", STD 83, RFC 7761, DOI 10.17487/RFC7761, March 4365 2016, . 4367 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 4368 RFC 7950, DOI 10.17487/RFC7950, August 2016, 4369 . 4371 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 4372 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 4373 . 4375 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 4376 "Common YANG Data Types for the Routing Area", RFC 8294, 4377 DOI 10.17487/RFC8294, December 2017, 4378 . 4380 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 4381 and R. Wilton, "Network Management Datastore Architecture 4382 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 4383 . 4385 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 4386 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 4387 . 4389 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 4390 Routing Management (NMDA Version)", RFC 8349, 4391 DOI 10.17487/RFC8349, March 2018, 4392 . 4394 [I-D.ietf-bfd-yang] 4395 Rahman, R., Zheng, L., Jethanandani, M., Networks, J., and 4396 G. Mirsky, "YANG Data Model for Bidirectional Forwarding 4397 Detection (BFD)", draft-ietf-bfd-yang-13 (work in 4398 progress), March 2018. 4400 11.2. Informative References 4402 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 4403 Thyagarajan, "Internet Group Management Protocol, Version 4404 3", RFC 3376, DOI 10.17487/RFC3376, October 2002, 4405 . 4407 [RFC3618] Fenner, B., Ed. and D. Meyer, Ed., "Multicast Source 4408 Discovery Protocol (MSDP)", RFC 3618, 4409 DOI 10.17487/RFC3618, October 2003, 4410 . 4412 [RFC3810] Vida, R., Ed. and L. Costa, Ed., "Multicast Listener 4413 Discovery Version 2 (MLDv2) for IPv6", RFC 3810, 4414 DOI 10.17487/RFC3810, June 2004, 4415 . 4417 [RFC5306] Shand, M. and L. Ginsberg, "Restart Signaling for IS-IS", 4418 RFC 5306, DOI 10.17487/RFC5306, October 2008, 4419 . 4421 [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 4422 (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, 4423 . 4425 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 4426 Thomas, "Label Distribution Protocol Extensions for Point- 4427 to-Multipoint and Multipoint-to-Multipoint Label Switched 4428 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 4429 . 4431 [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running 4432 Code: The Implementation Status Section", BCP 205, 4433 RFC 7942, DOI 10.17487/RFC7942, July 2016, 4434 . 4436 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 4437 RFC 7951, DOI 10.17487/RFC7951, August 2016, 4438 . 4440 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 4441 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 4442 . 4444 [I-D.ietf-netmod-rfc6087bis] 4445 Bierman, A., "Guidelines for Authors and Reviewers of YANG 4446 Data Model Documents", draft-ietf-netmod-rfc6087bis-20 4447 (work in progress), March 2018. 4449 Appendix A. Data Tree Example 4451 This section contains an example of an instance data tree in the JSON 4452 encoding [RFC7951], containing both configuration and state data. 4454 lo0: 2001:db8:0:200::1 (RP address) 4455 | +-------+ | 4456 | | Router| | 4457 eth21 +---+ R2 +---+ eth23 4458 | | (RP) | | 4459 | +-------+ | lo0: 2001:db8:0:300::1 4460 | +-------+ | | +-------+ | 4461 | | Router| | | | Router| | 4462 eth10 +--+ R1 +---+ eth12 eth32 +---+ R3 +--+ eth30 4463 | | | | | | | | 4464 | +-------+ | +-------+ | 4465 +-------+ | | +-------+ | +-------+ 4466 | | | | | Router| | | | | 4467 | +--+ +---+ R4 +---+ +-------+ +--+ | 4468 | | | | | | | | Router| | | | 4469 +-------+ | | +-------+ +---+ R5 | | +-------+ 4470 Source | | | Receiver 4471 | +-------+ 4473 The configuration instance data tree for Router R3 in the above 4474 figure could be as follows: 4476 { 4477 "ietf-interfaces:interfaces": { 4478 "interface": [ 4479 { 4480 "name": "lo0", 4481 "description": "R3 loopback interface.", 4482 "type": "iana-if-type:softwareLoopback", 4483 "ietf-ip:ipv6": { 4484 "address": [ 4485 { 4486 "ip": "2001:db8:0:300::1", 4487 "prefix-length": 64 4488 } 4489 ] 4490 } 4491 }, 4492 { 4493 "name": "eth30", 4494 "description": "An interface connected to the receiver.", 4495 "type": "iana-if-type:ethernetCsmacd", 4496 "ietf-ip:ipv6": { 4497 "forwarding": true 4498 } 4499 }, 4500 { 4501 "name": "eth32", 4502 "description": "An interface connected to RP (R2).", 4503 "type": "iana-if-type:ethernetCsmacd", 4504 "ietf-ip:ipv6": { 4505 "forwarding": true 4506 } 4507 } 4508 ] 4509 }, 4510 "ietf-routing:routing": { 4511 "router-id": "203.0.113.3", 4512 "control-plane-protocols": { 4513 "ietf-pim-base:pim": { 4514 "address-family": [ 4515 { 4516 "address-family": "ietf-routing:ipv6", 4517 "ietf-pim-rp:rp": { 4518 "static-rp": { 4519 "ipv6-rp": [ 4520 { 4521 "rp-address": "2001:db8:0:200::1", 4522 "ietf-pim-sm:sm": { 4523 } 4524 } 4525 ] 4526 } 4527 } 4528 } 4529 ], 4530 "interfaces": { 4531 "interface": [ 4532 { 4533 "name": "lo0", 4534 "address-family": [ 4535 { 4536 "address-family": "ietf-routing:ipv6", 4537 "hello-interval": "infinity", 4538 "ietf-pim-sm:sm": { 4539 } 4540 } 4541 ] 4542 }, 4543 { 4544 "name": "eth30", 4545 "address-family": [ 4546 { 4547 "address-family": "ietf-routing:ipv6", 4548 "ietf-pim-sm:sm": { 4549 } 4550 } 4551 ] 4552 }, 4553 { 4554 "name": "eth32", 4555 "address-family": [ 4556 { 4557 "address-family": "ietf-routing:ipv6", 4558 "ietf-pim-sm:sm": { 4559 } 4560 } 4561 ] 4562 } 4563 ] 4564 } 4565 } 4566 } 4567 } 4568 } 4570 The corresponding operational state data for Router R3 could be as 4571 follows: 4573 { 4574 "ietf-interfaces:interfaces": { 4575 "interface": [ 4576 { 4577 "name": "lo0", 4578 "description": "R3 loopback interface.", 4579 "type": "iana-if-type:softwareLoopback", 4580 "phys-address": "00:00:5e:00:53:03", 4581 "oper-status": "up", 4582 "statistics": { 4583 "discontinuity-time": "2018-01-23T12:34:56-05:00" 4584 }, 4585 "ietf-ip:ipv6": { 4586 "mtu": 1500, 4587 "address": [ 4588 { 4589 "ip": "2001:db8:0:300::1", 4590 "prefix-length": 64, 4591 "origin": "static", 4592 "status": "preferred" 4594 }, 4595 { 4596 "ip": "fe80::200:5eff:fe00:5303", 4597 "prefix-length": 64, 4598 "origin": "link-layer", 4599 "status": "preferred" 4600 } 4601 ], 4602 "neighbor": [ 4603 ] 4604 } 4605 }, 4606 { 4607 "name": "eth30", 4608 "description": "An interface connected to the receiver.", 4609 "type": "iana-if-type:ethernetCsmacd", 4610 "phys-address": "00:00:5e:00:53:30", 4611 "oper-status": "up", 4612 "statistics": { 4613 "discontinuity-time": "2018-01-23T12:34:56-05:00" 4614 }, 4615 "ietf-ip:ipv6": { 4616 "forwarding": true, 4617 "mtu": 1500, 4618 "address": [ 4619 { 4620 "ip": "fe80::200:5eff:fe00:5330", 4621 "prefix-length": 64, 4622 "origin": "link-layer", 4623 "status": "preferred" 4624 } 4625 ], 4626 "neighbor": [ 4627 ] 4628 } 4629 }, 4630 { 4631 "name": "eth32", 4632 "description": "An interface connected to RP (R2).", 4633 "type": "iana-if-type:ethernetCsmacd", 4634 "phys-address": "00:00:5e:00:53:32", 4635 "oper-status": "up", 4636 "statistics": { 4637 "discontinuity-time": "2018-01-23T12:34:56-05:00" 4638 }, 4639 "ietf-ip:ipv6": { 4640 "forwarding": true, 4641 "mtu": 1500, 4642 "address": [ 4643 { 4644 "ip": "fe80::200:5eff:fe00:5332", 4645 "prefix-length": 64, 4646 "origin": "link-layer", 4647 "status": "preferred" 4648 } 4649 ], 4650 "neighbor": [ 4651 { 4652 "ip": "fe80::200:5eff:fe00:5323", 4653 "link-layer-address": "00:00:5e:00:53:23", 4654 "origin": "dynamic", 4655 "is-router": [null], 4656 "state": "reachable" 4657 } 4658 ] 4659 } 4660 } 4661 ] 4662 }, 4663 "ietf-routing:routing": { 4664 "router-id": "203.0.113.1", 4665 "interfaces": { 4666 "interface": [ 4667 "lo0", 4668 "eth30", 4669 "eth32" 4670 ] 4671 }, 4672 "control-plane-protocols": { 4673 "ietf-pim-base:pim": { 4674 "address-family": [ 4675 { 4676 "address-family": "ietf-routing:ipv6", 4677 "statistics": { 4678 "discontinuity-time": "2018-01-23T12:34:56-05:00" 4679 }, 4680 "topology-tree-info": { 4681 "ipv6-route": [ 4682 { 4683 "group": "ff06::1", 4684 "source-address": "*", 4685 "is-rpt": true, 4686 "expiration": 16, 4687 "incoming-interface": "eth32", 4688 "is-spt": false, 4689 "mode": "pim-asm", 4690 "msdp-learned": false, 4691 "rp-address": "2001:db8:0:200::1", 4692 "rpf-neighbor": "fe80::200:5eff:fe00:5323", 4693 "up-time": 123400, 4694 "outgoing-interface": [ 4695 { 4696 "name": "eth30", 4697 "expiration": 36, 4698 "up-time": 223400, 4699 "jp-state": "join" 4700 } 4701 ] 4702 }, 4703 { 4704 "group": "ff06::1", 4705 "source-address": "2001:db8:1:1::100", 4706 "is-rpt": false, 4707 "expiration": 8, 4708 "incoming-interface": "eth32", 4709 "is-spt": true, 4710 "mode": "pim-asm", 4711 "msdp-learned": false, 4712 "rp-address": "2001:db8:0:200::1", 4713 "rpf-neighbor": "fe80::200:5eff:fe00:5323", 4714 "up-time": 5200, 4715 "outgoing-interface": [ 4716 { 4717 "name": "eth30", 4718 "expiration": 6, 4719 "up-time": 5600, 4720 "jp-state": "join" 4721 } 4722 ] 4723 } 4724 ] 4725 }, 4726 "ietf-pim-rp:rp": { 4727 "static-rp": { 4728 "ipv6-rp": [ 4729 { 4730 "rp-address": "2001:db8:0:200::1", 4731 "ietf-pim-sm:sm": { 4732 } 4733 } 4734 ] 4735 }, 4736 "rp-list": { 4737 "ipv6-rp": [ 4738 { 4739 "rp-address": "2001:db8:0:200::1", 4740 "mode": "ietf-pim-sm:rp-sm", 4741 "info-source-type": "static", 4742 "up-time": 323400, 4743 "expiration": "not-set" 4744 } 4745 ] 4746 }, 4747 "rp-mappings": { 4748 "ipv6-rp": [ 4749 { 4750 "group-range": "ff06::1/128", 4751 "rp-address": "2001:db8:0:200::1", 4752 "up-time": 123400, 4753 "expiration": "36" 4754 } 4755 ] 4756 } 4757 } 4758 } 4759 ], 4760 "interfaces": { 4761 "interface": [ 4762 { 4763 "name": "lo0", 4764 "address-family": [ 4765 { 4766 "address-family": "ietf-routing:ipv6", 4767 "hello-interval": "infinity", 4768 "ietf-pim-sm:sm": { 4769 }, 4770 "oper-status": "up", 4771 "gen-id": 103689, 4772 "hello-expiration": "infinity", 4773 "ipv6": { 4774 "address": [ 4775 "fe80::200:5eff:fe00:5303" 4776 ], 4777 "dr-address": "fe80::200:5eff:fe00:5303" 4778 }, 4779 "neighbors": { 4780 "ipv6-neighbor": [ 4781 ] 4782 } 4783 } 4784 ] 4785 }, 4786 { 4787 "name": "eth30", 4788 "address-family": [ 4789 { 4790 "address-family": "ietf-routing:ipv6", 4791 "ietf-pim-sm:sm": { 4792 }, 4793 "oper-status": "up", 4794 "gen-id": 203689, 4795 "hello-expiration": 18, 4796 "ipv6": { 4797 "address": [ 4798 "fe80::200:5eff:fe00:5330" 4799 ], 4800 "dr-address": "fe80::200:5eff:fe00:5330" 4801 }, 4802 "neighbors": { 4803 "ipv6-neighbor": [ 4804 ] 4805 } 4806 } 4807 ] 4808 }, 4809 { 4810 "name": "eth32", 4811 "address-family": [ 4812 { 4813 "address-family": "ietf-routing:ipv6", 4814 "ietf-pim-sm:sm": { 4815 }, 4816 "oper-status": "up", 4817 "gen-id": 303689, 4818 "hello-expiration": 21, 4819 "ipv6": { 4820 "address": [ 4821 "fe80::200:5eff:fe00:5332" 4822 ], 4823 "dr-address": "fe80::200:5eff:fe00:5332" 4824 }, 4825 "neighbors": { 4826 "ipv6-neighbor": [ 4827 { 4828 "address": "fe80::200:5eff:fe00:5323", 4829 "expiration": 28, 4830 "dr-priority": 1, 4831 "gen-id": 102, 4832 "lan-prune-delay": { 4833 "present": false 4835 }, 4836 "up-time": 323500 4837 } 4838 ] 4839 } 4840 } 4841 ] 4842 } 4843 ] 4844 } 4845 } 4846 } 4847 } 4848 } 4850 Authors' Addresses 4852 Xufeng Liu 4853 Volta Networks 4855 EMail: xufeng.liu.ietf@gmail.com 4857 Pete McAllister 4858 Metaswitch Networks 4859 100 Church Street 4860 Enfield EN2 6BQ 4861 UK 4863 EMail: pete.mcallister@metaswitch.com 4865 Anish Peter 4866 Individual 4868 EMail: anish.ietf@gmail.com 4870 Mahesh Sivakumar 4871 Juniper Networks 4872 1133 Innovation Way 4873 Sunnyvale, California 4874 USA 4876 EMail: sivakumar.mahesh@gmail.com 4877 Yisong Liu 4878 Huawei Technologies 4879 Huawei Administration Building 4880 Longgang, Guangdong 518129 4881 China 4883 EMail: liuyisong@huawei.com 4885 Fangwei Hu 4886 ZTE Corporation 4887 889 Bibo Road 4888 Shanghai, Shanghai 201203 4889 China 4891 EMail: hu.fangwei@zte.com.cn