idnits 2.17.1 draft-ietf-pim-igmp-mld-yang-04.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 126 instances of too long lines in the document, the longest one being 62 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 268 has weird spacing: '...-policy str...' == Line 271 has weird spacing: '...ce-addr sou...' == Line 336 has weird spacing: '...-policy str...' == Line 339 has weird spacing: '...ce-addr sou...' == Line 442 has weird spacing: '...-policy str...' == (3 more instances...) == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (June 30, 2017) is 2493 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) == Missing Reference: 'RFC3688' is mentioned on line 1863, but not defined == Unused Reference: 'I-D.ietf-netmod-rfc6087bis' is defined on line 1943, but no explicit reference was found in the text ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) -- Obsolete informational reference (is this intentional?): RFC 6087 (Obsoleted by RFC 8407) == Outdated reference: A later version (-20) exists of draft-ietf-netmod-rfc6087bis-12 Summary: 2 errors (**), 0 flaws (~~), 11 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 PIM Working Group X. Liu 2 Internet-Draft Jabil 3 Intended Status: Standard Track F. Guo 4 Expires: December 31, 2017 Huawei 5 M. Sivakumar 6 Cisco 7 P. McAllister 8 Metaswitch Networks 9 A. Peter 10 Juniper Networks 11 June 30, 2017 13 A YANG data model for Internet Group Management Protocol (IGMP) and 14 Multicast Listener Discovery (MLD) 15 draft-ietf-pim-igmp-mld-yang-04 17 Status of this Memo 19 This Internet-Draft is submitted in full conformance with the 20 provisions of BCP 78 and BCP 79. 22 Internet-Drafts are working documents of the Internet Engineering 23 Task Force (IETF), its areas, and its working groups. Note that 24 other groups may also distribute working documents as Internet- 25 Drafts. 27 Internet-Drafts are draft documents valid for a maximum of six 28 months and may be updated, replaced, or obsoleted by other documents 29 at any time. It is inappropriate to use Internet-Drafts as 30 reference material or to cite them other than as "work in progress." 32 The list of current Internet-Drafts can be accessed at 33 http://www.ietf.org/ietf/1id-abstracts.txt 35 The list of Internet-Draft Shadow Directories can be accessed at 36 http://www.ietf.org/shadow.html 38 This Internet-Draft will expire on December 31, 2017. 40 Copyright Notice 42 Copyright (c) 2017 IETF Trust and the persons identified as the 43 document authors. All rights reserved. 45 This document is subject to BCP 78 and the IETF Trust's Legal 46 Provisions Relating to IETF Documents 47 (http://trustee.ietf.org/license-info) in effect on the date of 48 publication of this document. Please review these documents 49 carefully, as they describe your rights and restrictions with 50 respect to this document. Code Components extracted from this 51 document must include Simplified BSD License text as described in 52 Section 4.e of the Trust Legal Provisions and are provided without 53 warranty as described in the Simplified BSD License. 55 Abstract 57 This document defines a YANG data model that can be used to 58 configure and manage Internet Group Management Protocol (IGMP) and 59 Multicast Listener Discovery (MLD) devices. 61 Table of Contents 63 1. Introduction ................................................ 2 64 1.1. Requirements Language................................... 3 65 1.2. Terminology ............................................ 3 66 2. Design of Data model......................................... 3 67 2.1. Scope of model ......................................... 3 68 2.2. Optional capabilities................................... 3 69 2.3. Position of address family in hierarchy................. 4 70 3. Module Structure ............................................ 4 71 3.1. IGMP and MLD Configuration.............................. 4 72 3.2. IGMP and MLD Operational State.......................... 8 73 3.3. IGMP and MLD RPC....................................... 12 74 4. IGMP and MLD YANG Modules................................... 13 75 5. Security Considerations..................................... 38 76 6. IANA Considerations ........................................ 39 77 7. References ................................................. 39 78 7.1. Normative References................................... 39 79 7.2. Informative References................................. 40 80 8. Acknowledgments ............................................ 41 82 1. Introduction 84 YANG [RFC6020] [RFC6087] is a data definition language that was 85 introduced to model the configuration and running state of a device 86 managed using NETCONF [RFC6241]. YANG is now also being used as a 87 component of wider management interfaces, such as CLIs. 89 This document defines a YANG data model that can be used to 90 configure and manage Internet Group Management Protocol (IGMP) and 91 Multicast Listener Discovery (MLD) devices. This model will support 92 the core IGMP and MLD protocols, as well as many other features 93 mentioned in separate IGMP and MLD RFCs. Non-core features are 94 defined as optional in the provided data model. 96 1.1. Requirements Language 98 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 99 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 100 document are to be interpreted as described in RFC-2119 [RFC2119]. 102 1.2. Terminology 104 The terminology for describing YANG data models is found in 105 [RFC6020]. 107 This document employs YANG tree diagrams, which are explained in [I- 108 D.ietf-netmod-rfc6087bis]. 110 2. Design of Data model 112 2.1. Scope of model 114 The model covers IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 115 [RFC3376] and MLDv1 [RFC2710], MLDv2 [RFC3810]. 117 The configuration of IGMP and MLD features are not all included in 118 this document of the data model. This model is being circulated in 119 its mainly form of the basic hierarchy. 121 The operational state fields and RPC definitions of this model can 122 also be extended, though the structure of what has been written may 123 be taken as representative of the structure of the whole model. 125 This model does not cover other IGMP and MLD related protocols such 126 as IGMP/MLD Proxy [RFC4605] or IGMP/MLD Snooping [RFC4541] etc., 127 these will be specified in separate documents. 129 2.2. Optional capabilities 131 This model is designed to represent the capabilities of IGMP and MLD 132 devices with various specifications, including some with basic 133 subsets of the IGMP and MLD protocols. The main design goals of 134 this document are that any major now-existing implementation may be 135 said to support the basic model, and that the configuration of all 136 implementations meeting the specification is easy to express through 137 some combination of the features in the basic model and simple 138 vendor augmentations. 140 There is also value in widely-supported features being standardized, 141 to save work for individual vendors, and so that mapping between 142 different vendors' configuration is not needlessly complicated. 143 Therefore these modules declare a number of features representing 144 capabilities that not all deployed devices support. 146 The extensive use of feature declarations should also substantially 147 simplify the capability negotiation process for a vendor's IGMP and 148 MLD implementations. 150 On the other hand, operational state parameters are not so widely 151 designated as features, as there are many cases where the defaulting 152 of an operational state parameter would not cause any harm to the 153 system, and it is much more likely that an implementation without 154 native support for a piece of operational state would be able to 155 derive a suitable value for a state variable that is not natively 156 supported. 158 For the same reason, basic constant ranges (for example, query 159 interval maximum and minimum value) will be used in the model, as 160 defined with "-basic" postfix form. It is expected that vendors will 161 augment the model with extended specific restrictions that might be 162 required, as defined a feature with "-extended" postfix form. 163 Vendors may also extend the features list with proprietary 164 extensions. 166 2.3. Position of address family in hierarchy 168 The current document contains IGMP and MLD as separate schema 169 branches in the structure. The reason for this is to make it easier 170 for implementations which may optionally choose to support specific 171 address families. And the names of objects may be different between 172 the IPv4 (IGMP) and IPv6 (MLD) address families. 174 3. Module Structure 176 3.1. IGMP and MLD Configuration 178 The IGMP and MLD modules define the routing-control-plane-protocol- 179 wide configuration options separately in a three-level hierarchy as 180 listed below: 182 Global level: IGMP or MLD configuration attributes for the entire 183 routing system. 185 Interface-global: IGMP or MLD configuration attributes are 186 applicable to all the interfaces whose interface-level corresponding 187 attributes are not existing, with same attributes' value for these 188 interfaces. 190 Interface-level: IGMP or MLD configuration attributes specific to 191 the given interface. 193 Where fields are not genuinely essential to protocol operation, they 194 are marked as optional. Some fields will be essential but have a 195 default specified, so that they need not be configured explicitly. 196 The module structure also applies, where applicable, to the 197 operational state and notifications as well. 199 We define the IGMP and MLD model as a protocol-centric model , and 200 the IGMP and MLD model augments "/rt:routing/rt:control-plane- 201 protocols/ rt:control-plane-protocol" and would allow a single 202 protocol instance per VRF. 204 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 205 +--rw igmp 206 +--rw global 207 | +--rw enable? boolean {global-admin-enable}? 208 | +--rw max-entries? uint32 {global-max-entries}? 209 | +--rw max-groups? uint32 {global-max-groups}? 210 +--rw interfaces 211 +--rw (last-member-query-interval)? 212 | +--:(last-member-query-interval-basic) 213 | | +--rw last-member-query-interval-basic? uint16 214 | +--:(last-member-query-interval-extended) 215 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 216 +--rw max-groups-per-interface? uint32 {intf-max-groups}? 217 +--rw (query-interval)? 218 | +--:(query-interval-basic) 219 | | +--rw query-interval-basic? uint16 220 | +--:(query-interval-extended) 221 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 222 +--rw (query-max-response-time)? 223 | +--:(query-max-response-time-basic) 224 | | +--rw query-max-response-time-basic? uint16 225 | +--:(query-max-response-time-extended) 226 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 227 +--rw require-router-alert? boolean {intf-require-router-alert}? 228 +--rw (robustness-variable)? 229 | +--:(robustness-variable-basic) 230 | | +--rw robustness-variable-basic? uint8 231 | +--:(robustness-variable-extended) 232 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 233 +--rw version? uint8 234 +--rw interface* [interface-name] 235 +--rw interface-name if:interface-ref 236 +--rw enable? boolean {intf-admin-enable}? 237 +--rw group-policy? string 238 +--rw immediate-leave? empty {intf-immediate-leave}? 239 +--rw (last-member-query-interval)? 240 | +--:(last-member-query-interval-basic) 241 | | +--rw last-member-query-interval-basic? uint16 242 | +--:(last-member-query-interval-extended) 243 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 244 +--rw max-groups? uint32 {intf-max-groups}? 245 +--rw max-group-sources? uint32 {intf-max-group-sources}? 246 +--rw (query-interval)? 247 | +--:(query-interval-basic) 248 | | +--rw query-interval-basic? uint16 249 | +--:(query-interval-extended) 250 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 251 +--rw (query-max-response-time)? 252 | +--:(query-max-response-time-basic) 253 | | +--rw query-max-response-time-basic? uint16 254 | +--:(query-max-response-time-extended) 255 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 256 +--rw require-router-alert? boolean {intf-require-router-alert}? 257 +--rw (robustness-variable)? 258 | +--:(robustness-variable-basic) 259 | | +--rw robustness-variable-basic? uint8 260 | +--:(robustness-variable-extended) 261 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 262 +--rw source-policy? string {intf-source-policy}? 263 +--rw verify-source-subnet? empty {intf-verify-source-subnet}? 264 +--rw version? uint8 265 +--rw join-group* inet:ipv4-address {intf-join-group}? 266 +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? 267 | +--rw source-addr ssm-map-ipv4-addr-type 268 | +--rw group-policy string 269 +--rw static-group* [group source-addr] {intf-static-group}? 270 +--rw group inet:ipv4-address 271 +--rw source-addr source-ipv4-addr-type 272 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 273 +--rw mld 274 +--rw global 275 | +--rw enable? boolean {global-admin-enable}? 276 | +--rw max-entries? uint32 {global-max-entries}? 277 | +--rw max-groups? uint32 {global-max-groups}? 278 +--rw interfaces 279 +--rw (last-member-query-interval)? 280 | +--:(last-member-query-interval-basic) 281 | | +--rw last-member-query-interval-basic? uint16 282 | +--:(last-member-query-interval-extended) 283 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 284 +--rw max-groups-per-interface? uint32 {intf-max-groups}? 285 +--rw (query-interval)? 286 | +--:(query-interval-basic) 287 | | +--rw query-interval-basic? uint16 288 | +--:(query-interval-extended) 289 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 290 +--rw (query-max-response-time)? 291 | +--:(query-max-response-time-basic) 292 | | +--rw query-max-response-time-basic? uint16 293 | +--:(query-max-response-time-extended) 294 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 295 +--rw require-router-alert? boolean {intf-require-router-alert}? 296 +--rw (robustness-variable)? 297 | +--:(robustness-variable-basic) 298 | | +--rw robustness-variable-basic? uint8 299 | +--:(robustness-variable-extended) 300 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 301 +--rw version? uint8 302 +--rw interface* [interface-name] 303 +--rw interface-name if:interface-ref 304 +--rw enable? boolean {intf-admin-enable}? 305 +--rw group-policy? string 306 +--rw immediate-leave? empty {intf-immediate-leave}? 307 +--rw (last-member-query-interval)? 308 | +--:(last-member-query-interval-basic) 309 | | +--rw last-member-query-interval-basic? uint16 310 | +--:(last-member-query-interval-extended) 311 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 312 +--rw max-groups? uint32 {intf-max-groups}? 313 +--rw max-group-sources? uint32 {intf-max-group-sources}? 314 +--rw (query-interval)? 315 | +--:(query-interval-basic) 316 | | +--rw query-interval-basic? uint16 317 | +--:(query-interval-extended) 318 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 319 +--rw (query-max-response-time)? 320 | +--:(query-max-response-time-basic) 321 | | +--rw query-max-response-time-basic? uint16 322 | +--:(query-max-response-time-extended) 323 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 324 +--rw require-router-alert? boolean {intf-require-router-alert}? 325 +--rw (robustness-variable)? 326 | +--:(robustness-variable-basic) 327 | | +--rw robustness-variable-basic? uint8 328 | +--:(robustness-variable-extended) 329 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 330 +--rw source-policy? string {intf-source-policy}? 331 +--rw verify-source-subnet? empty {intf-verify-source-subnet}? 332 +--rw version? uint8 333 +--rw join-group* inet:ipv6-address {intf-join-group}? 334 +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? 335 | +--rw source-addr ssm-map-ipv6-addr-type 336 | +--rw group-policy string 337 +--rw static-group* [group source-addr] {intf-static-group}? 338 +--rw group inet:ipv6-address 339 +--rw source-addr source-ipv6-addr-type 341 3.2. IGMP and MLD Operational State 343 The IGMP or MLD module contains operational state information also 344 in a three-level hierarchy as mentioned earlier and separately 345 listed as below. 347 Global level: IGMP or MLD operational state attributes for the 348 entire routing system 350 Interface-global: IGMP or MLD interface level operational state 351 attributes are applicable to all the interfaces whose interface- 352 level corresponding attributes are not existing, with same 353 attributes' value for these interfaces. 355 Interface-specific: IGMP or MLD operational state attributes 356 specific to the given interface. 358 augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol: 359 +--ro igmp 360 +--ro global 361 | +--ro enable? boolean {global-admin-enable}? 362 | +--ro max-entries? uint32 {global-max-entries}? 363 | +--ro max-groups? uint32 {global-max-groups}? 364 | +--ro entries-count? uint32 365 | +--ro groups-count? uint32 366 | +--ro statistics 367 | +--ro discontinuity-time? yang:date-and-time 368 | +--ro error 369 | | +--ro total? yang:counter64 370 | | +--ro query? yang:counter64 371 | | +--ro report? yang:counter64 372 | | +--ro leave? yang:counter64 373 | | +--ro checksum? yang:counter64 374 | | +--ro too-short? yang:counter64 375 | +--ro received 376 | | +--ro total? yang:counter64 377 | | +--ro query? yang:counter64 378 | | +--ro report? yang:counter64 379 | | +--ro leave? yang:counter64 380 | +--ro sent 381 | +--ro total? yang:counter64 382 | +--ro query? yang:counter64 383 | +--ro report? yang:counter64 384 | +--ro leave? yang:counter64 385 +--ro interfaces 386 +--ro (last-member-query-interval)? 387 | +--:(last-member-query-interval-basic) 388 | | +--ro last-member-query-interval-basic? uint16 389 | +--:(last-member-query-interval-extended) 390 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 391 +--ro max-groups-per-interface? uint32 {intf-max-groups}? 392 +--ro (query-interval)? 393 | +--:(query-interval-basic) 394 | | +--ro query-interval-basic? uint16 395 | +--:(query-interval-extended) 396 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 397 +--ro (query-max-response-time)? 398 | +--:(query-max-response-time-basic) 399 | | +--ro query-max-response-time-basic? uint16 400 | +--:(query-max-response-time-extended) 401 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 402 +--ro require-router-alert? boolean {intf-require-router-alert}? 403 +--ro (robustness-variable)? 404 | +--:(robustness-variable-basic) 405 | | +--ro robustness-variable-basic? uint8 406 | +--:(robustness-variable-extended) 407 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 408 +--ro interface* [interface-name] 409 +--ro interface-name if:interface-ref 410 +--ro enable? boolean {intf-admin-enable}? 411 +--ro group-policy? string 412 +--ro immediate-leave? empty {intf-immediate-leave}? 413 +--ro (last-member-query-interval)? 414 | +--:(last-member-query-interval-basic) 415 | | +--ro last-member-query-interval-basic? uint16 416 | +--:(last-member-query-interval-extended) 417 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 418 +--ro max-groups? uint32 {intf-max-groups}? 419 +--ro max-group-sources? uint32 {intf-max-group-sources}? 420 +--ro (query-interval)? 421 | +--:(query-interval-basic) 422 | | +--ro query-interval-basic? uint16 423 | +--:(query-interval-extended) 424 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 425 +--ro (query-max-response-time)? 426 | +--:(query-max-response-time-basic) 427 | | +--ro query-max-response-time-basic? uint16 428 | +--:(query-max-response-time-extended) 429 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 430 +--ro require-router-alert? boolean {intf-require-router-alert}? 431 +--ro (robustness-variable)? 432 | +--:(robustness-variable-basic) 433 | | +--ro robustness-variable-basic? uint8 434 | +--:(robustness-variable-extended) 435 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 436 +--ro source-policy? string {intf-source-policy}? 437 +--ro verify-source-subnet? empty {intf-verify-source-subnet}? 438 +--ro version? uint8 439 +--ro join-group* inet:ipv4-address {intf-join-group}? 440 +--ro ssm-map* [source-addr group-policy] {intf-ssm-map}? 441 | +--ro source-addr ssm-map-ipv4-addr-type 442 | +--ro group-policy string 443 +--ro static-group* [group source-addr] {intf-static-group}? 444 | +--ro group inet:ipv4-address 445 | +--ro source-addr source-ipv4-addr-type 446 +--ro oper-status? enumeration 447 +--ro querier? inet:ipv4-address 448 +--ro joined-group* inet:ipv4-address {intf-join-group}? 449 +--ro group* [address] 450 +--ro address inet:ipv4-address 451 +--ro expire? uint32 452 +--ro filter-mode? enumeration 453 +--ro host-count? uint32 454 +--ro up-time? uint32 455 +--ro host* inet:ipv4-address 456 +--ro last-reporter? inet:ipv4-address 457 +--ro source* [address] 458 +--ro address inet:ipv4-address 459 +--ro expire? uint32 460 +--ro up-time? uint32 461 +--ro last-reporter? inet:ipv4-address 462 augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol: 463 +--ro mld 464 +--ro global 465 | +--ro enable? boolean {global-admin-enable}? 466 | +--ro max-entries? uint32 {global-max-entries}? 467 | +--ro max-groups? uint32 {global-max-groups}? 468 | +--ro entries-count? uint32 469 | +--ro groups-count? uint32 470 | +--ro statistics 471 | +--ro discontinuity-time? yang:date-and-time 472 | +--ro error 473 | | +--ro total? yang:counter64 474 | | +--ro query? yang:counter64 475 | | +--ro report? yang:counter64 476 | | +--ro leave? yang:counter64 477 | | +--ro checksum? yang:counter64 478 | | +--ro too-short? yang:counter64 479 | +--ro received 480 | | +--ro total? yang:counter64 481 | | +--ro query? yang:counter64 482 | | +--ro report? yang:counter64 483 | | +--ro leave? yang:counter64 484 | +--ro sent 485 | +--ro total? yang:counter64 486 | +--ro query? yang:counter64 487 | +--ro report? yang:counter64 488 | +--ro leave? yang:counter64 489 +--ro interfaces 490 +--ro (last-member-query-interval)? 491 | +--:(last-member-query-interval-basic) 492 | | +--ro last-member-query-interval-basic? uint16 493 | +--:(last-member-query-interval-extended) 494 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 495 +--ro max-groups-per-interface? uint32 {intf-max-groups}? 496 +--ro (query-interval)? 497 | +--:(query-interval-basic) 498 | | +--ro query-interval-basic? uint16 499 | +--:(query-interval-extended) 500 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 501 +--ro (query-max-response-time)? 502 | +--:(query-max-response-time-basic) 503 | | +--ro query-max-response-time-basic? uint16 504 | +--:(query-max-response-time-extended) 505 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 506 +--ro require-router-alert? boolean {intf-require-router-alert}? 507 +--ro (robustness-variable)? 508 | +--:(robustness-variable-basic) 509 | | +--ro robustness-variable-basic? uint8 510 | +--:(robustness-variable-extended) 511 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 512 +--ro interface* [interface-name] 513 +--ro interface-name if:interface-ref 514 +--ro enable? boolean {intf-admin-enable}? 515 +--ro group-policy? string 516 +--ro immediate-leave? empty {intf-immediate-leave}? 517 +--ro (last-member-query-interval)? 518 | +--:(last-member-query-interval-basic) 519 | | +--ro last-member-query-interval-basic? uint16 520 | +--:(last-member-query-interval-extended) 521 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 522 +--ro max-groups? uint32 {intf-max-groups}? 523 +--ro max-group-sources? uint32 {intf-max-group-sources}? 524 +--ro (query-interval)? 525 | +--:(query-interval-basic) 526 | | +--ro query-interval-basic? uint16 527 | +--:(query-interval-extended) 528 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 529 +--ro (query-max-response-time)? 530 | +--:(query-max-response-time-basic) 531 | | +--ro query-max-response-time-basic? uint16 532 | +--:(query-max-response-time-extended) 533 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended} 534 +--ro require-router-alert? boolean {intf-require-router-alert}? 535 +--ro (robustness-variable)? 536 | +--:(robustness-variable-basic) 537 | | +--ro robustness-variable-basic? uint8 538 | +--:(robustness-variable-extended) 539 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 540 +--ro source-policy? string {intf-source-policy}? 541 +--ro verify-source-subnet? empty {intf-verify-source-subnet}? 542 +--ro version? uint8 543 +--ro join-group* inet:ipv6-address {intf-join-group}? 544 +--ro ssm-map* [source-addr group-policy] {intf-ssm-map}? 545 | +--ro source-addr ssm-map-ipv6-addr-type 546 | +--ro group-policy string 547 +--ro static-group* [group source-addr] {intf-static-group}? 548 | +--ro group inet:ipv6-address 549 | +--ro source-addr source-ipv6-addr-type 550 +--ro oper-status? enumeration 551 +--ro querier? inet:ipv6-address 552 +--ro joined-group* inet:ipv6-address {intf-join-group}? 553 +--ro group* [address] 554 +--ro address inet:ipv6-address 555 +--ro expire? uint32 556 +--ro filter-mode? enumeration 557 +--ro host-count? uint32 558 +--ro up-time? uint32 559 +--ro host* inet:ipv6-address 560 +--ro last-reporter? inet:ipv6-address 561 +--ro source* [address] 562 +--ro address inet:ipv6-address 563 +--ro expire? uint32 564 +--ro up-time? uint32 565 +--ro last-reporter? inet:ipv6-address 567 3.3. IGMP and MLD RPC 569 rpcs: 571 +---x clear-igmp-groups {rpc-clear-groups}? 573 | +---w input 575 | +---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/igmp/interfaces/interface/interface-name 577 | +---w group? inet:ipv4-address 579 | +---w source? inet:ipv4-address 581 +---x clear-mld-groups {rpc-clear-groups}? 582 +---w input 584 +---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/mld/interfaces/interface/interface-name 586 +---w group? inet:ipv6-address 588 +---w source? inet:ipv6-address 590 4. IGMP and MLD YANG Modules 591 file "ietf-igmp-mld@2017-06-30.yang" 592 module ietf-igmp-mld { 593 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; 594 // replace with IANA namespace when assigned 595 prefix igmp-mld; 597 import ietf-inet-types { 598 prefix "inet"; 599 } 601 import ietf-yang-types { 602 prefix "yang"; 603 } 605 import ietf-routing { 606 prefix "rt"; 607 } 609 import ietf-interfaces { 610 prefix "if"; 611 } 613 import ietf-ip { 614 prefix ip; 615 } 617 organization 618 "IETF PIM Working Group"; 620 contact 621 "WG Web: 622 WG List: 624 WG Chair: Stig Venaas 625 627 WG Chair: Mike McBride 628 630 Editor: Xufeng Liu 631 633 Editor: Feng Guo 634 636 Editor: Mahesh Sivakumar 637 639 Editor: Pete McAllister 640 642 Editor: Anish Peter 643 "; 645 description 646 "The module defines a collection of YANG definitions common for 647 IGMP and MLD."; 649 revision 2017-06-30 { 650 description 651 "Updated for model description and errata."; 652 reference 653 "RFC XXXX: A YANG Data Model for IGMP and MLD"; 654 } 656 /* 657 * Features 658 */ 659 feature global-admin-enable { 660 description 661 "Support global configuration to enable or disable protocol."; 662 } 664 feature global-interface-config { 665 description 666 "Support global configuration applied for all interfaces."; 667 } 669 feature global-max-entries { 670 description 671 "Support configuration of global max-entries."; 672 } 674 feature global-max-groups { 675 description 676 "Support configuration of global max-groups."; 677 } 679 feature intf-admin-enable { 680 description 681 "Support configuration of interface administrative enabling."; 682 } 684 feature intf-last-member-query-interval-extended { 685 description 686 "Support configuration of interface last member query interval 687 different value range."; 688 } 690 feature intf-query-interval-extended { 691 description 692 "Support configuration of interface query interval 693 different value range."; 694 } 696 feature intf-query-max-response-time-extended { 697 description 698 "Support configuration of interface query max response time 699 different value range."; 700 } 702 feature intf-robustness-variable-extended { 703 description 704 "Support configuration of interface robustness-variable 705 different value range."; 706 } 708 feature intf-immediate-leave { 709 description 710 "Support configuration of interface immediate-leave."; 711 } 713 feature intf-join-group { 714 description 715 "Support configuration of interface join-group."; 716 } 718 feature intf-max-groups { 719 description 720 "Support configuration of interface max-groups."; 721 } 723 feature intf-max-group-sources { 724 description 725 "Support configuration of interface max-group-sources."; 726 } 728 feature intf-require-router-alert { 729 description 730 "Support configuration of interface require-router-alert."; 731 } 733 feature intf-source-policy { 734 description 735 "Support configuration of interface source policy."; 736 } 738 feature intf-ssm-map { 739 description 740 "Support configuration of interface ssm-map."; 741 } 743 feature intf-static-group { 744 description 745 "Support configuration of interface static-group."; 746 } 748 feature intf-verify-source-subnet { 749 description 750 "Support configuration of interface verify-source-subnet."; 751 } 753 feature per-interface-config { 754 description 755 "Support per interface configuration."; 756 } 758 feature rpc-clear-groups { 759 description 760 "Support rpc's to clear groups."; 761 } 763 /* 764 * Typedefs 765 */ 766 typedef ssm-map-ipv4-addr-type { 767 type union { 768 type enumeration { 769 enum 'policy' { 770 description 771 "Source address is specified in SSM map policy."; 772 } 774 } 775 type inet:ipv4-address; 776 } 777 description 778 "Multicast source IP address type for SSM map."; 779 } // source-ipv4-addr-type 781 typedef ssm-map-ipv6-addr-type { 782 type union { 783 type enumeration { 784 enum 'policy' { 785 description 786 "Source address is specified in SSM map policy."; 787 } 788 } 789 type inet:ipv6-address; 790 } 791 description 792 "Multicast source IP address type for SSM map."; 793 } // source-ipv6-addr-type 795 typedef source-ipv4-addr-type { 796 type union { 797 type enumeration { 798 enum '*' { 799 description 800 "Any source address."; 801 } 802 } 803 type inet:ipv4-address; 804 } 805 description 806 "Multicast source IP address type."; 807 } // source-ipv4-addr-type 809 typedef source-ipv6-addr-type { 810 type union { 811 type enumeration { 812 enum '*' { 813 description 814 "Any source address."; 815 } 816 } 817 type inet:ipv6-address; 818 } 819 description 820 "Multicast source IP address type."; 821 } // source-ipv6-addr-type 822 /* 823 * Identities 824 */ 826 /* 827 * Groupings 828 */ 829 grouping global-config-attributes { 830 description "Global IGMP and MLD configuration."; 832 leaf enable { 833 if-feature global-admin-enable; 834 type boolean; 835 description 836 "true to enable IGMP or MLD in the routing instance; 837 false to disable IGMP or MLD in the routing instance."; 838 } 840 leaf max-entries { 841 if-feature global-max-entries; 842 type uint32; 843 description 844 "The maximum number of entries in IGMP or MLD."; 845 } 846 leaf max-groups { 847 if-feature global-max-groups; 848 type uint32; 849 description 850 "The maximum number of groups that IGMP 851 or MLD can join."; 852 } 853 } // global-config-attributes 855 grouping global-state-attributes { 856 description "Global IGMP and MLD state attributes."; 858 leaf entries-count { 859 type uint32; 860 description 861 "The number of entries in IGMP or MLD."; 862 } 863 leaf groups-count { 864 type uint32; 865 description 866 "The number of groups that IGMP or MLD can join."; 867 } 869 container statistics { 870 description "Global statistics."; 871 leaf discontinuity-time { 872 type yang:date-and-time; 873 description 874 "The time on the most recent occasion at which any one 875 or more of the statistic counters suffered a 876 discontinuity. If no such discontinuities have occurred 877 since the last re-initialization of the local 878 management subsystem, then this node contains the time 879 the local management subsystem re-initialized itself."; 880 } 882 container error { 883 description "Statistics of errors."; 884 uses global-statistics-error; 885 } 887 container received { 888 description "Statistics of received messages."; 889 uses global-statistics-sent-received; 890 } 891 container sent { 892 description "Statistics of sent messages."; 893 uses global-statistics-sent-received; 894 } 895 } // statistics 896 } // global-state-attributes 898 grouping global-statistics-error { 899 description 900 "A grouping defining statistics attributes for errors."; 901 uses global-statistics-sent-received; 902 leaf checksum { 903 type yang:counter64; 904 description 905 "The number of checksum errors."; 906 } 907 leaf too-short { 908 type yang:counter64; 909 description 910 "The number of messages that are too short."; 911 } 912 } // global-statistics-error 914 grouping global-statistics-sent-received { 915 description 916 "A grouping defining statistics attributes."; 917 leaf total { 918 type yang:counter64; 919 description 920 "The number of total messages."; 921 } 922 leaf query { 923 type yang:counter64; 924 description 925 "The number of query messages."; 926 } 927 leaf report { 928 type yang:counter64; 929 description 930 "The number of report messages."; 931 } 932 leaf leave { 933 type yang:counter64; 934 description 935 "The number of leave messages."; 936 } 937 } // global-statistics-sent-received 939 grouping interfaces-config-attributes { 940 description 941 "Configuration attributes applied to the interfaces whose 942 per interface attributes are not existing."; 944 choice last-member-query-interval { 945 description 946 "Different vendors can restrict different range to the 947 Last Member Query Interval parameter."; 949 leaf last-member-query-interval-basic { 950 type uint16 { 951 range "1..65535"; 952 } 953 units seconds; 954 default 1; 955 description 956 "Last Member Query Interval, which may be tuned to modify the 957 leave latency of the network."; 958 reference "RFC3376. Sec. 8.8."; 959 } 960 leaf last-member-query-interval-extended { 961 if-feature intf-last-member-query-interval-extended; 962 type uint16; 963 units seconds; 964 description 965 "Last Member Query Interval, which may be tuned to modify the 966 leave latency of the network."; 967 reference "RFC3376. Sec. 8.8."; 969 } 970 } 971 leaf max-groups-per-interface { 972 if-feature intf-max-groups; 973 type uint32; 974 description 975 "The maximum number of groups that IGMP or MLD can join."; 976 } 977 choice query-interval { 978 description 979 "Different vendors can restrict different range to the 980 Query Interval parameter."; 982 leaf query-interval-basic { 983 type uint16 { 984 range "1..31744"; 985 } 986 units seconds; 987 default 125; 988 description 989 "The Query Interval is the interval between General Queries 990 sent by the Querier."; 991 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 992 } 993 leaf query-interval-extended { 994 if-feature intf-query-interval-extended; 995 type uint16; 996 units seconds; 997 description 998 "The Query Interval is the interval between General Queries 999 sent by the Querier."; 1000 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 1001 } 1002 } 1003 choice query-max-response-time { 1004 description 1005 "Different vendors can restrict different range to the 1006 Query maximum response time parameter."; 1008 leaf query-max-response-time-basic { 1009 type uint16 { 1010 range "1..65535"; 1011 } 1012 units seconds; 1013 default 10; 1014 description 1015 "Query maximum response time specifies the maximum time 1016 allowed before sending a responding report."; 1017 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1019 } 1020 leaf query-max-response-time-extended { 1021 if-feature intf-query-max-response-time-extended; 1022 type uint16; 1023 units seconds; 1024 description 1025 "Query maximum response time specifies the maximum time 1026 allowed before sending a responding report."; 1027 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1028 } 1029 } 1030 leaf require-router-alert { 1031 if-feature intf-require-router-alert; 1032 type boolean; 1033 default false; 1034 description 1035 "Protocol packets should contain router alert IP option."; 1036 } 1037 choice robustness-variable { 1038 description 1039 "Different vendors can restrict different range to the 1040 Robustness Variable parameter."; 1042 leaf robustness-variable-basic { 1043 type uint8 { 1044 range "2..7"; 1045 } 1046 default 2; 1047 description 1048 "Querier's Robustness Variable allows tuning for the expected 1049 packet loss on a network."; 1050 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1051 } 1052 leaf robustness-variable-extended { 1053 if-feature intf-robustness-variable-extended; 1054 type uint8; 1055 description 1056 "Querier's Robustness Variable allows tuning for the expected 1057 packet loss on a network."; 1058 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1059 } 1060 } 1062 } // interfaces-config-attributes 1064 grouping interface-config-attributes-igmp { 1065 description "Per interface igmp configuration for IGMP."; 1067 uses interface-config-attributes-igmp-mld; 1068 leaf version { 1069 type uint8 { 1070 range "1..3"; 1071 } 1072 description "IGMP version."; 1073 reference "RFC1112, RFC2236, RFC3376."; 1074 } 1075 leaf-list join-group { 1076 if-feature intf-join-group; 1077 type inet:ipv4-address; 1078 description 1079 "The router joins this multicast group on the interface."; 1080 } 1082 list ssm-map { 1083 if-feature intf-ssm-map; 1084 key "source-addr group-policy"; 1085 description "The policy for (*,G) mapping to (S,G)."; 1086 leaf source-addr { 1087 type ssm-map-ipv4-addr-type; 1088 description 1089 "Multicast source IP address."; 1090 } 1091 leaf group-policy { 1092 type string; 1093 description 1094 "Name of the access policy used to filter IGMP 1095 membership.A device can restrict the length 1096 and value of this name, possibly space and special 1097 characters are not allowed. "; 1098 } 1099 } 1101 list static-group { 1102 if-feature intf-static-group; 1103 key "group source-addr"; 1104 description 1105 "A static multicast route, (*,G) or (S,G)."; 1107 leaf group { 1108 type inet:ipv4-address; 1109 description 1110 "Multicast group IP address."; 1111 } 1112 leaf source-addr { 1113 type source-ipv4-addr-type; 1114 description 1115 "Multicast source IP address."; 1117 } 1118 } 1119 } // interface-config-attributes-igmp 1121 grouping interface-config-attributes-igmp-mld { 1122 description 1123 "Per interface configuration for both IGMP and MLD."; 1125 leaf enable { 1126 if-feature intf-admin-enable; 1127 type boolean; 1128 default false; 1129 description 1130 "true to enable IGMP or MLD on the interface; 1131 false to disable IGMP or MLD on the interface."; 1132 } 1133 leaf group-policy { 1134 type string; 1135 description 1136 "Name of the access policy used to filter IGMP or MLD 1137 membership.A device can restrict the length 1138 and value of this name, possibly space and special 1139 characters are not allowed."; 1140 } 1141 leaf immediate-leave { 1142 if-feature intf-immediate-leave; 1143 type empty; 1144 description 1145 "If present, IGMP or MLD perform an immediate leave upon 1146 receiving an IGMPv2 or MLDv1 leave message. 1147 If the router is IGMP-enabled or MLD-enabled, it sends an 1148 IGMP or MLD last member query with a last member query 1149 response time. However, the router does not wait for 1150 the response time before it prunes off the group."; 1151 } 1152 choice last-member-query-interval { 1153 description 1154 "Different vendors can restrict different range to the 1155 Last Member Query Interval parameter."; 1157 leaf last-member-query-interval-basic { 1158 type uint16 { 1159 range "1..65535"; 1160 } 1161 units seconds; 1162 default 1; 1163 description 1164 "Last Member Query Interval, which may be tuned to modify the 1165 leave latency of the network."; 1167 reference "RFC3376. Sec. 8.8."; 1168 } 1169 leaf last-member-query-interval-extended { 1170 if-feature intf-last-member-query-interval-extended; 1171 type uint16; 1172 units seconds; 1173 description 1174 "Last Member Query Interval, which may be tuned to modify the 1175 leave latency of the network."; 1176 reference "RFC3376. Sec. 8.8."; 1177 } 1178 } 1179 leaf max-groups { 1180 if-feature intf-max-groups; 1181 type uint32; 1182 description 1183 "The maximum number of groups that IGMP ro MLD can join."; 1184 } 1185 leaf max-group-sources { 1186 if-feature intf-max-group-sources; 1187 type uint32; 1188 description 1189 "The maximum number of group sources."; 1190 } 1191 choice query-interval { 1192 description 1193 "Different vendors can restrict different range to the 1194 Query Interval parameter."; 1196 leaf query-interval-basic { 1197 type uint16 { 1198 range "1..31744"; 1199 } 1200 units seconds; 1201 default 125; 1202 description 1203 "The Query Interval is the interval between General Queries 1204 sent by the Querier."; 1205 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 1206 } 1207 leaf query-interval-extended { 1208 if-feature intf-query-interval-extended; 1209 type uint16; 1210 units seconds; 1211 description 1212 "The Query Interval is the interval between General Queries 1213 sent by the Querier."; 1214 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 1215 } 1217 } 1218 choice query-max-response-time { 1219 description 1220 "Different vendors can restrict different range to the 1221 Query maximum response time parameter."; 1223 leaf query-max-response-time-basic { 1224 type uint16 { 1225 range "1..65535"; 1226 } 1227 units seconds; 1228 default 10; 1229 description 1230 "Query maximum response time specifies the maximum time 1231 allowed before sending a responding report."; 1232 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1233 } 1234 leaf query-max-response-time-extended { 1235 if-feature intf-query-max-response-time-extended; 1236 type uint16; 1237 units seconds; 1238 description 1239 "Query maximum response time specifies the maximum time 1240 allowed before sending a responding report."; 1241 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1242 } 1243 } 1244 leaf require-router-alert { 1245 if-feature intf-require-router-alert; 1246 type boolean; 1247 description 1248 "Protocol packets should contain router alert IP option."; 1249 } 1250 choice robustness-variable { 1251 description 1252 "Different vendors can restrict different range to the 1253 Robustness Variable parameter."; 1255 leaf robustness-variable-basic { 1256 type uint8 { 1257 range "2..7"; 1258 } 1259 default 2; 1260 description 1261 "Querier's Robustness Variable allows tuning for the expected 1262 packet loss on a network."; 1263 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1264 } 1265 leaf robustness-variable-extended { 1266 if-feature intf-robustness-variable-extended; 1267 type uint8; 1268 description 1269 "Querier's Robustness Variable allows tuning for the expected 1270 packet loss on a network."; 1271 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1272 } 1273 } 1274 leaf source-policy { 1275 if-feature intf-source-policy; 1276 type string; 1277 description 1278 "Name of the access policy used to filter sources. 1279 A device can restrict the length 1280 and value of this name, possibly space and special 1281 characters are not allowed."; 1282 } 1283 leaf verify-source-subnet { 1284 if-feature intf-verify-source-subnet; 1285 type empty; 1286 description 1287 "If present, the interface accepts packets with matching 1288 source IP subnet only."; 1289 } 1291 } // interface-config-attributes-igmp-mld 1293 grouping interface-config-attributes-mld { 1294 description "Per interface mld configuration for MLD."; 1296 uses interface-config-attributes-igmp-mld; 1298 leaf version { 1299 type uint8 { 1300 range "1..2"; 1301 } 1302 description "MLD version."; 1303 reference "RFC2710, RFC3810."; 1304 } 1305 leaf-list join-group { 1306 if-feature intf-join-group; 1307 type inet:ipv6-address; 1308 description 1309 "The router joins this multicast group on the interface."; 1310 } 1312 list ssm-map { 1313 if-feature intf-ssm-map; 1314 key "source-addr group-policy"; 1315 description "The policy for (*,G) mapping to (S,G)."; 1316 leaf source-addr { 1317 type ssm-map-ipv6-addr-type; 1318 description 1319 "Multicast source IPv6 address."; 1320 } 1321 leaf group-policy { 1322 type string; 1323 description 1324 "Name of the access policy used to filter MLD 1325 membership.A device can restrict the length 1326 and value of this name, possibly space and special 1327 characters are not allowed."; 1328 } 1329 } 1331 list static-group { 1332 if-feature intf-static-group; 1333 key "group source-addr"; 1334 description 1335 "A static multicast route, (*,G) or (S,G)."; 1337 leaf group { 1338 type inet:ipv6-address; 1339 description 1340 "Multicast group IPv6 address."; 1341 } 1342 leaf source-addr { 1343 type source-ipv6-addr-type; 1344 description 1345 "Multicast source IPv6 address."; 1346 } 1347 } 1348 } // interface-config-attributes-mld 1350 grouping interface-state-attributes-igmp { 1351 description 1352 "Per interface state attributes for IGMP."; 1354 uses interface-state-attributes-igmp-mld; 1356 leaf querier { 1357 type inet:ipv4-address; 1358 description "The querier address in the subnet"; 1359 } 1360 leaf-list joined-group { 1361 if-feature intf-join-group; 1362 type inet:ipv4-address; 1363 description 1364 "The routers that joined this multicast group."; 1365 } 1367 list group { 1368 key "address"; 1369 description 1370 "Multicast group membership information 1371 that joined on the interface."; 1373 leaf address { 1374 type inet:ipv4-address; 1375 description 1376 "Multicast group address."; 1377 } 1378 uses interface-state-group-attributes-igmp-mld; 1379 leaf-list host { 1380 type inet:ipv4-address; 1381 description 1382 "List of host addresses that 1383 joined the multicast group"; 1384 } 1385 leaf last-reporter { 1386 type inet:ipv4-address; 1387 description 1388 "The last host address which has sent the 1389 report to join the multicast group."; 1390 } 1391 list source { 1392 key "address"; 1393 description 1394 "List of multicast source information 1395 of the multicast group."; 1397 leaf address { 1398 type inet:ipv4-address; 1399 description 1400 "Multicast source address"; 1401 } 1402 uses interface-state-source-attributes-igmp-mld; 1403 leaf last-reporter { 1404 type inet:ipv4-address; 1405 description 1406 "The last host address which has sent the 1407 report to join the multicast source and group."; 1408 } 1409 } // list source 1410 } // list group 1411 } // interface-state-attributes-igmp 1412 grouping interface-state-attributes-igmp-mld { 1413 description 1414 "Per interface state attributes for both IGMP and MLD."; 1416 leaf oper-status { 1417 type enumeration { 1418 enum up { 1419 description 1420 "Ready to pass packets."; 1421 } 1422 enum down { 1423 description 1424 "The interface does not pass any packets."; 1425 } 1426 } 1427 description 1428 "interface up or down state for IGMP or MLD protocol"; 1429 } 1430 } // interface-config-attributes-igmp-mld 1432 grouping interface-state-attributes-mld { 1433 description 1434 "Per interface state attributes for MLD."; 1436 uses interface-state-attributes-igmp-mld; 1438 leaf querier { 1439 type inet:ipv6-address; 1440 description 1441 "The querier address in the subnet."; 1442 } 1443 leaf-list joined-group { 1444 if-feature intf-join-group; 1445 type inet:ipv6-address; 1446 description 1447 "The routers that joined this multicast group."; 1448 } 1450 list group { 1451 key "address"; 1452 description 1453 "Multicast group membership information 1454 that joined on the interface."; 1456 leaf address { 1457 type inet:ipv6-address; 1458 description 1459 "Multicast group address."; 1460 } 1461 uses interface-state-group-attributes-igmp-mld; 1462 leaf-list host { 1463 type inet:ipv6-address; 1464 description 1465 "List of host addresses that 1466 joined the multicast group"; 1467 } 1468 leaf last-reporter { 1469 type inet:ipv6-address; 1470 description 1471 "The last host address which has sent the 1472 report to join the multicast group."; 1473 } 1474 list source { 1475 key "address"; 1476 description 1477 "List of multicast source information 1478 of the multicast group."; 1480 leaf address { 1481 type inet:ipv6-address; 1482 description 1483 "Multicast source address"; 1484 } 1485 uses interface-state-source-attributes-igmp-mld; 1486 leaf last-reporter { 1487 type inet:ipv6-address; 1488 description 1489 "The last host address which has sent the 1490 report to join the multicast source and group."; 1491 } 1492 } // list source 1493 } // list group 1494 } // interface-state-attributes-mld 1496 grouping interface-state-group-attributes-igmp-mld { 1497 description 1498 "Per interface state attributes for both IGMP and MLD 1499 groups."; 1501 leaf expire { 1502 type uint32; 1503 units seconds; 1504 description 1505 "The time left before multicast group state expires."; 1506 } 1507 leaf filter-mode { 1508 type enumeration { 1509 enum "include" { 1510 description 1511 "In include mode, reception of packets sent 1512 to the specified multicast address is requested 1513 only from those IP source addresses listed in the 1514 source-list parameter"; 1515 } 1516 enum "exclude" { 1517 description 1518 "In exclude mode, reception of packets sent 1519 to the given multicast address is requested 1520 from all IP source addresses except those 1521 listed in the source-list parameter."; 1522 } 1523 } 1524 description 1525 "Filter mode for a multicast group, 1526 may be either include or exclude."; 1527 } 1528 leaf host-count { 1529 type uint32; 1530 description 1531 "The number of host addresses."; 1532 } 1533 leaf up-time { 1534 type uint32; 1535 units seconds; 1536 description 1537 "The elapsed time since the device created multicast group record."; 1538 } 1539 } // interface-state-group-attributes-igmp-mld 1541 grouping interface-state-source-attributes-igmp-mld { 1542 description 1543 "Per interface state attributes for both IGMP and MLD 1544 source-group records."; 1546 leaf expire { 1547 type uint32; 1548 units seconds; 1549 description 1550 "The time left before multicast source-group state expires."; 1551 } 1552 leaf up-time { 1553 type uint32; 1554 units seconds; 1555 description 1556 "The elapsed time since the device created multicast 1557 source-group record."; 1558 } 1560 } // interface-state-source-attributes-igmp-mld 1562 /* 1563 * Configuration data nodes 1564 */ 1565 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" 1566 { 1567 description 1568 "IGMP augmentation to routing control plane protocol configuration."; 1570 container igmp { 1571 description 1572 "IGMP configuration data."; 1574 container global { 1575 description 1576 "Global attributes."; 1577 uses global-config-attributes; 1578 } 1580 container interfaces { 1581 description 1582 "Containing a list of interfaces."; 1584 uses interfaces-config-attributes { 1585 if-feature global-interface-config; 1586 } 1587 leaf version { 1588 type uint8 { 1589 range "1..3"; 1590 } 1591 description "IGMP version."; 1592 reference "RFC1112, RFC2236, RFC3376."; 1593 } 1595 list interface { 1596 key "interface-name"; 1597 description 1598 "List of IGMP interfaces."; 1599 leaf interface-name { 1600 type if:interface-ref; 1601 must "/if:interfaces/if:interface[if:name = current()]/" 1602 + "ip:ipv4" { 1603 description 1604 "The interface must have IPv4 enabled."; 1605 } 1606 description 1607 "Reference to an entry in the global interface 1608 list."; 1610 } 1611 uses interface-config-attributes-igmp { 1612 if-feature per-interface-config; 1613 } 1614 } // interface 1615 } // interfaces 1616 } // igmp 1617 }//augment 1619 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" 1620 { 1621 description 1622 "MLD augmentation to routing control plane protocol configuration."; 1624 container mld { 1625 description 1626 "MLD configuration data."; 1628 container global { 1629 description 1630 "Global attributes."; 1631 uses global-config-attributes; 1632 } 1634 container interfaces { 1635 description 1636 "Containing a list of interfaces."; 1638 uses interfaces-config-attributes { 1639 if-feature global-interface-config; 1640 } 1641 leaf version { 1642 type uint8 { 1643 range "1..2"; 1644 } 1645 description "MLD version."; 1646 reference "RFC2710,RFC3810."; 1647 } 1648 list interface { 1649 key "interface-name"; 1650 description 1651 "List of MLD interfaces."; 1652 leaf interface-name { 1653 type if:interface-ref; 1654 must "/if:interfaces/if:interface[if:name = current()]/" 1655 + "ip:ipv6" { 1656 description 1657 "The interface must have IPv6 enabled."; 1658 } 1659 description 1660 "Reference to an entry in the global interface 1661 list."; 1662 } 1663 uses interface-config-attributes-mld { 1664 if-feature per-interface-config; 1665 } 1666 } // interface 1667 } // interfaces 1668 } // mld 1669 } // augment 1671 /* 1672 * Operational state data nodes 1673 */ 1674 augment "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol" 1675 { 1676 description 1677 "IGMP augmentation to routing control plane protocol state."; 1679 container igmp { 1680 description 1681 "IGMP operational state data."; 1683 container global { 1684 description 1685 "Global attributes."; 1686 uses global-config-attributes; 1687 uses global-state-attributes; 1688 } 1690 container interfaces { 1691 description 1692 "Containing a list of interfaces."; 1694 uses interfaces-config-attributes { 1695 if-feature global-interface-config; 1696 } 1698 list interface { 1699 key "interface-name"; 1700 description 1701 "List of IGMP interfaces."; 1702 leaf interface-name { 1703 type if:interface-ref; 1704 must "/if:interfaces/if:interface[if:name = current()]/" 1705 + "ip:ipv4" { 1706 description 1707 "The interface must have IPv4 enabled."; 1709 } 1710 description 1711 "Reference to an entry in the global interface 1712 list."; 1713 } 1714 uses interface-config-attributes-igmp { 1715 if-feature per-interface-config; 1716 } 1717 uses interface-state-attributes-igmp; 1718 } // interface 1719 } // interfaces 1720 } // igmp 1721 }//augment 1723 augment "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol" 1724 { 1725 description 1726 "MLD augmentation to routing control plane protocol state."; 1728 container mld { 1729 description 1730 "MLD operational state data."; 1732 container global { 1733 description 1734 "Global attributes."; 1735 uses global-config-attributes; 1736 uses global-state-attributes; 1737 } 1739 container interfaces { 1740 description 1741 "Containing a list of interfaces."; 1743 uses interfaces-config-attributes { 1744 if-feature global-interface-config; 1745 } 1747 list interface { 1748 key "interface-name"; 1749 description 1750 "List of MLD interfaces."; 1751 leaf interface-name { 1752 type if:interface-ref; 1753 must "/if:interfaces/if:interface[if:name = current()]/" 1754 + "ip:ipv6" { 1755 description 1756 "The interface must have IPv6 enabled."; 1757 } 1758 description 1759 "Reference to an entry in the global interface 1760 list."; 1761 } 1762 uses interface-config-attributes-mld { 1763 if-feature per-interface-config; 1764 } 1765 uses interface-state-attributes-mld; 1766 } // interface 1767 } // interfaces 1768 } // mld 1769 } // augment 1771 /* 1772 * RPCs 1773 */ 1774 rpc clear-igmp-groups { 1775 if-feature rpc-clear-groups; 1776 description 1777 "Clears the specified IGMP cache entries."; 1779 input { 1780 leaf interface { 1781 type leafref { 1782 path "/rt:routing/rt:control-plane-protocols" 1783 + "/rt:control-plane-protocol/" 1784 + "igmp/interfaces/interface/" 1785 + "interface-name"; 1786 } 1787 description 1788 "Name of the IGMP interface. 1789 If it is not specified, groups from all interfaces are 1790 cleared."; 1791 } 1792 leaf group { 1793 type inet:ipv4-address; 1794 description 1795 "Multicast group IPv4 address. 1796 If it is not specified, all IGMP group entries are 1797 cleared."; 1798 } 1799 leaf source { 1800 type inet:ipv4-address; 1801 description 1802 "Multicast source IPv4 address. 1803 If it is not specified, all IGMP source-group entries are 1804 cleared."; 1805 } 1806 } 1808 } // rpc clear-igmp-groups 1810 rpc clear-mld-groups { 1811 if-feature rpc-clear-groups; 1812 description 1813 "Clears the specified MLD cache entires."; 1815 input { 1816 leaf interface { 1817 type leafref { 1818 path "/rt:routing/rt:control-plane-protocols" 1819 + "/rt:control-plane-protocol/" 1820 + "mld/interfaces/interface/" 1821 + "interface-name"; 1822 } 1823 description 1824 "Name of the MLD interface. 1825 If it is not specified, groups from all interfaces are 1826 cleared."; 1827 } 1828 leaf group { 1829 type inet:ipv6-address; 1830 description 1831 "Multicast group IPv6 address. 1832 If it is not specified, all MLD group entries are 1833 cleared."; 1834 } 1835 leaf source { 1836 type inet:ipv6-address; 1837 description 1838 "Multicast source IPv6 address. 1839 If it is not specified, all MLD source-group entries are 1840 cleared."; 1841 } 1842 } 1843 } // rpc clear-mld-groups 1845 /* 1846 * Notifications 1847 */ 1848 } 1849 1851 5. Security Considerations 1853 The data model defined does not introduce any security implications. 1854 This document does not change any underlying security issues 1855 inherent in [RFC8022]. 1857 6. IANA Considerations 1859 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1860 actual RFC number (and remove this note). 1862 This document registers the following namespace URIs in the IETF XML 1863 registry [RFC3688]: 1865 -------------------------------------------------------------------- 1867 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1869 Registrant Contact: The IESG. 1871 XML: N/A, the requested URI is an XML namespace. 1873 -------------------------------------------------------------------- 1875 This document registers the following YANG modules in the YANG Module 1876 Names registry [RFC7950]: 1878 -------------------------------------------------------------------- 1880 name: ietf-igmp-mld 1882 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1884 prefix: igmp-mld 1886 reference: RFC XXXX 1888 -------------------------------------------------------------------- 1890 7. References 1892 7.1. Normative References 1894 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1895 Requirement Levels", BCP 14, RFC 2119, March 1997. 1897 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1898 the Network Configuration Protocol (NETCONF)", RFC 6020, 1899 October 2010 1901 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1902 and A. Bierman, Ed., "Network Configuration Protocol 1903 (NETCONF)", RFC 6241, June 2011 1905 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1906 RFC 7950, August 2016 1908 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1909 Management", RFC 8022, November 2016 1911 7.2. Informative References 1913 [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, 1914 RFC 1112, August 1989. 1916 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 1917 2", RFC 2236, November 1997. 1919 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 1920 Listener Discovery (MLD) for IPv6", RFC 2710, October 1921 1999. 1923 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 1924 Thyagarajan, "Internet Group Management Protocol, Version 1925 3", RFC 3376, October 2002. 1927 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 1928 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 1930 [RFC4541] M. Christensen, K. Kimball and F. Solensky, 1931 "Considerations for Internet Group Management Protocol 1932 (IGMP) and Multicast Listener Discovery (MLD) Snooping 1933 Switches", RFC 4541, May 2006. 1935 [RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet 1936 Group Management Protocol (IGMP) / Multicast Listener 1937 Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD 1938 Proxying")", RFC 4605, August 2006. 1940 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 1941 Data Model Documents", RFC 6087, January 2011 1943 [I-D.ietf-netmod-rfc6087bis] Bierman, A., "Guidelines for Authors 1944 and Reviewers of YANG Data Model Documents", draft-ietf- 1945 netmod-rfc6087bis-12(work in progress), March 2017. 1947 8. Acknowledgments 1949 The authors would like to thank Steve Baillargeon, Hu Fangwei, 1950 Robert Kebler, Tanmoy Kundu, Liu Yisong, and Stig Venaas for their 1951 valuable contributions. 1953 Authors' Addresses 1955 Xufeng Liu 1956 Jabil 1957 8281 Greensboro Drive, Suite 200 1958 McLean VA 22102 1959 USA 1961 EMail: Xufeng_Liu@jabil.com 1963 Feng Guo 1964 Huawei 1965 Huawei Bld., No.156 Beiqing Rd. 1966 Beijing 100095 1967 China 1969 Email: guofeng@huawei.com 1971 Mahesh Sivakumar 1972 Cisco Systems, Inc. 1973 510 McCarthy Boulevard 1974 Milpitas, California 95035 1975 USA 1977 Email: masivaku@cisco.com 1979 Pete McAllister 1980 Metaswitch Networks 1981 100 Church Street 1982 Enfield EN2 6BQ 1983 UK 1985 EMail: pete.mcallister@metaswitch.com 1987 Anish Peter 1988 Individual 1990 EMail: anish.ietf@gmail.com