idnits 2.17.1 draft-mcallister-pim-yang-02.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 : ---------------------------------------------------------------------------- ** There are 19 instances of too long lines in the document, the longest one being 4 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 299 has weird spacing: '...nterval uin...' == Line 399 has weird spacing: '...nterval uin...' == Line 472 has weird spacing: '...v4-addr ine...' == Line 474 has weird spacing: '...v6-addr ine...' == Line 484 has weird spacing: '...-length uin...' == (17 more instances...) == The document doesn't use any RFC 2119 keywords, yet has text resembling RFC 2119 boilerplate text. -- The document date (January 7, 2016) is 3032 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) == Outdated reference: A later version (-20) exists of draft-ietf-netmod-rfc6087bis-05 -- Obsolete informational reference (is this intentional?): RFC 4601 (Obsoleted by RFC 7761) -- Obsolete informational reference (is this intentional?): RFC 6087 (Obsoleted by RFC 8407) == Outdated reference: A later version (-25) exists of draft-ietf-netmod-routing-cfg-20 Summary: 1 error (**), 0 flaws (~~), 10 warnings (==), 3 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 PIM Working Group X. Liu 3 Internet-Draft Ericsson 4 Intended status: Standards Track P. McAllister 5 Expires: July 10, 2016 Metaswitch Networks 6 A. Peter 7 Juniper Networks 8 January 7, 2016 10 A YANG data model for Protocol-Independent Multicast (PIM) 11 draft-mcallister-pim-yang-02 13 Abstract 15 This document defines a YANG data model that can be used to configure 16 Protocol Independent Multicast (PIM) devices. 18 Status of This Memo 20 This Internet-Draft is submitted in full conformance with the 21 provisions of BCP 78 and BCP 79. 23 Internet-Drafts are working documents of the Internet Engineering 24 Task Force (IETF). Note that other groups may also distribute 25 working documents as Internet-Drafts. The list of current Internet- 26 Drafts is at http://datatracker.ietf.org/drafts/current/. 28 Internet-Drafts are draft documents valid for a maximum of six months 29 and may be updated, replaced, or obsoleted by other documents at any 30 time. It is inappropriate to use Internet-Drafts as reference 31 material or to cite them other than as "work in progress." 33 This Internet-Draft will expire on July 10, 2016. 35 Copyright Notice 37 Copyright (c) 2016 IETF Trust and the persons identified as the 38 document authors. All rights reserved. 40 This document is subject to BCP 78 and the IETF Trust's Legal 41 Provisions Relating to IETF Documents 42 (http://trustee.ietf.org/license-info) in effect on the date of 43 publication of this document. Please review these documents 44 carefully, as they describe your rights and restrictions with respect 45 to this document. Code Components extracted from this document must 46 include Simplified BSD License text as described in Section 4.e of 47 the Trust Legal Provisions and are provided without warranty as 48 described in the Simplified BSD License. 50 Table of Contents 52 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 53 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 54 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 55 2. Design of Data Model . . . . . . . . . . . . . . . . . . . . 3 56 2.1. Scope of model . . . . . . . . . . . . . . . . . . . . . 3 57 2.2. Optional capabilities . . . . . . . . . . . . . . . . . . 3 58 2.3. Top-level structure . . . . . . . . . . . . . . . . . . . 4 59 2.4. Position of address family in hierarchy . . . . . . . . . 5 60 3. Unresolved Issues . . . . . . . . . . . . . . . . . . . . . . 5 61 3.1. Current status of work in progress . . . . . . . . . . . 5 62 3.2. Group range mappings . . . . . . . . . . . . . . . . . . 5 63 3.3. Issues blocked on other model designers . . . . . . . . . 6 64 4. Module Structure . . . . . . . . . . . . . . . . . . . . . . 6 65 4.1. PIM base module . . . . . . . . . . . . . . . . . . . . . 6 66 4.2. PIM RP module . . . . . . . . . . . . . . . . . . . . . . 10 67 4.3. PIM-SM module . . . . . . . . . . . . . . . . . . . . . . 13 68 4.4. PIM-DM module . . . . . . . . . . . . . . . . . . . . . . 14 69 4.5. PIM-BIDIR module . . . . . . . . . . . . . . . . . . . . 15 70 5. PIM YANG Modules . . . . . . . . . . . . . . . . . . . . . . 16 71 5.1. PIM base module . . . . . . . . . . . . . . . . . . . . . 16 72 5.2. PIM RP module . . . . . . . . . . . . . . . . . . . . . . 36 73 5.3. PIM-SM module . . . . . . . . . . . . . . . . . . . . . . 50 74 5.4. PIM-DM module . . . . . . . . . . . . . . . . . . . . . . 57 75 5.5. PIM-BIDIR module . . . . . . . . . . . . . . . . . . . . 59 76 6. TODO list . . . . . . . . . . . . . . . . . . . . . . . . . . 67 77 7. Security Considerations . . . . . . . . . . . . . . . . . . . 68 78 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 68 79 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 68 80 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 68 81 10.1. Normative References . . . . . . . . . . . . . . . . . . 68 82 10.2. Informative References . . . . . . . . . . . . . . . . . 68 83 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 69 85 1. Introduction 87 YANG [RFC6020] [RFC6087] is a data definition language that was 88 introduced to model the configuration and running state of a device 89 managed using NETCONF [RFC6241]. YANG is now also being used as a 90 component of wider management interfaces, such as CLIs. 92 This document defines a draft YANG data model that can be used to 93 configure and manage Protocol-Independent Multicast (PIM) devices. 94 Currently this model is incomplete, but it will support the core PIM 95 protocol, as well as many other features mentioned in separate PIM 96 RFCs. Non-core features are defined as optional in the provided data 97 model. 99 1.1. Requirements Language 101 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 102 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this 103 document are to be interpreted as described in BCP 14, RFC 2119 104 [RFC2119]. 106 1.2. Terminology 108 The terminology for describing YANG data models is found in 109 [RFC6020]. 111 This draft employs YANG tree diagrams, which are explained in 112 [I-D.ietf-netmod-rfc6087bis]. 114 2. Design of Data Model 116 2.1. Scope of model 118 The model covers PIM Sparse Mode [RFC4601], including the Source- 119 Specfic subset [RFC3569], Dense Mode [RFC3973], and Bi-directional 120 PIM [RFC5015]. 122 The PIM extensions represented in the model include BSR [RFC5059] and 123 Anycast RP [RFC4610]. 125 The representation of some of these features is not completely 126 specified in this draft of the data model. This model is being 127 circulated in its current form for early oversight and review of the 128 basic hierarchy. 130 The operational state fields and notifications of this model are also 131 incomplete, though the structure of what has been written may be 132 taken as representative of the structure of the model when complete. 134 This model does not cover other multicast protocols such as IGMP/MLD, 135 MSDP, mVPN, or m-LDP in-band signalling. It does not cover any 136 configuration required to generate the MRIB. These will be covered 137 by future Internet Drafts. 139 2.2. Optional capabilities 141 This model is designed to represent the capabilities of PIM devices 142 with various specifications, including some with basic subsets of the 143 PIM protocol. The main design goals of this draft are that any major 144 now-existing implementation may be said to support the base model, 145 and that the configuration of all implementations meeting the 146 specification is easy to express through some combination of the 147 features in the base model and simple vendor augmentations. 149 There is also value in widely-supported features being standardized, 150 to save work for individual vendors, and so that mapping between 151 different vendors' configuration is not needlessly complicated. 152 Therefore these modules declare a number of features representing 153 capabilities that not all deployed devices support. 155 The extensive use of feature declarations should also substantially 156 simplify the capability negotiation process for a vendor's PIM 157 implementation. 159 On the other hand, operational state parameters are not so widely 160 designated as features, as there are many cases where the defaulting 161 of an operational state parameter would not cause any harm to the 162 system, and it is much more likely that an implementation without 163 native support for a piece of operational state would be able to 164 derive a suitable value for a state variable that is not natively 165 supported. 167 For the same reason, wide constant ranges (for example, timer maxima 168 and minima) will be used in the model. It is expected that vendors 169 will augment the model with any specific restrictions that might be 170 required. Vendors may also extend the features list with proprietary 171 extensions. 173 2.3. Top-level structure 175 This model defines several separate modules for modelling PIM 176 configuration, defined below. Again, this separation will make it 177 easier to express the specific capabilities of a PIM device. 179 The hierarchy of PIM configuration is designed so that objects that 180 are only relevant for one situation or feature are collected in a 181 container for that feature. For example, the configuration for PIM- 182 SM that is not relevant for an SSM-only implementation is collected 183 in an ASM container. 185 Where fields are not genuinely essential to protocol operation, they 186 are marked as optional. Some fields will be essential but have a 187 default specified, so they need not be explicitly configured. 189 This module structure also applies, where applicable, to the 190 operational state and notifications of the model. 192 2.4. Position of address family in hierarchy 194 The current draft contains address-family as a node in the hierarchy 195 multiple times: both under the interface list, and under the PIM 196 instance. This is similar to the IS-IS yang draft model. 198 The reasoning for this is to make it easier for implementations in 199 which configuration options are not supported for specific address 200 families. 202 For these implementations, the restriction that interface 203 configuration must be address-family independent must either be 204 expressed as a vendor augmentation of an address-family-independent 205 parameter above the address-family level, or by a constraint on the 206 base model objects of a form similar to: 208 must ". = ../../address-family[address-family='ipv4']/ 209 interface[interface=current()/sibling:interface]/dr-priority" { 210 error-app-tag dr-priority-mismatch; error-message "Error: IPv6 DR 211 priority must match IPv4 DR priority "; } 213 3. Unresolved Issues 215 3.1. Current status of work in progress 217 The model so far details how the PIM modules interact and covers the 218 higher levels of their hierarchy. Some details of interface 219 configuration, RP configuration, and PIM-ASM-specific parameters are 220 also complete. 222 For a list of the most substantial areas still to cover, please see 223 the "TODO list" section below. 225 3.2. Group range mappings 227 There is currently no convenient way in the operational state model 228 to map from a group address to the PIM mode and RP information that 229 it will be forwarded according to, which complicates reasoning about 230 the running state and the diagnosis of conflicting policy 231 configuration. 233 A hypothetical group range state reporting object indexed by group 234 range would be desirable for this purpose, but would be inconvenient 235 for many implementations that index the relevant information on RP 236 address (not applicable for DM or unroutable group-ranges), and 237 difficult to express directly in YANG (as it is difficult to express 238 a container indexed on an arbitrary, proprietary policy structure). 240 3.3. Issues blocked on other model designers 242 Some questions must be resolved with reference to other yang models, 243 and so the resolution may be blocked on a decision from another body. 244 Currently these issues are: 246 1. The position of BFD in the configuration; does the BFD model 247 augment various different protocols, or do the protocols have to 248 augment themselves individually to support BFD? 250 2. The abstract concepts of a "set of IP addresses" or "set of IP 251 prefixes", as represented in implementations by prefixes, ACLs or 252 policy statements, is a general concept out of the scope of this 253 document. It will presumably have a yang data-type the 254 instantiation of which is vendor-specific. 256 4. Module Structure 258 4.1. PIM base module 260 The PIM base module defines the router-wide configuration options not 261 specific to any PIM mode, and is included by the other modules. 262 There are a couple of things worth mentioning here regarding where 263 the PIM model fits in the overall routing hierarchy: 265 1. Our current direction is to agree to a routing-instance-centric 266 (VRF) model as opposed to protocol-centric mainly because it fits 267 well into the routing-instance model, and it is easier to map 268 from the VRF-centric to the protocol-centric than the other way 269 around due to forward references. 271 2. The PIM base model will augment "/rt:routing/rt:routing-instance/ 272 rt:routing-protocols:" as opposed to augmenting "/rt:routing/ 273 rt:routing-instance/rt:routing-protocols:/rt:routing-protocol" as 274 the latter would allow multiple protocol instances per VRF, which 275 does not make sense for PIM. 277 module: ietf-pim-base 278 augment /rt:routing/rt:routing-instance/rt:routing-protocols: 279 +--rw pim 280 +--rw graceful-restart 281 | +--rw enabled? boolean 282 | +--rw duration? uint16 283 +--rw address-family* [address-family] 284 | +--rw address-family identityref 285 | +--rw graceful-restart 286 | +--rw enabled? boolean 287 | +--rw duration? uint16 288 +--rw interfaces 289 +--rw interface* [interface] 290 +--rw interface if:interface-ref 291 +--rw address-family* [address-family] 292 +--rw address-family identityref 293 +--rw bfd 294 | +--rw enabled? boolean 295 | +--rw local-multiplier? multiplier 296 | +--rw (interval-config-type)? 297 | +--:(tx-rx-intervals) 298 | | +--rw desired-min-tx-interval uint32 299 | | +--rw required-min-rx-interval uint32 300 | +--:(single-interval) 301 | +--rw min-interval uint32 302 +--rw dr-priority? uint32 {intf-dr-priority}? 303 +--rw hello-interval? timer-value {intf-hello-interval}? 304 +--rw (hello-holdtime-or-multipler)? 305 | +--:(holdtime) {intf-hello-holdtime}? 306 | | +--rw hello-holdtime? timer-value 307 | +--:(multipler) {intf-hello-multipler}? 308 | +--rw hello-multipler? uint8 309 +--rw jp-interval? timer-value {intf-jp-interval}? 310 +--rw (jp-holdtime-or-multipler)? 311 | +--:(holdtime) {intf-jp-holdtime}? 312 | | +--rw jp-holdtime? timer-value 313 | +--:(multipler) {intf-jp-multipler}? 314 | +--rw jp-multipler? uint8 315 +--rw propagation-delay? uint16 {intf-propagation-delay}? 316 +--rw override-interval? uint16 {intf-override-interval}? 317 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols: 318 +--ro pim 319 +--ro address-family* [address-family] 320 | +--ro address-family identityref 321 | +--ro statistics 322 | | +--ro discontinuity-time? yang:date-and-time 323 | | +--ro error 324 | | | +--ro assert? yang:counter64 325 | | | +--ro bsr? yang:counter64 326 | | | +--ro candidate-rp-advertisement? yang:counter64 327 | | | +--ro hello? yang:counter64 328 | | | +--ro join-prune? yang:counter64 329 | | | +--ro register? yang:counter64 330 | | | +--ro register-stop? yang:counter64 331 | | | +--ro state-refresh? yang:counter64 332 | | +--ro queue 333 | | | +--ro size? uint32 334 | | | +--ro overflow? yang:counter32 335 | | +--ro received 336 | | | +--ro assert? yang:counter64 337 | | | +--ro bsr? yang:counter64 338 | | | +--ro candidate-rp-advertisement? yang:counter64 339 | | | +--ro hello? yang:counter64 340 | | | +--ro join-prune? yang:counter64 341 | | | +--ro register? yang:counter64 342 | | | +--ro register-stop? yang:counter64 343 | | | +--ro state-refresh? yang:counter64 344 | | +--ro sent 345 | | +--ro assert? yang:counter64 346 | | +--ro bsr? yang:counter64 347 | | +--ro candidate-rp-advertisement? yang:counter64 348 | | +--ro hello? yang:counter64 349 | | +--ro join-prune? yang:counter64 350 | | +--ro register? yang:counter64 351 | | +--ro register-stop? yang:counter64 352 | | +--ro state-refresh? yang:counter64 353 | +--ro topology-tree-info 354 | +--ro ipv4-route* [group source-addr is-rpt] 355 | | +--ro group inet:ipv4-address 356 | | +--ro source-addr union 357 | | +--ro is-rpt boolean 358 | | +--ro expire? uint32 359 | | +--ro incoming-interface? if:interface-ref 360 | | +--ro mode? pim-mode 361 | | +--ro msdp-learned? boolean 362 | | +--ro rp-address? inet:ip-address 363 | | +--ro rpf-neighbor? inet:ip-address 364 | | +--ro spt-bit? boolean 365 | | +--ro up-time? uint32 366 | | +--ro outgoing-interface* [name] 367 | | +--ro name if:interface-ref 368 | | +--ro expire? timer-value 369 | | +--ro up-time? uint32 370 | | +--ro jp-state? enumeration 371 | +--ro ipv6-route* [group source-addr is-rpt] 372 | +--ro group inet:ipv6-address 373 | +--ro source-addr union 374 | +--ro is-rpt boolean 375 | +--ro expire? uint32 376 | +--ro incoming-interface? if:interface-ref 377 | +--ro mode? pim-mode 378 | +--ro msdp-learned? boolean 379 | +--ro rp-address? inet:ip-address 380 | +--ro rpf-neighbor? inet:ip-address 381 | +--ro spt-bit? boolean 382 | +--ro up-time? uint32 383 | +--ro outgoing-interface* [name] 384 | +--ro name if:interface-ref 385 | +--ro expire? timer-value 386 | +--ro up-time? uint32 387 | +--ro jp-state? enumeration 388 +--ro interfaces 389 +--ro interface* [interface] 390 +--ro interface if:interface-ref 391 +--ro address-family* [address-family] 392 +--ro address-family identityref 393 +--ro bfd 394 | +--ro enabled? boolean 395 | +--ro local-multiplier? multiplier 396 | +--ro (interval-config-type)? 397 | +--:(tx-rx-intervals) 398 | | +--ro desired-min-tx-interval uint32 399 | | +--ro required-min-rx-interval uint32 400 | +--:(single-interval) 401 | +--ro min-interval uint32 402 +--ro dr-priority? uint32 {intf-dr-priority}? 403 +--ro hello-interval? timer-value {intf-hello-interval}? 404 +--ro (hello-holdtime-or-multipler)? 405 | +--:(holdtime) {intf-hello-holdtime}? 406 | | +--ro hello-holdtime? timer-value 407 | +--:(multipler) {intf-hello-multipler}? 408 | +--ro hello-multipler? uint8 409 +--ro jp-interval? timer-value {intf-jp-interval}? 410 +--ro (jp-holdtime-or-multipler)? 411 | +--:(holdtime) {intf-jp-holdtime}? 412 | | +--ro jp-holdtime? timer-value 413 | +--:(multipler) {intf-jp-multipler}? 414 | +--ro jp-multipler? uint8 415 +--ro propagation-delay? uint16 {intf-propagation-delay}? 416 +--ro override-interval? uint16 {intf-override-interval}? 417 +--ro ipv4 418 | +--ro address* inet:ipv4-address 419 | +--ro dr-addr? inet:ipv4-address 420 +--ro ipv6 421 | +--ro address* inet:ipv6-address 422 | +--ro dr-addr? inet:ipv6-address 423 +--ro oper-status? enumeration 424 +--ro hello-expire? timer-value 425 +--ro neighbor-ipv4* [address] 426 | +--ro address inet:ipv4-address 427 | +--ro bfd-status? enumeration 428 | +--ro expire? timer-value 429 | +--ro dr-priority? uint32 430 | +--ro gen-id? uint32 431 | +--ro up-time? uint32 432 +--ro neighbor-ipv6* [address] 433 +--ro address inet:ipv6-address 434 +--ro bfd-status? enumeration 435 +--ro expire? timer-value 436 +--ro dr-priority? uint32 437 +--ro gen-id? uint32 438 +--ro up-time? uint32 439 notifications: 440 +---n pim-neighbor-event 441 | +--ro event-type? neighbor-event-type 442 | +--ro routing-instance-state-ref? rt:routing-instance-state-ref 443 | +--ro interface-state-ref? leafref 444 | +--ro interface-af-state-ref? leafref 445 | +--ro neighbor-ipv4-state-ref? leafref 446 | +--ro neighbor-ipv6-state-ref? leafref 447 | +--ro up-time? uint32 448 +---n pim-interface-event 449 +--ro event-type? interface-event-type 450 +--ro routing-instance-state-ref? rt:routing-instance-state-ref 451 +--ro interface-state-ref? leafref 452 +--ro ipv4 453 | +--ro address* inet:ipv4-address 454 | +--ro dr-addr? inet:ipv4-address 455 +--ro ipv6 456 +--ro address* inet:ipv6-address 457 +--ro dr-addr? inet:ipv6-address 459 4.2. PIM RP module 461 The PIM RP module contains configuration information scoped to RPs or 462 ranges of group addresses. This does not belong in the hierarchy 463 under any PIM mode, but is augmented by the individual mode-specific 464 modules as appropriate. 466 module: ietf-pim-rp 467 augment /rt:routing/rt:routing-instance/rt:routing-protocols/pim-base:pim/ 468 pim-base:address-family: 469 +--rw rp 470 +--rw static-rp 471 | +--rw ipv4-rp* [ipv4-addr] 472 | | +--rw ipv4-addr inet:ipv4-address 473 | +--rw ipv6-rp* [ipv6-addr] 474 | +--rw ipv6-addr inet:ipv6-address 475 +--rw bsr {bsr}? 476 +--rw bsr-candidate! 477 | +--rw (interface-or-address)? 478 | | +--:(interface) {candidate-interface}? 479 | | | +--rw interface if:interface-ref 480 | | +--:(ipv4-address) {candidate-ipv4}? 481 | | | +--rw ipv4-address inet:ipv4-address 482 | | +--:(ipv6-address) {candidate-ipv6}? 483 | | +--rw ipv6-address inet:ipv6-address 484 | +--rw hash-mask-length uint8 485 | +--rw priority uint8 486 +--rw rp-candidate-interface* [interface] {candidate-interface}? 487 | +--rw interface if:interface-ref 488 | +--rw policy? string 489 | +--rw mode? identityref 490 +--rw rp-candidate-ipv4-address* [ipv4-address] {candidate-ipv4}? 491 | +--rw ipv4-address inet:ipv4-address 492 | +--rw policy? string 493 | +--rw mode? identityref 494 +--rw rp-candidate-ipv6-address* [ipv6-address] {candidate-ipv6}? 495 +--rw ipv6-address inet:ipv6-address 496 +--rw policy? string 497 +--rw mode? identityref 498 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 499 pim-base:pim/pim-base:address-family: 500 +--ro rp 501 +--ro static-rp 502 | +--ro ipv4-rp* [ipv4-addr] 503 | | +--ro ipv4-addr inet:ipv4-address 504 | +--ro ipv6-rp* [ipv6-addr] 505 | +--ro ipv6-addr inet:ipv6-address 506 +--ro bsr {bsr}? 507 | +--ro bsr-candidate! 508 | | +--ro (interface-or-address)? 509 | | | +--:(interface) {candidate-interface}? 510 | | | | +--ro interface if:interface-ref 511 | | | +--:(ipv4-address) {candidate-ipv4}? 512 | | | | +--ro ipv4-address inet:ipv4-address 513 | | | +--:(ipv6-address) {candidate-ipv6}? 514 | | | +--ro ipv6-address inet:ipv6-address 515 | | +--ro hash-mask-length uint8 516 | | +--ro priority uint8 517 | +--ro rp-candidate-interface* [interface] {candidate-interface}? 518 | | +--ro interface if:interface-ref 519 | | +--ro policy? string 520 | | +--ro mode? identityref 521 | +--ro rp-candidate-ipv4-address* [ipv4-address] {candidate-ipv4}? 522 | | +--ro ipv4-address inet:ipv4-address 523 | | +--ro policy? string 524 | | +--ro mode? identityref 525 | +--ro rp-candidate-ipv6-address* [ipv6-address] {candidate-ipv6}? 526 | | +--ro ipv6-address inet:ipv6-address 527 | | +--ro policy? string 528 | | +--ro mode? identityref 529 | +--ro bsr 530 | | +--ro addr? inet:ip-address 531 | | +--ro hash-mask-length? uint8 532 | | +--ro priority? uint8 533 | | +--ro up-time? uint32 534 | +--ro (election-state)? {bsr-election-state}? 535 | | +--:(candidate) 536 | | | +--ro candidate-bsr-state? enumeration 537 | | +--:(non-candidate) 538 | | +--ro non-candidate-bsr-state? enumeration 539 | +--ro bsr-next-bootstrap? uint16 540 | +--ro rp 541 | | +--ro rp-address? inet:ip-address 542 | | +--ro group-policy? string 543 | | +--ro up-time? uint32 544 | +--ro rp-candidate-next-advertisement? uint16 545 +--ro rp-list 546 | +--ro ipv4-rp* [ipv4-addr mode] 547 | | +--ro ipv4-addr inet:ipv4-address 548 | | +--ro mode identityref 549 | | +--ro info-source-addr? inet:ipv4-address 550 | | +--ro info-source-type? identityref 551 | | +--ro up-time? uint32 552 | | +--ro expire? pim-base:timer-value 553 | +--ro ipv6-rp* [ipv6-addr mode] 554 | +--ro ipv6-addr inet:ipv6-address 555 | +--ro mode identityref 556 | +--ro info-source-addr? inet:ipv6-address 557 | +--ro info-source-type? identityref 558 | +--ro up-time? uint32 559 | +--ro expire? pim-base:timer-value 560 +--ro rp-mappings 561 +--ro ipv4-rp* [group rp-addr] 562 | +--ro group inet:ipv4-prefix 563 | +--ro rp-addr inet:ipv4-address 564 | +--ro up-time? uint32 565 | +--ro expire? pim-base:timer-value 566 +--ro ipv6-rp* [group rp-addr] 567 +--ro group inet:ipv6-prefix 568 +--ro rp-addr inet:ipv6-address 569 +--ro up-time? uint32 570 +--ro expire? pim-base:timer-value 571 notifications: 572 +---n pim-rp-event 573 +--ro event-type? rp-event-type 574 +--ro routing-instance-state-ref? rt:routing-instance-state-ref 575 +--ro instance-af-state-ref? leafref 576 +--ro group? inet:ip-address 577 +--ro rp-address? inet:ip-address 578 +--ro is-rpt? boolean 579 +--ro mode? pim-base:pim-mode 580 +--ro message-origin? inet:ip-address 582 4.3. PIM-SM module 584 This module covers Sparse Mode configuration, including PIM-ASM and 585 PIM-SSM. 587 module: ietf-pim-sm 588 augment /rt:routing/rt:routing-instance/rt:routing-protocols/pim-base:pim/ 589 pim-base:address-family: 590 +--rw sm 591 +--rw asm 592 | +--rw anycast-rp! 593 | | +--rw ipv4 594 | | | +--rw ipv4-anycast-rp* [anycast-addr rp-addr] 595 | | | +--rw anycast-addr inet:ipv4-address 596 | | | +--rw rp-addr inet:ipv4-address 597 | | +--rw ipv6 598 | | +--rw ipv6-anycast-rip* [anycast-addr rp-addr] 599 | | +--rw anycast-addr inet:ipv6-address 600 | | +--rw rp-addr inet:ipv6-address 601 | +--rw spt-switch 602 | +--rw infinity! {spt-switch-infinity}? 603 | +--rw policy-name? string {spt-switch-policy}? 604 +--rw ssm! 605 +--rw range-poligy? string 606 augment /rt:routing/rt:routing-instance/rt:routing-protocols/pim-base:pim/ 607 pim-base:interfaces/pim-base:interface/pim-base:address-family: 608 +--rw sm! 609 +--rw passive? empty 610 augment /rt:routing/rt:routing-instance/rt:routing-protocols/pim-base:pim/ 611 pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv4-rp: 612 +--rw sm! 613 +--rw policy-name? string 614 +--rw override? boolean {static-rp-override}? 615 augment /rt:routing/rt:routing-instance/rt:routing-protocols/pim-base:pim/ 616 pim-base:address-family/pim-rp:rp/pim-rp:static-rp/pim-rp:ipv6-rp: 617 +--rw sm! 618 +--rw policy-name? string 619 +--rw override? boolean {static-rp-override}? 620 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 621 pim-base:pim/pim-base:address-family: 623 +--ro sm 624 +--ro asm 625 | +--ro anycast-rp! 626 | | +--ro ipv4 627 | | | +--ro ipv4-anycast-rp* [anycast-addr rp-addr] 628 | | | +--ro anycast-addr inet:ipv4-address 629 | | | +--ro rp-addr inet:ipv4-address 630 | | +--ro ipv6 631 | | +--ro ipv6-anycast-rip* [anycast-addr rp-addr] 632 | | +--ro anycast-addr inet:ipv6-address 633 | | +--ro rp-addr inet:ipv6-address 634 | +--ro spt-switch 635 | +--ro infinity! {spt-switch-infinity}? 636 | +--ro policy-name? string {spt-switch-policy}? 637 +--ro ssm! 638 +--ro range-poligy? string 639 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 640 pim-base:pim/pim-base:interfaces/pim-base:interface/ 641 pim-base:address-family: 642 +--ro sm! 643 +--ro passive? empty 644 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 645 pim-base:pim/pim-base:address-family/pim-rp:rp/pim-rp:static-rp/ 646 pim-rp:ipv4-rp: 647 +--ro sm! 648 +--ro policy-name? string 649 +--ro override? boolean {static-rp-override}? 650 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 651 pim-base:pim/pim-base:address-family/pim-rp:rp/pim-rp:static-rp/ 652 pim-rp:ipv6-rp: 653 +--ro sm! 654 +--ro policy-name? string 655 +--ro override? boolean {static-rp-override}? 657 4.4. PIM-DM module 659 This module will cover Dense Mode configuration. 661 module: ietf-pim-dm 662 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 663 pim-base:pim/pim-base:address-family: 664 +--rw dm! 665 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 666 pim-base:pim/pim-base:interfaces/pim-base:interface/ 667 pim-base:address-family: 668 +--rw dm! 669 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 670 pim-base:pim/pim-base:address-family: 671 +--ro dm 673 4.5. PIM-BIDIR module 675 This module will cover Bidirectional PIM configuration. 677 module: ietf-pim-bidir 678 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 679 pim-base:pim/pim-base:address-family: 680 +--rw bidir 681 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 682 pim-base:pim/pim-base:interfaces/pim-base:interface/ 683 pim-base:address-family: 684 +--rw bidir! 685 +--rw df-election {intf-df-election}? 686 +--rw offer-interval? pim-base:timer-value 687 +--rw backoff-interval? pim-base:timer-value 688 +--rw offer-multipler? uint8 689 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 690 pim-base:pim/pim-base:address-family/pim-rp:rp/pim-rp:static-rp/ 691 pim-rp:ipv4-rp: 692 +--rw bidir! 693 +--rw policy-name? string 694 +--rw override? boolean {static-rp-override}? 695 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 696 pim-base:pim/pim-base:address-family/pim-rp:rp/pim-rp:static-rp/ 697 pim-rp:ipv6-rp: 698 +--rw bidir! 699 +--rw policy-name? string 700 +--rw override? boolean {static-rp-override}? 701 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 702 pim-base:pim/pim-base:address-family: 703 +--ro bidir 704 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 705 pim-base:pim/pim-base:interfaces/pim-base:interface/ 706 pim-base:address-family: 708 +--ro bidir! 709 +--ro df-election {intf-df-election}? 710 +--ro offer-interval? pim-base:timer-value 711 +--ro backoff-interval? pim-base:timer-value 712 +--ro offer-multipler? uint8 713 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 714 pim-base:pim/pim-base:address-family/pim-rp:rp/pim-rp:static-rp/ 715 pim-rp:ipv4-rp: 716 +--ro bidir! 717 +--ro policy-name? string 718 +--ro override? boolean {static-rp-override}? 719 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 720 pim-base:pim/pim-base:address-family/pim-rp:rp/pim-rp:static-rp/ 721 pim-rp:ipv6-rp: 722 +--ro bidir! 723 +--ro policy-name? string 724 +--ro override? boolean {static-rp-override}? 725 augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ 726 pim-base:pim/pim-base:address-family/pim-rp:rp: 727 +--ro bidir 728 +--ro df-election 729 | +--ro ipv4-rp* [ipv4-addr] 730 | | +--ro ipv4-addr inet:ipv4-address 731 | +--ro ipv6-rp* [ipv6-addr] 732 | +--ro ipv6-addr inet:ipv6-address 733 +--ro interface-df-election 734 +--ro ipv4-rp* [ipv4-addr interface-name] 735 | +--ro ipv4-addr inet:ipv4-address 736 | +--ro interface-name if:interface-ref 737 | +--ro df-address? inet:ipv4-address 738 | +--ro interface-state? identityref 739 +--ro ipv6-rp* [ipv6-addr interface-name] 740 +--ro ipv6-addr inet:ipv6-address 741 +--ro interface-name if:interface-ref 742 +--ro df-address? inet:ipv6-address 743 +--ro interface-state? identityref 745 5. PIM YANG Modules 747 5.1. PIM base module 749 file "ietf-pim-base.yang" 751 module ietf-pim-base { 752 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; 753 // replace with IANA namespace when assigned 754 prefix pim-base; 756 import ietf-inet-types { 757 prefix "inet"; 758 } 760 import ietf-yang-types { 761 prefix "yang"; 762 } 764 import ietf-interfaces { 765 prefix "if"; 766 } 768 import ietf-routing { 769 prefix "rt"; 770 } 772 import ietf-bfd { 773 prefix "bfd"; 774 } 776 organization 777 "IETF PIM Working Group"; 779 contact 780 "WG Web: 781 WG List: 783 WG Chair: Stig Venaas 784 786 WG Chair: Mike McBride 787 789 Editors: "; 791 description 792 "The module defines a collection of YANG definitions common for 793 all PIM modes."; 795 revision 2015-12-07 { 796 description 797 "Initial revision."; 798 reference 799 "RFC XXXX: A YANG Data Model for PIM"; 800 } 801 /* 802 * Features 803 */ 804 feature bfd-protocol-parms { 805 description 806 "BFD protocol specific parameters support."; 807 } 809 feature global-graceful-restart { 810 description 811 "Global configuraiont for graceful restart support as per 812 RFC5306."; 813 } 815 feature intf-dr-priority { 816 description 817 "Support configuration of interface dr priority."; 818 } 820 feature intf-hello-holdtime { 821 description 822 "Support configuration of interface hello holdtime."; 823 } 825 feature intf-hello-interval { 826 description 827 "Support configuration of interface hello interval."; 828 } 830 feature intf-hello-multipler { 831 description 832 "Support configuration of interface hello multipler."; 833 } 835 feature intf-jp-interval { 836 description 837 "Support configuration of interface join prune interval."; 838 } 840 feature intf-jp-holdtime { 841 description 842 "Support configuration of interface join prune holdtime."; 843 } 845 feature intf-jp-multipler { 846 description 847 "Support configuration of interface join prune multipler."; 848 } 849 feature intf-propagation-delay { 850 description 851 "Support configuration of interface propagation delay."; 852 } 854 feature intf-override-interval { 855 description 856 "Support configuration of interface override interval."; 857 } 859 feature per-af-graceful-restart { 860 description 861 "Per AF configuraiont for graceful restart support as per 862 RFC5306."; 863 } 865 /* 866 * Typedefs 867 */ 868 typedef interface-event-type { 869 type enumeration { 870 enum up { 871 description 872 "Neighbor status changed to up."; 873 } 874 enum down { 875 description 876 "Neighbor status changed to down."; 877 } 878 enum new-dr { 879 description 880 "A new DR was elected on the connected network."; 881 } 882 enum new-df { 883 description 884 "A new DF was elected on the connected network."; 885 } 886 } 887 description "Operational status event type for notifications."; 888 } 890 typedef neighbor-event-type { 891 type enumeration { 892 enum up { 893 description 894 "Neighbor status changed to up."; 895 } 896 enum down { 897 description 898 "Neighbor status changed to down."; 899 } 900 } 901 description "Operational status event type for notifications."; 902 } 904 typedef pim-mode { 905 type enumeration { 906 enum none { 907 description 908 "PIM is not operating."; 909 } 910 enum ssm { 911 description 912 "Source-Specific Multicast (SSM) with PIM Sparse Mode."; 913 } 914 enum asm { 915 description 916 "Any Source Multicast (ASM) with PIM Sparse Mode."; 917 } 918 enum bidir { 919 description 920 "Bidirectional PIM."; 921 } 922 enum dm { 923 description 924 "PIM Dense Mode."; 925 } 926 enum other { 927 description 928 "Any other PIM mode."; 929 } 930 } 931 description 932 "The PIM mode in which a group is operating."; 933 } 935 typedef timer-value { 936 type union { 937 type uint16; 938 type enumeration { 939 enum "infinity" { 940 description "The timer is set to infinity."; 941 } 942 enum "no-expiry" { 943 description "The timer is not set."; 944 } 946 } 947 } 948 units seconds; 949 description "Timer value type."; 950 } // timer-value 952 /* 953 * Identities 954 */ 956 /* 957 * Groupings 958 */ 959 grouping global-attributes { 960 description 961 "A Grouping defining global configuration attributes."; 962 uses graceful-restart-container { 963 if-feature global-graceful-restart; 964 } 965 } // global-attributes 967 grouping graceful-restart-container { 968 description 969 "A grouping defining a container of graceful restart 970 attributes."; 971 container graceful-restart { 972 leaf enabled { 973 type boolean; 974 description 975 "Enable or disable graceful restart."; 976 } 977 leaf duration { 978 type uint16; 979 units seconds; 980 description 981 "Maximum time for graceful restart to finish."; 982 } 983 description 984 "Container of graceful restart attributes."; 985 } 986 } // graceful-restart-container 988 grouping interface-config-attributes { 989 description 990 "A grouping defining interface attributes."; 991 container bfd { 992 description "BFD operation."; 993 leaf enabled { 994 type boolean; 995 description 996 "True if BFD is enabled for the interface."; 997 } 998 uses bfd:bfd-grouping-base-cfg-parms { 999 if-feature bfd-protocol-parms; 1000 } 1001 } 1002 leaf dr-priority { 1003 if-feature intf-dr-priority; 1004 type uint32; 1005 description "DR priority"; 1006 } 1007 leaf hello-interval { 1008 if-feature intf-hello-interval; 1009 type timer-value; 1010 description "Hello interval"; 1011 } 1012 choice hello-holdtime-or-multipler { 1013 description "Use holdtime or multipler"; 1014 case holdtime { 1015 if-feature intf-hello-holdtime; 1016 leaf hello-holdtime { 1017 type timer-value; 1018 description "Hello holdtime"; 1019 } 1020 } 1021 case multipler { 1022 if-feature intf-hello-multipler; 1023 leaf hello-multipler { 1024 type uint8; 1025 description "Hello multipler"; 1026 } 1027 } 1028 } 1029 leaf jp-interval { 1030 if-feature intf-jp-interval; 1031 type timer-value; 1032 description "Join prune interval"; 1033 } 1034 choice jp-holdtime-or-multipler { 1035 description "Use holdtime or multipler"; 1036 case holdtime { 1037 if-feature intf-jp-holdtime; 1038 leaf jp-holdtime { 1039 type timer-value; 1040 description "Join prune holdtime"; 1041 } 1043 } 1044 case multipler { 1045 if-feature intf-jp-multipler; 1046 leaf jp-multipler { 1047 type uint8; 1048 description "Join prune multipler"; 1049 } 1050 } 1051 } 1052 leaf propagation-delay { 1053 if-feature intf-propagation-delay; 1054 type uint16; 1055 units milliseconds; 1056 description "Propagation description"; 1057 } 1058 leaf override-interval { 1059 if-feature intf-override-interval; 1060 type uint16; 1061 units milliseconds; 1062 description "Override interval"; 1063 } 1064 } // interface-config-attributes 1066 grouping interface-state-attributes { 1067 description 1068 "A grouping defining interface attributes."; 1069 container ipv4 { 1070 when "../../../address-family = 'rt:ipv4'" { 1071 description 1072 "Only applicable to ipv4 address family."; 1073 } 1074 description ""; 1075 leaf-list address { 1076 type inet:ipv4-address; 1077 description ""; 1078 } 1079 leaf dr-addr { 1080 type inet:ipv4-address; 1081 description ""; 1082 } 1083 } 1084 container ipv6 { 1085 when "../../../address-family = 'rt:ipv6'" { 1086 description 1087 "Only applicable to ipv6 address family."; 1088 } 1089 description ""; 1090 leaf-list address { 1091 type inet:ipv6-address; 1092 description ""; 1093 } 1094 leaf dr-addr { 1095 type inet:ipv6-address; 1096 description ""; 1097 } 1098 } 1099 uses interface-state-af-attributes; 1100 } // interface-state-attributes 1102 grouping interface-state-af-attributes { 1103 description 1104 "A grouping defining interface per af attributes."; 1106 leaf oper-status { 1107 type enumeration { 1108 enum up { 1109 description 1110 "Ready to pass packets."; 1111 } 1112 enum down { 1113 description 1114 "The interface does not pass any packets."; 1115 } 1116 } 1117 description ""; 1118 } 1120 leaf hello-expire { 1121 type timer-value; 1122 description "Hello interval exiration time."; 1123 } 1125 list neighbor-ipv4 { 1126 when "../../../address-family = 'rt:ipv4'" { 1127 description 1128 "Only applicable to ipv4 address family."; 1129 } 1130 key "address"; 1131 description ""; 1132 leaf address { 1133 type inet:ipv4-address; 1134 description ""; 1135 } 1136 uses neighbor-state-af-attributes; 1137 } // list neighbor-ipv4 1138 list neighbor-ipv6 { 1139 when "../../../address-family = 'rt:ipv6'" { 1140 description 1141 "Only applicable to ipv6 address family."; 1142 } 1143 key "address"; 1144 description ""; 1145 leaf address { 1146 type inet:ipv6-address; 1147 description ""; 1148 } 1149 uses neighbor-state-af-attributes; 1150 } // list neighbor-ipv4 1151 } // interface-state-af-attributes 1153 grouping multicast-route-attributes { 1154 description 1155 "A grouping defining multicast route attributes."; 1157 leaf expire { 1158 type uint32; 1159 units seconds; 1160 description ""; 1161 } 1162 leaf incoming-interface { 1163 type if:interface-ref; 1164 description 1165 "Reference to an entry in the global interface 1166 list."; 1167 } 1168 leaf mode { 1169 type pim-mode; 1170 description ""; 1171 } 1172 leaf msdp-learned { 1173 type boolean; 1174 description ""; 1175 } 1176 leaf rp-address { 1177 type inet:ip-address; 1178 description ""; 1179 } 1180 leaf rpf-neighbor { 1181 type inet:ip-address; 1182 description ""; 1183 } 1184 leaf spt-bit { 1185 type boolean; 1186 description ""; 1187 } 1188 leaf up-time { 1189 type uint32; 1190 units seconds; 1191 description ""; 1192 } 1193 list outgoing-interface { 1194 key "name"; 1195 description 1196 "A list of outgoing interfaces."; 1198 leaf name { 1199 type if:interface-ref; 1200 description 1201 "Interface name"; 1202 } 1204 leaf expire { 1205 type timer-value; 1206 description "Expiring information."; 1207 } 1209 leaf up-time { 1210 type uint32; 1211 units seconds; 1212 description ""; 1213 } 1215 leaf jp-state { 1216 type enumeration { 1217 enum "no-info" { 1218 description 1219 "The interface has Join state and no timers running"; 1220 } 1221 enum "join" { 1222 description 1223 "The interface has Join state."; 1224 } 1225 enum "prune-pending" { 1226 description 1227 "The router has received a Prune on this interface from 1228 a downstream neighbor and is waiting to see whether 1229 the prune will be overridden by another downstream 1230 router. For forwarding purposes, the Prune-Pending 1231 state functions exactly like the Join state."; 1232 } 1233 } 1234 description ""; 1235 } 1236 } 1237 } // multicast-route-attributes 1239 grouping neighbor-state-af-attributes { 1240 description 1241 "A grouping defining neighbor per af attributes."; 1242 leaf bfd-status { 1243 type enumeration { 1244 enum up { 1245 description 1246 ""; 1247 } 1248 enum down { 1249 description 1250 ""; 1251 } 1252 } 1253 description ""; 1254 } 1255 leaf expire { 1256 type timer-value; 1257 description "Neighbor expiring information."; 1258 } 1259 leaf dr-priority { 1260 type uint32; 1261 description "DR priority"; 1262 } 1263 leaf gen-id { 1264 type uint32; 1265 description "Generation ID."; 1266 } 1267 leaf up-time { 1268 type uint32; 1269 units seconds; 1270 description ""; 1271 } 1272 } // neighbor-state-af-attributes 1274 grouping per-af-attributes { 1275 description 1276 "A grouping defining per address family attributes."; 1277 uses graceful-restart-container { 1278 if-feature per-af-graceful-restart; 1279 } 1280 } // per-af-attributes 1281 grouping pim-instance-state-ref { 1282 description 1283 "An absolute reference to a PIM instance."; 1284 leaf routing-instance-state-ref { 1285 type rt:routing-instance-state-ref; 1286 description 1287 "Reference to the routing instance state."; 1288 } 1289 } // pim-instance-state-ref 1291 grouping pim-instance-af-state-ref { 1292 description 1293 "An absolute reference to a PIM instance address family."; 1294 uses pim-instance-state-ref; 1295 leaf instance-af-state-ref { 1296 type leafref { 1297 path "/rt:routing-state/rt:routing-instance" 1298 + "[rt:name = current()/../routing-instance-state-ref]/" 1299 + "rt:routing-protocols/pim-base:pim/" 1300 + "pim-base:address-family/pim-base:address-family"; 1301 } 1302 description 1303 "Reference to a PIM instance address family."; 1304 } 1305 } // pim-instance-state-af-ref 1307 grouping pim-interface-state-ref { 1308 description 1309 "An absolute reference to a PIM interface state."; 1310 uses pim-instance-state-ref; 1311 leaf interface-state-ref { 1312 type leafref { 1313 path "/rt:routing-state/rt:routing-instance" 1314 + "[rt:name = current()/../routing-instance-state-ref]/" 1315 + "rt:routing-protocols/pim-base:pim/pim-base:interfaces/" 1316 + "pim-base:interface/pim-base:interface"; 1317 } 1318 description 1319 "Reference to a PIM interface."; 1320 } 1321 } // pim-interface-state-ref 1323 grouping pim-neighbor-state-ref { 1324 description 1325 "An absolute reference to a PIM neighbor state."; 1326 uses pim-interface-state-ref; 1327 leaf interface-af-state-ref { 1328 type leafref { 1329 path "/rt:routing-state/rt:routing-instance" 1330 + "[rt:name = current()/../routing-instance-state-ref]/" 1331 + "rt:routing-protocols/pim-base:pim/pim-base:interfaces/" 1332 + "pim-base:interface" 1333 + "[pim-base:interface = " 1334 + "current()/../interface-state-ref]/" 1335 + "pim-base:address-family/pim-base:address-family"; 1336 } 1337 description 1338 "Reference to a PIM interface address family."; 1339 } 1340 leaf neighbor-ipv4-state-ref { 1341 when "../interface-af-state-ref = 'rt:ipv4'" { 1342 description ""; 1343 } 1344 type leafref { 1345 path "/rt:routing-state/rt:routing-instance" 1346 + "[rt:name = current()/../routing-instance-state-ref]/" 1347 + "rt:routing-protocols/pim-base:pim/pim-base:interfaces/" 1348 + "pim-base:interface" 1349 + "[pim-base:interface = " 1350 + "current()/../interface-state-ref]/" 1351 + "pim-base:address-family" 1352 + "[pim-base:address-family = " 1353 + "current()/../interface-af-state-ref]/" 1354 + "pim-base:neighbor-ipv4/pim-base:address"; 1355 } 1356 description 1357 "Reference to a PIM IPv4 neighbor."; 1358 } 1359 leaf neighbor-ipv6-state-ref { 1360 when "../interface-af-state-ref = 'rt:ipv6'" { 1361 description ""; 1362 } 1363 type leafref { 1364 path "/rt:routing-state/rt:routing-instance" 1365 + "[rt:name = current()/../routing-instance-state-ref]/" 1366 + "rt:routing-protocols/pim-base:pim/pim-base:interfaces/" 1367 + "pim-base:interface" 1368 + "[pim-base:interface = " 1369 + "current()/../interface-state-ref]/" 1370 + "pim-base:address-family" 1371 + "[pim-base:address-family = " 1372 + "current()/../interface-af-state-ref]/" 1373 + "pim-base:neighbor-ipv6/pim-base:address"; 1374 } 1375 description 1376 "Reference to a PIM IPv6 neighbor."; 1378 } 1379 } // pim-neighbor-state-ref 1381 grouping statistics-container { 1382 description 1383 "A container defining statistics attributes."; 1384 container statistics { 1385 description ""; 1386 leaf discontinuity-time { 1387 type yang:date-and-time; 1388 description 1389 "The time on the most recent occasion at which any one 1390 or more of the statistic counters suffered a 1391 discontinuity. If no such discontinuities have occurred 1392 since the last re-initialization of the local 1393 management subsystem, then this node contains the time 1394 the local management subsystem re-initialized itself."; 1395 } 1396 container error { 1397 description ""; 1398 uses statistics-error; 1399 } 1400 container queue { 1401 description ""; 1402 uses statistics-queue; 1403 } 1404 container received { 1405 description ""; 1406 uses statistics-sent-received; 1407 } 1408 container sent { 1409 description ""; 1410 uses statistics-sent-received; 1411 } 1412 } 1413 } // statistics-container 1415 grouping statistics-error { 1416 description 1417 "A grouping defining error statistics 1418 attributes."; 1419 uses statistics-sent-received; 1420 } // statistics-error 1422 grouping statistics-queue { 1423 description 1424 "A grouping defining queue statistics 1425 attributes."; 1427 leaf size { 1428 type uint32; 1429 description 1430 "The size of the input queue."; 1431 } 1432 leaf overflow { 1433 type yang:counter32; 1434 description 1435 "The number of the input queue overflows."; 1436 } 1437 } // statistics-queue 1439 grouping statistics-sent-received { 1440 description 1441 "A grouping defining sent and received statistics 1442 attributes."; 1443 leaf assert { 1444 type yang:counter64; 1445 description 1446 "The number of assert messages."; 1447 } 1448 leaf bsr { 1449 type yang:counter64; 1450 description 1451 "The number of bsr messages."; 1452 } 1453 leaf candidate-rp-advertisement { 1454 type yang:counter64; 1455 description 1456 "The number of Candidate-RP-advertisement messages."; 1457 } 1458 leaf hello { 1459 type yang:counter64; 1460 description 1461 "The number of hello messages."; 1462 } 1463 leaf join-prune { 1464 type yang:counter64; 1465 description 1466 "The number of join/prune messages."; 1467 } 1468 leaf register { 1469 type yang:counter64; 1470 description 1471 "The number of register messages."; 1472 } 1473 leaf register-stop { 1474 type yang:counter64; 1475 description 1476 "The number of register stop messages."; 1477 } 1478 leaf state-refresh { 1479 type yang:counter64; 1480 description 1481 "The number of state refresh messages."; 1482 } 1483 } // statistics-sent-received 1485 /* 1486 * Configuration data nodes 1487 */ 1489 augment "/rt:routing/rt:routing-instance/" 1490 + "rt:routing-protocols" { 1491 description 1492 "PIM augmentation to routing instance configuration."; 1494 container pim { 1495 description 1496 "PIM configuration data."; 1498 uses global-attributes; 1500 list address-family { 1501 key "address-family"; 1502 description 1503 "Each list entry for one address family."; 1504 uses rt:address-family; 1505 uses per-af-attributes; 1507 } // address-family 1509 container interfaces { 1510 description 1511 "Containing a list of interfaces."; 1512 list interface { 1513 key "interface"; 1514 description 1515 "List of pim interfaces."; 1516 leaf interface { 1517 type if:interface-ref; 1518 description 1519 "Reference to an entry in the global interface 1520 list."; 1521 } 1522 list address-family { 1523 key "address-family"; 1524 description 1525 "Each list entry for one address family."; 1526 uses rt:address-family; 1527 uses interface-config-attributes; 1528 } // address-family 1529 } // interface 1530 } // interfaces 1531 } // pim 1532 } // augment 1534 /* 1535 * Operational state data nodes 1536 */ 1538 augment "/rt:routing-state/rt:routing-instance/" 1539 + "rt:routing-protocols" { 1540 description 1541 "PIM augmentation to routing instance state."; 1542 container pim { 1543 description 1544 "PIM state data."; 1546 list address-family { 1547 key "address-family"; 1548 description 1549 "Each list entry for one address family."; 1550 uses rt:address-family; 1552 uses statistics-container; 1554 container topology-tree-info { 1555 description ""; 1556 list ipv4-route { 1557 when "../../../address-family = 'rt:ipv4'" { 1558 description 1559 "Only applicable to ipv4 address family."; 1560 } 1561 key "group source-addr is-rpt"; 1562 description ""; 1563 leaf group { 1564 type inet:ipv4-address; 1565 description ""; 1566 } 1567 leaf source-addr { 1568 type union { 1569 type enumeration { 1570 enum '*' { 1571 description ""; 1572 } 1573 } 1574 type inet:ipv4-address; 1575 } 1576 description ""; 1577 } 1578 leaf is-rpt { 1579 type boolean; 1580 description ""; 1581 } 1583 uses multicast-route-attributes; 1584 } // ipv4-route 1586 list ipv6-route { 1587 when "../../../address-family = 'rt:ipv6'" { 1588 description 1589 "Only applicable to ipv4 address family."; 1590 } 1591 key "group source-addr is-rpt"; 1592 description ""; 1593 leaf group { 1594 type inet:ipv6-address; 1595 description ""; 1596 } 1597 leaf source-addr { 1598 type union { 1599 type enumeration { 1600 enum '*' { 1601 description ""; 1602 } 1603 } 1604 type inet:ipv4-address; 1605 } 1606 description ""; 1607 } 1608 leaf is-rpt { 1609 type boolean; 1610 description ""; 1611 } 1613 uses multicast-route-attributes; 1614 } // ipv6-route 1615 } // routes 1616 } // address-family 1618 container interfaces { 1619 description 1620 "Containing a list of interfaces."; 1621 list interface { 1622 key "interface"; 1623 description 1624 "List of pim interfaces."; 1625 leaf interface { 1626 type if:interface-ref; 1627 description 1628 "Reference to an entry in the global interface 1629 list."; 1630 } 1631 list address-family { 1632 key "address-family"; 1633 description 1634 "Each list entry for one address family."; 1635 uses rt:address-family; 1636 uses interface-config-attributes; 1637 uses interface-state-attributes; 1638 } // address-family 1639 } // interface 1640 } // interfaces 1641 } // pim 1642 } // augment 1644 /* 1645 * RPCs 1646 */ 1648 /* 1649 * Notifications 1650 */ 1651 notification pim-neighbor-event { 1652 description "Notification event for neighbor."; 1653 leaf event-type { 1654 type neighbor-event-type; 1655 description "Event type."; 1656 } 1657 uses pim-neighbor-state-ref; 1658 leaf up-time { 1659 type uint32; 1660 units seconds; 1661 description ""; 1662 } 1663 } 1664 notification pim-interface-event { 1665 description "Notification event for interface."; 1666 leaf event-type { 1667 type interface-event-type; 1668 description "Event type."; 1669 } 1670 uses pim-interface-state-ref; 1671 container ipv4 { 1672 description ""; 1673 leaf-list address { 1674 type inet:ipv4-address; 1675 description ""; 1676 } 1677 leaf dr-addr { 1678 type inet:ipv4-address; 1679 description ""; 1680 } 1681 } 1682 container ipv6 { 1683 description ""; 1684 leaf-list address { 1685 type inet:ipv6-address; 1686 description ""; 1687 } 1688 leaf dr-addr { 1689 type inet:ipv6-address; 1690 description ""; 1691 } 1692 } 1693 } 1694 } 1696 1698 5.2. PIM RP module 1700 file "ietf-pim-rp.yang" 1702 module ietf-pim-rp { 1703 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-rp"; 1704 // replace with IANA namespace when assigned 1705 prefix pim-rp; 1707 import ietf-inet-types { 1708 prefix "inet"; 1709 } 1711 import ietf-interfaces { 1712 prefix "if"; 1714 } 1716 import ietf-routing { 1717 prefix "rt"; 1718 } 1720 import ietf-pim-base { 1721 prefix "pim-base"; 1722 } 1724 organization 1725 "IETF PIM Working Group"; 1727 contact 1728 "WG Web: 1729 WG List: 1731 WG Chair: Stig Venaas 1732 1734 WG Chair: Mike McBride 1735 1737 Editors: "; 1739 description 1740 "The YANG module defines a PIM RP (Rendezvous Point) model."; 1742 revision 2015-12-09 { 1743 description 1744 "Initial revision."; 1745 reference 1746 "RFC XXXX: A YANG Data Model for PIM"; 1747 } 1749 /* 1750 * Features 1751 */ 1752 feature bsr { 1753 description 1754 "This feature indicates that the system supports BSR."; 1755 } 1757 feature bsr-election-state { 1758 description 1759 "This feature indicates that the system supports providing 1760 BSR election state."; 1761 } 1762 feature static-rp-override { 1763 description 1764 "This feature indicates that the system supports configuration 1765 of static RP override."; 1766 } 1768 feature candidate-interface { 1769 description 1770 "This feature indicates that the system supports using 1771 an interface to configure a BSR or RP candidate."; 1772 } 1774 feature candidate-ipv4 { 1775 description 1776 "This feature indicates that the system supports using 1777 an IPv4 address to configure a BSR or RP candidate."; 1778 } 1780 feature candidate-ipv6 { 1781 description 1782 "This feature indicates that the system supports using 1783 an IPv6 address to configure a BSR or RP candidate."; 1784 } 1786 /* 1787 * Typedefs 1788 */ 1789 typedef rp-event-type { 1790 type enumeration { 1791 enum invalid-jp { 1792 description 1793 "An invalid JP message has been received."; 1794 } 1795 enum invalid-register { 1796 description 1797 "An invalid register message has been received."; 1798 } 1799 enum mapping-created { 1800 description 1801 "A new mapping has been created."; 1802 } 1803 enum mapping-deleted { 1804 description 1805 "A mapping has been deleted."; 1806 } 1807 } 1808 description "Operational status event type for notifications."; 1810 } 1812 /* 1813 * Identities 1814 */ 1815 identity rp-mode { 1816 description 1817 "The mode of an RP, which can be SM (Sparse Mode) or 1818 BIDIR (bi-directional)."; 1819 } 1821 identity rp-info-source-type { 1822 description 1823 "The information source of an RP."; 1824 } 1825 identity static { 1826 base rp-info-source-type; 1827 description 1828 "The RP is statically configured."; 1829 } 1830 identity bootstrap { 1831 base rp-info-source-type; 1832 description 1833 "The RP is learned from bootstrap."; 1834 } 1836 /* 1837 * Groupings 1838 */ 1839 grouping bsr-config-attributes { 1840 description 1841 "Gouring of BSR config attributes."; 1842 container bsr-candidate { 1843 presence 1844 "Present to serve as a BSR candidate"; 1845 description 1846 "BSR candidate attributes."; 1848 choice interface-or-address { 1849 description 1850 "Use either interface or ip-address."; 1851 case interface { 1852 if-feature candidate-interface; 1853 leaf interface { 1854 type if:interface-ref; 1855 mandatory true; 1856 description 1857 "Interface to be used by BSR."; 1859 } 1860 } 1861 case ipv4-address { 1862 when "../../../../address-family = 'rt:ipv4'" { 1863 description 1864 "Only applicable to ipv4 address family."; 1865 } 1866 if-feature candidate-ipv4; 1867 leaf ipv4-address { 1868 type inet:ipv4-address; 1869 mandatory true; 1870 description 1871 "IP address to be used by BSR."; 1872 } 1873 } 1874 case ipv6-address { 1875 when "../../../../address-family = 'rt:ipv6'" { 1876 description 1877 "Only applicable to ipv6 address family."; 1878 } 1879 if-feature candidate-ipv6; 1880 leaf ipv6-address { 1881 type inet:ipv6-address; 1882 mandatory true; 1883 description 1884 "IP address to be used by BSR."; 1885 } 1886 } 1887 } 1889 leaf hash-mask-length{ 1890 type uint8 { 1891 range "0..32"; 1892 } 1893 mandatory true; 1894 description 1895 "Value contained in BSR messages used by all routers to 1896 hash (map) to an RP."; 1897 } 1899 leaf priority { 1900 type uint8 { 1901 range "0..255"; 1902 } 1903 mandatory true; 1904 description 1905 "BSR election priority among different candidate BSRs. 1906 A larger value has a higher priority over a smaller 1907 value."; 1908 } 1909 } // bsr-candidate 1911 list rp-candidate-interface { 1912 if-feature candidate-interface; 1913 key "interface"; 1914 description 1915 "A list of RP candidates"; 1916 leaf interface { 1917 type if:interface-ref; 1918 description 1919 "Interface that the RP candidate uses."; 1920 } 1921 uses rp-candidate-attributes; 1922 } 1924 list rp-candidate-ipv4-address { 1925 when "../../../address-family = 'rt:ipv4'" { 1926 description 1927 "Only applicable to ipv4 address family."; 1928 } 1929 if-feature candidate-ipv4; 1930 key "ipv4-address"; 1931 description 1932 "A list of RP candidates"; 1933 leaf ipv4-address { 1934 type inet:ipv4-address; 1935 description 1936 "IPv4 address that the RP candidate uses."; 1937 } 1938 uses rp-candidate-attributes; 1939 } 1941 list rp-candidate-ipv6-address { 1942 when "../../../address-family = 'rt:ipv6'" { 1943 description 1944 "Only applicable to ipv6 address family."; 1945 } 1946 if-feature candidate-ipv6; 1947 key "ipv6-address"; 1948 description 1949 "A list of RP candidates"; 1950 leaf ipv6-address { 1951 type inet:ipv6-address; 1952 description 1953 "IPv6 address that the RP candidate uses."; 1954 } 1955 uses rp-candidate-attributes; 1956 } 1957 } // bsr-config-attributes 1959 grouping bsr-state-attributes { 1960 description 1961 "Gouring of BSR state attributes."; 1962 container bsr { 1963 description 1964 "BSR information."; 1965 leaf addr { 1966 type inet:ip-address; 1967 description "BSR address"; 1968 } 1969 leaf hash-mask-length { 1970 type uint8; 1971 description ""; 1972 } 1973 leaf priority { 1974 type uint8 { 1975 range "0..255"; 1976 } 1977 description ""; 1978 } 1979 leaf up-time { 1980 type uint32; 1981 units seconds; 1982 description ""; 1983 } 1984 } 1985 choice election-state { 1986 if-feature bsr-election-state; 1987 description "BSR election state."; 1988 case candidate { 1989 leaf candidate-bsr-state { 1990 type enumeration { 1991 enum "candidate" { 1992 description 1993 "The router is a candidate to be the BSR for the 1994 scope zone, but currently another router is the 1995 preferred BSR."; 1996 } 1997 enum "pending" { 1998 description 1999 "The router is a candidate to be the BSR for the 2000 scope zone. Currently, no other router is the 2001 preferred BSR, but this router is not yet the 2002 elected BSR. This is a temporary state that 2003 prevents rapid thrashing of the choice of BSR 2004 during BSR election."; 2005 } 2006 enum "elected" { 2007 description 2008 "The router is the elected BSR for the scope zone 2009 and it must perform all the BSR functions."; 2010 } 2011 } 2012 description 2013 "Candidate-BSR state."; 2014 reference 2015 "RFC5059, Section 3.1.1."; 2016 } 2017 } 2018 case "non-candidate" { 2019 leaf non-candidate-bsr-state { 2020 type enumeration { 2021 enum "no-info" { 2022 description 2023 "The router has no information about this scope 2024 zone."; 2025 } 2026 enum "accept-any" { 2027 description 2028 "The router does not know of an active BSR, and will 2029 accept the first Bootstrap message it sees as giving 2030 the new BSR's identity and the RP-Set."; 2031 } 2032 enum "accept" { 2033 description 2034 "The router knows the identity of the current BSR, 2035 and is using the RP-Set provided by that BSR. Only 2036 Bootstrap messages from that BSR or from a C-BSR 2037 with higher weight than the current BSR will be 2038 accepted."; 2039 } 2040 } 2041 description 2042 "Non-candidate-BSR state."; 2043 reference 2044 "RFC5059, Section 3.1.2."; 2045 } 2046 } 2047 } // election-state 2048 leaf bsr-next-bootstrap { 2049 type uint16; 2050 units seconds; 2051 description ""; 2052 } 2054 container rp { 2055 description 2056 "State information of the RP."; 2057 leaf rp-address { 2058 type inet:ip-address; 2059 description ""; 2060 } 2061 leaf group-policy { 2062 type string; 2063 description ""; 2064 } 2065 leaf up-time { 2066 type uint32; 2067 units seconds; 2068 description ""; 2069 } 2070 } 2071 leaf rp-candidate-next-advertisement { 2072 type uint16; 2073 units seconds; 2074 description ""; 2075 } 2076 } // bsr-state-attributes 2078 grouping rp-mapping-state-attributes { 2079 description 2080 "Gouring of RP mapping attributes."; 2081 leaf up-time { 2082 type uint32; 2083 units seconds; 2084 description ""; 2085 } 2086 leaf expire { 2087 type pim-base:timer-value; 2088 description ""; 2089 } 2090 } // rp-mapping-state-attributes 2092 grouping rp-state-attributes { 2093 description 2094 "Gouring of RP state attributes."; 2095 leaf info-source-type { 2096 type identityref { 2097 base rp-info-source-type; 2098 } 2099 description ""; 2100 } // info-source-type 2101 leaf up-time { 2102 type uint32; 2103 units seconds; 2104 description ""; 2105 } 2106 leaf expire { 2107 type pim-base:timer-value; 2108 description ""; 2109 } 2110 } // rp-state-attributes 2112 grouping static-rp-attributes { 2113 description 2114 "Gouring of static RP attributes, used in augmenting modules."; 2115 leaf policy-name { 2116 type string; 2117 description 2118 "Static RP policy."; 2119 } 2120 leaf override { 2121 if-feature static-rp-override; 2122 type boolean; 2123 description 2124 "When there is a conflict between static RP and dynamic 2125 RP, setting this attribute to 'true' will ask the 2126 system to use static RP."; 2127 } 2128 } // static-rp-attributes 2130 grouping static-rp-container { 2131 description 2132 "Gouring of static RP container."; 2133 container static-rp { 2134 description 2135 "Containing static RP attributes."; 2136 list ipv4-rp { 2137 when "../../../address-family = 'rt:ipv4'" { 2138 description 2139 "Only applicable to ipv4 address family."; 2140 } 2141 key "ipv4-addr"; 2142 description 2143 "A list of IPv4 RP addresses."; 2144 leaf ipv4-addr { 2145 type inet:ipv4-address; 2146 description 2147 "Specifies a static RP address."; 2148 } 2149 } 2151 list ipv6-rp { 2152 when "../../../address-family = 'rt:ipv6'" { 2153 description 2154 "Only applicable to ipv6 address family."; 2155 } 2156 key "ipv6-addr"; 2157 description 2158 "A list of IPv6 RP addresses."; 2159 leaf ipv6-addr { 2160 type inet:ipv6-address; 2161 description 2162 "Specifies a static RP address."; 2163 } 2164 } 2165 } // static-rp 2166 } // static-rp-container 2168 grouping rp-candidate-attributes { 2169 description 2170 "Gouring of RP candidate attributes."; 2171 leaf policy { 2172 type string; 2173 description 2174 "ACL policy used to filter group addresses."; 2175 } 2176 leaf mode { 2177 type identityref { 2178 base rp-mode; 2179 } 2180 description 2181 "RP mode."; 2182 } 2183 } // rp-candidate-attributes 2185 /* 2186 * Configuration data nodes 2187 */ 2189 augment "/rt:routing/rt:routing-instance/" 2190 + "rt:routing-protocols/pim-base:pim/" 2191 + "pim-base:address-family" { 2192 description "PIM RP augmentation."; 2194 container rp { 2195 description 2196 "PIM RP configuration data."; 2198 uses static-rp-container; 2200 container bsr { 2201 if-feature bsr; 2202 description 2203 "Containing BSR (BootStrap Router) attributes."; 2204 uses bsr-config-attributes; 2205 } // bsr 2206 } // rp 2207 } // augment 2209 /* 2210 * Operational state data nodes 2211 */ 2213 augment "/rt:routing-state/rt:routing-instance/" 2214 + "rt:routing-protocols/pim-base:pim/" 2215 + "pim-base:address-family" { 2216 description 2217 "PIM SM state."; 2219 container rp { 2220 description 2221 "PIM RP state data."; 2223 uses static-rp-container; 2225 container bsr { 2226 if-feature bsr; 2227 description 2228 "Containing BSR (BootStrap Router) attributes."; 2229 uses bsr-config-attributes; 2230 uses bsr-state-attributes; 2231 } // bsr 2233 container rp-list { 2234 description 2235 "Containing a list RPs."; 2236 list ipv4-rp { 2237 when "../../../address-family = 'rt:ipv4'" { 2238 description 2239 "Only applicable to ipv4 address family."; 2240 } 2241 key "ipv4-addr mode"; 2242 description 2243 "A list of IPv4 RP addresses."; 2244 leaf ipv4-addr { 2245 type inet:ipv4-address; 2246 description 2247 "RP address."; 2248 } 2249 leaf mode { 2250 type identityref { 2251 base rp-mode; 2252 } 2253 description 2254 "RP mode."; 2255 } 2256 leaf info-source-addr { 2257 type inet:ipv4-address; 2258 description 2259 "The address where RP information is learned."; 2260 } 2261 uses rp-state-attributes; 2262 } 2264 list ipv6-rp { 2265 when "../../../address-family = 'rt:ipv6'" { 2266 description 2267 "Only applicable to ipv6 address family."; 2268 } 2269 key "ipv6-addr mode"; 2270 description 2271 "A list of IPv6 RP addresses."; 2272 leaf ipv6-addr { 2273 type inet:ipv6-address; 2274 description 2275 "RP address."; 2276 } 2277 leaf mode { 2278 type identityref { 2279 base rp-mode; 2280 } 2281 description 2282 "RP mode."; 2283 } 2284 leaf info-source-addr { 2285 type inet:ipv6-address; 2286 description 2287 "The address where RP information is learned."; 2288 } 2289 uses rp-state-attributes; 2290 } 2292 } // rp-list 2294 container rp-mappings { 2295 description 2296 "Containing a list group-to-RP mappings."; 2297 list ipv4-rp { 2298 when "../../../address-family = 'rt:ipv4'" { 2299 description 2300 "Only applicable to ipv4 address family."; 2301 } 2302 key "group rp-addr"; 2303 description 2304 "A list of group-to-RP mappings."; 2305 leaf group { 2306 type inet:ipv4-prefix; 2307 description 2308 "Group prefix."; 2309 } 2310 leaf rp-addr { 2311 type inet:ipv4-address; 2312 description 2313 "RP address."; 2314 } 2315 uses rp-mapping-state-attributes; 2316 } 2318 list ipv6-rp { 2319 when "../../../address-family = 'rt:ipv6'" { 2320 description 2321 "Only applicable to ipv6 address family."; 2322 } 2323 key "group rp-addr"; 2324 description 2325 "A list of IPv6 RP addresses."; 2326 leaf group { 2327 type inet:ipv6-prefix; 2328 description 2329 "Group prefix."; 2330 } 2331 leaf rp-addr { 2332 type inet:ipv6-address; 2333 description 2334 "RP address."; 2335 } 2336 uses rp-mapping-state-attributes; 2337 } 2338 } // rp-mappings 2339 } // rp 2341 } // augment 2343 /* 2344 * RPCs 2345 */ 2347 /* 2348 * Notifications 2349 */ 2350 notification pim-rp-event { 2351 description "Notification event for RP."; 2352 leaf event-type { 2353 type rp-event-type; 2354 description "Event type."; 2355 } 2356 uses pim-base:pim-instance-af-state-ref; 2357 leaf group { 2358 type inet:ip-address; 2359 description ""; 2360 } 2361 leaf rp-address { 2362 type inet:ip-address; 2363 description ""; 2364 } 2365 leaf is-rpt { 2366 type boolean; 2367 description ""; 2368 } 2369 leaf mode { 2370 type pim-base:pim-mode; 2371 description ""; 2372 } 2373 leaf message-origin { 2374 type inet:ip-address; 2375 description ""; 2376 } 2377 } 2378 } 2380 2382 5.3. PIM-SM module 2384 file "ietf-pim-sm.yang" 2386 module ietf-pim-sm { 2387 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-sm"; 2388 // replace with IANA namespace when assigned 2389 prefix pim-sm; 2391 import ietf-inet-types { 2392 prefix "inet"; 2393 } 2395 import ietf-routing { 2396 prefix "rt"; 2397 } 2399 import ietf-pim-base { 2400 prefix "pim-base"; 2401 } 2403 import ietf-pim-rp { 2404 prefix "pim-rp"; 2405 } 2407 organization 2408 "IETF PIM Working Group"; 2410 contact 2411 "WG Web: 2412 WG List: 2414 WG Chair: Stig Venaas 2415 2417 WG Chair: Mike McBride 2418 2420 Editors: "; 2422 description 2423 "The YANG module defines a sparse mode PIM model."; 2425 revision 2015-12-09 { 2426 description 2427 "Initial revision."; 2428 reference 2429 "RFC XXXX: A YANG Data Model for PIM"; 2430 } 2432 /* 2433 * Features 2434 */ 2436 feature spt-switch-infinity { 2437 description 2438 "This feature indicates that the system supports configuration 2439 choice whether to trigger the switchover from the rpt to the 2440 spt."; 2441 } 2443 feature spt-switch-policy { 2444 description 2445 "This feature indicates that the system supports configuring 2446 policy for the switchover from the rpt to the spt."; 2447 } 2449 /* 2450 * Identities 2451 */ 2452 identity sm { 2453 base pim-rp:rp-mode; 2454 description 2455 "SM (Spars Mode)."; 2456 } 2458 /* 2459 * Groupings 2460 */ 2461 grouping af-sm-container { 2462 description 2463 "Gouping of address family SM container."; 2464 container sm { 2465 description 2466 "PIM SM configuration data."; 2468 container asm { 2469 description 2470 "ASM (Any Source Multicast) attributes."; 2472 container anycast-rp { 2473 presence 2474 "Present to enable anycast RP."; 2475 description 2476 "Anycast RP attributes."; 2478 container ipv4 { 2479 when "../../../../address-family = 'rt:ipv4'" { 2480 description 2481 "Only applicable to ipv4 address family."; 2482 } 2483 description 2484 "IPv4 attributes. Only applicable when 2485 pim-base:address-family is ipv4."; 2486 list ipv4-anycast-rp { 2487 key "anycast-addr rp-addr"; 2488 description 2489 "A list of anycast RP setttings."; 2490 leaf anycast-addr { 2491 type inet:ipv4-address; 2492 description 2493 "IP address of the anycast RP set. This IP address 2494 is used by the multicast groups or sources to join 2495 or register."; 2496 } 2498 leaf rp-addr { 2499 type inet:ipv4-address; 2500 description 2501 "IP address of the router configured with anycast 2502 RP. This is the IP address where the Register 2503 messages are forwarded."; 2504 } 2505 } 2506 } 2507 container ipv6 { 2508 when "../../../../address-family = 'rt:ipv6'" { 2509 description 2510 "Only applicable to ipv6 address family."; 2511 } 2512 description 2513 "IPv6 attributes. Only applicable when 2514 pim-base:address-family is ipv6."; 2515 list ipv6-anycast-rip { 2516 key "anycast-addr rp-addr"; 2517 description 2518 "A list of anycast RP setttings."; 2519 leaf anycast-addr { 2520 type inet:ipv6-address; 2521 description 2522 "IP address of the anycast RP set. This IP address 2523 is used by the multicast groups or sources to join 2524 or register."; 2525 } 2527 leaf rp-addr { 2528 type inet:ipv6-address; 2529 description 2530 "IP address of the router configured with anycast 2531 RP. This is the IP address where the Register 2532 messages are forwarded."; 2533 } 2534 } 2535 } 2536 } 2538 container spt-switch { 2539 description 2540 "SPT (Shortest Path Tree) switching attributes."; 2541 container infinity { 2542 if-feature spt-switch-infinity; 2543 presence "Present if spt-switch is set to infinity."; 2544 description 2545 "The receiver's dr never triggers the 2546 switchover from the rpt to the spt."; 2547 leaf policy-name { 2548 if-feature spt-switch-policy; 2549 type string; 2550 description 2551 "Switch policy."; 2552 } 2553 } // infinity 2554 } 2555 } // asm 2557 container ssm { 2558 presence 2559 "Present to enable SSM (Source-Specific Multicast)."; 2560 description 2561 "SSM (Source-Specific Multicast) attributes."; 2563 leaf range-poligy { 2564 type string; 2565 description 2566 "Policy used to define SSM address range."; 2567 } 2568 } // ssm 2569 } // sm 2570 } // af-sm-container 2572 grouping interface-sm-container { 2573 description 2574 "Gouping of interface SM container."; 2575 container sm { 2576 presence "Present to enable sparse-mode."; 2577 description 2578 "PIM SM configuration data."; 2580 leaf passive { 2581 type empty; 2582 description 2583 "Specifies that no PIM messages are sent out of the PIM 2584 interface, but the interface can be included in a multicast 2585 forwarding entry."; 2586 } 2587 } // sm 2588 } // interface-sm-container 2590 grouping static-rp-sm-container { 2591 description 2592 "Gouping that contains SM attributes for static RP."; 2593 container sm { 2594 presence 2595 "Indicate the support of sparse mode."; 2596 description 2597 "PIM SM configuration data."; 2599 uses pim-rp:static-rp-attributes; 2600 } // sm 2601 } // static-rp-sm-container 2603 /* 2604 * Configuration data nodes 2605 */ 2607 augment "/rt:routing/rt:routing-instance/" 2608 + "rt:routing-protocols/pim-base:pim/" 2609 + "pim-base:address-family" { 2610 description "PIM SM augmentation."; 2612 uses af-sm-container; 2613 } // augment 2615 augment "/rt:routing/rt:routing-instance/" 2616 + "rt:routing-protocols/pim-base:pim/" 2617 + "pim-base:interfaces/pim-base:interface/" 2618 + "pim-base:address-family" { 2619 description "PIM SM augmentation."; 2621 uses interface-sm-container; 2622 } // augment 2624 augment "/rt:routing/rt:routing-instance/" 2625 + "rt:routing-protocols/pim-base:pim/" 2626 + "pim-base:address-family/pim-rp:rp/" 2627 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 2628 description "PIM SM augmentation."; 2630 uses static-rp-sm-container; 2631 } // augment 2633 augment "/rt:routing/rt:routing-instance/" 2634 + "rt:routing-protocols/pim-base:pim/" 2635 + "pim-base:address-family/pim-rp:rp/" 2636 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 2637 description "PIM SM augmentation."; 2639 uses static-rp-sm-container; 2640 } // augment 2642 /* 2643 * Operational state data nodes 2644 */ 2646 augment "/rt:routing-state/rt:routing-instance/" 2647 + "rt:routing-protocols/pim-base:pim/" 2648 + "pim-base:address-family" { 2649 description 2650 "PIM SM state."; 2652 uses af-sm-container; 2653 } // augment 2655 augment "/rt:routing-state/rt:routing-instance/" 2656 + "rt:routing-protocols/pim-base:pim/" 2657 + "pim-base:interfaces/pim-base:interface/" 2658 + "pim-base:address-family" { 2659 description "PIM SM augmentation."; 2661 uses interface-sm-container; 2662 } // augment 2664 augment "/rt:routing-state/rt:routing-instance/" 2665 + "rt:routing-protocols/pim-base:pim/" 2666 + "pim-base:address-family/pim-rp:rp/" 2667 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 2668 description "PIM SM augmentation."; 2670 uses static-rp-sm-container; 2671 } // augment 2673 augment "/rt:routing-state/rt:routing-instance/" 2674 + "rt:routing-protocols/pim-base:pim/" 2675 + "pim-base:address-family/pim-rp:rp/" 2676 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 2677 description "PIM SM augmentation."; 2679 uses static-rp-sm-container; 2680 } // augment 2682 /* 2683 * RPCs 2684 */ 2686 /* 2687 * Notifications 2688 */ 2689 } 2691 2693 5.4. PIM-DM module 2695 2697 module ietf-pim-dm { 2698 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-dm"; 2699 // replace with IANA namespace when assigned 2700 prefix pim-dm; 2702 import ietf-routing { 2703 prefix "rt"; 2704 } 2706 import ietf-pim-base { 2707 prefix "pim-base"; 2708 } 2710 organization 2711 "IETF PIM Working Group"; 2713 contact 2714 "WG Web: 2715 WG List: 2717 WG Chair: Stig Venaas 2718 2720 WG Chair: Mike McBride 2721 2723 Editors: "; 2725 description 2726 "The YANG module defines a DM (Dense Mode) PIM model."; 2728 revision 2015-10-08 { 2729 description 2730 "Initial revision."; 2731 reference 2732 "RFC XXXX: A YANG Data Model for PIM"; 2733 } 2735 /* 2736 * Features 2737 */ 2739 /* 2740 * Identities 2741 */ 2743 /* 2744 * Groupings 2745 */ 2747 /* 2748 * Configuration data nodes 2749 */ 2751 augment "/rt:routing/rt:routing-instance/" 2752 + "rt:routing-protocols/pim-base:pim/" 2753 + "pim-base:address-family" { 2754 description "PIM DM augmentation."; 2756 container dm { 2757 presence "Present to enable dense-mode."; 2758 description 2759 "PIM DM configuration data."; 2760 } // Dm 2761 } // augment 2763 augment "/rt:routing/rt:routing-instance/" 2764 + "rt:routing-protocols/pim-base:pim/" 2765 + "pim-base:interfaces/pim-base:interface/" 2766 + "pim-base:address-family" { 2767 description "PIM DM augmentation to PIM base interface."; 2769 container dm { 2770 presence "Present to enable dense-mode."; 2771 description 2772 "PIM DM configuration data."; 2773 } // sm 2774 } // augment 2776 /* 2777 * Operational state data nodes 2778 */ 2780 augment "/rt:routing-state/rt:routing-instance/" 2781 + "rt:routing-protocols/pim-base:pim/" 2782 + "pim-base:address-family" { 2783 description 2784 "PIM DM state."; 2785 container dm { 2786 description 2787 "PIM DM state data."; 2788 } // dm 2789 } // augment 2791 /* 2792 * RPCs 2793 */ 2795 /* 2796 * Notifications 2797 */ 2798 } 2799 2801 5.5. PIM-BIDIR module 2803 file "ietf-pim-bidir.yang" 2805 module ietf-pim-bidir { 2806 namespace "urn:ietf:params:xml:ns:yang:ietf-pim-bidir"; 2807 // replace with IANA namespace when assigned 2808 prefix pim-bidir; 2810 import ietf-inet-types { 2811 prefix "inet"; 2812 } 2814 import ietf-interfaces { 2815 prefix "if"; 2817 } 2819 import ietf-routing { 2820 prefix "rt"; 2821 } 2823 import ietf-pim-base { 2824 prefix "pim-base"; 2825 } 2827 import ietf-pim-rp { 2828 prefix "pim-rp"; 2829 } 2831 organization 2832 "IETF PIM Working Group"; 2834 contact 2835 "WG Web: 2836 WG List: 2838 WG Chair: Stig Venaas 2839 2841 WG Chair: Mike McBride 2842 2844 Editors: "; 2846 description 2847 "The YANG module defines a BIDIR (Bidirectional) mode PIM 2848 model."; 2850 revision 2015-12-22 { 2851 description 2852 "Initial revision."; 2853 reference 2854 "RFC XXXX: A YANG Data Model for PIM"; 2855 } 2857 /* 2858 * Features 2859 */ 2860 feature intf-df-election { 2861 description 2862 "Support configuration of interface DF election."; 2863 } 2864 /* 2865 * Identities 2866 */ 2867 identity bidir { 2868 base pim-rp:rp-mode; 2869 description 2870 "BIDIR (Bidirectional) mode."; 2871 } 2873 identity df-state { 2874 description 2875 "DF election state type."; 2876 reference 2877 "RFC5015: Bidirectional Protocol Independent Multicast 2878 (BIDIR-PIM)."; 2879 } 2881 identity df-state-offer { 2882 base df-state; 2883 description 2884 "Initial election state.."; 2885 } 2887 identity df-state-lose { 2888 base df-state; 2889 description 2890 "There either is a different election winner or that no 2891 router on the link has a path to the RPA."; 2892 } 2894 identity df-state-win { 2895 base df-state; 2896 description 2897 "The router is the acting DF without any contest."; 2898 } 2900 identity df-state-backoff { 2901 base df-state; 2902 description 2903 "The router is the acting DF but another router has made a 2904 bid to take over.."; 2905 } 2907 /* 2908 * Typedefs 2909 */ 2911 /* 2912 * Groupings 2913 */ 2914 grouping static-rp-bidir-container { 2915 description 2916 "Gouping that contains BIDIR attributes for static RP."; 2917 container bidir { 2918 presence 2919 "Indicate the support of BIDIR mode."; 2920 description 2921 "PIM BIDIR configuration data."; 2923 uses pim-rp:static-rp-attributes; 2924 } // bidir 2925 } // static-rp-bidir-container 2927 /* 2928 * Configuration data nodes 2929 */ 2931 augment "/rt:routing/rt:routing-instance/" 2932 + "rt:routing-protocols/pim-base:pim/" 2933 + "pim-base:address-family" { 2934 description "PIM BIDIR augmentation."; 2936 container bidir { 2937 description 2938 "PIM BIDIR configuration data."; 2939 } // bidir 2940 } // augment 2942 augment "/rt:routing/rt:routing-instance/" 2943 + "rt:routing-protocols/pim-base:pim/" 2944 + "pim-base:interfaces/pim-base:interface/" 2945 + "pim-base:address-family" { 2946 description "PIM BIDIR augmentation."; 2948 container bidir { 2949 presence "Present to enable BIDIR mode."; 2950 description 2951 "PIM BIDIR configuration data."; 2953 container df-election { 2954 if-feature intf-df-election; 2955 description 2956 "DF election attributes."; 2957 leaf offer-interval { 2958 type pim-base:timer-value; 2959 description "Offer interval"; 2961 } 2962 leaf backoff-interval { 2963 type pim-base:timer-value; 2964 description "Backoff interval"; 2965 } 2966 leaf offer-multipler { 2967 type uint8; 2968 description "Offer multipler"; 2969 } 2970 } // df-election 2971 } // bidir 2972 } // augment 2974 augment "/rt:routing/rt:routing-instance/" 2975 + "rt:routing-protocols/pim-base:pim/" 2976 + "pim-base:address-family/pim-rp:rp/" 2977 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 2978 description "PIM BIDIR augmentation."; 2980 uses static-rp-bidir-container; 2981 } // augment 2983 augment "/rt:routing/rt:routing-instance/" 2984 + "rt:routing-protocols/pim-base:pim/" 2985 + "pim-base:address-family/pim-rp:rp/" 2986 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 2987 description "PIM BIDIR augmentation."; 2989 uses static-rp-bidir-container; 2990 } // augment 2992 /* 2993 * Operational state data nodes 2994 */ 2996 augment "/rt:routing-state/rt:routing-instance/" 2997 + "rt:routing-protocols/pim-base:pim/" 2998 + "pim-base:address-family" { 2999 description 3000 "PIM BIDIR state."; 3002 container bidir { 3003 description 3004 "PIM BIDIR state data."; 3005 } // bidir 3006 } // augment 3008 augment "/rt:routing-state/rt:routing-instance/" 3009 + "rt:routing-protocols/pim-base:pim/" 3010 + "pim-base:interfaces/pim-base:interface/" 3011 + "pim-base:address-family" { 3012 description "PIM BIDIR augmentation."; 3014 container bidir { 3015 presence "Present to enable BIDIR mode."; 3016 description 3017 "PIM BIDIR configuration data."; 3019 container df-election { 3020 if-feature intf-df-election; 3021 description 3022 "DF election attributes."; 3023 leaf offer-interval { 3024 type pim-base:timer-value; 3025 description "Offer interval"; 3026 } 3027 leaf backoff-interval { 3028 type pim-base:timer-value; 3029 description "Backoff interval"; 3030 } 3031 leaf offer-multipler { 3032 type uint8; 3033 description "Offer multipler"; 3034 } 3035 } // df-election 3036 } // bidir 3037 } // augment 3039 augment "/rt:routing-state/rt:routing-instance/" 3040 + "rt:routing-protocols/pim-base:pim/" 3041 + "pim-base:address-family/pim-rp:rp/" 3042 + "pim-rp:static-rp/pim-rp:ipv4-rp" { 3043 description "PIM BIDIR augmentation."; 3045 uses static-rp-bidir-container; 3046 } // augment 3048 augment "/rt:routing-state/rt:routing-instance/" 3049 + "rt:routing-protocols/pim-base:pim/" 3050 + "pim-base:address-family/pim-rp:rp/" 3051 + "pim-rp:static-rp/pim-rp:ipv6-rp" { 3052 description "PIM BIDIR augmentation."; 3054 uses static-rp-bidir-container; 3055 } // augment 3056 augment "/rt:routing-state/rt:routing-instance/" 3057 + "rt:routing-protocols/pim-base:pim/" 3058 + "pim-base:address-family/pim-rp:rp" { 3059 description "PIM BIDIR augmentation."; 3061 container bidir { 3062 description 3063 "PIM BIDIR state data."; 3064 container df-election { 3065 description 3066 "DF election data."; 3067 list ipv4-rp { 3068 when "../../../../address-family = 'rt:ipv4'" { 3069 description 3070 "Only applicable to ipv4 address family."; 3071 } 3072 key "ipv4-addr"; 3073 description 3074 "A list of IPv4 RP addresses."; 3075 leaf ipv4-addr { 3076 type inet:ipv4-address; 3077 description 3078 "The address of the RP."; 3079 } 3080 } // ipv4-rp 3081 list ipv6-rp { 3082 when "../../../../address-family = 'rt:ipv6'" { 3083 description 3084 "Only applicable to ipv6 address family."; 3085 } 3086 key "ipv6-addr"; 3087 description 3088 "A list of IPv6 RP addresses."; 3089 leaf ipv6-addr { 3090 type inet:ipv6-address; 3091 description 3092 "The address of the RP."; 3093 } 3094 } // ipv6-rp 3095 } // df-election 3097 container interface-df-election { 3098 description 3099 "Interface DF election data."; 3100 list ipv4-rp { 3101 when "../../../../address-family = 'rt:ipv4'" { 3102 description 3103 "Only applicable to ipv4 address family."; 3105 } 3106 key "ipv4-addr interface-name"; 3107 description 3108 "A list of IPv4 RP addresses."; 3109 leaf ipv4-addr { 3110 type inet:ipv4-address; 3111 description 3112 "The address of the RP."; 3113 } 3114 leaf interface-name { 3115 type if:interface-ref; 3116 description 3117 "The address of the RP."; 3118 } 3119 leaf df-address { 3120 type inet:ipv4-address; 3121 description 3122 "DF address."; 3123 } 3124 leaf interface-state { 3125 type identityref { 3126 base df-state; 3127 } 3128 description 3129 "Interface state."; 3130 } 3131 } // ipv4-rp 3132 list ipv6-rp { 3133 when "../../../../address-family = 'rt:ipv6'" { 3134 description 3135 "Only applicable to ipv6 address family."; 3136 } 3137 key "ipv6-addr interface-name"; 3138 description 3139 "A list of IPv6 RP addresses."; 3140 leaf ipv6-addr { 3141 type inet:ipv6-address; 3142 description 3143 "The address of the RP."; 3144 } 3145 leaf interface-name { 3146 type if:interface-ref; 3147 description 3148 "The address of the RP."; 3149 } 3150 leaf df-address { 3151 type inet:ipv6-address; 3152 description 3153 "DF address."; 3154 } 3155 leaf interface-state { 3156 type identityref { 3157 base df-state; 3158 } 3159 description 3160 "Interface state."; 3161 } 3162 } // ipv6-rp 3163 } // interface-df-election 3164 } 3165 } // augment 3167 /* 3168 * RPCs 3169 */ 3171 /* 3172 * Notifications 3173 */ 3174 } 3176 3178 6. TODO list 3180 In this draft, several aspects of the model are incomplete. The PIM- 3181 DM and BI-DIR modules are just placeholders for now to demonstrate 3182 the hierarchy of the model. Other things the draft will include when 3183 complete but does not yet include: 3185 o Interaction with BFD protocol 3187 o Constraints (constant ranges, validation) 3189 o State-limiting and policy 3191 o Statistics. 3193 For these subjects, we will employ the same design principles of 3194 expressing a highly general model; vendors may use features and add 3195 augmentations in order to express which subsets of this general model 3196 are valid in their implementations. 3198 7. Security Considerations 3200 The data model defined does not introduce any security implications. 3202 This draft does not change any underlying security issues inherent in 3203 [I-D.ietf-netmod-routing-cfg]. 3205 8. IANA Considerations 3207 TBD 3209 9. Acknowledgements 3211 The authors would like to thank Steve Baillargeon, Guo Feng, Hu 3212 Fangwei, Robert Kebler, Tanmoy Kundu, Liu Yisong, Mahesh Sivakumar, 3213 and Stig Venaas for their valuable contributions. 3215 10. References 3217 10.1. Normative References 3219 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3220 Requirement Levels", BCP 14, RFC 2119, 3221 DOI 10.17487/RFC2119, March 1997, 3222 . 3224 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 3225 the Network Configuration Protocol (NETCONF)", RFC 6020, 3226 DOI 10.17487/RFC6020, October 2010, 3227 . 3229 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 3230 and A. Bierman, Ed., "Network Configuration Protocol 3231 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 3232 . 3234 [I-D.ietf-netmod-rfc6087bis] 3235 Bierman, A., "Guidelines for Authors and Reviewers of YANG 3236 Data Model Documents", draft-ietf-netmod-rfc6087bis-05 3237 (work in progress), October 2015. 3239 10.2. Informative References 3241 [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific 3242 Multicast (SSM)", RFC 3569, DOI 10.17487/RFC3569, July 3243 2003, . 3245 [RFC3973] Adams, A., Nicholas, J., and W. Siadak, "Protocol 3246 Independent Multicast - Dense Mode (PIM-DM): Protocol 3247 Specification (Revised)", RFC 3973, DOI 10.17487/RFC3973, 3248 January 2005, . 3250 [RFC4601] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, 3251 "Protocol Independent Multicast - Sparse Mode (PIM-SM): 3252 Protocol Specification (Revised)", RFC 4601, 3253 DOI 10.17487/RFC4601, August 2006, 3254 . 3256 [RFC4610] Farinacci, D. and Y. Cai, "Anycast-RP Using Protocol 3257 Independent Multicast (PIM)", RFC 4610, 3258 DOI 10.17487/RFC4610, August 2006, 3259 . 3261 [RFC5015] Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano, 3262 "Bidirectional Protocol Independent Multicast (BIDIR- 3263 PIM)", RFC 5015, DOI 10.17487/RFC5015, October 2007, 3264 . 3266 [RFC5059] Bhaskar, N., Gall, A., Lingard, J., and S. Venaas, 3267 "Bootstrap Router (BSR) Mechanism for Protocol Independent 3268 Multicast (PIM)", RFC 5059, DOI 10.17487/RFC5059, January 3269 2008, . 3271 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 3272 Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, 3273 January 2011, . 3275 [I-D.ietf-netmod-routing-cfg] 3276 Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 3277 Management", draft-ietf-netmod-routing-cfg-20 (work in 3278 progress), October 2015. 3280 Authors' Addresses 3282 Liu Xufeng 3283 Ericsson 3284 1595 Spring Hill Road, Suite 500 3285 Vienna VA 22182 3286 USA 3288 EMail: xufeng.liu@ericsson.com 3289 Pete McAllister 3290 Metaswitch Networks 3291 100 Church Street 3292 Enfield EN2 6BQ 3293 UK 3295 EMail: pete.mcallister@metaswitch.com 3297 Anish Peter 3298 Juniper Networks 3299 Electra, Exora Business Park 3300 Bangalore, KA 560103 3301 India 3303 EMail: anishp@juniper.net