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