idnits 2.17.1 draft-ietf-pim-yang-08.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 522 has weird spacing: '...address ine...' == Line 524 has weird spacing: '...address ine...' == Line 534 has weird spacing: '...-length uin...' == Line 538 has weird spacing: '...terface if:...' == Line 543 has weird spacing: '...address ine...' == (15 more instances...) -- The document date (April 8, 2017) is 2567 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) ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) == Outdated reference: A later version (-17) exists of draft-ietf-rtgwg-routing-types-02 -- Obsolete informational reference (is this intentional?): RFC 6087 (Obsoleted by RFC 8407) == Outdated reference: A later version (-20) exists of draft-ietf-netmod-rfc6087bis-12 Summary: 3 errors (**), 0 flaws (~~), 9 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 PIM Working Group X. Liu 3 Internet-Draft Jabil 4 Intended status: Standards Track P. McAllister 5 Expires: October 10, 2017 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 April 8, 2017 16 A YANG data model for Protocol-Independent Multicast (PIM) 17 draft-ietf-pim-yang-08 19 Abstract 21 This document defines a YANG data model that can be used to configure 22 and manage Protocol Independent Multicast (PIM) devices. The model 23 covers the PIM protocol configuration, operational state, and event 24 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 October 10, 2017. 43 Copyright Notice 45 Copyright (c) 2017 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 61 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 62 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 63 1.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 4 64 2. Design of Data Model . . . . . . . . . . . . . . . . . . . . 5 65 2.1. Scope of model . . . . . . . . . . . . . . . . . . . . . 5 66 2.2. Optional capabilities . . . . . . . . . . . . . . . . . . 5 67 2.3. Top-level structure . . . . . . . . . . . . . . . . . . . 6 68 2.4. Position of address family in hierarchy . . . . . . . . . 6 69 3. Module Structure . . . . . . . . . . . . . . . . . . . . . . 7 70 3.1. PIM base module . . . . . . . . . . . . . . . . . . . . . 7 71 3.2. PIM RP module . . . . . . . . . . . . . . . . . . . . . . 11 72 3.3. PIM-SM module . . . . . . . . . . . . . . . . . . . . . . 14 73 3.4. PIM-DM module . . . . . . . . . . . . . . . . . . . . . . 15 74 3.5. PIM-BIDIR module . . . . . . . . . . . . . . . . . . . . 16 75 4. PIM YANG Modules . . . . . . . . . . . . . . . . . . . . . . 17 76 4.1. PIM base module . . . . . . . . . . . . . . . . . . . . . 17 77 4.2. PIM RP module . . . . . . . . . . . . . . . . . . . . . . 37 78 4.3. PIM-SM module . . . . . . . . . . . . . . . . . . . . . . 52 79 4.4. PIM-DM module . . . . . . . . . . . . . . . . . . . . . . 58 80 4.5. PIM-BIDIR module . . . . . . . . . . . . . . . . . . . . 60 81 5. Implementation Status . . . . . . . . . . . . . . . . . . . . 69 82 6. Security Considerations . . . . . . . . . . . . . . . . . . . 69 83 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 70 84 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 71 85 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 71 86 9.1. Normative References . . . . . . . . . . . . . . . . . . 71 87 9.2. Informative References . . . . . . . . . . . . . . . . . 72 88 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74 90 1. Introduction 92 YANG [RFC6020] [RFC6087] is a data definition language that was 93 introduced to model the configuration and running state of a device 94 managed using NETCONF [RFC6241]. YANG is now also being used as a 95 component of wider management interfaces, such as CLIs. 97 This document defines a YANG data model that can be used to configure 98 and manage Protocol-Independent Multicast (PIM) devices. This model 99 supports the core PIM protocol, as well as many other features 100 described in Section 2.1. Non-core features are defined as optional 101 in the provided data model. 103 1.1. Requirements Language 105 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 106 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 107 document are to be interpreted as described in BCP 14, RFC 2119 108 [RFC2119]. 110 1.2. Terminology 112 The terminology for describing YANG data models is found in 113 [RFC6020]. 115 This draft employs YANG tree diagrams, which are explained in 116 [I-D.ietf-netmod-rfc6087bis]. 118 The following abbreviations are used in this document and the defined 119 model: 121 ASM: 122 Any-Source Multicast service model [RFC3569] [RFC4607]. 124 BFD: 125 Bidirectional Forwarding Detection [RFC5880]. 127 BSR: 128 Bootstrap Router [RFC5059]. 130 DF: 131 Designated Forwarder [RFC5015]. 133 DR: 134 Designated Router [RFC7761]. 136 IGMP: 137 Internet Group Management Protocol [RFC3376]. 139 MLD: 140 Multicast Listener Discovery [RFC3810]. 142 MSDP: 143 Multicast Source Discovery Protocol [RFC3618]. 145 mLDP: 146 Multipoint extensions for LDP [RFC6388]. 148 MRIB: 149 Multicast Routing Information Base [RFC3973] [RFC5015] [RFC7761]. 151 mVPN: 152 Multicast VPN. 154 PIM: 155 Protocol Independent Multicast. [RFC3973] [RFC5015] [RFC7761]. 157 PIM-BIDIR: 158 Protocol Independent Multicast - Bidirectional Mode [RFC5015]. 160 PIM-DM: 161 Protocol Independent Multicast - Dense Mode [RFC3973]. 163 PIM-SM: 164 Protocol Independent Multicast - Sparse Mode [RFC7761]. 166 RP: 167 Rendezvous Point. [RFC7761]. 169 RPA: 170 Rendezvous Point Address. [RFC5015]. 172 RPF: 173 Reverse Path Forwarding. [RFC3973] [RFC5015] [RFC7761]. 175 RPT: 176 Rendezvous-Point Tree. [RFC7761]. 178 SPT: 179 Shortest Path Tree. [RFC7761]. 181 SSM: 182 Source-Specific Multicast service model [RFC3569] [RFC4607]. 184 VRF: 185 Virtual Routing and Forwarding. 187 1.3. Prefixes in Data Node Names 189 In this document, names of data nodes, actions, and other data model 190 objects are often used without a prefix, as long as it is clear from 191 the context in which YANG module each name is defined. Otherwise, 192 names are prefixed using the standard prefix associated with the 193 corresponding YANG module, as shown in Table 1. 195 +----------+--------------------+--------------------------------+ 196 | Prefix | YANG module | Reference | 197 +----------+--------------------+--------------------------------+ 198 | yang | ietf-yang-types | [RFC6991] | 199 | inet | ietf-inet-types | [RFC6991] | 200 | if | ietf-interfaces | [RFC7223] | 201 | rt | ietf-routing | [RFC8022] | 202 | rt-types | ietf-routing-types | [I-D.ietf-rtgwg-routing-types] | 203 +----------+--------------------+--------------------------------+ 205 Table 1: Prefixes and Corresponding YANG Modules 207 2. Design of Data Model 209 2.1. Scope of model 211 The model covers PIM Sparse Mode [RFC7761], including the Source- 212 Specific subset [RFC3569] [RFC4607], Dense Mode [RFC3973], and Bi- 213 directional PIM [RFC5015]. 215 The PIM extensions represented in the model include BSR [RFC5059] and 216 Anycast-RP [RFC4610]. 218 The data model can be used to configure and manage these protocol 219 features. The operational state data and statistics can be retrieved 220 by this model. The protocol specific notifications are also defined 221 in the model. 223 This model does not cover other multicast protocols such as IGMP/MLD, 224 MSDP, mVPN, or mLDP in-band signalling. It does not cover any 225 configuration required to generate the MRIB. These will be specified 226 in separate documents. 228 2.2. Optional capabilities 230 This model is designed to represent the capabilities of PIM devices 231 with various specifications, including some with basic subsets of the 232 PIM protocol. The main design goals of this draft are that any major 233 now-existing implementation may be said to support the base model, 234 and that the configuration of all implementations meeting the 235 specification is easy to express through some combination of the 236 features in the base model and simple vendor augmentations. 238 There is also value in widely-supported features being standardized, 239 to save work for individual vendors, and so that mapping between 240 different vendors' configuration is not needlessly complicated. 241 Therefore, these modules declare a number of features representing 242 capabilities that not all deployed devices support. 244 The extensive use of feature declarations should also substantially 245 simplify the capability negotiation process for a vendor's PIM 246 implementation. 248 On the other hand, operational state parameters are not so widely 249 designated as features, as there are many cases where the defaulting 250 of an operational state parameter would not cause any harm to the 251 system, and it is much more likely that an implementation without 252 native support for a piece of operational state would be able to 253 derive a suitable value for a state variable that is not natively 254 supported. 256 For the same reason, wide constant ranges (for example, timer maxima 257 and minima) will be used in the model. It is expected that vendors 258 will augment the model with any specific extensions and restrictions 259 needed to adapt it to their vendor specific implementation. 261 2.3. Top-level structure 263 This model defines several separate modules for modelling PIM 264 configuration, defined below. Again, this separation will make it 265 easier to express the specific capabilities of a PIM device. 267 The hierarchy of PIM configuration is designed so that objects that 268 are only relevant for one situation or feature are collected in a 269 container for that feature. For example, the configuration for PIM- 270 SM that is not relevant for an SSM-only implementation is collected 271 in an ASM container. 273 Where fields are not genuinely essential to protocol operation, they 274 are marked as optional. Some fields will be essential but have a 275 default specified, so they need not be explicitly configured. 277 This module structure also applies, where applicable, to the 278 operational state and notifications of the model. 280 2.4. Position of address family in hierarchy 282 This document contains address-family as a node in the hierarchy 283 multiple times: both under the interface list, and under the PIM 284 instance. This is similar to other protocol Yang models such as IS- 285 IS. 287 The reasoning for this is to make it easier for implementations in 288 which configuration options are not supported for specific address 289 families. 291 For these implementations, the restriction that interface 292 configuration must be address-family independent MAY either be 293 expressed as a vendor augmentation of an address-family-independent 294 parameter above the address-family level, or by a constraint on the 295 base model objects of a form similar to: 297 must ". = ../../address-family[address-family='ipv4']/dr-priority" { 298 error-app-tag "dr-priority-mismatch"; 299 error-message 300 "Error: IPv6 DR priority must match IPv4 DR priority."; 301 } 303 3. Module Structure 305 3.1. PIM base module 307 The PIM base module defines the router-wide configuration options not 308 specific to any PIM mode, and is included by the other modules. 309 There are a couple of things worth mentioning here regarding where 310 the PIM model fits in the overall routing hierarchy [RFC8022]: 312 1. This data model agrees to a routing-instance-centric (VRF) model 313 view as opposed to protocol-centric mainly because it fits well 314 into the routing-instance model, and it is easier to map from the 315 VRF-centric to the protocol-centric than the other way around due 316 to forward references. 318 2. The PIM base model augments "/rt:routing/rt:control-plane- 319 protocols" as opposed to augmenting "/rt:routing/rt:control- 320 plane-protocols/rt:control-plane-protocol", as the latter would 321 allow multiple protocol instances per VRF, while the PIM protocol 322 is designed to be enabled or disabled on the per VRF basis. 324 module: ietf-pim-base 325 augment /rt:routing/rt:control-plane-protocols: 326 +--rw pim! 327 +--rw graceful-restart 328 | +--rw enabled? boolean 329 | +--rw duration? uint16 330 +--rw address-family* [address-family] 331 | +--rw address-family identityref 332 | +--rw graceful-restart 333 | +--rw enabled? boolean 334 | +--rw duration? uint16 335 +--rw interfaces 336 +--rw interface* [interface] 337 +--rw interface if:interface-ref 338 +--rw address-family* [address-family] 339 +--rw address-family identityref 340 +--rw bfd {bfd}? 341 | +--rw enable? boolean 342 +--rw dr-priority? uint32 {intf-dr-priority}? 343 +--rw hello-interval? timer-value 344 {intf-hello-interval}? 345 +--rw (hello-holdtime-or-multiplier)? 346 | +--:(holdtime) {intf-hello-holdtime}? 347 | | +--rw hello-holdtime? timer-value 348 | +--:(multiplier) {intf-hello-multiplier}? 349 | +--rw hello-multiplier? 350 rt-types:timer-multiplier 351 +--rw jp-interval? timer-value 352 {intf-jp-interval}? 353 +--rw (jp-holdtime-or-multiplier)? 354 | +--:(holdtime) {intf-jp-holdtime}? 355 | | +--rw jp-holdtime? timer-value 356 | +--:(multiplier) {intf-jp-multiplier}? 357 | +--rw jp-multiplier? 358 rt-types:timer-multiplier 359 +--rw propagation-delay? uint16 360 {intf-propagation-delay}? 361 +--rw override-interval? uint16 362 {intf-override-interval}? 363 augment /rt:routing-state/rt:control-plane-protocols: 364 +--ro pim 365 +--ro address-family* [address-family] 366 | +--ro address-family identityref 367 | +--ro statistics 368 | | +--ro discontinuity-time? yang:date-and-time 369 | | +--ro error 370 | | | +--ro assert? yang:counter64 371 | | | +--ro bsr? yang:counter64 372 | | | +--ro candidate-rp-advertisement? yang:counter64 373 | | | +--ro df-election? yang:counter64 374 | | | +--ro hello? yang:counter64 375 | | | +--ro join-prune? yang:counter64 376 | | | +--ro register? yang:counter64 377 | | | +--ro register-stop? yang:counter64 378 | | | +--ro state-refresh? yang:counter64 379 | | +--ro queue 380 | | | +--ro size? uint32 381 | | | +--ro overflow? yang:counter32 382 | | +--ro received 383 | | | +--ro assert? yang:counter64 384 | | | +--ro bsr? yang:counter64 385 | | | +--ro candidate-rp-advertisement? yang:counter64 386 | | | +--ro df-election? yang:counter64 387 | | | +--ro hello? yang:counter64 388 | | | +--ro join-prune? yang:counter64 389 | | | +--ro register? yang:counter64 390 | | | +--ro register-stop? yang:counter64 391 | | | +--ro state-refresh? yang:counter64 392 | | +--ro sent 393 | | +--ro assert? yang:counter64 394 | | +--ro bsr? yang:counter64 395 | | +--ro candidate-rp-advertisement? yang:counter64 396 | | +--ro df-election? yang:counter64 397 | | +--ro hello? yang:counter64 398 | | +--ro join-prune? yang:counter64 399 | | +--ro register? yang:counter64 400 | | +--ro register-stop? yang:counter64 401 | | +--ro state-refresh? yang:counter64 402 | +--ro topology-tree-info 403 | +--ro ipv4-route* [group source-address is-rpt] 404 | | +--ro group 405 rt-types:ipv4-multicast-group-address 406 | | +--ro source-address 407 rt-types:ipv4-multicast-source-address 408 | | +--ro is-rpt boolean 409 | | +--ro expiration? timer-value 410 | | +--ro incoming-interface? if:interface-ref 411 | | +--ro mode? pim-mode 412 | | +--ro msdp-learned? boolean 413 | | +--ro rp-address? inet:ip-address 414 | | +--ro rpf-neighbor? inet:ip-address 415 | | +--ro spt-bit? boolean 416 | | +--ro up-time? uint32 417 | | +--ro outgoing-interface* [name] 418 | | +--ro name if:interface-ref 419 | | +--ro expiration? timer-value 420 | | +--ro up-time? uint32 421 | | +--ro jp-state? enumeration 422 | +--ro ipv6-route* [group source-address is-rpt] 423 | +--ro group 424 rt-types:ipv6-multicast-group-address 425 | +--ro source-address 426 rt-types:ipv6-multicast-source-address 427 | +--ro is-rpt boolean 428 | +--ro expiration? timer-value 429 | +--ro incoming-interface? if:interface-ref 430 | +--ro mode? pim-mode 431 | +--ro msdp-learned? boolean 432 | +--ro rp-address? inet:ip-address 433 | +--ro rpf-neighbor? inet:ip-address 434 | +--ro spt-bit? boolean 435 | +--ro up-time? uint32 436 | +--ro outgoing-interface* [name] 437 | +--ro name if:interface-ref 438 | +--ro expiration? timer-value 439 | +--ro up-time? uint32 440 | +--ro jp-state? enumeration 441 +--ro interfaces 442 +--ro interface* [interface] 443 +--ro interface if:interface-ref 444 +--ro address-family* [address-family] 445 +--ro address-family identityref 446 +--ro bfd {bfd}? 447 | +--ro enable? boolean 448 +--ro dr-priority? uint32 {intf-dr-priority}? 449 +--ro hello-interval? timer-value 450 {intf-hello-interval}? 451 +--ro (hello-holdtime-or-multiplier)? 452 | +--:(holdtime) {intf-hello-holdtime}? 453 | | +--ro hello-holdtime? timer-value 454 | +--:(multiplier) {intf-hello-multiplier}? 455 | +--ro hello-multiplier? 456 rt-types:timer-multiplier 457 +--ro jp-interval? timer-value 458 {intf-jp-interval}? 459 +--ro (jp-holdtime-or-multiplier)? 460 | +--:(holdtime) {intf-jp-holdtime}? 461 | | +--ro jp-holdtime? timer-value 462 | +--:(multiplier) {intf-jp-multiplier}? 463 | +--ro jp-multiplier? 464 rt-types:timer-multiplier 465 +--ro propagation-delay? uint16 466 {intf-propagation-delay}? 467 +--ro override-interval? uint16 468 {intf-override-interval}? 469 +--ro ipv4 470 | +--ro address* inet:ipv4-address 471 | +--ro dr-address? inet:ipv4-address 472 +--ro ipv6 473 | +--ro address* inet:ipv6-address 474 | +--ro dr-address? inet:ipv6-address 475 +--ro oper-status? enumeration 476 +--ro hello-expiration? timer-value 477 +--ro neighbor-ipv4* [address] 478 | +--ro address inet:ipv4-address 479 | +--ro bfd-status? enumeration 480 | +--ro expiration? timer-value 481 | +--ro dr-priority? uint32 482 | +--ro gen-id? uint32 483 | +--ro up-time? uint32 484 +--ro neighbor-ipv6* [address] 485 +--ro address inet:ipv6-address 486 +--ro bfd-status? enumeration 487 +--ro expiration? timer-value 488 +--ro dr-priority? uint32 489 +--ro gen-id? uint32 490 +--ro up-time? uint32 491 notifications: 492 +---n pim-neighbor-event 493 | +--ro event-type? neighbor-event-type 494 | +--ro interface-state-ref? leafref 495 | +--ro interface-af-state-ref? leafref 496 | +--ro neighbor-ipv4-state-ref? leafref 497 | +--ro neighbor-ipv6-state-ref? leafref 498 | +--ro up-time? uint32 499 +---n pim-interface-event 500 +--ro event-type? interface-event-type 501 +--ro interface-state-ref? leafref 502 +--ro ipv4 503 | +--ro address* inet:ipv4-address 504 | +--ro dr-address? inet:ipv4-address 505 +--ro ipv6 506 +--ro address* inet:ipv6-address 507 +--ro dr-address? inet:ipv6-address 509 3.2. PIM RP module 511 The PIM RP module contains configuration information scoped to RPs or 512 ranges of group addresses. This does not belong in the hierarchy 513 under any PIM mode, but is augmented by the individual mode-specific 514 modules as appropriate. 516 module: ietf-pim-rp 517 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 518 /pim-base:address-family: 519 +--rw rp 520 +--rw static-rp 521 | +--rw ipv4-rp* [ipv4-address] 522 | | +--rw ipv4-address inet:ipv4-address 523 | +--rw ipv6-rp* [ipv6-address] 524 | +--rw ipv6-address inet:ipv6-address 525 +--rw bsr {bsr}? 526 +--rw bsr-candidate! 527 | +--rw (interface-or-address)? 528 | | +--:(interface) {candidate-interface}? 529 | | | +--rw interface if:interface-ref 530 | | +--:(ipv4-address) {candidate-ipv4}? 531 | | | +--rw ipv4-address inet:ipv4-address 532 | | +--:(ipv6-address) {candidate-ipv6}? 533 | | +--rw ipv6-address inet:ipv6-address 534 | +--rw hash-mask-length uint8 535 | +--rw priority uint8 536 +--rw rp-candidate-interface* [interface] 537 {candidate-interface}? 538 | +--rw interface if:interface-ref 539 | +--rw policy? string 540 | +--rw mode? identityref 541 +--rw rp-candidate-ipv4-address* [ipv4-address] 542 {candidate-ipv4}? 543 | +--rw ipv4-address inet:ipv4-address 544 | +--rw policy? string 545 | +--rw mode? identityref 546 +--rw rp-candidate-ipv6-address* [ipv6-address] 547 {candidate-ipv6}? 548 +--rw ipv6-address inet:ipv6-address 549 +--rw policy? string 550 +--rw mode? identityref 551 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 552 /pim-base:address-family: 553 +--ro rp 554 +--ro static-rp 555 | +--ro ipv4-rp* [ipv4-address] 556 | | +--ro ipv4-address inet:ipv4-address 557 | +--ro ipv6-rp* [ipv6-address] 558 | +--ro ipv6-address inet:ipv6-address 559 +--ro bsr {bsr}? 560 | +--ro bsr-candidate! 561 | | +--ro (interface-or-address)? 562 | | | +--:(interface) {candidate-interface}? 563 | | | | +--ro interface if:interface-ref 564 | | | +--:(ipv4-address) {candidate-ipv4}? 565 | | | | +--ro ipv4-address inet:ipv4-address 566 | | | +--:(ipv6-address) {candidate-ipv6}? 567 | | | +--ro ipv6-address inet:ipv6-address 568 | | +--ro hash-mask-length uint8 569 | | +--ro priority uint8 570 | +--ro rp-candidate-interface* [interface] 571 {candidate-interface}? 572 | | +--ro interface if:interface-ref 573 | | +--ro policy? string 574 | | +--ro mode? identityref 575 | +--ro rp-candidate-ipv4-address* [ipv4-address] 576 {candidate-ipv4}? 577 | | +--ro ipv4-address inet:ipv4-address 578 | | +--ro policy? string 579 | | +--ro mode? identityref 580 | +--ro rp-candidate-ipv6-address* [ipv6-address] 581 {candidate-ipv6}? 582 | | +--ro ipv6-address inet:ipv6-address 583 | | +--ro policy? string 584 | | +--ro mode? identityref 585 | +--ro bsr 586 | | +--ro address? inet:ip-address 587 | | +--ro hash-mask-length? uint8 588 | | +--ro priority? uint8 589 | | +--ro up-time? uint32 590 | +--ro (election-state)? {bsr-election-state}? 591 | | +--:(candidate) 592 | | | +--ro candidate-bsr-state? enumeration 593 | | +--:(non-candidate) 594 | | +--ro non-candidate-bsr-state? enumeration 595 | +--ro bsr-next-bootstrap? uint16 596 | +--ro rp 597 | | +--ro rp-address? inet:ip-address 598 | | +--ro group-policy? string 599 | | +--ro up-time? uint32 600 | +--ro rp-candidate-next-advertisement? uint16 601 +--ro rp-list 602 | +--ro ipv4-rp* [ipv4-address mode] 603 | | +--ro ipv4-address inet:ipv4-address 604 | | +--ro mode identityref 605 | | +--ro info-source-address? inet:ipv4-address 606 | | +--ro info-source-type? identityref 607 | | +--ro up-time? uint32 608 | | +--ro expiration? pim-base:timer-value 609 | +--ro ipv6-rp* [ipv6-address mode] 610 | +--ro ipv6-address inet:ipv6-address 611 | +--ro mode identityref 612 | +--ro info-source-address? inet:ipv6-address 613 | +--ro info-source-type? identityref 614 | +--ro up-time? uint32 615 | +--ro expiration? pim-base:timer-value 616 +--ro rp-mappings 617 +--ro ipv4-rp* [group rp-address] 618 | +--ro group inet:ipv4-prefix 619 | +--ro rp-address inet:ipv4-address 620 | +--ro up-time? uint32 621 | +--ro expiration? pim-base:timer-value 622 +--ro ipv6-rp* [group rp-address] 623 +--ro group inet:ipv6-prefix 624 +--ro rp-address inet:ipv6-address 625 +--ro up-time? uint32 626 +--ro expiration? pim-base:timer-value 627 notifications: 628 +---n pim-rp-event 629 +--ro event-type? rp-event-type 630 +--ro instance-af-state-ref? leafref 631 +--ro group? 632 rt-types:ip-multicast-group-address 633 +--ro rp-address? inet:ip-address 634 +--ro is-rpt? boolean 635 +--ro mode? pim-base:pim-mode 636 +--ro message-origin? inet:ip-address 638 3.3. PIM-SM module 640 This module covers Sparse Mode configuration, including PIM-ASM and 641 PIM-SSM. 643 module: ietf-pim-sm 644 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 645 /pim-base:address-family: 646 +--rw sm 647 +--rw asm 648 | +--rw anycast-rp! 649 | | +--rw ipv4 650 | | | +--rw ipv4-anycast-rp* [anycast-address rp-address] 651 | | | +--rw anycast-address inet:ipv4-address 652 | | | +--rw rp-address inet:ipv4-address 653 | | +--rw ipv6 654 | | +--rw ipv6-anycast-rp* [anycast-address rp-address] 655 | | +--rw anycast-address inet:ipv6-address 656 | | +--rw rp-address inet:ipv6-address 657 | +--rw spt-switch 658 | +--rw infinity! {spt-switch-infinity}? 659 | +--rw policy-name? string {spt-switch-policy}? 660 +--rw ssm! 661 +--rw range-policy? string 662 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 663 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 664 +--rw sm! 665 +--rw passive? empty 666 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 667 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: 668 +--rw sm! 669 +--rw policy-name? string 670 +--rw override? boolean {static-rp-override}? 671 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 672 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: 673 +--rw sm! 674 +--rw policy-name? string 675 +--rw override? boolean {static-rp-override}? 676 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 677 /pim-base:address-family: 678 +--ro sm 679 +--ro asm 680 | +--ro anycast-rp! 681 | | +--ro ipv4 682 | | | +--ro ipv4-anycast-rp* [anycast-address rp-address] 683 | | | +--ro anycast-address inet:ipv4-address 684 | | | +--ro rp-address inet:ipv4-address 685 | | +--ro ipv6 686 | | +--ro ipv6-anycast-rp* [anycast-address rp-address] 687 | | +--ro anycast-address inet:ipv6-address 688 | | +--ro rp-address inet:ipv6-address 689 | +--ro spt-switch 690 | +--ro infinity! {spt-switch-infinity}? 691 | +--ro policy-name? string {spt-switch-policy}? 692 +--ro ssm! 693 +--ro range-policy? string 694 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 695 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 696 +--ro sm! 697 +--ro passive? empty 698 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 699 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: 700 +--ro sm! 701 +--ro policy-name? string 702 +--ro override? boolean {static-rp-override}? 703 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 704 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: 705 +--ro sm! 706 +--ro policy-name? string 707 +--ro override? boolean {static-rp-override}? 709 3.4. PIM-DM module 711 This module will cover Dense Mode configuration. 713 module: ietf-pim-dm 714 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 715 /pim-base:address-family: 716 +--rw dm! 717 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 718 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 719 +--rw dm! 720 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 721 /pim-base:address-family: 722 +--ro dm! 723 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 724 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 725 +--ro dm! 727 3.5. PIM-BIDIR module 729 This module will cover Bidirectional PIM configuration. 731 module: ietf-pim-bidir 732 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 733 /pim-base:address-family: 734 +--rw bidir! 735 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 736 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 737 +--rw bidir! 738 +--rw df-election {intf-df-election}? 739 +--rw offer-interval? pim-base:timer-value 740 +--rw backoff-interval? pim-base:timer-value 741 +--rw offer-multiplier? uint8 742 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 743 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: 744 +--rw bidir! 745 +--rw policy-name? string 746 +--rw override? boolean {static-rp-override}? 747 augment /rt:routing/rt:control-plane-protocols/pim-base:pim 748 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: 749 +--rw bidir! 750 +--rw policy-name? string 751 +--rw override? boolean {static-rp-override}? 752 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 753 /pim-base:address-family: 754 +--ro bidir! 755 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 756 /pim-base:interfaces/pim-base:interface/pim-base:address-family: 757 +--ro bidir! 758 +--ro df-election {intf-df-election}? 759 +--ro offer-interval? pim-base:timer-value 760 +--ro backoff-interval? pim-base:timer-value 761 +--ro offer-multiplier? uint8 762 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 763 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: 764 +--ro bidir! 765 +--ro policy-name? string 766 +--ro override? boolean {static-rp-override}? 767 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 768 /pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: 769 +--ro bidir! 770 +--ro policy-name? string 771 +--ro override? boolean {static-rp-override}? 772 augment /rt:routing-state/rt:control-plane-protocols/pim-base:pim 773 /pim-base:address-family/pim-rp:rp: 774 +--ro bidir 775 +--ro df-election 776 | +--ro ipv4-rp* [ipv4-address] 777 | | +--ro ipv4-address inet:ipv4-address 778 | +--ro ipv6-rp* [ipv6-address] 779 | +--ro ipv6-address inet:ipv6-address 780 +--ro interface-df-election 781 +--ro ipv4-rp* [ipv4-address interface-name] 782 | +--ro ipv4-address inet:ipv4-address 783 | +--ro interface-name if:interface-ref 784 | +--ro df-address? inet:ipv4-address 785 | +--ro interface-state? identityref 786 +--ro ipv6-rp* [ipv6-address interface-name] 787 +--ro ipv6-address inet:ipv6-address 788 +--ro interface-name if:interface-ref 789 +--ro df-address? inet:ipv6-address 790 +--ro interface-state? identityref 792 4. PIM YANG Modules 794 4.1. PIM base module 796 file "ietf-pim-base@2017-03-09.yang" 797 module ietf-pim-base { 798 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; 799 prefix pim-base; 801 import ietf-inet-types { 802 prefix "inet"; 803 } 805 import ietf-yang-types { 806 prefix "yang"; 807 } 809 import ietf-routing-types { 810 prefix "rt-types"; 811 } 813 import ietf-interfaces { 814 prefix "if"; 815 } 817 import ietf-routing { 818 prefix "rt"; 819 } 821 organization 822 "IETF PIM Working Group"; 824 contact 825 "WG Web: 826 WG List: 828 WG Chair: Stig Venaas 829 831 WG Chair: Mike McBride 832 834 Editor: Xufeng Liu 835 837 Editor: Pete McAllister 838 840 Editor: Anish Peter 841 843 Editor: Mahesh Sivakumar 844 846 Editor: Yisong Liu 847 849 Editor: Fangwei Hu 850 "; 852 description 853 "The module defines a collection of YANG definitions common for 854 all PIM (Protocol Independent Multicast) modes."; 856 revision 2017-03-09 { 857 description 858 "Initial revision."; 859 reference 860 "RFC XXXX: A YANG Data Model for PIM"; 861 } 863 /* 864 * Features 865 */ 866 feature bfd { 867 description 868 "Support BFD (Bidirectional Forwarding Detection)."; 869 } 871 feature global-graceful-restart { 872 description 873 "Global configuration for graceful restart support as per 874 RFC5306."; 875 } 877 feature intf-dr-priority { 878 description 879 "Support configuration of interface DR (Designated Router) 880 priority."; 881 } 883 feature intf-hello-holdtime { 884 description 885 "Support configuration of interface hello holdtime."; 886 } 888 feature intf-hello-interval { 889 description 890 "Support configuration of interface hello interval."; 891 } 893 feature intf-hello-multiplier { 894 description 895 "Support configuration of interface hello multiplier."; 896 } 898 feature intf-jp-interval { 899 description 900 "Support configuration of interface join prune interval."; 901 } 902 feature intf-jp-holdtime { 903 description 904 "Support configuration of interface join prune holdtime."; 905 } 907 feature intf-jp-multiplier { 908 description 909 "Support configuration of interface join prune multiplier."; 910 } 912 feature intf-propagation-delay { 913 description 914 "Support configuration of interface propagation delay."; 915 } 917 feature intf-override-interval { 918 description 919 "Support configuration of interface override interval."; 920 } 922 feature per-af-graceful-restart { 923 description 924 "Per address family configuration for graceful restart support 925 as per RFC5306."; 926 } 928 /* 929 * Typedefs 930 */ 931 typedef interface-event-type { 932 type enumeration { 933 enum up { 934 description 935 "Neighbor status changed to up."; 936 } 937 enum down { 938 description 939 "Neighbor status changed to down."; 940 } 941 enum new-dr { 942 description 943 "A new DR (Designated Router) was elected on the connected 944 network."; 945 } 946 enum new-df { 947 description 948 "A new DF (Designated Forwarder) was elected on the 949 connected network."; 951 } 952 } 953 description "Operational status event type for notifications."; 954 } 956 typedef neighbor-event-type { 957 type enumeration { 958 enum up { 959 description 960 "Neighbor status changed to up."; 961 } 962 enum down { 963 description 964 "Neighbor status changed to down."; 965 } 966 } 967 description "Operational status event type for notifications."; 968 } 970 typedef pim-mode { 971 type enumeration { 972 enum none { 973 description 974 "PIM is not operating."; 975 } 976 enum ssm { 977 description 978 "PIM operates in the Sparse Mode with Source-Specific 979 Multicast (SSM)."; 980 } 981 enum asm { 982 description 983 "PIM operates in the Sparse Mode with Any Source Multicast 984 (ASM)."; 985 } 986 enum bidir { 987 description 988 "PIM operates in the Bidirectional Mode."; 989 } 990 enum dm { 991 description 992 "PIM operates in the Dense Mode (DM)."; 993 } 994 enum other { 995 description 996 "PIM operates in any other mode."; 997 } 998 } 999 description 1000 "The PIM mode in which a group is operating."; 1001 } 1003 typedef timer-value { 1004 type rt-types:timer-value-seconds16; 1005 description "Timer value type."; 1006 } // timer-value 1008 /* 1009 * Identities 1010 */ 1012 /* 1013 * Groupings 1014 */ 1015 grouping global-attributes { 1016 description 1017 "A Grouping defining global configuration attributes."; 1018 uses graceful-restart-container { 1019 if-feature global-graceful-restart; 1020 } 1021 } // global-attributes 1023 grouping graceful-restart-container { 1024 description 1025 "A grouping defining a container of graceful restart 1026 attributes."; 1027 container graceful-restart { 1028 leaf enabled { 1029 type boolean; 1030 description 1031 "Enable or disable graceful restart."; 1032 } 1033 leaf duration { 1034 type uint16; 1035 units seconds; 1036 description 1037 "Maximum time for graceful restart to finish."; 1038 } 1039 description 1040 "Container of graceful restart attributes."; 1041 } 1042 } // graceful-restart-container 1044 grouping interface-config-attributes { 1045 description 1046 "A grouping defining interface attributes."; 1048 container bfd { 1049 if-feature bfd; 1050 description 1051 "BFD (Bidirectional Forwarding Detection) operation."; 1052 leaf enable { 1053 type boolean; 1054 description 1055 "'true' to suppport BFD for the interface."; 1056 } 1057 } 1058 leaf dr-priority { 1059 if-feature intf-dr-priority; 1060 type uint32; 1061 description "DR (Designated Router) priority"; 1062 } 1063 leaf hello-interval { 1064 if-feature intf-hello-interval; 1065 type timer-value; 1066 description "Hello interval"; 1067 } 1068 choice hello-holdtime-or-multiplier { 1069 description "Use holdtime or multiplier"; 1070 case holdtime { 1071 if-feature intf-hello-holdtime; 1072 leaf hello-holdtime { 1073 type timer-value; 1074 description "Hello holdtime"; 1075 } 1076 } 1077 case multiplier { 1078 if-feature intf-hello-multiplier; 1079 leaf hello-multiplier { 1080 type rt-types:timer-multiplier; 1081 description 1082 "Hello multiplier is the number by which the hello 1083 interval is multplied to obtain the hold time"; 1084 } 1085 } 1086 } 1087 leaf jp-interval { 1088 if-feature intf-jp-interval; 1089 type timer-value; 1090 description "Join prune interval"; 1091 } 1092 choice jp-holdtime-or-multiplier { 1093 description "Use holdtime or multiplier"; 1094 case holdtime { 1095 if-feature intf-jp-holdtime; 1096 leaf jp-holdtime { 1097 type timer-value; 1098 description "Join prune holdtime"; 1099 } 1100 } 1101 case multiplier { 1102 if-feature intf-jp-multiplier; 1103 leaf jp-multiplier { 1104 type rt-types:timer-multiplier; 1105 description 1106 "Join prune multiplier is the number by which the join 1107 prune interval is multplied to obtain the hold time"; 1108 } 1109 } 1110 } 1111 leaf propagation-delay { 1112 if-feature intf-propagation-delay; 1113 type uint16; 1114 units milliseconds; 1115 description "Propagation description"; 1116 } 1117 leaf override-interval { 1118 if-feature intf-override-interval; 1119 type uint16; 1120 units milliseconds; 1121 description "Override interval"; 1122 } 1123 } // interface-config-attributes 1125 grouping interface-state-attributes { 1126 description 1127 "A grouping defining interface attributes."; 1128 container ipv4 { 1129 when "../address-family = 'rt:ipv4'" { 1130 description 1131 "Only applicable to IPv4 address family."; 1132 } 1133 description "Interface state attributes for IPv4."; 1134 leaf-list address { 1135 type inet:ipv4-address; 1136 description "List of addresses."; 1137 } 1138 leaf dr-address { 1139 type inet:ipv4-address; 1140 description "DR (Designated Router) address."; 1141 } 1142 } 1143 container ipv6 { 1144 when "../address-family = 'rt:ipv6'" { 1145 description 1146 "Only applicable to IPv6 address family."; 1147 } 1148 description "Interface state attributes for IPv6."; 1149 leaf-list address { 1150 type inet:ipv6-address; 1151 description "List of addresses."; 1152 } 1153 leaf dr-address { 1154 type inet:ipv6-address; 1155 description "DR (Designated Router) address."; 1156 } 1157 } 1158 uses interface-state-af-attributes; 1159 } // interface-state-attributes 1161 grouping interface-state-af-attributes { 1162 description 1163 "A grouping defining interface per address family attributes."; 1165 leaf oper-status { 1166 type enumeration { 1167 enum up { 1168 description 1169 "Ready to pass packets."; 1170 } 1171 enum down { 1172 description 1173 "The interface does not pass any packets."; 1174 } 1175 } 1176 description "Operational status."; 1177 } 1179 leaf hello-expiration { 1180 type timer-value; 1181 description "Hello interval expiration time."; 1182 } 1184 list neighbor-ipv4 { 1185 when "../address-family = 'rt:ipv4'" { 1186 description 1187 "Only applicable to IPv4 address family."; 1188 } 1189 key "address"; 1190 description "Neighbor state information."; 1191 leaf address { 1192 type inet:ipv4-address; 1193 description "Neighbor address."; 1194 } 1195 uses neighbor-state-af-attributes; 1196 } // list neighbor-ipv4 1198 list neighbor-ipv6 { 1199 when "../address-family = 'rt:ipv6'" { 1200 description 1201 "Only applicable to IPv6 address family."; 1202 } 1203 key "address"; 1204 description "Neighbor state information."; 1205 leaf address { 1206 type inet:ipv6-address; 1207 description "Neighbor address."; 1208 } 1209 uses neighbor-state-af-attributes; 1210 } // list neighbor-ipv6 1211 } // interface-state-af-attributes 1213 grouping multicast-route-attributes { 1214 description 1215 "A grouping defining multicast route attributes."; 1217 leaf expiration { 1218 type timer-value; 1219 description "When the route will expire."; 1220 } 1221 leaf incoming-interface { 1222 type if:interface-ref; 1223 description 1224 "Reference to an entry in the global interface 1225 list."; 1226 } 1227 leaf mode { 1228 type pim-mode; 1229 description "PIM mode."; 1230 } 1231 leaf msdp-learned { 1232 type boolean; 1233 description 1234 "'true' if route is learned from MSDP (Multicast Source 1235 Discovery Protocol)."; 1236 } 1237 leaf rp-address { 1238 type inet:ip-address; 1239 description "RP (Rendezvous Point) address."; 1241 } 1242 leaf rpf-neighbor { 1243 type inet:ip-address; 1244 description "RPF (Reverse Path Forwarding) neighbor address."; 1245 } 1246 leaf spt-bit { 1247 type boolean; 1248 description "'true' if SPT (Shortest Path Tree) bit is set."; 1249 } 1250 leaf up-time { 1251 type uint32; 1252 units seconds; 1253 description "Up time duration."; 1254 } 1255 list outgoing-interface { 1256 key "name"; 1257 description 1258 "A list of outgoing interfaces."; 1260 leaf name { 1261 type if:interface-ref; 1262 description 1263 "Interface name."; 1264 } 1266 leaf expiration { 1267 type timer-value; 1268 description "Expiring information."; 1269 } 1271 leaf up-time { 1272 type uint32; 1273 units seconds; 1274 description "Up time duration."; 1275 } 1277 leaf jp-state { 1278 type enumeration { 1279 enum "no-info" { 1280 description 1281 "The interface has Join state and no timers running"; 1282 } 1283 enum "join" { 1284 description 1285 "The interface has Join state."; 1286 } 1287 enum "prune-pending" { 1288 description 1289 "The router has received a Prune on this interface from 1290 a downstream neighbor and is waiting to see whether 1291 the prune will be overridden by another downstream 1292 router. For forwarding purposes, the Prune-Pending 1293 state functions exactly like the Join state."; 1294 } 1295 } 1296 description "Join-prune state."; 1297 } 1298 } 1299 } // multicast-route-attributes 1301 grouping neighbor-state-af-attributes { 1302 description 1303 "A grouping defining neighbor per address family attributes."; 1304 leaf bfd-status { 1305 type enumeration { 1306 enum up { 1307 description 1308 "BFD (Bidirectional Forwarding Detection) is up."; 1309 } 1310 enum down { 1311 description 1312 "BFD (Bidirectional Forwarding Detection) is down."; 1313 } 1314 } 1315 description "BFD (Bidirectional Forwarding Detection) status."; 1316 } 1317 leaf expiration { 1318 type timer-value; 1319 description "Neighbor expiring information."; 1320 } 1321 leaf dr-priority { 1322 type uint32; 1323 description "DR (Designated Router) priority"; 1324 } 1325 leaf gen-id { 1326 type uint32; 1327 description "Generation ID."; 1328 } 1329 leaf up-time { 1330 type uint32; 1331 units seconds; 1332 description "Up time duration."; 1333 } 1334 } // neighbor-state-af-attributes 1336 grouping per-af-attributes { 1337 description 1338 "A grouping defining per address family attributes."; 1339 uses graceful-restart-container { 1340 if-feature per-af-graceful-restart; 1341 } 1342 } // per-af-attributes 1344 grouping pim-instance-af-state-ref { 1345 description 1346 "An absolute reference to a PIM instance address family."; 1347 leaf instance-af-state-ref { 1348 type leafref { 1349 path "/rt:routing-state/rt:control-plane-protocols/" 1350 + "pim-base:pim/pim-base:address-family/" 1351 + "pim-base:address-family"; 1352 } 1353 description 1354 "Reference to a PIM instance address family."; 1355 } 1356 } // pim-instance-state-af-ref 1358 grouping pim-interface-state-ref { 1359 description 1360 "An absolute reference to a PIM interface state."; 1361 leaf interface-state-ref { 1362 type leafref { 1363 path "/rt:routing-state/rt:control-plane-protocols/" 1364 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 1365 + "pim-base:interface"; 1366 } 1367 description 1368 "Reference to a PIM interface."; 1369 } 1370 } // pim-interface-state-ref 1372 grouping pim-neighbor-state-ref { 1373 description 1374 "An absolute reference to a PIM neighbor state."; 1375 uses pim-interface-state-ref; 1376 leaf interface-af-state-ref { 1377 type leafref { 1378 path "/rt:routing-state/rt:control-plane-protocols/" 1379 + "pim-base:pim/pim-base:interfaces/pim-base:interface" 1380 + "[pim-base:interface = " 1381 + "current()/../interface-state-ref]/" 1382 + "pim-base:address-family/pim-base:address-family"; 1383 } 1384 description 1385 "Reference to a PIM interface address family."; 1386 } 1387 leaf neighbor-ipv4-state-ref { 1388 when "../interface-af-state-ref = 'rt:ipv4'" { 1389 description "Only applicable to IPv4 address family."; 1390 } 1391 type leafref { 1392 path "/rt:routing-state/rt:control-plane-protocols/" 1393 + "pim-base:pim/pim-base:interfaces/pim-base:interface" 1394 + "[pim-base:interface = " 1395 + "current()/../interface-state-ref]/" 1396 + "pim-base:address-family" 1397 + "[pim-base:address-family = " 1398 + "current()/../interface-af-state-ref]/" 1399 + "pim-base:neighbor-ipv4/pim-base:address"; 1400 } 1401 description 1402 "Reference to a PIM IPv4 neighbor."; 1403 } 1404 leaf neighbor-ipv6-state-ref { 1405 when "../interface-af-state-ref = 'rt:ipv6'" { 1406 description "Only applicable to IPv6 address family."; 1407 } 1408 type leafref { 1409 path "/rt:routing-state/rt:control-plane-protocols/" 1410 + "pim-base:pim/pim-base:interfaces/pim-base:interface" 1411 + "[pim-base:interface = " 1412 + "current()/../interface-state-ref]/" 1413 + "pim-base:address-family" 1414 + "[pim-base:address-family = " 1415 + "current()/../interface-af-state-ref]/" 1416 + "pim-base:neighbor-ipv6/pim-base:address"; 1417 } 1418 description 1419 "Reference to a PIM IPv6 neighbor."; 1420 } 1421 } // pim-neighbor-state-ref 1423 grouping statistics-container { 1424 description 1425 "A container defining statistics attributes."; 1426 container statistics { 1427 description "A container defining statistics attributes."; 1428 leaf discontinuity-time { 1429 type yang:date-and-time; 1430 description 1431 "The time on the most recent occasion at which any one 1432 or more of the statistic counters suffered a 1433 discontinuity. If no such discontinuities have occurred 1434 since the last re-initialization of the local 1435 management subsystem, then this node contains the time 1436 the local management subsystem re-initialized itself."; 1437 } 1438 container error { 1439 description "Containing error statistics."; 1440 uses statistics-error; 1441 } 1442 container queue { 1443 description "Containing queue statistics."; 1444 uses statistics-queue; 1445 } 1446 container received { 1447 description "Containing statistics of received messages."; 1448 uses statistics-sent-received; 1449 } 1450 container sent { 1451 description "Containing statistics of sent messages."; 1452 uses statistics-sent-received; 1453 } 1454 } 1455 } // statistics-container 1457 grouping statistics-error { 1458 description 1459 "A grouping defining error statistics 1460 attributes."; 1461 uses statistics-sent-received; 1462 } // statistics-error 1464 grouping statistics-queue { 1465 description 1466 "A grouping defining queue statistics 1467 attributes."; 1468 leaf size { 1469 type uint32; 1470 description 1471 "The size of the input queue."; 1472 } 1473 leaf overflow { 1474 type yang:counter32; 1475 description 1476 "The number of the input queue overflows."; 1477 } 1478 } // statistics-queue 1480 grouping statistics-sent-received { 1481 description 1482 "A grouping defining sent and received statistics 1483 attributes."; 1484 leaf assert { 1485 type yang:counter64; 1486 description 1487 "The number of assert messages."; 1488 } 1489 leaf bsr { 1490 type yang:counter64; 1491 description 1492 "The number of BSR (Bootstrap Router) messages."; 1493 } 1494 leaf candidate-rp-advertisement { 1495 type yang:counter64; 1496 description 1497 "The number of Candidate-RP-advertisement messages."; 1498 } 1499 leaf df-election { 1500 type yang:counter64; 1501 description 1502 "The number of DF (Designated Forwarder) election messages."; 1503 } 1504 leaf hello { 1505 type yang:counter64; 1506 description 1507 "The number of hello messages."; 1508 } 1509 leaf join-prune { 1510 type yang:counter64; 1511 description 1512 "The number of join/prune messages."; 1513 } 1514 leaf register { 1515 type yang:counter64; 1516 description 1517 "The number of register messages."; 1518 } 1519 leaf register-stop { 1520 type yang:counter64; 1521 description 1522 "The number of register stop messages."; 1523 } 1524 leaf state-refresh { 1525 type yang:counter64; 1526 description 1527 "The number of state refresh messages."; 1528 } 1530 } // statistics-sent-received 1532 /* 1533 * Configuration data nodes 1534 */ 1536 augment "/rt:routing/rt:control-plane-protocols" { 1537 description 1538 "PIM augmentation to routing instance configuration."; 1540 container pim { 1541 presence "Container for PIM protocol."; 1542 description 1543 "PIM configuration data."; 1545 uses global-attributes; 1547 list address-family { 1548 key "address-family"; 1549 description 1550 "Each list entry for one address family."; 1551 uses rt:address-family; 1552 uses per-af-attributes; 1554 } // address-family 1556 container interfaces { 1557 description 1558 "Containing a list of interfaces."; 1559 list interface { 1560 key "interface"; 1561 description 1562 "List of pim interfaces."; 1563 leaf interface { 1564 type if:interface-ref; 1565 description 1566 "Reference to an entry in the global interface 1567 list."; 1568 } 1569 list address-family { 1570 key "address-family"; 1571 description 1572 "Each list entry for one address family."; 1573 uses rt:address-family; 1574 uses interface-config-attributes; 1575 } // address-family 1576 } // interface 1577 } // interfaces 1579 } // pim 1580 } // augment 1582 /* 1583 * Operational state data nodes 1584 */ 1586 augment "/rt:routing-state/rt:control-plane-protocols" { 1587 description 1588 "PIM augmentation to routing instance state."; 1589 container pim { 1590 description 1591 "PIM state data."; 1593 list address-family { 1594 key "address-family"; 1595 description 1596 "Each list entry for one address family."; 1597 uses rt:address-family; 1599 uses statistics-container; 1601 container topology-tree-info { 1602 description "Containing topology tree information."; 1603 list ipv4-route { 1604 when "../../../address-family = 'rt:ipv4'" { 1605 description 1606 "Only applicable to IPv4 address family."; 1607 } 1608 key "group source-address is-rpt"; 1609 description "A list of IPv4 routes."; 1610 leaf group { 1611 type rt-types:ipv4-multicast-group-address; 1612 description "Group address."; 1613 } 1614 leaf source-address { 1615 type rt-types:ipv4-multicast-source-address; 1616 description "Source address."; 1617 } 1618 leaf is-rpt { 1619 type boolean; 1620 description 1621 "'true' if the tree is RPT (Rendezvous-Point Tree)."; 1622 } 1624 uses multicast-route-attributes; 1625 } // ipv4-route 1626 list ipv6-route { 1627 when "../../../address-family = 'rt:ipv6'" { 1628 description 1629 "Only applicable to IPv6 address family."; 1630 } 1631 key "group source-address is-rpt"; 1632 description "A list of IPv6 routes."; 1633 leaf group { 1634 type rt-types:ipv6-multicast-group-address; 1635 description "Group address."; 1636 } 1637 leaf source-address { 1638 type rt-types:ipv6-multicast-source-address; 1639 description "Source address."; 1640 } 1641 leaf is-rpt { 1642 type boolean; 1643 description 1644 "'true' if the tree is RPT (Rendezvous-Point Tree)."; 1645 } 1647 uses multicast-route-attributes; 1648 } // ipv6-route 1649 } // routes 1650 } // address-family 1652 container interfaces { 1653 description 1654 "Containing a list of interfaces."; 1655 list interface { 1656 key "interface"; 1657 description 1658 "List of pim interfaces."; 1659 leaf interface { 1660 type if:interface-ref; 1661 description 1662 "Reference to an entry in the global interface 1663 list."; 1664 } 1665 list address-family { 1666 key "address-family"; 1667 description 1668 "Each list entry for one address family."; 1669 uses rt:address-family; 1670 uses interface-config-attributes; 1671 uses interface-state-attributes; 1672 } // address-family 1673 } // interface 1675 } // interfaces 1676 } // pim 1677 } // augment 1679 /* 1680 * RPCs 1681 */ 1683 /* 1684 * Notifications 1685 */ 1686 notification pim-neighbor-event { 1687 description "Notification event for neighbor."; 1688 leaf event-type { 1689 type neighbor-event-type; 1690 description "Event type."; 1691 } 1692 uses pim-neighbor-state-ref; 1693 leaf up-time { 1694 type uint32; 1695 units seconds; 1696 description "Up time duration."; 1697 } 1698 } 1699 notification pim-interface-event { 1700 description "Notification event for interface."; 1701 leaf event-type { 1702 type interface-event-type; 1703 description "Event type."; 1704 } 1705 uses pim-interface-state-ref; 1706 container ipv4 { 1707 description "Containing IPv4 information."; 1708 leaf-list address { 1709 type inet:ipv4-address; 1710 description "List of addresses."; 1711 } 1712 leaf dr-address { 1713 type inet:ipv4-address; 1714 description "DR (Designated Router) address."; 1715 } 1716 } 1717 container ipv6 { 1718 description "Containing IPv6 information."; 1719 leaf-list address { 1720 type inet:ipv6-address; 1721 description "List of addresses."; 1722 } 1723 leaf dr-address { 1724 type inet:ipv6-address; 1725 description "DR (Designated Router) address."; 1726 } 1727 } 1728 } 1729 } 1730 1732 4.2. PIM RP module 1734 file "ietf-pim-rp@2017-03-09.yang" 1735 module ietf-pim-rp { 1736 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-rp"; 1737 prefix pim-rp; 1739 import ietf-inet-types { 1740 prefix "inet"; 1741 } 1743 import ietf-routing-types { 1744 prefix "rt-types"; 1745 } 1747 import ietf-interfaces { 1748 prefix "if"; 1749 } 1751 import ietf-routing { 1752 prefix "rt"; 1753 } 1755 import ietf-pim-base { 1756 prefix "pim-base"; 1757 } 1759 organization 1760 "IETF PIM Working Group"; 1762 contact 1763 "WG Web: 1764 WG List: 1766 WG Chair: Stig Venaas 1767 1769 WG Chair: Mike McBride 1770 1772 Editor: Xufeng Liu 1773 1775 Editor: Pete McAllister 1776 1778 Editor: Anish Peter 1779 1781 Editor: Mahesh Sivakumar 1782 1784 Editor: Yisong Liu 1785 1787 Editor: Fangwei Hu 1788 "; 1790 description 1791 "The YANG module defines a PIM (Protocol Independent Multicast) 1792 RP (Rendezvous Point) model."; 1794 revision 2017-03-09 { 1795 description 1796 "Initial revision."; 1797 reference 1798 "RFC XXXX: A YANG Data Model for PIM"; 1799 } 1801 /* 1802 * Features 1803 */ 1804 feature bsr { 1805 description 1806 "This feature indicates that the system supports BSR 1807 (Bootstrap Router)."; 1808 } 1810 feature bsr-election-state { 1811 description 1812 "This feature indicates that the system supports providing 1813 BSR election state."; 1814 reference 1815 "RFC5059: Bootstrap Router (BSR) Mechanism for Protocol 1816 Independent Multicast (PIM)."; 1818 } 1820 feature static-rp-override { 1821 description 1822 "This feature indicates that the system supports configuration 1823 of static RP (Rendezvous Point) override."; 1824 } 1826 feature candidate-interface { 1827 description 1828 "This feature indicates that the system supports using 1829 an interface to configure a BSR or RP candidate."; 1830 } 1832 feature candidate-ipv4 { 1833 description 1834 "This feature indicates that the system supports using 1835 an IPv4 address to configure a BSR or RP candidate."; 1836 } 1838 feature candidate-ipv6 { 1839 description 1840 "This feature indicates that the system supports using 1841 an IPv6 address to configure a BSR or RP candidate."; 1842 } 1844 /* 1845 * Typedefs 1846 */ 1847 typedef rp-event-type { 1848 type enumeration { 1849 enum invalid-jp { 1850 description 1851 "An invalid JP (Join/Prune) message has been received."; 1852 } 1853 enum invalid-register { 1854 description 1855 "An invalid register message has been received."; 1856 } 1857 enum mapping-created { 1858 description 1859 "A new mapping has been created."; 1860 } 1861 enum mapping-deleted { 1862 description 1863 "A mapping has been deleted."; 1864 } 1866 } 1867 description "Operational status event type for notifications."; 1868 } 1870 /* 1871 * Identities 1872 */ 1873 identity rp-mode { 1874 description 1875 "The mode of an RP, which can be SM (Sparse Mode) or 1876 BIDIR (bi-directional)."; 1877 } 1879 identity rp-info-source-type { 1880 description 1881 "The information source of an RP."; 1882 } 1883 identity static { 1884 base rp-info-source-type; 1885 description 1886 "The RP is statically configured."; 1887 } 1888 identity bootstrap { 1889 base rp-info-source-type; 1890 description 1891 "The RP is learned from bootstrap."; 1892 } 1894 /* 1895 * Groupings 1896 */ 1897 grouping bsr-config-attributes { 1898 description 1899 "Grouping of BSR config attributes."; 1900 container bsr-candidate { 1901 presence 1902 "Present to serve as a BSR candidate"; 1903 description 1904 "BSR candidate attributes."; 1906 choice interface-or-address { 1907 description 1908 "Use either interface or ip-address."; 1909 case interface { 1910 if-feature candidate-interface; 1911 leaf interface { 1912 type if:interface-ref; 1913 mandatory true; 1914 description 1915 "Interface to be used by BSR."; 1916 } 1917 } 1918 case ipv4-address { 1919 when "../../../pim-base:address-family = 'rt:ipv4'" { 1920 description 1921 "Only applicable to IPv4 address family."; 1922 } 1923 if-feature candidate-ipv4; 1924 leaf ipv4-address { 1925 type inet:ipv4-address; 1926 mandatory true; 1927 description 1928 "IP address to be used by BSR."; 1929 } 1930 } 1931 case ipv6-address { 1932 when "../../../pim-base:address-family = 'rt:ipv6'" { 1933 description 1934 "Only applicable to IPv6 address family."; 1935 } 1936 if-feature candidate-ipv6; 1937 leaf ipv6-address { 1938 type inet:ipv6-address; 1939 mandatory true; 1940 description 1941 "IP address to be used by BSR."; 1942 } 1943 } 1944 } 1946 leaf hash-mask-length{ 1947 type uint8 { 1948 range "0..128"; 1949 } 1950 mandatory true; 1951 description 1952 "Value contained in BSR messages used by all routers to 1953 hash (map) to an RP."; 1954 } 1956 leaf priority { 1957 type uint8 { 1958 range "0..255"; 1959 } 1960 mandatory true; 1961 description 1962 "BSR election priority among different candidate BSRs. 1963 A larger value has a higher priority over a smaller 1964 value."; 1965 } 1966 } // bsr-candidate 1968 list rp-candidate-interface { 1969 if-feature candidate-interface; 1970 key "interface"; 1971 description 1972 "A list of RP candidates"; 1973 leaf interface { 1974 type if:interface-ref; 1975 description 1976 "Interface that the RP candidate uses."; 1977 } 1978 uses rp-candidate-attributes; 1979 } 1981 list rp-candidate-ipv4-address { 1982 when "../../../pim-base:address-family = 'rt:ipv4'" { 1983 description 1984 "Only applicable to IPv4 address family."; 1985 } 1986 if-feature candidate-ipv4; 1987 key "ipv4-address"; 1988 description 1989 "A list of RP candidates"; 1990 leaf ipv4-address { 1991 type inet:ipv4-address; 1992 description 1993 "IPv4 address that the RP candidate uses."; 1994 } 1995 uses rp-candidate-attributes; 1996 } 1998 list rp-candidate-ipv6-address { 1999 when "../../../pim-base:address-family = 'rt:ipv6'" { 2000 description 2001 "Only applicable to IPv6 address family."; 2002 } 2003 if-feature candidate-ipv6; 2004 key "ipv6-address"; 2005 description 2006 "A list of RP candidates"; 2007 leaf ipv6-address { 2008 type inet:ipv6-address; 2009 description 2010 "IPv6 address that the RP candidate uses."; 2011 } 2012 uses rp-candidate-attributes; 2013 } 2014 } // bsr-config-attributes 2016 grouping bsr-state-attributes { 2017 description 2018 "Grouping of BSR state attributes."; 2019 container bsr { 2020 description 2021 "BSR information."; 2022 leaf address { 2023 type inet:ip-address; 2024 description "BSR address"; 2025 } 2026 leaf hash-mask-length { 2027 type uint8 { 2028 range "0..128"; 2029 } 2030 description "Hash mask length."; 2031 } 2032 leaf priority { 2033 type uint8 { 2034 range "0..255"; 2035 } 2036 description "Priority."; 2037 } 2038 leaf up-time { 2039 type uint32; 2040 units seconds; 2041 description "Up time duration."; 2042 } 2043 } 2044 choice election-state { 2045 if-feature bsr-election-state; 2046 description "BSR election state."; 2047 case candidate { 2048 leaf candidate-bsr-state { 2049 type enumeration { 2050 enum "candidate" { 2051 description 2052 "The router is a candidate to be the BSR for the 2053 scope zone, but currently another router is the 2054 preferred BSR."; 2055 } 2056 enum "pending" { 2057 description 2058 "The router is a candidate to be the BSR for the 2059 scope zone. Currently, no other router is the 2060 preferred BSR, but this router is not yet the 2061 elected BSR. This is a temporary state that 2062 prevents rapid thrashing of the choice of BSR 2063 during BSR election."; 2064 } 2065 enum "elected" { 2066 description 2067 "The router is the elected BSR for the scope zone 2068 and it MUST perform all the BSR functions."; 2069 } 2070 } 2071 description 2072 "Candidate-BSR state."; 2073 reference 2074 "RFC5059, Section 3.1.1."; 2075 } 2076 } 2077 case "non-candidate" { 2078 leaf non-candidate-bsr-state { 2079 type enumeration { 2080 enum "no-info" { 2081 description 2082 "The router has no information about this scope 2083 zone."; 2084 } 2085 enum "accept-any" { 2086 description 2087 "The router does not know of an active BSR, and will 2088 accept the first Bootstrap message it sees as giving 2089 the new BSR's identity and the RP-Set."; 2090 } 2091 enum "accept" { 2092 description 2093 "The router knows the identity of the current BSR, 2094 and is using the RP-Set provided by that BSR. Only 2095 Bootstrap messages from that BSR or from a 2096 Candidate-BSR (C-BSR) with higher weight than the 2097 current BSR will be accepted."; 2098 } 2099 } 2100 description 2101 "Non-candidate-BSR state."; 2102 reference 2103 "RFC5059, Section 3.1.2."; 2104 } 2105 } 2107 } // election-state 2108 leaf bsr-next-bootstrap { 2109 type uint16; 2110 units seconds; 2111 description "The time when next bootstrap will be sent."; 2112 } 2114 container rp { 2115 description 2116 "State information of the RP."; 2117 leaf rp-address { 2118 type inet:ip-address; 2119 description "RP address."; 2120 } 2121 leaf group-policy { 2122 type string; 2123 description "Group policy."; 2124 } 2125 leaf up-time { 2126 type uint32; 2127 units seconds; 2128 description "Up time duration."; 2129 } 2130 } 2131 leaf rp-candidate-next-advertisement { 2132 type uint16; 2133 units seconds; 2134 description 2135 "When the next advertisement will be sent as RP candidate"; 2136 } 2137 } // bsr-state-attributes 2139 grouping rp-mapping-state-attributes { 2140 description 2141 "Grouping of RP mapping attributes."; 2142 leaf up-time { 2143 type uint32; 2144 units seconds; 2145 description "Up time duration."; 2146 } 2147 leaf expiration { 2148 type pim-base:timer-value; 2149 description "Expiration time."; 2150 } 2151 } // rp-mapping-state-attributes 2153 grouping rp-state-attributes { 2154 description 2155 "Grouping of RP state attributes."; 2156 leaf info-source-type { 2157 type identityref { 2158 base rp-info-source-type; 2159 } 2160 description "The information source of an RP."; 2161 } // info-source-type 2162 leaf up-time { 2163 type uint32; 2164 units seconds; 2165 description "Up time duration."; 2166 } 2167 leaf expiration { 2168 type pim-base:timer-value; 2169 description "Expiration time."; 2170 } 2171 } // rp-state-attributes 2173 grouping static-rp-attributes { 2174 description 2175 "Grouping of static RP attributes, used in augmenting 2176 modules."; 2177 leaf policy-name { 2178 type string; 2179 description 2180 "Static RP policy."; 2181 } 2182 leaf override { 2183 if-feature static-rp-override; 2184 type boolean; 2185 description 2186 "When there is a conflict between static RP and dynamic 2187 RP, setting this attribute to 'true' will ask the 2188 system to use static RP."; 2189 } 2190 } // static-rp-attributes 2192 grouping static-rp-container { 2193 description 2194 "Grouping of static RP container."; 2195 container static-rp { 2196 description 2197 "Containing static RP attributes."; 2198 list ipv4-rp { 2199 when "../../../pim-base:address-family = 'rt:ipv4'" { 2200 description 2201 "Only applicable to IPv4 address family."; 2202 } 2203 key "ipv4-address"; 2204 description 2205 "A list of IPv4 RP addresses."; 2206 leaf ipv4-address { 2207 type inet:ipv4-address; 2208 description 2209 "Specifies a static RP address."; 2210 } 2211 } 2213 list ipv6-rp { 2214 when "../../../pim-base:address-family = 'rt:ipv6'" { 2215 description 2216 "Only applicable to IPv6 address family."; 2217 } 2218 key "ipv6-address"; 2219 description 2220 "A list of IPv6 RP addresses."; 2221 leaf ipv6-address { 2222 type inet:ipv6-address; 2223 description 2224 "Specifies a static RP address."; 2225 } 2226 } 2227 } // static-rp 2228 } // static-rp-container 2230 grouping rp-candidate-attributes { 2231 description 2232 "Grouping of RP candidate attributes."; 2233 leaf policy { 2234 type string; 2235 description 2236 "ACL (Access Control List) policy used to filter group 2237 addresses."; 2238 } 2239 leaf mode { 2240 type identityref { 2241 base rp-mode; 2242 } 2243 description 2244 "RP mode."; 2245 } 2246 } // rp-candidate-attributes 2248 /* 2249 * Configuration data nodes 2250 */ 2252 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 2253 + "pim-base:address-family" { 2254 description "PIM RP augmentation."; 2256 container rp { 2257 description 2258 "PIM RP configuration data."; 2260 uses static-rp-container; 2262 container bsr { 2263 if-feature bsr; 2264 description 2265 "Containing BSR (BootStrap Router) attributes."; 2266 uses bsr-config-attributes; 2267 } // bsr 2268 } // rp 2269 } // augment 2271 /* 2272 * Operational state data nodes 2273 */ 2275 augment "/rt:routing-state/rt:control-plane-protocols/" 2276 + "pim-base:pim/pim-base:address-family" { 2277 description 2278 "PIM SM state."; 2280 container rp { 2281 description 2282 "PIM RP state data."; 2284 uses static-rp-container; 2286 container bsr { 2287 if-feature bsr; 2288 description 2289 "Containing BSR (BootStrap Router) attributes."; 2290 uses bsr-config-attributes; 2291 uses bsr-state-attributes; 2292 } // bsr 2294 container rp-list { 2295 description 2296 "Containing a list of RPs."; 2297 list ipv4-rp { 2298 when "../../../pim-base:address-family = 'rt:ipv4'" { 2299 description 2300 "Only applicable to IPv4 address family."; 2301 } 2302 key "ipv4-address mode"; 2303 description 2304 "A list of IPv4 RP addresses."; 2305 leaf ipv4-address { 2306 type inet:ipv4-address; 2307 description 2308 "RP address."; 2309 } 2310 leaf mode { 2311 type identityref { 2312 base rp-mode; 2313 } 2314 description 2315 "RP mode."; 2316 } 2317 leaf info-source-address { 2318 type inet:ipv4-address; 2319 description 2320 "The address where RP information is learned."; 2321 } 2322 uses rp-state-attributes; 2323 } 2325 list ipv6-rp { 2326 when "../../../pim-base:address-family = 'rt:ipv6'" { 2327 description 2328 "Only applicable to IPv6 address family."; 2329 } 2330 key "ipv6-address mode"; 2331 description 2332 "A list of IPv6 RP addresses."; 2333 leaf ipv6-address { 2334 type inet:ipv6-address; 2335 description 2336 "RP address."; 2337 } 2338 leaf mode { 2339 type identityref { 2340 base rp-mode; 2341 } 2342 description 2343 "RP mode."; 2344 } 2345 leaf info-source-address { 2346 type inet:ipv6-address; 2347 description 2348 "The address where RP information is learned."; 2349 } 2350 uses rp-state-attributes; 2351 } 2352 } // rp-list 2354 container rp-mappings { 2355 description 2356 "Containing a list of group-to-RP mappings."; 2357 list ipv4-rp { 2358 when "../../../pim-base:address-family = 'rt:ipv4'" { 2359 description 2360 "Only applicable to IPv4 address family."; 2361 } 2362 key "group rp-address"; 2363 description 2364 "A list of group-to-RP mappings."; 2365 leaf group { 2366 type inet:ipv4-prefix; 2367 description 2368 "Group prefix."; 2369 } 2370 leaf rp-address { 2371 type inet:ipv4-address; 2372 description 2373 "RP address."; 2374 } 2375 uses rp-mapping-state-attributes; 2376 } 2378 list ipv6-rp { 2379 when "../../../pim-base:address-family = 'rt:ipv6'" { 2380 description 2381 "Only applicable to IPv6 address family."; 2382 } 2383 key "group rp-address"; 2384 description 2385 "A list of IPv6 RP addresses."; 2386 leaf group { 2387 type inet:ipv6-prefix; 2388 description 2389 "Group prefix."; 2390 } 2391 leaf rp-address { 2392 type inet:ipv6-address; 2393 description 2394 "RP address."; 2395 } 2396 uses rp-mapping-state-attributes; 2397 } 2398 } // rp-mappings 2399 } // rp 2400 } // augment 2402 /* 2403 * RPCs 2404 */ 2406 /* 2407 * Notifications 2408 */ 2409 notification pim-rp-event { 2410 description "Notification event for RP."; 2411 leaf event-type { 2412 type rp-event-type; 2413 description "Event type."; 2414 } 2415 uses pim-base:pim-instance-af-state-ref; 2416 leaf group { 2417 type rt-types:ip-multicast-group-address; 2418 description "Group address."; 2419 } 2420 leaf rp-address { 2421 type inet:ip-address; 2422 description "RP address."; 2423 } 2424 leaf is-rpt { 2425 type boolean; 2426 description "'true' if the tree is RPT (RP-Tree)."; 2427 } 2428 leaf mode { 2429 type pim-base:pim-mode; 2430 description "PIM mode."; 2431 } 2432 leaf message-origin { 2433 type inet:ip-address; 2434 description "Where the message is originated."; 2435 } 2436 } 2437 } 2438 2440 4.3. PIM-SM module 2442 file "ietf-pim-sm@2017-03-09.yang" 2443 module ietf-pim-sm { 2444 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-sm"; 2445 prefix pim-sm; 2447 import ietf-inet-types { 2448 prefix "inet"; 2449 } 2451 import ietf-routing { 2452 prefix "rt"; 2453 } 2455 import ietf-pim-base { 2456 prefix "pim-base"; 2457 } 2459 import ietf-pim-rp { 2460 prefix "pim-rp"; 2461 } 2463 organization 2464 "IETF PIM Working Group"; 2466 contact 2467 "WG Web: 2468 WG List: 2470 WG Chair: Stig Venaas 2471 2473 WG Chair: Mike McBride 2474 2476 Editor: Xufeng Liu 2477 2479 Editor: Pete McAllister 2480 2482 Editor: Anish Peter 2483 2485 Editor: Mahesh Sivakumar 2486 2488 Editor: Yisong Liu 2489 2491 Editor: Fangwei Hu 2492 "; 2494 description 2495 "The YANG module defines a PIM (Protocol Independent Multicast) 2496 SM (Sparse Mode) model."; 2498 revision 2017-03-09 { 2499 description 2500 "Initial revision."; 2501 reference 2502 "RFC XXXX: A YANG Data Model for PIM"; 2503 } 2505 /* 2506 * Features 2507 */ 2508 feature spt-switch-infinity { 2509 description 2510 "This feature indicates that the system supports configuration 2511 choice whether to trigger the switchover from the RPT 2512 (Rendezvous Point Tree) to the SPT (Shortest Path Tree)."; 2513 } 2515 feature spt-switch-policy { 2516 description 2517 "This feature indicates that the system supports configuring 2518 policy for the switchover from the RPT to the SPT."; 2519 } 2521 /* 2522 * Identities 2523 */ 2524 identity sm { 2525 base pim-rp:rp-mode; 2526 description 2527 "SM (Sparse Mode)."; 2528 } 2530 /* 2531 * Groupings 2532 */ 2533 grouping af-sm-container { 2534 description 2535 "Grouping of address family SM container."; 2537 container sm { 2538 description 2539 "PIM SM configuration data."; 2541 container asm { 2542 description 2543 "ASM (Any Source Multicast) attributes."; 2545 container anycast-rp { 2546 presence 2547 "Present to enable anycast RP (Rendezvous Point)."; 2548 description 2549 "Anycast RP attributes."; 2551 container ipv4 { 2552 when "../../../../pim-base:address-family = 'rt:ipv4'" { 2553 description 2554 "Only applicable to IPv4 address family."; 2555 } 2556 description 2557 "IPv4 attributes. Only applicable when 2558 pim-base:address-family is IPv4."; 2559 list ipv4-anycast-rp { 2560 key "anycast-address rp-address"; 2561 description 2562 "A list of anycast RP settings."; 2563 leaf anycast-address { 2564 type inet:ipv4-address; 2565 description 2566 "IP address of the anycast RP set. This IP address 2567 is used by the multicast groups or sources to join 2568 or register."; 2569 } 2571 leaf rp-address { 2572 type inet:ipv4-address; 2573 description 2574 "IP address of the router configured with anycast 2575 RP. This is the IP address where the Register 2576 messages are forwarded."; 2577 } 2578 } 2579 } 2580 container ipv6 { 2581 when "../../../../pim-base:address-family = 'rt:ipv6'" { 2582 description 2583 "Only applicable to IPv6 address family."; 2584 } 2585 description 2586 "IPv6 attributes. Only applicable when 2587 pim-base:address-family is IPv6."; 2588 list ipv6-anycast-rp { 2589 key "anycast-address rp-address"; 2590 description 2591 "A list of anycast RP settings."; 2592 leaf anycast-address { 2593 type inet:ipv6-address; 2594 description 2595 "IP address of the anycast RP set. This IP address 2596 is used by the multicast groups or sources to join 2597 or register."; 2598 } 2600 leaf rp-address { 2601 type inet:ipv6-address; 2602 description 2603 "IP address of the router configured with anycast 2604 RP. This is the IP address where the Register 2605 messages are forwarded."; 2606 } 2607 } 2608 } 2609 } 2611 container spt-switch { 2612 description 2613 "SPT (Shortest Path Tree) switching attributes."; 2614 container infinity { 2615 if-feature spt-switch-infinity; 2616 presence 2617 "Present if SPT switchover threshold is set to 2618 infinity, according to the policy specified below."; 2619 description 2620 "The receiver's DR (Designated Router) never triggers 2621 the switchover from the RPT to the SPT."; 2622 leaf policy-name { 2623 if-feature spt-switch-policy; 2624 type string; 2625 description 2626 "Switch policy."; 2627 } 2628 } // infinity 2629 } 2630 } // asm 2632 container ssm { 2633 presence 2634 "Present to enable SSM (Source-Specific Multicast)."; 2635 description 2636 "SSM (Source-Specific Multicast) attributes."; 2638 leaf range-policy { 2639 type string; 2640 description 2641 "Policy used to define SSM address range."; 2642 } 2643 } // ssm 2644 } // sm 2645 } // af-sm-container 2647 grouping interface-sm-container { 2648 description 2649 "Grouping of interface SM container."; 2650 container sm { 2651 presence "Present to enable sparse-mode."; 2652 description 2653 "PIM SM configuration data."; 2655 leaf passive { 2656 type empty; 2657 description 2658 "Specifies that no PIM messages are sent or accepted on 2659 this PIM interface, but the interface can be included in a 2660 multicast forwarding entry."; 2661 } 2662 } // sm 2663 } // interface-sm-container 2665 grouping static-rp-sm-container { 2666 description 2667 "Grouping that contains SM attributes for static RP."; 2668 container sm { 2669 presence 2670 "Indicate the support of sparse mode."; 2671 description 2672 "PIM SM configuration data."; 2674 uses pim-rp:static-rp-attributes; 2675 } // sm 2676 } // static-rp-sm-container 2678 /* 2679 * Configuration data nodes 2680 */ 2682 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 2683 + "pim-base:address-family" { 2684 description "PIM SM augmentation."; 2686 uses af-sm-container; 2687 } // augment 2689 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 2690 + "pim-base:interfaces/pim-base:interface/" 2691 + "pim-base:address-family" { 2692 description "PIM SM augmentation."; 2694 uses interface-sm-container; 2695 } // augment 2697 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 2698 + "pim-base:address-family/pim-rp:rp/" 2699 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 2700 description "PIM SM augmentation."; 2702 uses static-rp-sm-container; 2703 } // augment 2705 augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" 2706 + "pim-base:address-family/pim-rp:rp/" 2707 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 2708 description "PIM SM augmentation."; 2710 uses static-rp-sm-container; 2711 } // augment 2713 /* 2714 * Operational state data nodes 2715 */ 2717 augment "/rt:routing-state/rt:control-plane-protocols/" 2718 + "pim-base:pim/pim-base:address-family" { 2719 description 2720 "PIM SM state."; 2722 uses af-sm-container; 2723 } // augment 2725 augment "/rt:routing-state/rt:control-plane-protocols/" 2726 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 2727 + "pim-base:address-family" { 2728 description "PIM SM augmentation."; 2729 uses interface-sm-container; 2730 } // augment 2732 augment "/rt:routing-state/rt:control-plane-protocols/" 2733 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 2734 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 2735 description "PIM SM augmentation."; 2737 uses static-rp-sm-container; 2738 } // augment 2740 augment "/rt:routing-state/rt:control-plane-protocols/" 2741 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 2742 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 2743 description "PIM SM augmentation."; 2745 uses static-rp-sm-container; 2746 } // augment 2747 } 2748 2750 4.4. PIM-DM module 2752 file "ietf-pim-dm@2017-03-09.yang" 2753 module ietf-pim-dm { 2754 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-dm"; 2755 prefix pim-dm; 2757 import ietf-routing { 2758 prefix "rt"; 2759 } 2761 import ietf-pim-base { 2762 prefix "pim-base"; 2763 } 2765 organization 2766 "IETF PIM Working Group"; 2768 contact 2769 "WG Web: 2770 WG List: 2772 WG Chair: Stig Venaas 2773 2775 WG Chair: Mike McBride 2776 2778 Editor: Xufeng Liu 2779 2781 Editor: Pete McAllister 2782 2784 Editor: Anish Peter 2785 2787 Editor: Mahesh Sivakumar 2788 2790 Editor: Yisong Liu 2791 2793 Editor: Fangwei Hu 2794 "; 2796 description 2797 "The YANG module defines a PIM (Protocol Independent Multicast) 2798 DM (Dense Mode) model."; 2800 revision 2017-03-09 { 2801 description 2802 "Initial revision."; 2803 reference 2804 "RFC XXXX: A YANG Data Model for PIM"; 2805 } 2807 /* 2808 * Configuration data nodes 2809 */ 2811 augment "/rt:routing/rt:control-plane-protocols/" 2812 + "pim-base:pim/pim-base:address-family" { 2813 description "PIM DM (Dense Mode) augmentation."; 2815 container dm { 2816 presence "Present to enable dense-mode."; 2817 description 2818 "PIM DM configuration data."; 2819 } // Dm 2820 } // augment 2822 augment "/rt:routing/rt:control-plane-protocols/" 2823 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 2824 + "pim-base:address-family" { 2825 description "PIM DM augmentation to PIM base interface."; 2827 container dm { 2828 presence "Present to enable dense-mode."; 2829 description 2830 "PIM DM configuration data."; 2831 } // sm 2832 } // augment 2834 /* 2835 * Operational state data nodes 2836 */ 2838 augment "/rt:routing-state/rt:control-plane-protocols/" 2839 + "pim-base:pim/pim-base:address-family" { 2840 description "PIM DM state."; 2841 container dm { 2842 presence "Present to enable dense-mode."; 2843 description 2844 "PIM DM state data."; 2845 } // dm 2846 } // augment 2848 augment "/rt:routing-state/rt:control-plane-protocols/" 2849 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 2850 + "pim-base:address-family" { 2851 description "PIM DM augmentation to PIM base interface."; 2853 container dm { 2854 presence "Present to enable dense-mode."; 2855 description 2856 "PIM DM state data."; 2857 } // sm 2858 } // augment 2859 } 2860 2862 4.5. PIM-BIDIR module 2864 file "ietf-pim-bidir@2017-03-09.yang" 2865 module ietf-pim-bidir { 2866 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-bidir"; 2867 prefix pim-bidir; 2868 import ietf-inet-types { 2869 prefix "inet"; 2870 } 2872 import ietf-interfaces { 2873 prefix "if"; 2874 } 2876 import ietf-routing { 2877 prefix "rt"; 2878 } 2880 import ietf-pim-base { 2881 prefix "pim-base"; 2882 } 2884 import ietf-pim-rp { 2885 prefix "pim-rp"; 2886 } 2888 organization 2889 "IETF PIM Working Group"; 2891 contact 2892 "WG Web: 2893 WG List: 2895 WG Chair: Stig Venaas 2896 2898 WG Chair: Mike McBride 2899 2901 Editor: Xufeng Liu 2902 2904 Editor: Pete McAllister 2905 2907 Editor: Anish Peter 2908 2910 Editor: Mahesh Sivakumar 2911 2913 Editor: Yisong Liu 2914 2916 Editor: Fangwei Hu 2917 "; 2919 description 2920 "The YANG module defines a PIM (Protocol Independent Multicast) 2921 BIDIR (Bidirectional) mode model."; 2923 revision 2017-03-09 { 2924 description 2925 "Initial revision."; 2926 reference 2927 "RFC XXXX: A YANG Data Model for PIM"; 2928 } 2930 /* 2931 * Features 2932 */ 2933 feature intf-df-election { 2934 description 2935 "Support configuration of interface DF election."; 2936 } 2938 /* 2939 * Identities 2940 */ 2941 identity bidir { 2942 base pim-rp:rp-mode; 2943 description 2944 "BIDIR (Bidirectional) mode."; 2945 } 2947 identity df-state { 2948 description 2949 "DF (Designated Forwarder) election state type."; 2950 reference 2951 "RFC5015: Bidirectional Protocol Independent Multicast 2952 (BIDIR-PIM)."; 2953 } 2955 identity df-state-offer { 2956 base df-state; 2957 description 2958 "Initial election state. When in the Offer state, a router 2959 thinks it can eventually become the winner and periodically 2960 generates Offer messages."; 2961 } 2963 identity df-state-lose { 2964 base df-state; 2965 description 2966 "There either is a different election winner or that no 2967 router on the link has a path to the RPA (Rendezvous-Point 2968 Address)."; 2969 } 2971 identity df-state-win { 2972 base df-state; 2973 description 2974 "The router is the acting DF without any contest."; 2975 } 2977 identity df-state-backoff { 2978 base df-state; 2979 description 2980 "The router is the acting DF but another router has made a 2981 bid to take over."; 2982 } 2984 /* 2985 * Typedefs 2986 */ 2988 /* 2989 * Groupings 2990 */ 2991 grouping df-election-container { 2992 description 2993 "Grouping that contains DF (Designated Forwarder) election 2994 attributes."; 2995 container df-election { 2996 if-feature intf-df-election; 2997 description 2998 "DF election attributes."; 2999 leaf offer-interval { 3000 type pim-base:timer-value; 3001 description 3002 "Offer interval specifies the interval between repeated 3003 DF election messages."; 3004 } 3005 leaf backoff-interval { 3006 type pim-base:timer-value; 3007 description 3008 "This is the interval that the acting DF waits between 3009 receiving a better DF Offer and sending the Pass message 3010 to transfer DF responsibility"; 3011 } 3012 leaf offer-multiplier { 3013 type uint8; 3014 description 3015 "This is number of transmission attempts for DF election 3016 messages. 3017 When a DF election Offer or Winner message fails to be 3018 received, the message is retransmitted. 3019 The offer-multiplier sets the minimum number of DF 3020 election messages that MUST fail to be received for DF 3021 election to fail. 3022 If a router receives from a neighbor a better offer than 3023 its own, the router stops participating in the election 3024 for a period of offer-multiplier * offer-interval. 3025 Eventually, all routers except the best candidate stop 3026 sending Offer messages."; 3027 } 3028 } // df-election 3029 } // df-election-container 3031 grouping static-rp-bidir-container { 3032 description 3033 "Grouping that contains BIDIR (Bidirectional) attributes for 3034 static RP (Rendezvous-Point)."; 3035 container bidir { 3036 presence 3037 "Indicate the support of BIDIR mode."; 3038 description 3039 "PIM BIDIR configuration data."; 3041 uses pim-rp:static-rp-attributes; 3042 } // bidir 3043 } // static-rp-bidir-container 3045 /* 3046 * Configuration data nodes 3047 */ 3049 augment "/rt:routing/rt:control-plane-protocols/" 3050 + "pim-base:pim/pim-base:address-family" { 3051 description "PIM BIDIR (Bidirectional) augmentation."; 3053 container bidir { 3054 presence "Present to enable BIDIR mode."; 3055 description 3056 "PIM BIDIR configuration data."; 3057 } // bidir 3058 } // augment 3059 augment "/rt:routing/rt:control-plane-protocols/" 3060 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 3061 + "pim-base:address-family" { 3062 description "PIM BIDIR augmentation."; 3064 container bidir { 3065 presence "Present to enable BIDIR mode."; 3066 description 3067 "PIM BIDIR configuration data."; 3069 uses df-election-container; 3070 } // bidir 3071 } // augment 3073 augment "/rt:routing/rt:control-plane-protocols/" 3074 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 3075 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 3076 description "PIM BIDIR augmentation."; 3078 uses static-rp-bidir-container; 3079 } // augment 3081 augment "/rt:routing/rt:control-plane-protocols/" 3082 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 3083 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 3084 description "PIM BIDIR augmentation."; 3086 uses static-rp-bidir-container; 3087 } // augment 3089 /* 3090 * Operational state data nodes 3091 */ 3093 augment "/rt:routing-state/rt:control-plane-protocols/" 3094 + "pim-base:pim/pim-base:address-family" { 3095 description 3096 "PIM BIDIR state."; 3098 container bidir { 3099 presence "Present to enable BIDIR mode."; 3100 description 3101 "PIM BIDIR state data."; 3102 } // bidir 3103 } // augment 3105 augment "/rt:routing-state/rt:control-plane-protocols/" 3106 + "pim-base:pim/pim-base:interfaces/pim-base:interface/" 3107 + "pim-base:address-family" { 3108 description "PIM BIDIR augmentation."; 3110 container bidir { 3111 presence "Present to enable BIDIR mode."; 3112 description 3113 "PIM BIDIR configuration data."; 3115 uses df-election-container; 3116 } // bidir 3117 } // augment 3119 augment "/rt:routing-state/rt:control-plane-protocols/" 3120 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 3121 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 3122 description "PIM BIDIR augmentation."; 3124 uses static-rp-bidir-container; 3125 } // augment 3127 augment "/rt:routing-state/rt:control-plane-protocols/" 3128 + "pim-base:pim/pim-base:address-family/pim-rp:rp/" 3129 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 3130 description "PIM BIDIR augmentation."; 3132 uses static-rp-bidir-container; 3133 } // augment 3135 augment "/rt:routing-state/rt:control-plane-protocols/" 3136 + "pim-base:pim/pim-base:address-family/pim-rp:rp" { 3137 description "PIM BIDIR augmentation."; 3139 container bidir { 3140 description 3141 "PIM BIDIR state data."; 3142 container df-election { 3143 description 3144 "DF election data."; 3145 list ipv4-rp { 3146 when "../../../../pim-base:address-family = 'rt:ipv4'" { 3147 description 3148 "Only applicable to IPv4 address family."; 3149 } 3150 key "ipv4-address"; 3151 description 3152 "A list of IPv4 RP addresses."; 3153 leaf ipv4-address { 3154 type inet:ipv4-address; 3155 description 3156 "The address of the RP."; 3157 } 3158 } // ipv4-rp 3159 list ipv6-rp { 3160 when "../../../../pim-base:address-family = 'rt:ipv6'" { 3161 description 3162 "Only applicable to IPv6 address family."; 3163 } 3164 key "ipv6-address"; 3165 description 3166 "A list of IPv6 RP addresses."; 3167 leaf ipv6-address { 3168 type inet:ipv6-address; 3169 description 3170 "The address of the RP."; 3171 } 3172 } // ipv6-rp 3173 } // df-election 3175 container interface-df-election { 3176 description 3177 "Interface DF election data."; 3178 list ipv4-rp { 3179 when "../../../../pim-base:address-family = 'rt:ipv4'" { 3180 description 3181 "Only applicable to IPv4 address family."; 3182 } 3183 key "ipv4-address interface-name"; 3184 description 3185 "A list of IPv4 RP addresses."; 3186 leaf ipv4-address { 3187 type inet:ipv4-address; 3188 description 3189 "The address of the RP."; 3190 } 3191 leaf interface-name { 3192 type if:interface-ref; 3193 description 3194 "The address of the RP."; 3195 } 3196 leaf df-address { 3197 type inet:ipv4-address; 3198 description 3199 "DF address."; 3200 } 3201 leaf interface-state { 3202 type identityref { 3203 base df-state; 3204 } 3205 description 3206 "Interface state."; 3207 } 3208 } // ipv4-rp 3209 list ipv6-rp { 3210 when "../../../../pim-base:address-family = 'rt:ipv6'" { 3211 description 3212 "Only applicable to IPv6 address family."; 3213 } 3214 key "ipv6-address interface-name"; 3215 description 3216 "A list of IPv6 RP addresses."; 3217 leaf ipv6-address { 3218 type inet:ipv6-address; 3219 description 3220 "The address of the RP."; 3221 } 3222 leaf interface-name { 3223 type if:interface-ref; 3224 description 3225 "The address of the RP."; 3226 } 3227 leaf df-address { 3228 type inet:ipv6-address; 3229 description 3230 "DF address."; 3231 } 3232 leaf interface-state { 3233 type identityref { 3234 base df-state; 3235 } 3236 description 3237 "Interface state."; 3238 } 3239 } // ipv6-rp 3240 } // interface-df-election 3241 } 3242 } // augment 3243 } 3244 3246 5. Implementation Status 3248 This section to be removed by the RFC editor. 3250 This section records the status of known implementations of the 3251 protocol defined by this specification at the time of posting of this 3252 Internet-Draft, and is based on a proposal described in [RFC7942]. 3253 The description of implementations in this section is intended to 3254 assist the IETF in its decision processes in progressing drafts to 3255 RFCs. Please note that the listing of any individual implementation 3256 here does not imply endorsement by the IETF. Furthermore, no effort 3257 has been spent to verify the information presented here that was 3258 supplied by IETF contributors. This is not intended as, and must not 3259 be construed to be, a catalog of available implementations or their 3260 features. Readers are advised to note that other implementations may 3261 exist. 3263 According to RFC 7942, "this will allow reviewers and working groups 3264 to assign due consideration to documents that have the benefit of 3265 running code, which may serve as evidence of valuable experimentation 3266 and feedback that have made the implemented protocols more mature. 3267 It is up to the individual working groups to use this information as 3268 they see fit". 3270 This document is the work result of the PIM working group's YANG 3271 multicast design team. The following wiki page contains the 3272 information on the design team members, the meeting discussions, 3273 lists of modeled features, and which features are supported by which 3274 existing implementations: 3276 https://trac.ietf.org/trac/pim/wiki/yang 3278 6. Security Considerations 3280 Configuration and state data defined in this document are designed to 3281 be accessed via a management protocol with secure transport layer, 3282 such as NETCONF [RFC6241]. The NETCONF access control model 3283 [RFC6536] provides the means to restrict access for specific users to 3284 a pre- configured subset of all available operations and contents. 3286 The models defined in this document contain a number of configuration 3287 data nodes that are writable, creatable, and deletable. Unauthorised 3288 access to the configuration data can adversely affect the routing 3289 subsystem of both the local device and the network. This may lead to 3290 network malfunctions, delivery of packets to inappropriate 3291 destinations and other problems. 3293 7. IANA Considerations 3295 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 3296 actual RFC number (and remove this note). 3298 This document registers the following namespace URIs in the IETF XML 3299 registry [RFC3688]: 3301 -------------------------------------------------------------------- 3302 URI: urn:ietf:params:xml:ns:yang:ietf-pim-base 3303 Registrant Contact: The IESG. 3304 XML: N/A, the requested URI is an XML namespace. 3305 -------------------------------------------------------------------- 3307 -------------------------------------------------------------------- 3308 URI: urn:ietf:params:xml:ns:yang:ietf-pim-bidir 3309 Registrant Contact: The IESG. 3310 XML: N/A, the requested URI is an XML namespace. 3311 -------------------------------------------------------------------- 3313 -------------------------------------------------------------------- 3314 URI: urn:ietf:params:xml:ns:yang:ietf-pim-dm 3315 Registrant Contact: The IESG. 3316 XML: N/A, the requested URI is an XML namespace. 3317 -------------------------------------------------------------------- 3319 -------------------------------------------------------------------- 3320 URI: urn:ietf:params:xml:ns:yang:ietf-pim-rp 3321 Registrant Contact: The IESG. 3322 XML: N/A, the requested URI is an XML namespace. 3323 -------------------------------------------------------------------- 3325 -------------------------------------------------------------------- 3326 URI: urn:ietf:params:xml:ns:yang:ietf-pim-sm 3327 Registrant Contact: The IESG. 3328 XML: N/A, the requested URI is an XML namespace. 3329 -------------------------------------------------------------------- 3331 This document registers the following YANG modules in the YANG Module 3332 Names registry [RFC6020]: 3334 -------------------------------------------------------------------- 3335 name: ietf-pim-base 3336 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-base 3337 prefix: pim-base 3338 reference: RFC XXXX 3339 -------------------------------------------------------------------- 3340 -------------------------------------------------------------------- 3341 name: ietf-pim-bidir 3342 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-bidir 3343 prefix: pim-bidir 3344 reference: RFC XXXX 3345 -------------------------------------------------------------------- 3347 -------------------------------------------------------------------- 3348 name: ietf-pim-dm 3349 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-dm 3350 prefix: pim-dm 3351 reference: RFC XXXX 3352 -------------------------------------------------------------------- 3354 -------------------------------------------------------------------- 3355 name: ietf-pim-rp 3356 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-rp 3357 prefix: pim-rp 3358 reference: RFC XXXX 3359 -------------------------------------------------------------------- 3361 -------------------------------------------------------------------- 3362 name: ietf-pim-sm 3363 namespace: urn:ietf:params:xml:ns:yang:ietf-pim-sm 3364 prefix: pim-sm 3365 reference: RFC XXXX 3366 -------------------------------------------------------------------- 3368 8. Acknowledgements 3370 The authors would like to thank Steve Baillargeon, Guo Feng, Robert 3371 Kebler, Tanmoy Kundu, and Stig Venaas for their valuable 3372 contributions. 3374 9. References 3376 9.1. Normative References 3378 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3379 Requirement Levels", BCP 14, RFC 2119, 3380 DOI 10.17487/RFC2119, March 1997, 3381 . 3383 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 3384 DOI 10.17487/RFC3688, January 2004, 3385 . 3387 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 3388 the Network Configuration Protocol (NETCONF)", RFC 6020, 3389 DOI 10.17487/RFC6020, October 2010, 3390 . 3392 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 3393 and A. Bierman, Ed., "Network Configuration Protocol 3394 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 3395 . 3397 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 3398 Protocol (NETCONF) Access Control Model", RFC 6536, 3399 DOI 10.17487/RFC6536, March 2012, 3400 . 3402 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 3403 RFC 6991, DOI 10.17487/RFC6991, July 2013, 3404 . 3406 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 3407 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 3408 . 3410 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 3411 Management", RFC 8022, DOI 10.17487/RFC8022, November 3412 2016, . 3414 [I-D.ietf-rtgwg-routing-types] 3415 Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 3416 "Routing Area Common YANG Data Types", draft-ietf-rtgwg- 3417 routing-types-02 (work in progress), March 2017. 3419 9.2. Informative References 3421 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 3422 Thyagarajan, "Internet Group Management Protocol, Version 3423 3", RFC 3376, DOI 10.17487/RFC3376, October 2002, 3424 . 3426 [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific 3427 Multicast (SSM)", RFC 3569, DOI 10.17487/RFC3569, July 3428 2003, . 3430 [RFC3618] Fenner, B., Ed. and D. Meyer, Ed., "Multicast Source 3431 Discovery Protocol (MSDP)", RFC 3618, 3432 DOI 10.17487/RFC3618, October 2003, 3433 . 3435 [RFC3810] Vida, R., Ed. and L. Costa, Ed., "Multicast Listener 3436 Discovery Version 2 (MLDv2) for IPv6", RFC 3810, 3437 DOI 10.17487/RFC3810, June 2004, 3438 . 3440 [RFC3973] Adams, A., Nicholas, J., and W. Siadak, "Protocol 3441 Independent Multicast - Dense Mode (PIM-DM): Protocol 3442 Specification (Revised)", RFC 3973, DOI 10.17487/RFC3973, 3443 January 2005, . 3445 [RFC4610] Farinacci, D. and Y. Cai, "Anycast-RP Using Protocol 3446 Independent Multicast (PIM)", RFC 4610, 3447 DOI 10.17487/RFC4610, August 2006, 3448 . 3450 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 3451 IP", RFC 4607, DOI 10.17487/RFC4607, August 2006, 3452 . 3454 [RFC5015] Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano, 3455 "Bidirectional Protocol Independent Multicast (BIDIR- 3456 PIM)", RFC 5015, DOI 10.17487/RFC5015, October 2007, 3457 . 3459 [RFC5059] Bhaskar, N., Gall, A., Lingard, J., and S. Venaas, 3460 "Bootstrap Router (BSR) Mechanism for Protocol Independent 3461 Multicast (PIM)", RFC 5059, DOI 10.17487/RFC5059, January 3462 2008, . 3464 [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 3465 (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, 3466 . 3468 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 3469 Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, 3470 January 2011, . 3472 [RFC6388] Wijnands, IJ., Ed., Minei, I., Ed., Kompella, K., and B. 3473 Thomas, "Label Distribution Protocol Extensions for Point- 3474 to-Multipoint and Multipoint-to-Multipoint Label Switched 3475 Paths", RFC 6388, DOI 10.17487/RFC6388, November 2011, 3476 . 3478 [RFC7761] Fenner, B., Handley, M., Holbrook, H., Kouvelas, I., 3479 Parekh, R., Zhang, Z., and L. Zheng, "Protocol Independent 3480 Multicast - Sparse Mode (PIM-SM): Protocol Specification 3481 (Revised)", STD 83, RFC 7761, DOI 10.17487/RFC7761, March 3482 2016, . 3484 [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running 3485 Code: The Implementation Status Section", BCP 205, 3486 RFC 7942, DOI 10.17487/RFC7942, July 2016, 3487 . 3489 [I-D.ietf-netmod-rfc6087bis] 3490 Bierman, A., "Guidelines for Authors and Reviewers of YANG 3491 Data Model Documents", draft-ietf-netmod-rfc6087bis-12 3492 (work in progress), March 2017. 3494 Authors' Addresses 3496 Xufeng Liu 3497 Jabil 3498 8281 Greensboro Drive, Suite 200 3499 McLean VA 22102 3500 USA 3502 EMail: Xufeng_Liu@jabil.com 3504 Pete McAllister 3505 Metaswitch Networks 3506 100 Church Street 3507 Enfield EN2 6BQ 3508 UK 3510 EMail: pete.mcallister@metaswitch.com 3512 Anish Peter 3513 Individual 3515 EMail: anish.ietf@gmail.com 3517 Mahesh Sivakumar 3518 Cisco Systems 3519 510 McCarthy Boulevard 3520 Milpitas, California 3521 USA 3523 EMail: masivaku@cisco.com 3524 Yisong Liu 3525 Huawei Technologies 3526 Huawei Administration Building 3527 Longgang, Guangdong 518129 3528 China 3530 EMail: liuyisong@huawei.com 3532 Fangwei Hu 3533 ZTE Corporation 3534 889 Bibo Road 3535 Shanghai, Shanghai 201203 3536 China 3538 EMail: hu.fangwei@zte.com.cn