idnits 2.17.1 draft-ietf-pim-igmp-mld-yang-15.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 430 has weird spacing: '...-policy str...' == Line 450 has weird spacing: '...address ine...' == Line 459 has weird spacing: '...er-mode enu...' == Line 565 has weird spacing: '...-policy str...' == Line 585 has weird spacing: '...address ine...' == (1 more instance...) -- The document date (June 14, 2019) is 1772 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) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 7 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 PIM Working Group X. Liu 2 Internet-Draft Volta Networks 3 Intended Status: Standard Track F. Guo 4 Expires: December 14, 2019 Huawei 5 M. Sivakumar 6 Juniper 7 P. McAllister 8 Metaswitch Networks 9 A. Peter 10 Individual 11 June 14, 2019 13 A YANG Data Model for Internet Group Management Protocol (IGMP) and 14 Multicast Listener Discovery (MLD) 15 draft-ietf-pim-igmp-mld-yang-15 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 14, 2019. 40 Copyright Notice 42 Copyright (c) 2019 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 Conventions used in this document 63 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 64 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 65 "OPTIONAL" in this document are to be interpreted as described in 66 BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all 67 capitals, as shown here. 69 Table of Contents 71 1. Introduction...................................................3 72 1.1. Terminology...............................................3 73 1.2. Tree Diagrams.............................................4 74 1.3. Prefixes in Data Node Names...............................4 75 2. Design of Data model...........................................4 76 2.1. Scope of Model............................................4 77 2.1.1. Parameters Not Covered at Global Level..................5 78 2.1.2. Parameters Not Covered at Interface Level...............5 79 2.2. Optional Capabilities.....................................6 80 2.3. Position of Address Family in Hierarchy...................6 81 3. Module Structure...............................................7 82 3.1. IGMP Configuration and Operational State..................7 83 3.2. MLD Configuration and Operational State..................10 84 3.3. IGMP and MLD Actions.....................................13 85 4. IGMP and MLD YANG Module......................................13 86 5. Security Considerations.......................................43 87 6. IANA Considerations...........................................45 88 7. Acknowledgments...............................................46 89 8. Contributing Authors..........................................46 90 9. References....................................................46 91 9.1. Normative References.....................................46 92 9.2. Informative References...................................48 94 1. Introduction 96 YANG [RFC6020] [RFC7950] is a data definition language that was 97 introduced to model the configuration and running state of a device 98 managed using network management protocols such as NETCONF [RFC6241] 99 or RESTCONF [RFC8040]. YANG is now also being used as a component of 100 wider management interfaces, such as command line interfaces (CLIs). 102 This document defines a YANG data model that can be used to 103 configure and manage Internet Group Management Protocol (IGMP) and 104 Multicast Listener Discovery (MLD) devices. The protocol versions 105 include IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 [RFC3376], MLDv1 106 [RFC2710], and MLDv2 [RFC3810]. The core features of the IGMP and 107 MLD protocols are defined as required. Non-core features are 108 defined as optional in the provided data model. 110 The YANG model in this document conforms to the Network Management 111 Datastore Architecture (NMDA) [RFC8342]. 113 1.1. Terminology 115 The terminology for describing YANG data models is found in 116 [RFC6020] and [RFC7950], including: 118 o augment 120 o data model 122 o data node 124 o identity 126 o module 128 The following abbreviations are used in this document and the 129 defined model: 131 IGMP: 133 Internet Group Management Protocol [RFC3376]. 135 MLD: 137 Multicast Listener Discovery [RFC3810]. 139 SSM: 141 Source-Specific Multicast service model [RFC3569] [RFC4607]. 143 1.2. Tree Diagrams 145 Tree diagrams used in this document follow the notation defined in 146 [RFC8340]. 148 1.3. Prefixes in Data Node Names 150 In this document, names of data nodes, actions, and other data model 151 objects are often used without a prefix, as long as it is clear from 152 the context in which YANG module each name is defined. Otherwise, 153 names are prefixed using the standard prefix associated with the 154 corresponding YANG module, as shown in Table 1. 156 +-----------+--------------------------+---------------------+ 157 | Prefix | YANG module | Reference | 158 +-----------+--------------------------+---------------------+ 159 | yang | ietf-yang-types | [RFC6991] | 160 | inet | ietf-inet-types | [RFC6991] | 161 | if | ietf-interfaces | [RFC8343] | 162 | ip | ietf-ip | [RFC8344] | 163 | rt | ietf-routing | [RFC8349] | 164 | rt-types | ietf-routing-types | [RFC8294] | 165 | acl | ietf-access-control-list | [RFC8519] | 166 +-----------+--------------------------+---------------------+ 168 Table 1: Prefixes and Corresponding YANG Modules 170 2. Design of Data model 172 2.1. Scope of Model 174 The model covers IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 175 [RFC3376], MLDv1 [RFC2710], and MLDv2 [RFC3810]. 177 This model does not cover other IGMP and MLD related protocols such 178 as IGMP/MLD Proxy [RFC4605] or IGMP/MLD Snooping [RFC4541] etc., 179 which will be specified in separate documents. 181 This model can be used to configure and manage various versions of 182 IGMP and MLD protocols. The operational state data and statistics 183 can be retrieved by this model. Even though no protocol specific 184 notifications are defined in this model, the subscription and push 185 mechanism defined in [I-D.ietf-netconf-subscribed-notifications] and 186 [I-D.ietf-netconf-yang-push] can be used by the user to subscribe to 187 notifications on the data nodes in this model. 189 The model contains all the basic configuration parameters to operate 190 the protocols listed above. Depending on the implementation choices, 191 some systems may not allow some of the advanced parameters to be 192 configurable. The occasionally implemented parameters are modeled as 193 optional features in this model, while the rarely implemented 194 parameters are not included this model and left for augmentation. 195 This model can be extended, and has been structured in a way that 196 such extensions can be conveniently made. 198 The protocol parameters covered in this model can been seen from the 199 model structure described in Section 3. 201 The protocol parameters that were considered but are not covered in 202 this model are described in the following sections. 204 2.1.1. Parameters Not Covered at Global Level 206 The configuration parameters and operational states not covered on 207 an IGMP instance or an MLD instance are: 209 o Explicit tracking 211 o Maximum transmit rate 213 o Last member query count 215 o Other querier present time 217 o Send router alert 219 o Startup query interval 221 o Startup query count 223 2.1.2. Parameters Not Covered at Interface Level 225 The configuration parameters and operational states not covered on 226 an IGMP interface or an MLD interface are: 228 o Disable router alert check 230 o Drop IGMP version 1, IGMP version 2, or MLD version 1 232 o Last member query count 234 o Maximum number of sources 236 o Other querier present time 238 o Passive mode 240 o Promiscuous mode 241 o Query before immediate leave 243 o Send router alert 245 2.2. Optional Capabilities 247 This model is designed to represent the capabilities of IGMP and MLD 248 devices with various specifications, including the basic capability 249 subsets of the IGMP and MLD protocols. The main design goals of 250 this document are that the basic capabilities described in the model 251 are supported by any major now-existing implementation, and that the 252 configuration of all implementations meeting the specifications is 253 easy to express through some combination of the optional features in 254 the model and simple vendor augmentations. 256 There is also value in widely-supported features being standardized, 257 to provide a standardized way to access these features, to save work 258 for individual vendors, and so that mapping between different 259 vendors' configuration is not needlessly complicated. Therefore this 260 model declares a number of features representing capabilities that 261 not all deployed devices support. 263 The extensive use of feature declarations should also substantially 264 simplify the capability negotiation process for a vendor's IGMP and 265 MLD implementations. 267 On the other hand, operational state parameters are not so widely 268 designated as features, as there are many cases where the defaulting 269 of an operational state parameter would not cause any harm to the 270 system, and it is much more likely that an implementation without 271 native support for a piece of operational state would be able to 272 derive a suitable value for a state variable that is not natively 273 supported. 275 2.3. Position of Address Family in Hierarchy 277 The protocol IGMP only supports IPv4, while the protocol MLD only 278 supports IPv6. The data model defined in this document can be used 279 for both IPv4 and IPv6 address families. 281 This document defines IGMP and MLD as separate schema branches in 282 the structure. The benefits are: 284 o The model can support IGMP (IPv4), MLD (IPv6), or both 285 optionally and independently. Such flexibility cannot be 286 achieved cleanly with a combined branch. 288 o The structure is consistent with other YANG models such as RFC 289 8344, which uses separate branches for IPv4 and IPv6. 291 o The separate branches for IGMP and MLD can accommodate their 292 differences better and cleaner. The two branches can better 293 support different features and node types. 295 3. Module Structure 297 This model augments the core routing data model specified in 298 [RFC8349]. 300 +--rw routing 301 +--rw router-id? 302 +--rw control-plane-protocols 303 | +--rw control-plane-protocol* [type name] 304 | +--rw type 305 | +--rw name 306 | +--rw igmp <= Augmented by this Model 307 ... 308 | +--rw mld <= Augmented by this Model 309 ... 311 The "igmp" container instantiates an IGMP protocol of version 312 IGMPv1, IGMPv2, or IGMPv3. The "mld" container instantiates an MLD 313 protocol of version MLDv1 or MLDv2. 315 The YANG data model defined in this document conforms to the Network 316 Management Datastore Architecture (NMDA) [RFC8342]. The operational 317 state data is combined with the associated configuration data in the 318 same hierarchy [RFC8407]. 320 A configuration data node is marked as mandatory only when its value 321 must be provided by the user. Where nodes are not essential to 322 protocol operation, they are marked as optional. Some other nodes 323 are essential but have a default specified, so that they are also 324 optional and need not be configured explicitly. 326 3.1. IGMP Configuration and Operational State 328 The IGMP data is modeled as a schema subtree augmenting the 329 "control-plane-protocol" data node under "/rt:routing/rt:control- 330 plane-protocols" in the module ietf-routing, following the 331 convention described in [RFC8349]. The augmentation to the module 332 ietf-routing allows this model to support multiple instances of 333 IGMP, but a restriction MAY be added depending on the implementation 334 and the device. The identity "igmp" is derived from the "rt:control- 335 plane-protocol" base identity and indicates that a control-plane- 336 protocol instance is IGMP. 338 The IGMP subtree is a three-level hierarchy structure as listed 339 below: 341 Global level: Including IGMP configuration and operational state 342 attributes for the entire IGMP protocol instance in this router. 344 Interface-global level: Including configuration data nodes that 345 are applicable to all the interfaces whose corresponding nodes are 346 not defined or not configured at the interface level. For such a 347 node at the interface level, the system uses the same value of the 348 corresponding node at the interface-global level. 350 Interface level: Including IGMP configuration and operational 351 state attributes specific to the given interface. For a 352 configuration node at the interface level, there may exist a 353 corresponding configuration node with the same name at the 354 interface-global level. The value configured on a node at the 355 interface level overrides the value configured on the corresponding 356 node at the interface-global level. 358 augment /rt:routing/rt:control-plane-protocols 359 /rt:control-plane-protocol: 360 +--rw igmp {feature-igmp}? 361 +--rw global 362 | +--rw enable? boolean {global-admin-enable}? 363 | +--rw max-entries? uint32 {global-max-entries}? 364 | +--rw max-groups? uint32 {global-max-groups}? 365 | +--ro entries-count? uint32 366 | +--ro groups-count? uint32 367 | +--ro statistics 368 | +--ro discontinuity-time? yang:date-and-time 369 | +--ro error 370 | | +--ro total? yang:counter64 371 | | +--ro query? yang:counter64 372 | | +--ro report? yang:counter64 373 | | +--ro leave? yang:counter64 374 | | +--ro checksum? yang:counter64 375 | | +--ro too-short? yang:counter64 376 | +--ro received 377 | | +--ro total? yang:counter64 378 | | +--ro query? yang:counter64 379 | | +--ro report? yang:counter64 380 | | +--ro leave? yang:counter64 381 | +--ro sent 382 | +--ro total? yang:counter64 383 | +--ro query? yang:counter64 384 | +--ro report? yang:counter64 385 | +--ro leave? yang:counter64 386 +--rw interfaces 387 +--rw last-member-query-interval? uint16 388 +--rw query-interval? uint16 389 +--rw query-max-response-time? uint16 390 +--rw require-router-alert? boolean 391 | {intf-require-router-alert}? 392 +--rw robustness-variable? uint8 393 +--rw version? uint8 394 +--rw max-groups-per-interface? uint32 395 | {intf-max-groups}? 396 +--rw interface* [interface-name] 397 +--rw interface-name if:interface-ref 398 +--rw last-member-query-interval? uint16 399 +--rw query-interval? uint16 400 +--rw query-max-response-time? uint16 401 +--rw require-router-alert? boolean 402 | {intf-require-router-alert}? 403 +--rw robustness-variable? uint8 404 +--rw version? uint8 405 +--rw enable? boolean 406 | {intf-admin-enable}? 407 +--rw group-policy? 408 | -> /acl:acls/acl/name 409 +--rw immediate-leave? empty 410 | {intf-immediate-leave}? 411 +--rw max-groups? uint32 412 | {intf-max-groups}? 413 +--rw max-group-sources? uint32 414 | {intf-max-group-sources}? 415 +--rw source-policy? 416 | -> /acl:acls/acl/name {intf-source-policy}? 417 +--rw verify-source-subnet? empty 418 | {intf-verify-source-subnet}? 419 +--rw explicit-tracking? empty 420 | {intf-explicit-tracking}? 421 +--rw exclude-lite? empty 422 | {intf-exclude-lite}? 423 +--rw join-group* 424 | rt-types:ipv4-multicast-group-address 425 | {intf-join-group}? 426 +--rw ssm-map* 427 | | [ssm-map-source-addr ssm-map-group-policy] 428 | | {intf-ssm-map}? 429 | +--rw ssm-map-source-addr ssm-map-ipv4-addr-type 430 | +--rw ssm-map-group-policy string 431 +--rw static-group* [group-addr source-addr] 432 | | {intf-static-group}? 433 | +--rw group-addr 434 | | rt-types:ipv4-multicast-group-address 435 | +--rw source-addr 436 | rt-types:ipv4-multicast-source-address 437 +--ro oper-status enumeration 438 +--ro querier inet:ipv4-address 439 +--ro joined-group* 440 | rt-types:ipv4-multicast-group-address 441 | {intf-join-group}? 442 +--ro group* [group-address] 443 +--ro group-address 444 | rt-types:ipv4-multicast-group-address 445 +--ro expire uint32 446 +--ro filter-mode enumeration 447 +--ro up-time uint32 448 +--ro last-reporter? inet:ipv4-address 449 +--ro source* [source-address] 450 +--ro source-address inet:ipv4-address 451 +--ro expire uint32 452 +--ro up-time uint32 453 +--ro host-count? uint32 454 | {intf-explicit-tracking}? 455 +--ro last-reporter? inet:ipv4-address 456 +--ro host* [host-address] 457 | {intf-explicit-tracking}? 458 +--ro host-address inet:ipv4-address 459 +--ro host-filter-mode enumeration 461 3.2. MLD Configuration and Operational State 463 The MLD data is modeled as a schema subtree augmenting the "control- 464 plane-protocol" data node under "/rt:routing/rt:control-plane- 465 protocols" in the module ietf-routing, following the convention 466 described in [RFC8349]. The augmentation to the module ietf-routing 467 allows this model to support multiple instances of MLD, but a 468 restriction MAY be added depending on the implementation and the 469 device. The identity "mld" is derived from the "rt:control-plane- 470 protocol" base identity and indicates that a control-plane-protocol 471 instance is MLD. 473 The MLD subtree is a three-level hierarchy structure as listed 474 below: 476 Global level: Including MLD configuration and operational state 477 attributes for the entire MLD protocol instance in this router. 479 Interface-global level: Including configuration data nodes that 480 are applicable to all the interfaces whose corresponding nodes are 481 not defined or not configured at the interface level. For such a 482 node at the interface level, the system uses the same value of the 483 corresponding node at the interface-global level. 485 Interface level: Including MLD configuration and operational 486 state attributes specific to the given interface. For a 487 configuration node at the interface level, there may exist a 488 corresponding configuration node with the same name at the 489 interface-global level. The value configured on a node at the 490 interface level overrides the value configured on the corresponding 491 node at the interface-global level. 493 augment /rt:routing/rt:control-plane-protocols 494 /rt:control-plane-protocol: 495 +--rw mld {feature-mld}? 496 +--rw global 497 | +--rw enable? boolean {global-admin-enable}? 498 | +--rw max-entries? uint32 {global-max-entries}? 499 | +--rw max-groups? uint32 {global-max-groups}? 500 | +--ro entries-count? uint32 501 | +--ro groups-count? uint32 502 | +--ro statistics 503 | +--ro discontinuity-time? yang:date-and-time 504 | +--ro error 505 | | +--ro total? yang:counter64 506 | | +--ro query? yang:counter64 507 | | +--ro report? yang:counter64 508 | | +--ro leave? yang:counter64 509 | | +--ro checksum? yang:counter64 510 | | +--ro too-short? yang:counter64 511 | +--ro received 512 | | +--ro total? yang:counter64 513 | | +--ro query? yang:counter64 514 | | +--ro report? yang:counter64 515 | | +--ro leave? yang:counter64 516 | +--ro sent 517 | +--ro total? yang:counter64 518 | +--ro query? yang:counter64 519 | +--ro report? yang:counter64 520 | +--ro leave? yang:counter64 521 +--rw interfaces 522 +--rw last-member-query-interval? uint16 523 +--rw query-interval? uint16 524 +--rw query-max-response-time? uint16 525 +--rw require-router-alert? boolean 526 | {intf-require-router-alert}? 527 +--rw robustness-variable? uint8 528 +--rw version? uint8 529 +--rw max-groups-per-interface? uint32 530 | {intf-max-groups}? 531 +--rw interface* [interface-name] 532 +--rw interface-name if:interface-ref 533 +--rw last-member-query-interval? uint16 534 +--rw query-interval? uint16 535 +--rw query-max-response-time? uint16 536 +--rw require-router-alert? boolean 537 | {intf-require-router-alert}? 538 +--rw robustness-variable? uint8 539 +--rw version? uint8 540 +--rw enable? boolean 541 | {intf-admin-enable}? 542 +--rw group-policy? 543 | -> /acl:acls/acl/name 544 +--rw immediate-leave? empty 545 | {intf-immediate-leave}? 546 +--rw max-groups? uint32 547 | {intf-max-groups}? 548 +--rw max-group-sources? uint32 549 | {intf-max-group-sources}? 550 +--rw source-policy? 551 | -> /acl:acls/acl/name {intf-source-policy}? 552 +--rw verify-source-subnet? empty 553 | {intf-verify-source-subnet}? 554 +--rw explicit-tracking? empty 555 | {intf-explicit-tracking}? 556 +--rw exclude-lite? empty 557 | {intf-exclude-lite}? 558 +--rw join-group* 559 | rt-types:ipv6-multicast-group-address 560 | {intf-join-group}? 561 +--rw ssm-map* 562 | | [ssm-map-source-addr ssm-map-group-policy] 563 | | {intf-ssm-map}? 564 | +--rw ssm-map-source-addr ssm-map-ipv6-addr-type 565 | +--rw ssm-map-group-policy string 566 +--rw static-group* [group-addr source-addr] 567 | | {intf-static-group}? 568 | +--rw group-addr 569 | | rt-types:ipv6-multicast-group-address 570 | +--rw source-addr 571 | rt-types:ipv6-multicast-source-address 572 +--ro oper-status enumeration 573 +--ro querier inet:ipv6-address 574 +--ro joined-group* 575 | rt-types:ipv6-multicast-group-address 576 | {intf-join-group}? 577 +--ro group* [group-address] 578 +--ro group-address 579 | rt-types:ipv6-multicast-group-address 580 +--ro expire uint32 581 +--ro filter-mode enumeration 582 +--ro up-time uint32 583 +--ro last-reporter? inet:ipv6-address 584 +--ro source* [source-address] 585 +--ro source-address inet:ipv6-address 586 +--ro expire uint32 587 +--ro up-time uint32 588 +--ro host-count? uint32 589 | {intf-explicit-tracking}? 590 +--ro last-reporter? inet:ipv6-address 591 +--ro host* [host-address] 592 | {intf-explicit-tracking}? 593 +--ro host-address inet:ipv6-address 594 +--ro host-filter-mode enumeration 596 3.3. IGMP and MLD Actions 598 IGMP and MLD each have one action which clears the group membership 599 cache entries for that protocol. 601 augment /rt:routing/rt:control-plane-protocols 602 /rt:control-plane-protocol: 603 +--rw igmp {feature-igmp}? 604 +---x clear-groups {action-clear-groups}? 605 +---w input 606 +---w (interface) 607 | +--:(name) 608 | | +---w interface-name? leafref 609 | +--:(all) 610 | +---w all-interfaces? empty 611 +---w group-address union 612 +---w source-address 613 rt-types:ipv4-multicast-source-address 615 augment /rt:routing/rt:control-plane-protocols 616 /rt:control-plane-protocol: 617 +--rw mld {feature-mld}? 618 +---x clear-groups {action-clear-groups}? 619 +---w input 620 +---w (interface) 621 | +--:(name) 622 | | +---w interface-name? leafref 623 | +--:(all) 624 | +---w all-interfaces? empty 625 +---w group-address? union 626 +---w source-address? 627 rt-types:ipv6-multicast-source-address 629 4. IGMP and MLD YANG Module 631 This module references [RFC1112], [RFC2236], [RFC2710], [RFC3376], 632 [RFC3810], [RFC5790], [RFC6636], [RFC6991], [RFC8294], [RFC8343], 633 [RFC8344], [RFC8349], and [RFC8519]. 635 file "ietf-igmp-mld@2019-06-12.yang" 636 module ietf-igmp-mld { 637 yang-version 1.1; 638 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; 639 prefix igmp-mld; 641 import ietf-inet-types { 642 prefix "inet"; 643 reference "RFC 6991: Common YANG Data Types"; 644 } 646 import ietf-yang-types { 647 prefix "yang"; 648 reference "RFC 6991: Common YANG Data Types"; 649 } 651 import ietf-routing-types { 652 prefix "rt-types"; 653 reference 654 "RFC 8294: Common YANG Data Types for the Routing Area"; 655 } 657 import ietf-access-control-list { 658 prefix "acl"; 659 reference 660 "RFC 8519: YANG Data Model for Network Access Control Lists 661 (ACLs)"; 662 } 664 import ietf-routing { 665 prefix "rt"; 666 reference 667 "RFC 8349: A YANG Data Model for Routing Management (NMDA 668 Version)"; 669 } 671 import ietf-interfaces { 672 prefix "if"; 673 reference "RFC 8343: A YANG Data Model for Interface Management"; 674 } 676 import ietf-ip { 677 prefix ip; 678 reference "RFC 8344: A YANG Data Model for IP Management"; 679 } 681 organization 682 "IETF PIM Working Group"; 684 contact 685 "WG Web: 686 WG List: 688 Editor: Xufeng Liu 689 691 Editor: Feng Guo 692 694 Editor: Mahesh Sivakumar 695 697 Editor: Pete McAllister 698 700 Editor: Anish Peter 701 "; 703 description 704 "The module defines the configuration and operational state for 705 the Internet Group Management Protocol (IGMP) and Multicast 706 Listener Discovery (MLD) protocols. 708 Copyright (c) 2019 IETF Trust and the persons identified as 709 authors of the code. All rights reserved. 711 Redistribution and use in source and binary forms, with or 712 without modification, is permitted pursuant to, and subject to 713 the license terms contained in, the Simplified BSD License set 714 forth in Section 4.c of the IETF Trust's Legal Provisions 715 Relating to IETF Documents 716 (http://trustee.ietf.org/license-info). 718 This version of this YANG module is part of RFC XXXX; see the 719 RFC itself for full legal notices."; 721 // RFC Ed.: replace XXXX with actual RFC number and remove 722 // this note 723 revision 2019-06-12 { 724 description 725 "Initial revision."; 726 reference 727 "RFC XXXX: A YANG Data Model for IGMP and MLD"; 728 } 730 /* 731 * Features 732 */ 734 feature feature-igmp { 735 description 736 "Support IGMP protocol for IPv4 group membership record."; 737 } 739 feature feature-mld { 740 description 741 "Support MLD protocol for IPv6 group membership record."; 742 } 744 feature global-admin-enable { 745 description 746 "Support global configuration to enable or disable protocol."; 747 } 749 feature global-max-entries { 750 description 751 "Support configuration of global max-entries."; 752 } 754 feature global-max-groups { 755 description 756 "Support configuration of global max-groups."; 757 } 759 feature interface-global-config { 760 description 761 "Support global configuration applied for all interfaces."; 762 } 764 feature intf-admin-enable { 765 description 766 "Support configuration of interface administrative enabling."; 767 } 769 feature intf-immediate-leave { 770 description 771 "Support configuration of interface immediate-leave."; 772 } 774 feature intf-join-group { 775 description 776 "Support configuration of interface join-group."; 777 } 779 feature intf-max-groups { 780 description 781 "Support configuration of interface max-groups."; 782 } 783 feature intf-max-group-sources { 784 description 785 "Support configuration of interface max-group-sources."; 786 } 788 feature intf-require-router-alert { 789 description 790 "Support configuration of interface require-router-alert."; 791 } 793 feature intf-source-policy { 794 description 795 "Support configuration of interface source policy."; 796 } 798 feature intf-ssm-map { 799 description 800 "Support configuration of interface ssm-map."; 801 } 803 feature intf-static-group { 804 description 805 "Support configuration of interface static-group."; 806 } 808 feature intf-verify-source-subnet { 809 description 810 "Support configuration of interface verify-source-subnet."; 811 } 813 feature intf-explicit-tracking { 814 description 815 "Support configuration of interface explicit-tracking hosts."; 816 } 818 feature intf-lite-exclude-filter { 819 description 820 "Support configuration of interface lite-exclude-filter."; 821 } 823 feature per-interface-config { 824 description 825 "Support per interface configuration."; 826 } 828 feature action-clear-groups { 829 description 830 "Support actions to clear groups."; 832 } 834 /* 835 * Typedefs 836 */ 837 typedef ssm-map-ipv4-addr-type { 838 type union { 839 type enumeration { 840 enum 'policy' { 841 description 842 "Source address is specified in SSM map policy."; 843 } 844 } 845 type inet:ipv4-address; 846 } 847 description 848 "Multicast source IP address type for SSM map."; 849 } // source-ipv4-addr-type 851 typedef ssm-map-ipv6-addr-type { 852 type union { 853 type enumeration { 854 enum 'policy' { 855 description 856 "Source address is specified in SSM map policy."; 857 } 858 } 859 type inet:ipv6-address; 860 } 861 description 862 "Multicast source IP address type for SSM map."; 863 } // source-ipv6-addr-type 865 /* 866 * Identities 867 */ 868 identity igmp { 869 base "rt:control-plane-protocol"; 870 description "IGMP protocol."; 871 reference 872 "RFC 3376: Internet Group Management Protocol, Version 3."; 873 } 875 identity mld { 876 base "rt:control-plane-protocol"; 877 description "MLD protocol."; 878 reference 879 "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for 880 IPv6."; 882 } 884 /* 885 * Groupings 886 */ 887 grouping global-config-attributes { 888 description 889 "This grouping is used in either IGMP schema or MLD schema. 890 When used in IGMP schema, this grouping contains the global 891 configuration for IGMP; 892 when used in MLD schema, this grouping contains the global 893 configuration for MLD."; 895 leaf enable { 896 if-feature global-admin-enable; 897 type boolean; 898 default true; 899 description 900 "When this grouping is used for IGMP, this leaf indicates 901 whether IGMP is enabled ('true') or disabled ('false') 902 in the routing instance. 903 When this grouping is used for MLD, this leaf indicates 904 whether MLD is enabled ('true') or disabled ('false') 905 in the routing instance."; 906 } 907 leaf max-entries { 908 if-feature global-max-entries; 909 type uint32; 910 description 911 "When this grouping is used for IGMP, this leaf indicates 912 the maximum number of entries in the IGMP instance. 913 When this grouping is used for MLD, this leaf indicates 914 the maximum number of entries in the MLD instance. 915 If this leaf is not specified, the number of entries is not 916 limited."; 917 } 918 leaf max-groups { 919 if-feature global-max-groups; 920 type uint32; 921 description 922 "When this grouping is used for IGMP, this leaf indicates 923 the maximum number of groups in the IGMP instance. 924 When this grouping is used for MLD, this leaf indicates 925 the maximum number of groups in the MLD instance. 926 If this leaf is not specified, the number of groups is not 927 limited."; 928 } 929 } // global-config-attributes 930 grouping global-state-attributes { 931 description 932 "This grouping is used in either IGMP schema or MLD schema. 933 When used in IGMP schema, this grouping contains the global 934 IGMP state attributes; 935 when used in MLD schema, this grouping contains the global 936 MLD state attributes;"; 938 leaf entries-count { 939 type uint32; 940 config false; 941 description 942 "When this grouping is used for IGMP, this leaf indicates 943 the number of entries in the IGMP instance. 944 When this grouping is used for MLD, this leaf indicates 945 the number of entries in the MLD instance."; 946 } 947 leaf groups-count { 948 type uint32; 949 config false; 950 description 951 "When this grouping is used for IGMP, this leaf indicates 952 the number of existing groups in the IGMP instance. 953 When this grouping is used for MLD, this leaf indicates 954 the number of existing groups in the MLD instance."; 955 } 957 container statistics { 958 config false; 959 description 960 "When this grouping is used for IGMP, this container contains 961 the statistics for the IGMP instance. 962 When this grouping is used for MLD, this leaf indicates 963 the statistics for the MLD instance."; 965 leaf discontinuity-time { 966 type yang:date-and-time; 967 description 968 "The time on the most recent occasion at which any one 969 or more of the statistic counters suffered a 970 discontinuity. If no such discontinuities have occurred 971 since the last re-initialization of the local 972 management subsystem, then this node contains the time 973 the local management subsystem re-initialized itself."; 974 } 975 container error { 976 description "Statistics of errors."; 977 uses global-statistics-error; 978 } 979 container received { 980 description "Statistics of received messages."; 981 uses global-statistics-sent-received; 982 } 983 container sent { 984 description "Statistics of sent messages."; 985 uses global-statistics-sent-received; 986 } 987 } // statistics 988 } // global-state-attributes 990 grouping global-statistics-error { 991 description 992 "A grouping defining statistics attributes for errors."; 994 uses global-statistics-sent-received; 995 leaf checksum { 996 type yang:counter64; 997 description 998 "The number of checksum errors."; 999 } 1000 leaf too-short { 1001 type yang:counter64; 1002 description 1003 "The number of messages that are too short."; 1004 } 1005 } // global-statistics-error 1007 grouping global-statistics-sent-received { 1008 description 1009 "A grouping defining statistics attributes."; 1011 leaf total { 1012 type yang:counter64; 1013 description 1014 "The number of total messages."; 1015 } 1016 leaf query { 1017 type yang:counter64; 1018 description 1019 "The number of query messages."; 1020 } 1021 leaf report { 1022 type yang:counter64; 1023 description 1024 "The number of report messages."; 1025 } 1026 leaf leave { 1027 type yang:counter64; 1028 description 1029 "The number of leave messages."; 1030 } 1031 } // global-statistics-sent-received 1033 grouping interface-global-config-attributes { 1034 description 1035 "Configuration attributes applied to the interface-global level 1036 whose per interface attributes are not configured."; 1038 leaf max-groups-per-interface { 1039 if-feature intf-max-groups; 1040 type uint32; 1041 description 1042 "The maximum number of groups associated with each interface. 1043 If this leaf is not specified, the number of groups is not 1044 limited."; 1045 } 1046 } //interface-global-config-attributes 1048 grouping interface-common-config-attributes { 1049 description 1050 "Configuration attributes applied to both the interface-global 1051 level and interface level."; 1053 leaf last-member-query-interval { 1054 type uint16 { 1055 range "1..1023"; 1056 } 1057 units seconds; 1058 description 1059 "When used in IGMP schema, this leaf indicates the Last 1060 Member Query Interval, which may be tuned to modify the 1061 leave latency of the network; 1062 when used in MLD schema, this leaf indicates the Last 1063 Listener Query Interval, which may be tuned to modify the 1064 leave latency of the network. 1065 This leaf is not applicable for version 1 of the IGMP. For 1066 version 2 and version 3 of the IGMP, and for all versions of 1067 the MLD, the default value of this leaf is 1. 1068 This leaf may be configured at the interface level or the 1069 interface-global level, with precedence given to the value 1070 at the interface level. If the leaf is not configured at 1071 either level, the default value is used."; 1072 reference 1073 "RFC 2236. Sec. 8.8. RFC 3376. Sec. 8.8. 1074 RFC 2710. Sec. 7.8. RFC 3810. Sec. 9.8."; 1075 } 1076 leaf query-interval { 1077 type uint16 { 1078 range "1..31744"; 1079 } 1080 units seconds; 1081 description 1082 "The Query Interval is the interval between General Queries 1083 sent by the Querier. In RFC 3376, the Querier's Query 1084 Interval(QQI) is represented from the Querier's Query 1085 Interval Code in query message as follows: 1086 If QQIC < 128, QQI = QQIC. 1087 If QQIC >= 128, QQIC represents a floating-point value as 1088 follows: 1089 0 1 2 3 4 5 6 7 1090 +-+-+-+-+-+-+-+-+ 1091 |1| exp | mant | 1092 +-+-+-+-+-+-+-+-+ 1093 QQI = (mant | 0x10) << (exp + 3). 1094 The maximum value of QQI is 31744. 1095 The default value is 125. 1096 This leaf may be configured at the interface level or the 1097 interface-global level, with precedence given to the value 1098 at the interface level. If the leaf is not configured at 1099 either level, the default value is used."; 1100 reference "RFC 3376. Sec. 4.1.7, 8.2, 8.14.2."; 1101 } 1102 leaf query-max-response-time { 1103 type uint16 { 1104 range "1..1023"; 1105 } 1106 units seconds; 1107 description 1108 "Query maximum response time specifies the maximum time 1109 allowed before sending a responding report. 1110 The default value is 10. 1111 This leaf may be configured at the interface level or the 1112 interface-global level, with precedence given to the value 1113 at the interface level. If the leaf is not configured at 1114 either level, the default value is used."; 1115 reference "RFC 3376. Sec. 4.1.1, 8.3, 8.14.3."; 1116 } 1117 leaf require-router-alert { 1118 if-feature intf-require-router-alert; 1119 type boolean; 1120 description 1121 "Protocol packets should contain router alert IP option. 1122 When this leaf is not configured, the server uses the 1123 following rules to determine the operational value of this 1124 leaf: 1125 if this grouping is used in IGMP schema and the value of the 1126 leaf 'version' is 1, the value 'false' is operationally used 1127 by the server; 1128 if this grouping is used in IGMP schema and the value of the 1129 leaf 'version' is 2 or 3, the value 'true' is operationally 1130 used by the server; 1131 if this grouping is used in MLD schema, the value 'true' is 1132 operationally used by the server. 1133 This leaf may be configured at the interface level or the 1134 interface-global level, with precedence given to the value 1135 at the interface level. If the leaf is not configured at 1136 either level, the default value is used."; 1137 } 1138 leaf robustness-variable { 1139 type uint8 { 1140 range "1..7"; 1141 } 1142 description 1143 "Querier's Robustness Variable allows tuning for the 1144 expected packet loss on a network. 1145 The default value is 2. 1146 This leaf may be configured at the interface level or the 1147 interface-global level, with precedence given to the value 1148 at the interface level. If the leaf is not configured at 1149 either level, the default value is used."; 1150 reference "RFC 3376. Sec. 4.1.6, 8.1, 8.14.1."; 1151 } 1152 } // interface-common-config-attributes 1154 grouping interface-common-config-attributes-igmp { 1155 description 1156 "Configuration attributes applied to both the interface-global 1157 level and interface level for IGMP."; 1159 uses interface-common-config-attributes; 1160 leaf version { 1161 type uint8 { 1162 range "1..3"; 1163 } 1164 description 1165 "IGMP version. 1166 The default value is 2. 1167 This leaf may be configured at the interface level or the 1168 interface-global level, with precedence given to the value 1169 at the interface level. If the leaf is not configured at 1170 either level, the default value is used."; 1171 reference "RFC 1112, RFC 2236, RFC 3376."; 1172 } 1173 } 1174 grouping interface-common-config-attributes-mld { 1175 description 1176 "Configuration attributes applied to both the interface-global 1177 level and interface level for MLD."; 1179 uses interface-common-config-attributes; 1180 leaf version { 1181 type uint8 { 1182 range "1..2"; 1183 } 1184 description 1185 "MLD version. 1186 The default value is 2. 1187 This leaf may be configured at the interface level or the 1188 interface-global level, with precedence given to the value 1189 at the interface level. If the leaf is not configured at 1190 either level, the default value is used."; 1191 reference "RFC 2710, RFC 3810."; 1192 } 1193 } 1195 grouping interfaces-config-attributes-igmp { 1196 description 1197 "Configuration attributes applied to the interface-global 1198 level for IGMP."; 1200 uses interface-common-config-attributes-igmp; 1201 uses interface-global-config-attributes; 1202 } 1204 grouping interfaces-config-attributes-mld { 1205 description 1206 "Configuration attributes applied to the interface-global 1207 level for MLD."; 1209 uses interface-common-config-attributes-mld; 1210 uses interface-global-config-attributes; 1211 } 1213 grouping interface-level-config-attributes { 1214 description 1215 "This grouping is used in either IGMP schema or MLD schema. 1216 When used in IGMP schema, this grouping contains the IGMP 1217 configuration attributes that are defined at the interface 1218 level but are not defined at the interface-global level; 1219 when used in MLD schema, this grouping contains the MLD 1220 configuration attributes that are defined at the interface 1221 level but are not defined at the interface-global level."; 1223 leaf enable { 1224 if-feature intf-admin-enable; 1225 type boolean; 1226 default true; 1227 description 1228 "When this grouping is used for IGMP, this leaf indicates 1229 whether IGMP is enabled ('true') or disabled ('false') 1230 on the interface. 1231 When this grouping is used for MLD, this leaf indicates 1232 whether MLD is enabled ('true') or disabled ('false') 1233 on the interface."; 1234 } 1235 leaf group-policy { 1236 type leafref { 1237 path "/acl:acls/acl:acl/acl:name"; 1238 } 1239 description 1240 "When this grouping is used for IGMP, this leaf specifies 1241 the name of the access policy used to filter the 1242 IGMP membership. 1243 When this grouping is used for MLD, this leaf specifies 1244 the name of the access policy used to filter the 1245 MLD membership. 1246 The value space of this leaf is restricted to the existing 1247 policy instances defined by the referenced schema RFC 8519. 1248 As specified by RFC 8519, the length of the name is between 1249 1 and 64; a device MAY further restrict the length of this 1250 name; space and special characters are not allowed. 1251 If this leaf is not specified, no policy is applied, and 1252 all packets received from this interface are accepted."; 1253 reference 1254 "RFC 8519: YANG Data Model for Network Access Control Lists 1255 (ACLs)"; 1256 } 1257 leaf immediate-leave { 1258 if-feature intf-immediate-leave; 1259 type empty; 1260 description 1261 "When this grouping is used for IGMP, the presence of this 1262 leaf requests IGMP to perform an immediate leave upon 1263 receiving an IGMPv2 leave message. 1264 If the router is IGMP-enabled, it sends an IGMP last member 1265 query with a last member query response time. However, the 1266 router does not wait for the response time before it prunes 1267 the group. 1268 When this grouping is used for MLD, the presence of this 1269 leaf requests MLD to perform an immediate leave upon 1270 receiving an MLDv1 leave message. 1271 If the router is MLD-enabled, it sends an MLD last member 1272 query with a last member query response time. However, the 1273 router does not wait for the response time before it prunes 1274 the group."; 1275 } 1276 leaf max-groups { 1277 if-feature intf-max-groups; 1278 type uint32; 1279 description 1280 "When this grouping is used for IGMP, this leaf indicates 1281 the maximum number of groups associated with the IGMP 1282 interface. 1283 When this grouping is used for MLD, this leaf indicates 1284 the maximum number of groups associated with the MLD 1285 interface. 1286 If this leaf is not specified, the number of groups is not 1287 limited."; 1288 } 1289 leaf max-group-sources { 1290 if-feature intf-max-group-sources; 1291 type uint32; 1292 description 1293 "The maximum number of group sources. 1294 If this leaf is not specified, the number of group sources 1295 is not limited."; 1296 } 1297 leaf source-policy { 1298 if-feature intf-source-policy; 1299 type leafref { 1300 path "/acl:acls/acl:acl/acl:name"; 1301 } 1302 description 1303 "Name of the access policy used to filter sources. 1304 The value space of this leaf is restricted to the existing 1305 policy instances defined by the referenced schema RFC 8519. 1306 As specified by RFC 8519, the length of the name is between 1307 1 and 64; a device MAY further restrict the length of this 1308 name; space and special characters are not allowed. 1309 If this leaf is not specified, no policy is applied, and 1310 all packets received from this interface are accepted."; 1311 } 1312 leaf verify-source-subnet { 1313 if-feature intf-verify-source-subnet; 1314 type empty; 1315 description 1316 "If present, the interface accepts packets with matching 1317 source IP subnet only."; 1318 } 1319 leaf explicit-tracking { 1320 if-feature intf-explicit-tracking; 1321 type empty; 1322 description 1323 "When this grouping is used for IGMP, the presence of this 1324 leaf enables IGMP-based explicit membership tracking 1325 function for multicast routers and IGMP proxy devices 1326 supporting IGMPv3. 1327 When this grouping is used for MLD, the presence of this 1328 leaf enables MLD-based explicit membership tracking 1329 function for multicast routers and MLD proxy devices 1330 supporting MLDv2. 1331 The explicit membership tracking function contributes to 1332 saving network resources and shortening leave latency."; 1333 reference 1334 "RFC 6636. Sec 3."; 1335 } 1336 leaf lite-exclude-filter { 1337 if-feature intf-lite-exclude-filter; 1338 type empty; 1339 description 1340 "When this grouping is used for IGMP, the presence of this 1341 leaf enables the support of the simplified EXCLUDE filter 1342 in the Lightweight IGMPv3 protocol, which simplifies the 1343 standard versions of IGMPv3. 1344 When this grouping is used for MLD, the presence of this 1345 leaf enables the support of the simplified EXCLUDE filter 1346 in the Lightweight MLDv2 protocol, which simplifies the 1347 standard versions of MLDv2."; 1348 reference "RFC 5790"; 1349 } 1350 } // interface-level-config-attributes 1352 grouping interface-config-attributes-igmp { 1353 description 1354 "Per interface configuration attributes for IGMP."; 1356 uses interface-common-config-attributes-igmp; 1357 uses interface-level-config-attributes; 1358 leaf-list join-group { 1359 if-feature intf-join-group; 1360 type rt-types:ipv4-multicast-group-address; 1361 description 1362 "The router joins this multicast group on the interface."; 1363 } 1364 list ssm-map { 1365 if-feature intf-ssm-map; 1366 key "ssm-map-source-addr ssm-map-group-policy"; 1367 description "The policy for (*,G) mapping to (S,G)."; 1369 leaf ssm-map-source-addr { 1370 type ssm-map-ipv4-addr-type; 1371 description 1372 "Multicast source IPv4 address."; 1373 } 1374 leaf ssm-map-group-policy { 1375 type string; 1376 description 1377 "Name of the policy used to define ssm-map rules. 1378 A device can restrict the length 1379 and value of this name, possibly space and special 1380 characters are not allowed. "; 1381 } 1382 } 1383 list static-group { 1384 if-feature intf-static-group; 1385 key "group-addr source-addr"; 1386 description 1387 "A static multicast route, (*,G) or (S,G). 1388 The version of IGMP must be 3 to support (S,G)."; 1390 leaf group-addr { 1391 type rt-types:ipv4-multicast-group-address; 1392 description 1393 "Multicast group IPv4 address."; 1394 } 1395 leaf source-addr { 1396 type rt-types:ipv4-multicast-source-address; 1397 description 1398 "Multicast source IPv4 address."; 1399 } 1400 } 1401 } // interface-config-attributes-igmp 1403 grouping interface-config-attributes-mld { 1404 description 1405 "Per interface configuration attributes for MLD."; 1407 uses interface-common-config-attributes-mld; 1408 uses interface-level-config-attributes; 1409 leaf-list join-group { 1410 if-feature intf-join-group; 1411 type rt-types:ipv6-multicast-group-address; 1412 description 1413 "The router joins this multicast group on the interface."; 1414 } 1415 list ssm-map { 1416 if-feature intf-ssm-map; 1417 key "ssm-map-source-addr ssm-map-group-policy"; 1418 description "The policy for (*,G) mapping to (S,G)."; 1419 leaf ssm-map-source-addr { 1420 type ssm-map-ipv6-addr-type; 1421 description 1422 "Multicast source IPv6 address."; 1423 } 1424 leaf ssm-map-group-policy { 1425 type string; 1426 description 1427 "Name of the policy used to define ssm-map rules. 1428 A device can restrict the length 1429 and value of this name, possibly space and special 1430 characters are not allowed."; 1431 } 1432 } 1433 list static-group { 1434 if-feature intf-static-group; 1435 key "group-addr source-addr"; 1436 description 1437 "A static multicast route, (*,G) or (S,G). 1438 The version of MLD must be 2 to support (S,G)."; 1440 leaf group-addr { 1441 type rt-types:ipv6-multicast-group-address; 1442 description 1443 "Multicast group IPv6 address."; 1444 } 1445 leaf source-addr { 1446 type rt-types:ipv6-multicast-source-address; 1447 description 1448 "Multicast source IPv6 address."; 1449 } 1450 } 1451 } // interface-config-attributes-mld 1453 grouping interface-state-attributes { 1454 description 1455 "Per interface state attributes for both IGMP and MLD."; 1457 leaf oper-status { 1458 type enumeration { 1459 enum up { 1460 description 1461 "Ready to pass packets."; 1462 } 1463 enum down { 1464 description 1465 "The interface does not pass any packets."; 1466 } 1468 } 1469 config false; 1470 mandatory true; 1471 description 1472 "Indicates whether the operational state of the interface 1473 is up or down."; 1474 } 1475 } // interface-state-attributes 1477 grouping interface-state-attributes-igmp { 1478 description 1479 "Per interface state attributes for IGMP."; 1481 uses interface-state-attributes; 1482 leaf querier { 1483 type inet:ipv4-address; 1484 config false; 1485 mandatory true; 1486 description "The querier address in the subnet"; 1487 } 1488 leaf-list joined-group { 1489 if-feature intf-join-group; 1490 type rt-types:ipv4-multicast-group-address; 1491 config false; 1492 description 1493 "The routers that joined this multicast group."; 1494 } 1495 list group { 1496 key "group-address"; 1497 config false; 1498 description 1499 "Multicast group membership information 1500 that joined on the interface."; 1502 leaf group-address { 1503 type rt-types:ipv4-multicast-group-address; 1504 description 1505 "Multicast group address."; 1506 } 1507 uses interface-state-group-attributes; 1508 leaf last-reporter { 1509 type inet:ipv4-address; 1510 description 1511 "The IPv4 address of the last host which has sent the 1512 report to join the multicast group."; 1513 } 1514 list source { 1515 key "source-address"; 1516 description 1517 "List of multicast source information 1518 of the multicast group."; 1520 leaf source-address { 1521 type inet:ipv4-address; 1522 description 1523 "Multicast source address in group record."; 1524 } 1525 uses interface-state-source-attributes; 1526 leaf last-reporter { 1527 type inet:ipv4-address; 1528 description 1529 "The IPv4 address of the last host which has sent the 1530 report to join the multicast source and group."; 1531 } 1532 list host { 1533 if-feature intf-explicit-tracking; 1534 key "host-address"; 1535 description 1536 "List of hosts with the membership for the specific 1537 multicast source-group."; 1539 leaf host-address { 1540 type inet:ipv4-address; 1541 description 1542 "The IPv4 address of the host."; 1543 } 1544 uses interface-state-host-attributes; 1545 }// list host 1546 } // list source 1547 } // list group 1548 } // interface-state-attributes-igmp 1550 grouping interface-state-attributes-mld { 1551 description 1552 "Per interface state attributes for MLD."; 1554 uses interface-state-attributes; 1555 leaf querier { 1556 type inet:ipv6-address; 1557 config false; 1558 mandatory true; 1559 description 1560 "The querier address in the subnet."; 1561 } 1562 leaf-list joined-group { 1563 if-feature intf-join-group; 1564 type rt-types:ipv6-multicast-group-address; 1565 config false; 1566 description 1567 "The routers that joined this multicast group."; 1568 } 1569 list group { 1570 key "group-address"; 1571 config false; 1572 description 1573 "Multicast group membership information 1574 that joined on the interface."; 1576 leaf group-address { 1577 type rt-types:ipv6-multicast-group-address; 1578 description 1579 "Multicast group address."; 1580 } 1581 uses interface-state-group-attributes; 1582 leaf last-reporter { 1583 type inet:ipv6-address; 1584 description 1585 "The IPv6 address of the last host which has sent the 1586 report to join the multicast group."; 1587 } 1588 list source { 1589 key "source-address"; 1590 description 1591 "List of multicast sources of the multicast group."; 1593 leaf source-address { 1594 type inet:ipv6-address; 1595 description 1596 "Multicast source address in group record"; 1597 } 1598 uses interface-state-source-attributes; 1599 leaf last-reporter { 1600 type inet:ipv6-address; 1601 description 1602 "The IPv6 address of the last host which has sent the 1603 report to join the multicast source and group."; 1604 } 1605 list host { 1606 if-feature intf-explicit-tracking; 1607 key "host-address"; 1608 description 1609 "List of hosts with the membership for the specific 1610 multicast source-group."; 1612 leaf host-address { 1613 type inet:ipv6-address; 1614 description 1615 "The IPv6 address of the host."; 1616 } 1617 uses interface-state-host-attributes; 1618 }// list host 1619 } // list source 1620 } // list group 1621 } // interface-state-attributes-mld 1623 grouping interface-state-group-attributes { 1624 description 1625 "Per interface state attributes for both IGMP and MLD 1626 groups."; 1628 leaf expire { 1629 type uint32; 1630 units seconds; 1631 mandatory true; 1632 description 1633 "The time left before multicast group state expires."; 1634 } 1635 leaf filter-mode { 1636 type enumeration { 1637 enum "include" { 1638 description 1639 "In include mode, reception of packets sent 1640 to the specified multicast address is requested 1641 only from those IP source addresses listed in the 1642 source-list parameter"; 1643 } 1644 enum "exclude" { 1645 description 1646 "In exclude mode, reception of packets sent 1647 to the given multicast address is requested 1648 from all IP source addresses except those 1649 listed in the source-list parameter."; 1650 } 1651 } 1652 mandatory true; 1653 description 1654 "Filter mode for a multicast group, 1655 may be either include or exclude."; 1656 } 1657 leaf up-time { 1658 type uint32; 1659 units seconds; 1660 mandatory true; 1661 description 1662 "The elapsed time since the device created multicast group 1663 record."; 1665 } 1666 } // interface-state-group-attributes 1668 grouping interface-state-source-attributes { 1669 description 1670 "Per interface state attributes for both IGMP and MLD 1671 source-group records."; 1673 leaf expire { 1674 type uint32; 1675 units seconds; 1676 mandatory true; 1677 description 1678 "The time left before multicast source-group state expires."; 1679 } 1680 leaf up-time { 1681 type uint32; 1682 units seconds; 1683 mandatory true; 1684 description 1685 "The elapsed time since the device created multicast 1686 source-group record."; 1687 } 1688 leaf host-count { 1689 if-feature intf-explicit-tracking; 1690 type uint32; 1691 description 1692 "The number of host addresses."; 1693 } 1694 } // interface-state-source-attributes 1696 grouping interface-state-host-attributes { 1697 description 1698 "Per interface state attributes for both IGMP and MLD 1699 hosts of source-group records."; 1701 leaf host-filter-mode { 1702 type enumeration { 1703 enum "include" { 1704 description 1705 "In include mode"; 1706 } 1707 enum "exclude" { 1708 description 1709 "In exclude mode."; 1710 } 1711 } 1712 mandatory true; 1713 description 1714 "Filter mode for a multicast membership 1715 host may be either include or exclude."; 1716 } 1717 } // interface-state-host-attributes 1719 /* 1720 * Configuration and Operational state data nodes (NMDA version) 1721 */ 1722 augment "/rt:routing/rt:control-plane-protocols/" 1723 + "rt:control-plane-protocol" { 1724 when "derived-from-or-self(rt:type, 'igmp-mld:igmp')" { 1725 description 1726 "This augmentation is only valid for a control-plane 1727 protocol instance of IGMP (type 'igmp')."; 1728 } 1729 description 1730 "IGMP augmentation to routing control plane protocol 1731 configuration and state."; 1733 container igmp { 1734 if-feature feature-igmp; 1735 description 1736 "IGMP configuration and operational state data."; 1738 container global { 1739 description 1740 "Global attributes."; 1742 uses global-config-attributes; 1743 uses global-state-attributes; 1744 } 1745 container interfaces { 1746 description 1747 "Containing a list of interfaces."; 1749 uses interfaces-config-attributes-igmp { 1750 if-feature interface-global-config; 1751 refine query-interval { 1752 default 125; 1753 } 1754 refine query-max-response-time { 1755 default 10; 1756 } 1757 refine robustness-variable { 1758 default 2; 1759 } 1760 refine version { 1761 default 2; 1762 } 1764 } 1765 list interface { 1766 key "interface-name"; 1767 description 1768 "List of IGMP interfaces."; 1770 leaf interface-name { 1771 type if:interface-ref; 1772 must "/if:interfaces/if:interface[if:name = current()]/" 1773 + "ip:ipv4" { 1774 error-message 1775 "The interface must have IPv4 configured, either " 1776 + "enabled or disabled."; 1777 } 1778 description 1779 "Reference to an entry in the global interface list."; 1780 } 1781 uses interface-config-attributes-igmp { 1782 if-feature per-interface-config; 1783 refine last-member-query-interval { 1784 must "../version != 1 or " 1785 + "(not(../version) and " 1786 + "(../../version != 1 or not(../../version)))" { 1787 error-message 1788 "IGMPv1 does not support " 1789 + "last-member-query-interval."; 1790 } 1791 } 1792 refine max-group-sources { 1793 must "../version = 3 or " 1794 + "(not(../version) and (../../version = 3))" { 1795 error-message 1796 "The version of IGMP must be 3 to support the " 1797 + "source specific parameters."; 1798 } 1799 } 1800 refine source-policy { 1801 must "../version = 3 or " 1802 + "(not(../version) and (../../version = 3))" { 1803 error-message 1804 "The version of IGMP must be 3 to support the " 1805 + "source specific parameters."; 1806 } 1807 } 1808 refine explicit-tracking { 1809 must "../version = 3 or " 1810 + "(not(../version) and (../../version = 3))" { 1811 error-message 1812 "The version of IGMP must be 3 to support the " 1813 + "explicit tracking function."; 1814 } 1815 } 1816 refine lite-exclude-filter { 1817 must "../version = 3 or " 1818 + "(not(../version) and (../../version = 3))" { 1819 error-message 1820 "The version of IGMP must be 3 to support the " 1821 + "simplified EXCLUDE filter in the Lightweight " 1822 + "IGMPv3 protocol."; 1823 } 1824 } 1825 } 1826 uses interface-state-attributes-igmp; 1827 } // interface 1828 } // interfaces 1830 /* 1831 * Actions 1832 */ 1833 action clear-groups { 1834 if-feature action-clear-groups; 1835 description 1836 "Clears the specified IGMP cache entries."; 1838 input { 1839 choice interface { 1840 mandatory true; 1841 description 1842 "Indicates the interface(s) from which the cache 1843 entries are cleared."; 1844 case name { 1845 leaf interface-name { 1846 type leafref { 1847 path "/rt:routing/rt:control-plane-protocols/" 1848 + "rt:control-plane-protocol/" 1849 + "igmp-mld:igmp/igmp-mld:interfaces/" 1850 + "igmp-mld:interface/igmp-mld:interface-name"; 1851 } 1852 description 1853 "Name of the IGMP interface."; 1854 } 1855 } 1856 case all { 1857 leaf all-interfaces { 1858 type empty; 1859 description 1860 "IGMP groups from all interfaces are cleared."; 1861 } 1863 } 1864 } 1865 leaf group-address { 1866 type union { 1867 type enumeration { 1868 enum '*' { 1869 description 1870 "Any group address."; 1871 } 1872 } 1873 type rt-types:ipv4-multicast-group-address; 1874 } 1875 mandatory true; 1876 description 1877 "Multicast group IPv4 address. 1878 If the value '*' is specified, all IGMP group entries 1879 are cleared."; 1880 } 1881 leaf source-address { 1882 type rt-types:ipv4-multicast-source-address; 1883 mandatory true; 1884 description 1885 "Multicast source IPv4 address. 1886 If the value '*' is specified, all IGMP source-group 1887 entries are cleared."; 1888 } 1889 } 1890 } // action clear-groups 1891 } // igmp 1892 } //augment 1894 augment "/rt:routing/rt:control-plane-protocols/" 1895 + "rt:control-plane-protocol" { 1896 when "derived-from-or-self(rt:type, 'igmp-mld:mld')" { 1897 description 1898 "This augmentation is only valid for a control-plane 1899 protocol instance of IGMP (type 'mld')."; 1900 } 1901 description 1902 "MLD augmentation to routing control plane protocol 1903 configuration and state."; 1905 container mld { 1906 if-feature feature-mld; 1907 description 1908 "MLD configuration and operational state data."; 1910 container global { 1911 description 1912 "Global attributes."; 1914 uses global-config-attributes; 1915 uses global-state-attributes; 1916 } 1917 container interfaces { 1918 description 1919 "Containing a list of interfaces."; 1921 uses interfaces-config-attributes-mld { 1922 if-feature interface-global-config; 1923 refine last-member-query-interval { 1924 default 1; 1925 } 1926 refine query-interval { 1927 default 125; 1928 } 1929 refine query-max-response-time { 1930 default 10; 1931 } 1932 refine require-router-alert { 1933 default true; 1934 } 1935 refine robustness-variable { 1936 default 2; 1937 } 1938 refine version { 1939 default 2; 1940 } 1941 } 1942 list interface { 1943 key "interface-name"; 1944 description 1945 "List of MLD interfaces."; 1947 leaf interface-name { 1948 type if:interface-ref; 1949 must "/if:interfaces/if:interface[if:name = current()]/" 1950 + "ip:ipv6" { 1951 error-message 1952 "The interface must have IPv6 configured, either " 1953 + "enabled or disabled."; 1954 } 1955 description 1956 "Reference to an entry in the global interface list."; 1957 } 1958 uses interface-config-attributes-mld { 1959 if-feature per-interface-config; 1960 refine max-group-sources { 1961 must "../version = 2 or " 1962 + "(not(../version) and " 1963 + "(../../version = 2 or not(../../version)))" { 1964 error-message 1965 "The version of MLD must be 2 to support the " 1966 + "source specific parameters."; 1967 } 1968 } 1969 refine source-policy { 1970 must "../version = 2 or " 1971 + "(not(../version) and " 1972 + "(../../version = 2 or not(../../version)))" { 1973 error-message 1974 "The version of MLD must be 2 to support the " 1975 + "source specific parameters."; 1976 } 1977 } 1978 refine explicit-tracking { 1979 must "../version = 2 or " 1980 + "(not(../version) and " 1981 + "(../../version = 2 or not(../../version)))" { 1982 error-message 1983 "The version of MLD must be 2 to support the " 1984 + "explicit tracking function."; 1985 } 1986 } 1987 refine lite-exclude-filter { 1988 must "../version = 2 or " 1989 + "(not(../version) and " 1990 + "(../../version = 2 or not(../../version)))" { 1991 error-message 1992 "The version of MLD must be 2 to support the " 1993 + "simplified EXCLUDE filter in the Lightweight " 1994 + "MLDv2 protocol."; 1995 } 1996 } 1997 } 1998 uses interface-state-attributes-mld; 1999 } // interface 2000 } // interfaces 2002 /* 2003 * Actions 2004 */ 2005 action clear-groups { 2006 if-feature action-clear-groups; 2007 description 2008 "Clears the specified MLD cache entries."; 2010 input { 2011 choice interface { 2012 mandatory true; 2013 description 2014 "Indicates the interface(s) from which the cache 2015 entries are cleared."; 2016 case name { 2017 leaf interface-name { 2018 type leafref { 2019 path "/rt:routing/rt:control-plane-protocols/" 2020 + "rt:control-plane-protocol/" 2021 + "igmp-mld:mld/igmp-mld:interfaces/" 2022 + "igmp-mld:interface/igmp-mld:interface-name"; 2023 } 2024 description 2025 "Name of the MLD interface."; 2026 } 2027 } 2028 case all { 2029 leaf all-interfaces { 2030 type empty; 2031 description 2032 "MLD groups from all interfaces are cleared."; 2033 } 2034 } 2035 } 2036 leaf group-address { 2037 type union { 2038 type enumeration { 2039 enum '*' { 2040 description 2041 "Any group address."; 2042 } 2043 } 2044 type rt-types:ipv6-multicast-group-address; 2045 } 2046 description 2047 "Multicast group IPv6 address. 2048 If the value '*' is specified, all MLD group entries 2049 are cleared."; 2050 } 2051 leaf source-address { 2052 type rt-types:ipv6-multicast-source-address; 2053 description 2054 "Multicast source IPv6 address. 2055 If the value '*' is specified, all MLD source-group 2056 entries are cleared."; 2057 } 2058 } 2060 } // action clear-mld-groups 2061 } // mld 2062 } // augment 2063 } 2064 2066 5. Security Considerations 2068 The YANG module specified in this document defines a schema for data 2069 that is designed to be accessed via network management protocols 2070 such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF 2071 layer is the secure transport layer, and the mandatory-to-implement 2072 secure transport is Secure Shell (SSH) [RFC6242]. The lowest 2073 RESTCONF layer is HTTPS, and the mandatory-to-implement secure 2074 transport is TLS [RFC8446]. 2076 The Network Configuration Access Control Model (NACM) [RFC8341] 2077 provides the means to restrict access for particular NETCONF or 2078 RESTCONF users to a preconfigured subset of all available NETCONF or 2079 RESTCONF protocol operations and content. 2081 There are a number of data nodes defined in this YANG module that 2082 are writable/creatable/deletable (i.e., config true, which is the 2083 default). These data nodes may be considered sensitive or vulnerable 2084 in some network environments. Write operations (e.g., edit-config) 2085 to these data nodes without proper protection can have a negative 2086 effect on network operations. These are the subtrees and data nodes 2087 and their sensitivity/vulnerability: 2089 Under /rt:routing/rt:control-plane-protocols 2090 /rt:control-plane-protocol/igmp-mld:igmp, 2092 igmp-mld:global 2094 This subtree specifies the configuration for the IGMP attributes 2095 at the global level on an IGMP instance. Modifying the 2096 configuration can cause IGMP membership to be deleted or 2097 reconstructed on all the interfaces of an IGMP instance. 2099 igmp-mld:interfaces 2101 This subtree specifies the configuration for the IGMP attributes 2102 at the interface-global level on a IGMP instance. Modifying the 2103 configuration can cause IGMP membership to be deleted or 2104 reconstructed on all the interfaces of an IGMP instance. 2106 igmp-mld:interfaces/interface 2107 This subtree specifies the configuration for the IGMP attributes 2108 at the interface level on an IGMP instance. Modifying the 2109 configuration can cause IGMP membership to be deleted or 2110 reconstructed on a specific interface of an IGMP instance. 2112 Under /rt:routing/rt:control-plane-protocols 2113 /rt:control-plane-protocol/igmp-mld:mld, 2115 igmp-mld:global 2117 This subtree specifies the configuration for the MLD attributes at 2118 the global level on an MLD instance. Modifying the configuration 2119 can cause MLD membership to be deleted or reconstructed on all the 2120 interfaces of an MLD instance. 2122 igmp-mld:interfaces 2124 This subtree specifies the configuration for the MLD attributes at 2125 the interface-global level on an MLD instance. Modifying the 2126 configuration can cause MLD membership to be deleted or 2127 reconstructed on all the interfaces of an MLD instance. 2129 igmp-mld:interfaces/interface 2131 This subtree specifies the configuration for the MLD attributes at 2132 the interface level on a device. Modifying the configuration can 2133 cause MLD membership to be deleted or reconstructed on a specific 2134 interface of an MLD instance. 2136 Unauthorized access to any data node of these subtrees can adversely 2137 affect the membership records of multicast routing subsystem on the 2138 local device. This may lead to network malfunctions, delivery of 2139 packets to inappropriate destinations, and other problems. 2141 Some of the readable data nodes in this YANG module may be 2142 considered sensitive or vulnerable in some network environments. It 2143 is thus important to control read access (e.g., via get, get-config, 2144 or notification) to these data nodes. These are the subtrees and 2145 data nodes and their sensitivity/vulnerability: 2147 /rt:routing/rt:control-plane-protocols 2148 /rt:control-plane-protocol/igmmp-mld:igmp 2150 /rt:routing/rt:control-plane-protocols 2151 /rt:control-plane-protocol/igmp-mld:mld 2152 Unauthorized access to any data node of the above subtree can 2153 disclose the operational state information of IGMP or MLD on this 2154 device. 2156 Some of the action operations in this YANG module may be considered 2157 sensitive or vulnerable in some network environments. It is thus 2158 important to control access to these operations. These are the 2159 operations and their sensitivity/vulnerability: 2161 /rt:routing/rt:control-plane-protocols 2162 /rt:control-plane-protocol/igmmp-mld:igmp/igmmp-mld:clear-groups 2164 /rt:routing/rt:control-plane-protocols 2165 /rt:control-plane-protocol/igmp-mld:mld/igmp-mld:clear-groups 2167 Unauthorized access to any of the above action operations can delete 2168 the IGMP or MLD membership records on this device. 2170 6. IANA Considerations 2172 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 2173 actual RFC number (and remove this note). 2175 This document registers the following namespace URIs in the IETF XML 2176 registry [RFC3688]: 2178 -------------------------------------------------------------------- 2180 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 2182 Registrant Contact: The IESG. 2184 XML: N/A, the requested URI is an XML namespace. 2186 -------------------------------------------------------------------- 2188 This document registers the following YANG modules in the YANG Module 2189 Names registry [RFC6020]: 2191 -------------------------------------------------------------------- 2193 name: ietf-igmp-mld 2195 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 2197 prefix: igmp-mld 2199 reference: RFC XXXX 2200 -------------------------------------------------------------------- 2202 7. Acknowledgments 2204 The authors would like to thank Steve Baillargeon, Hu Fangwei, 2205 Robert Kebler, Tanmoy Kundu, and Stig Venaas for their valuable 2206 contributions. 2208 8. Contributing Authors 2210 Yisong Liu 2211 Huawei Technologies 2212 Huawei Bldg., No.156 Beiqing Rd. 2213 Beijing 100095 2214 China 2216 Email: liuyisong@huawei.com 2218 9. References 2220 9.1. Normative References 2222 [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, 2223 RFC 1112, August 1989. 2225 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2226 Requirement Levels", BCP 14, RFC 2119, March 1997. 2228 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 2229 2", RFC 2236, November 1997. 2231 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 2232 Listener Discovery (MLD) for IPv6", RFC 2710, October 2233 1999. 2235 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 2236 Thyagarajan, "Internet Group Management Protocol, Version 2237 3", RFC 3376, October 2002. 2239 [RFC3688] Mealling, M., "The IETF XML Registry", RFC 3688, January 2240 2004. 2242 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 2243 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 2245 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 2246 IP", RFC 4607, August 2006. 2248 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2249 the Network Configuration Protocol (NETCONF)", RFC 6020, 2250 October 2010. 2252 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2253 and A. Bierman, Ed., "Network Configuration Protocol 2254 (NETCONF)", RFC 6241, June 2011. 2256 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2257 Shell (SSH)", RFC 6242, June 2011. 2259 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 2260 RFC 6991, July 2013. 2262 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2263 RFC 7950, August 2016. 2265 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2266 Protocol", RFC 8040, January 2017. 2268 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2269 2119 Key Words", BCP 14, RFC 8174, May 2017. 2271 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 2272 "Common YANG Data Types for the Routing Area", RFC 8294, 2273 December 2017. 2275 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 2276 Access Control Model", STD 91, RFC 8341, March 2018. 2278 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 2279 and R. Wilton, "Network Management Datastore Architecture 2280 (NMDA)", RFC 8342, March 2018. 2282 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 2283 Management", RFC 8343, March 2018. 2285 [RFC8344] M. Bjorklund, "A YANG Data Model for IP Management", 2286 RFC8344, March 2018. 2288 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 2289 Routing Management (NMDA Version)", RFC 8349, March 2018. 2291 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 2292 Version 1.3", RFC 8446, August 2018. 2294 [RFC8519] M. Jethanandani, S. Agarwal, L. Huang and D. Blair, "YANG 2295 Data Model for Network Access Control Lists (ACLs)", RFC 2296 8519, March 2019. 2298 9.2. Informative References 2300 [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific 2301 Multicast (SSM)", RFC 3569, July 2003. 2303 [RFC4541] M. Christensen, K. Kimball and F. Solensky, 2304 "Considerations for Internet Group Management Protocol 2305 (IGMP) and Multicast Listener Discovery (MLD) Snooping 2306 Switches", RFC 4541, May 2006. 2308 [RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet 2309 Group Management Protocol (IGMP) / Multicast Listener 2310 Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD 2311 Proxying")", RFC 4605, August 2006. 2313 [RFC5790] H. Liu, W. Cao and H. Asaeda, "Lightweight Internet Group 2314 Management Protocol Version 3 (IGMPv3) and Multicast 2315 Listener Discovery Version 2 (MLDv2) Protocols", RFC 5790, 2316 February 2010. 2318 [RFC6636] H. Asaeda, H. Liu and Q. Wu, "Tuning the Behavior of the 2319 Internet Group Management Protocol (IGMP) and Multicast 2320 Listener Discovery (MLD) for Routers in Mobile and 2321 Wireless Networks", RFC 6636, May 2012. 2323 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 2324 BCP 215, RFC 8340, March 2018. 2326 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 2327 Documents Containing YANG Data Models", RFC 8407, October 2328 2018. 2330 [I-D.ietf-netconf-subscribed-notifications] 2331 Voit, E., Clemm, A., Prieto, A., Nilsen-Nygaard, E., and 2332 A. Tripathy, "Customized Subscriptions to a Publisher's 2333 Event Streams", draft-ietf-netconf-subscribed- 2334 notifications-26 (work in progress), May 2019. 2336 [I-D.ietf-netconf-yang-push] 2337 Clemm, A., Voit, E., Prieto, A., Tripathy, A., Nilsen- 2338 Nygaard, E., Bierman, A., and B. Lengyel, "YANG Datastore 2339 Subscription", draft-ietf-netconf-yang-push-25 (work in 2340 progress), May 2019. 2342 Authors' Addresses 2344 Xufeng Liu 2345 Volta Networks 2347 Email: xufeng.liu.ietf@gmail.com 2349 Feng Guo 2350 Huawei Technologies 2351 Huawei Bldg., No.156 Beiqing Rd. 2352 Beijing 100095 2353 China 2355 Email: guofeng@huawei.com 2357 Mahesh Sivakumar 2358 Juniper Networks 2359 1133 Innovation Way 2360 Sunnyvale, California 2361 USA 2363 Email: sivakumar.mahesh@gmail.com 2365 Pete McAllister 2366 Metaswitch Networks 2367 100 Church Street 2368 Enfield EN2 6BQ 2369 UK 2371 Email: pete.mcallister@metaswitch.com 2373 Anish Peter 2374 Individual 2376 Email: anish.ietf@gmail.com