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