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