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