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