idnits 2.17.1 draft-ietf-pim-igmp-mld-yang-11.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 402 has weird spacing: '...-policy str...' == Line 422 has weird spacing: '...address ine...' == Line 431 has weird spacing: '...er-mode enu...' == Line 534 has weird spacing: '...-policy str...' == Line 554 has weird spacing: '...address ine...' == (1 more instance...) -- The document date (April 26, 2019) is 1820 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: 'RFC8519' is mentioned on line 147, but not defined == Missing Reference: 'I-D.ietf-netconf-yang-push' is mentioned on line 168, but not defined == Missing Reference: 'RFC 8446' is mentioned on line 1816, but not defined == Missing Reference: 'RFC8341' is mentioned on line 1818, but not defined == Unused Reference: 'RFC5246' is defined on line 1990, but no explicit reference was found in the text == Unused Reference: 'RFC6536' is defined on line 2004, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-acl-yang' is defined on line 2034, but no explicit reference was found in the text == Unused Reference: 'RFC5790' is defined on line 2051, but no explicit reference was found in the text ** Downref: Normative reference to an Informational RFC: RFC 3569 ** Obsolete normative reference: RFC 5246 (Obsoleted by RFC 8446) ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-21) exists of draft-ietf-netmod-acl-model-19 Summary: 3 errors (**), 0 flaws (~~), 16 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: October 26, 2019 Huawei 5 M. Sivakumar 6 Juniper 7 P. McAllister 8 Metaswitch Networks 9 A. Peter 10 Individual 11 April 26, 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-11 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 October 26, 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 Table of Contents 63 1. Introduction...................................................2 64 1.1. Terminology...............................................3 65 1.2. Tree Diagrams.............................................3 66 1.3. Prefixes in Data Node Names...............................3 67 2. Design of Data model...........................................4 68 2.1. Scope of Model............................................4 69 2.1.1. Parameters Not Covered at Global Level..................4 70 2.1.2. Parameters Not Covered at Interface Level...............5 71 2.2. Optional Capabilities.....................................5 72 2.3. Position of Address Family in Hierarchy...................6 73 3. Module Structure...............................................6 74 3.1. IGMP Configuration and Operational State..................7 75 3.2. MLD Configuration and Operational State...................9 76 3.3. IGMP and MLD RPC.........................................12 77 4. IGMP and MLD YANG Module......................................13 78 5. Security Considerations.......................................38 79 6. IANA Considerations...........................................40 80 7. Acknowledgments...............................................40 81 8. Contributing Authors..........................................41 82 9. References....................................................41 83 9.1. Normative References.....................................41 84 9.2. Informative References...................................42 86 1. Introduction 88 YANG [RFC6020] [RFC7950] is a data definition language that was 89 introduced to model the configuration and running state of a device 90 managed using network management protocols such as NETCONF [RFC6241] 91 or RESTCONF [RFC8040]. YANG is now also being used as a component of 92 wider management interfaces, such as CLIs. 94 This document defines a YANG data model that can be used to 95 configure and manage Internet Group Management Protocol (IGMP) and 96 Multicast Listener Discovery (MLD) devices. The protocol versions 97 include IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 [RFC3376], MLDv1 98 [RFC2710], and MLDv2 [RFC3810]. The core features of the IGMP and 99 MLD protocols are defined as required. Non-core features are 100 defined as optional in the provided data model. 102 The YANG model in this document conforms to the Network Management 103 Datastore Architecture (NMDA). 105 1.1. Terminology 107 The terminology for describing YANG data models is found in 108 [RFC6020] and [RFC7950]. 110 The following abbreviations are used in this document and the 111 defined model: 113 IGMP: 115 Internet Group Management Protocol [RFC3376]. 117 MLD: 119 Multicast Listener Discovery [RFC3810]. 121 SSM: 123 Source-Specific Multicast service model [RFC3569] [RFC4607]. 125 1.2. Tree Diagrams 127 Tree diagrams used in this document follow the notation defined in 128 [RFC8340]. 130 1.3. Prefixes in Data Node Names 132 In this document, names of data nodes, actions, and other data model 133 objects are often used without a prefix, as long as it is clear from 134 the context in which YANG module each name is defined. Otherwise, 135 names are prefixed using the standard prefix associated with the 136 corresponding YANG module, as shown in Table 1. 138 +-----------+--------------------------+---------------------+ 139 | Prefix | YANG module | Reference | 140 +-----------+--------------------------+---------------------+ 141 | yang | ietf-yang-types | [RFC6991] | 142 | inet | ietf-inet-types | [RFC6991] | 143 | if | ietf-interfaces | [RFC8343] | 144 | ip | ietf-ip | [RFC8344] | 145 | rt | ietf-routing | [RFC8349] | 146 | rt-types | ietf-routing-types | [RFC8294] | 147 | acl | ietf-access-control-list | [RFC8519] | 148 +-----------+--------------------------+---------------------+ 150 Table 1: Prefixes and Corresponding YANG Modules 152 2. Design of Data model 154 2.1. Scope of Model 156 The model covers IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 157 [RFC3376], MLDv1 [RFC2710], and MLDv2 [RFC3810]. 159 This model does not cover other IGMP and MLD related protocols such 160 as IGMP/MLD Proxy [RFC4605] or IGMP/MLD Snooping [RFC4541] etc., 161 which will be specified in separate documents. 163 This model can be used to configure and manage various versions of 164 IGMP and MLD protocols. The operational state data and statistics 165 can be retrieved by this model. Even though there is no protocol 166 specific notifications are defined in this model, the subscription 167 and push mechanism defined in [I-D.ietf-netconf-subscribed- 168 notifications] and [I-D.ietf-netconf-yang-push] can be used by the 169 user to subscribe notifications on the data nodes in this model. 171 The model contains all basic configuration parameters to operate the 172 protocols listed above. Depending on the implementation choices, 173 some systems may not allow some of the advanced parameters 174 configurable. The occasionally implemented parameters are modeled as 175 optional features in this model, while the rarely implemented 176 parameters are not included this model and left for augmentation. 177 This model can be extended, and has been structured in a way that 178 such extensions can be conveniently made. 180 The protocol parameters covered in this model can been seen from the 181 model structure described in Section 3. 183 The protocol parameters that were considered but are not covered in 184 this model are described in the following sections. 186 2.1.1. Parameters Not Covered at Global Level 188 The configuration parameters not covered on an IGMP instance or an 189 MLD instance are: 191 o Explicit tracking 193 o Maximum transmit rate 194 o Last member query count 196 o Other querier present time 198 o Send router alert 200 o Startup query interval 202 o Startup query count 204 2.1.2. Parameters Not Covered at Interface Level 206 The configuration parameters not covered on an IGMP interface or an 207 MLD interface are: 209 o Disable router alert check 211 o Drop IGMP version 1, IGMP version 2, or MLD version 1 213 o Last member query count 215 o Maximum number of sources 217 o Other querier present time 219 o Passive mode 221 o Promiscuous mode 223 o Query before immediate leave 225 o Send router alert 227 2.2. Optional Capabilities 229 This model is designed to represent the capabilities of IGMP and MLD 230 devices with various specifications, including the basic capability 231 subsets of the IGMP and MLD protocols. The main design goals of 232 this document are that the basic capabilities described in the model 233 are supported by any major now-existing implementation, and that the 234 configuration of all implementations meeting the specifications is 235 easy to express through some combination of the optional features in 236 the model and simple vendor augmentations. 238 There is also value in widely-supported features being standardized, 239 to provide a standardized way to access these features, to save work 240 for individual vendors, and so that mapping between different 241 vendors' configuration is not needlessly complicated. Therefore this 242 model declares a number of features representing capabilities that 243 not all deployed devices support. 245 The extensive use of feature declarations should also substantially 246 simplify the capability negotiation process for a vendor's IGMP and 247 MLD implementations. 249 On the other hand, operational state parameters are not so widely 250 designated as features, as there are many cases where the defaulting 251 of an operational state parameter would not cause any harm to the 252 system, and it is much more likely that an implementation without 253 native support for a piece of operational state would be able to 254 derive a suitable value for a state variable that is not natively 255 supported. 257 2.3. Position of Address Family in Hierarchy 259 The protocol IGMP supports and only supports IPv4, while the 260 protocol MLD supports and only supports IPv6. The data model defined 261 in this document can be used for both IPv4 and IPv6 address 262 families. 264 The current document defines IGMP and MLD as separate schema 265 branches in the structure. One reason for this is to make it easier 266 for implementations which may optionally choose to support specific 267 address families. Another reason is that the names of objects may be 268 different between the IPv4 (IGMP) and IPv6 (MLD) address families. 270 3. Module Structure 272 This model augments the core routing data model specified in 273 [RFC8349]. 275 +--rw routing 276 +--rw router-id? 277 +--rw control-plane-protocols 278 | +--rw control-plane-protocol* [type name] 279 | +--rw type 280 | +--rw name 281 | +--rw igmp <= Augmented by this Model 282 ... 283 | +--rw mld <= Augmented by this Model 284 ... 286 The "igmp" container instantiates an IGMP protocol of version 287 IGMPv1, IGMPv2, or IGMPv3. The "mld" container instantiates an MLD 288 protocol of version MLDv1 or MLDv2. 290 The YANG data model defined in this document conforms to the Network 291 Management Datastore Architecture (NMDA) [RFC8342]. The operational 292 state data is combined with the associated configuration data in the 293 same hierarchy [RFC8407]. 295 A configuration data node is marked as mandatory only when its value 296 must be provided by the user. Where nodes are not essential to 297 protocol operation, they are marked as optional. Some other nodes 298 are essential but have a default specified, so that they are also 299 optional and need not be configured explicitly. 301 3.1. IGMP Configuration and Operational State 303 The IGMP data is modeled as a schema subtree augmenting the 304 "control-plane-protocol" data node under "/rt:routing/rt:control- 305 plane-protocols" in the module ietf-routing, following the 306 convention described in [RFC8349]. The identity "igmp" derived from 307 the "rt:control-plane-protocol" base identity is defined to indicate 308 a control-plane-protocol instance is for IGMP. 310 The IGMP subtree is a three-level hierarchy structure as listed 311 below: 313 Global level: Including IGMP configuration and operational state 314 attributes for the entire IGMP protocol instance in this router. 316 Interface-global level: Including configuration data nodes that 317 are applicable to all the interfaces whose corresponding nodes are 318 not defined or not configured at the interface level. For such a 319 node at the interface level, the system uses the same value of the 320 corresponding node at the interface-global level. 322 Interface level: Including IGMP configuration and operational 323 state attributes specific to the given interface. For a 324 configuration node at the interface level, there may exist a 325 corresponding configuration node with the same name at the 326 interface-global level. The value configured on a node at the 327 interface level overrides the value configured on the corresponding 328 node at the interface-global level. 330 augment /rt:routing/rt:control-plane-protocols 331 /rt:control-plane-protocol: 332 +--rw igmp {feature-igmp}? 333 +--rw global 334 | +--rw enable? boolean {global-admin-enable}? 335 | +--rw max-entries? uint32 {global-max-entries}? 336 | +--rw max-groups? uint32 {global-max-groups}? 337 | +--ro entries-count? uint32 338 | +--ro groups-count? uint32 339 | +--ro statistics 340 | +--ro discontinuity-time? yang:date-and-time 341 | +--ro error 342 | | +--ro total? yang:counter64 343 | | +--ro query? yang:counter64 344 | | +--ro report? yang:counter64 345 | | +--ro leave? yang:counter64 346 | | +--ro checksum? yang:counter64 347 | | +--ro too-short? yang:counter64 348 | +--ro received 349 | | +--ro total? yang:counter64 350 | | +--ro query? yang:counter64 351 | | +--ro report? yang:counter64 352 | | +--ro leave? yang:counter64 353 | +--ro sent 354 | +--ro total? yang:counter64 355 | +--ro query? yang:counter64 356 | +--ro report? yang:counter64 357 | +--ro leave? yang:counter64 358 +--rw interfaces 359 +--rw last-member-query-interval? uint16 360 +--rw query-interval? uint16 361 +--rw query-max-response-time? uint16 362 +--rw require-router-alert? boolean 363 | {intf-require-router-alert}? 364 +--rw robustness-variable? uint8 365 +--rw version? uint8 366 +--rw max-groups-per-interface? uint32 367 | {intf-max-groups}? 368 +--rw interface* [interface-name] 369 +--rw interface-name if:interface-ref 370 +--rw last-member-query-interval? uint16 371 +--rw query-interval? uint16 372 +--rw query-max-response-time? uint16 373 +--rw require-router-alert? boolean 374 | {intf-require-router-alert}? 375 +--rw robustness-variable? uint8 376 +--rw version? uint8 377 +--rw enable? boolean 378 | {intf-admin-enable}? 379 +--rw group-policy? 380 | -> /acl:acls/acl/name 381 +--rw immediate-leave? empty 382 | {intf-immediate-leave}? 383 +--rw max-groups? uint32 384 | {intf-max-groups}? 385 +--rw max-group-sources? uint32 386 | {intf-max-group-sources}? 387 +--rw source-policy? 388 | -> /acl:acls/acl/name {intf-source-policy}? 389 +--rw verify-source-subnet? empty 390 | {intf-verify-source-subnet}? 391 +--rw explicit-tracking? empty 392 | {intf-explicit-tracking}? 393 +--rw exclude-lite? empty 394 | {intf-exclude-lite}? 395 +--rw join-group* 396 | rt-types:ipv4-multicast-group-address 397 | {intf-join-group}? 398 +--rw ssm-map* 399 | [ssm-map-source-addr ssm-map-group-policy] 400 | {intf-ssm-map}? 401 | +--rw ssm-map-source-addr ssm-map-ipv4-addr-type 402 | +--rw ssm-map-group-policy string 403 +--rw static-group* [group-addr source-addr] 404 | {intf-static-group}? 405 | +--rw group-addr 406 | | rt-types:ipv4-multicast-group-address 407 | +--rw source-addr 408 | rt-types:ipv4-multicast-source-address 409 +--ro oper-status enumeration 410 +--ro querier inet:ipv4-address 411 +--ro joined-group* 412 | rt-types:ipv4-multicast-group-address 413 | {intf-join-group}? 414 +--ro group* [group-address] 415 +--ro group-address 416 | rt-types:ipv4-multicast-group-address 417 +--ro expire uint32 418 +--ro filter-mode enumeration 419 +--ro up-time uint32 420 +--ro last-reporter? inet:ipv4-address 421 +--ro source* [source-address] 422 +--ro source-address inet:ipv4-address 423 +--ro expire uint32 424 +--ro up-time uint32 425 +--ro host-count? uint32 426 | {intf-explicit-tracking}? 427 +--ro last-reporter? inet:ipv4-address 428 +--ro host* [host-address] 429 {intf-explicit-tracking}? 430 +--ro host-address inet:ipv4-address 431 +--ro host-filter-mode enumeration 433 3.2. MLD Configuration and Operational State 435 The MLD data is modeled as a schema subtree augmenting the "control- 436 plane-protocol" data node under "/rt:routing/rt:control-plane- 437 protocols" in the module ietf-routing, following the convention 438 described in [RFC8349]. The identity "mld" derived from the 439 "rt:control-plane-protocol" base identity is defined to indicate a 440 control-plane-protocol instance is for MLD. 442 The MLD subtree is a three-level hierarchy structure as listed 443 below: 445 Global level: Including MLD configuration and operational state 446 attributes for the entire MLD protocol instance in this router. 448 Interface-global level: Including configuration data nodes that 449 are applicable to all the interfaces whose corresponding nodes are 450 not defined or not configured at the interface level. For such a 451 node at the interface level, the system uses the same value of the 452 corresponding node at the interface-global level. 454 Interface level: Including MLD configuration and operational 455 state attributes specific to the given interface. For a 456 configuration node at the interface level, there may exist a 457 corresponding configuration node with the same name at the 458 interface-global level. The value configured on a node at the 459 interface level overrides the value configured on the corresponding 460 node at the interface-global level. 462 augment /rt:routing/rt:control-plane-protocols 463 /rt:control-plane-protocol: 464 +--rw mld {feature-mld}? 465 +--rw global 466 | +--rw enable? boolean {global-admin-enable}? 467 | +--rw max-entries? uint32 {global-max-entries}? 468 | +--rw max-groups? uint32 {global-max-groups}? 469 | +--ro entries-count? uint32 470 | +--ro groups-count? uint32 471 | +--ro statistics 472 | +--ro discontinuity-time? yang:date-and-time 473 | +--ro error 474 | | +--ro total? yang:counter64 475 | | +--ro query? yang:counter64 476 | | +--ro report? yang:counter64 477 | | +--ro leave? yang:counter64 478 | | +--ro checksum? yang:counter64 479 | | +--ro too-short? yang:counter64 480 | +--ro received 481 | | +--ro total? yang:counter64 482 | | +--ro query? yang:counter64 483 | | +--ro report? yang:counter64 484 | | +--ro leave? yang:counter64 485 | +--ro sent 486 | +--ro total? yang:counter64 487 | +--ro query? yang:counter64 488 | +--ro report? yang:counter64 489 | +--ro leave? yang:counter64 490 +--rw interfaces 491 +--rw last-member-query-interval? uint16 492 +--rw query-interval? uint16 493 +--rw query-max-response-time? uint16 494 +--rw require-router-alert? boolean 495 | {intf-require-router-alert}? 496 +--rw robustness-variable? uint8 497 +--rw version? uint8 498 +--rw max-groups-per-interface? uint32 499 | {intf-max-groups}? 500 +--rw interface* [interface-name] 501 +--rw interface-name if:interface-ref 502 +--rw last-member-query-interval? uint16 503 +--rw query-interval? uint16 504 +--rw query-max-response-time? uint16 505 +--rw require-router-alert? boolean 506 | {intf-require-router-alert}? 507 +--rw robustness-variable? uint8 508 +--rw version? uint8 509 +--rw enable? boolean 510 | {intf-admin-enable}? 511 +--rw group-policy? 512 | -> /acl:acls/acl/name 513 +--rw immediate-leave? empty 514 | {intf-immediate-leave}? 515 +--rw max-groups? uint32 516 | {intf-max-groups}? 517 +--rw max-group-sources? uint32 518 | {intf-max-group-sources}? 519 +--rw source-policy? 520 | -> /acl:acls/acl/name {intf-source-policy}? 521 +--rw verify-source-subnet? empty 522 | {intf-verify-source-subnet}? 523 +--rw explicit-tracking? empty 524 | {intf-explicit-tracking}? 525 +--rw exclude-lite? empty 526 | {intf-exclude-lite}? 527 +--rw join-group* 528 | rt-types:ipv6-multicast-group-address 529 | {intf-join-group}? 530 +--rw ssm-map* 531 | [ssm-map-source-addr ssm-map-group-policy] 532 | {intf-ssm-map}? 533 | +--rw ssm-map-source-addr ssm-map-ipv6-addr-type 534 | +--rw ssm-map-group-policy string 535 +--rw static-group* [group-addr source-addr] 536 | {intf-static-group}? 537 | +--rw group-addr 538 | | rt-types:ipv6-multicast-group-address 539 | +--rw source-addr 540 | rt-types:ipv6-multicast-source-address 541 +--ro oper-status enumeration 542 +--ro querier inet:ipv6-address 543 +--ro joined-group* 544 | rt-types:ipv6-multicast-group-address 545 | {intf-join-group}? 546 +--ro group* [group-address] 547 +--ro group-address 548 | rt-types:ipv6-multicast-group-address 549 +--ro expire uint32 550 +--ro filter-mode enumeration 551 +--ro up-time uint32 552 +--ro last-reporter? inet:ipv6-address 553 +--ro source* [source-address] 554 +--ro source-address inet:ipv6-address 555 +--ro expire uint32 556 +--ro up-time uint32 557 +--ro host-count? uint32 558 | {intf-explicit-tracking}? 559 +--ro last-reporter? inet:ipv6-address 560 +--ro host* [host-address] 561 {intf-explicit-tracking}? 562 +--ro host-address inet:ipv6-address 563 +--ro host-filter-mode enumeration 565 3.3. IGMP and MLD RPC 567 IGMP and MLD each have one RPC which clears the group membership 568 cache entries for that protocol. 570 rpcs: 571 +---x clear-igmp-groups {feature-igmp,rpc-clear-groups}? 572 | +---w input 573 | +---w interface-name? leafref 574 | +---w group-address? 575 | | rt-types:ipv4-multicast-group-address 576 | +---w source-address? 577 | rt-types:ipv4-multicast-source-address 578 +---x clear-mld-groups {feature-mld,rpc-clear-groups}? 579 +---w input 580 +---w interface-name? leafref {feature-mld}? 581 +---w group-address? 582 | rt-types:ipv6-multicast-group-address 583 +---w source-address? 584 rt-types:ipv6-multicast-source-address 586 4. IGMP and MLD YANG Module 588 file "ietf-igmp-mld@2019-04-03.yang" 589 module ietf-igmp-mld { 590 yang-version 1.1; 591 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; 592 prefix igmp-mld; 594 import ietf-inet-types { 595 prefix "inet"; 596 reference "RFC 6991: Common YANG Data Types"; 597 } 599 import ietf-yang-types { 600 prefix "yang"; 601 reference "RFC 6991: Common YANG Data Types"; 602 } 604 import ietf-routing-types { 605 prefix "rt-types"; 606 reference 607 "RFC 8294: Common YANG Data Types for the Routing Area"; 608 } 610 import ietf-access-control-list { 611 prefix "acl"; 612 reference 613 "RFC 8519: YANG Data Model for Network Access Control Lists 614 (ACLs)"; 615 } 617 import ietf-routing { 618 prefix "rt"; 619 reference 620 "RFC 8349: A YANG Data Model for Routing Management (NMDA 621 Version)"; 622 } 624 import ietf-interfaces { 625 prefix "if"; 626 reference "RFC 8343: A YANG Data Model for Interface Management"; 627 } 629 import ietf-ip { 630 prefix ip; 631 reference "RFC 8344: A YANG Data Model for IP Management"; 632 } 633 organization 634 "IETF PIM Working Group"; 636 contact 637 "WG Web: 638 WG List: 640 WG Chair: Stig Venaas 641 643 WG Chair: Mike McBride 644 646 Editor: Xufeng Liu 647 649 Editor: Feng Guo 650 652 Editor: Mahesh Sivakumar 653 655 Editor: Pete McAllister 656 658 Editor: Anish Peter 659 "; 661 description 662 "The module defines the configuration and operational state for 663 the Internet Group Management Protocol (IGMP) and Multicast 664 Listener Discovery (MLD) protocols. 666 Copyright (c) 2019 IETF Trust and the persons identified as 667 authors of the code. All rights reserved. 669 Redistribution and use in source and binary forms, with or 670 without modification, is permitted pursuant to, and subject to 671 the license terms contained in, the Simplified BSD License set 672 forth in Section 4.c of the IETF Trust's Legal Provisions 673 Relating to IETF Documents 674 (http://trustee.ietf.org/license-info). 676 This version of this YANG module is part of RFC XXXX; see the 677 RFC itself for full legal notices."; 679 // RFC Ed.: replace XXXX with actual RFC number and remove 680 // this note 681 revision 2019-04-03 { 682 description 683 "Initial revision."; 684 reference 685 "RFC XXXX: A YANG Data Model for IGMP and MLD"; 686 } 688 /* 689 * Features 690 */ 691 feature feature-igmp { 692 description 693 "Support IGMP protocol for IPv4 group membership record."; 694 } 696 feature feature-mld { 697 description 698 "Support MLD protocol for IPv6 group membership record."; 699 } 701 feature global-admin-enable { 702 description 703 "Support global configuration to enable or disable protocol."; 704 } 706 feature global-interface-config { 707 description 708 "Support global configuration applied for all interfaces."; 709 } 711 feature global-max-entries { 712 description 713 "Support configuration of global max-entries."; 714 } 716 feature global-max-groups { 717 description 718 "Support configuration of global max-groups."; 719 } 721 feature intf-admin-enable { 722 description 723 "Support configuration of interface administrative enabling."; 724 } 726 feature intf-immediate-leave { 727 description 728 "Support configuration of interface immediate-leave."; 729 } 730 feature intf-join-group { 731 description 732 "Support configuration of interface join-group."; 733 } 735 feature intf-max-groups { 736 description 737 "Support configuration of interface max-groups."; 738 } 740 feature intf-max-group-sources { 741 description 742 "Support configuration of interface max-group-sources."; 743 } 745 feature intf-require-router-alert { 746 description 747 "Support configuration of interface require-router-alert."; 748 } 750 feature intf-source-policy { 751 description 752 "Support configuration of interface source policy."; 753 } 755 feature intf-ssm-map { 756 description 757 "Support configuration of interface ssm-map."; 758 } 760 feature intf-static-group { 761 description 762 "Support configuration of interface static-group."; 763 } 765 feature intf-verify-source-subnet { 766 description 767 "Support configuration of interface verify-source-subnet."; 768 } 770 feature intf-explicit-tracking { 771 description 772 "Support configuration of interface explicit-tracking hosts."; 773 } 775 feature intf-exclude-lite { 776 description 777 "Support configuration of interface exclude-lite."; 779 } 781 feature per-interface-config { 782 description 783 "Support per interface configuration."; 784 } 786 feature rpc-clear-groups { 787 description 788 "Support rpc's to clear groups."; 789 } 791 /* 792 * Typedefs 793 */ 794 typedef ssm-map-ipv4-addr-type { 795 type union { 796 type enumeration { 797 enum 'policy' { 798 description 799 "Source address is specified in SSM map policy."; 800 } 801 } 802 type inet:ipv4-address; 803 } 804 description 805 "Multicast source IP address type for SSM map."; 806 } // source-ipv4-addr-type 808 typedef ssm-map-ipv6-addr-type { 809 type union { 810 type enumeration { 811 enum 'policy' { 812 description 813 "Source address is specified in SSM map policy."; 814 } 815 } 816 type inet:ipv6-address; 817 } 818 description 819 "Multicast source IP address type for SSM map."; 820 } // source-ipv6-addr-type 822 /* 823 * Identities 824 */ 825 identity igmp { 826 base "rt:control-plane-protocol"; 827 description "IGMP protocol."; 828 reference 829 "RFC3376: Internet Group Management Protocol, Version 3."; 830 } 832 identity mld { 833 base "rt:control-plane-protocol"; 834 description "MLD protocol."; 835 reference 836 "RFC3810: Multicast Listener Discovery Version 2 (MLDv2) for 837 IPv6."; 838 } 840 /* 841 * Groupings 842 */ 843 grouping global-config-attributes { 844 description 845 "This grouping is used in either IGMP schema or MLD schema. 846 When used in IGMP schema, this grouping contains the global 847 configuration for IGMP; 848 when used in MLD schema, this grouping contains the global 849 configuration for MLD."; 851 leaf enable { 852 if-feature global-admin-enable; 853 type boolean; 854 default true; 855 description 856 "When this grouping is used for IGMP, this leaf indicates 857 whether IGMP is enabled ('true') or disabled ('false') 858 in the routing instance. 859 When this grouping is used for MLD, this leaf indicates 860 whether MLD is enabled ('true') or disabled ('false') 861 in the routing instance."; 862 } 863 leaf max-entries { 864 if-feature global-max-entries; 865 type uint32; 866 description 867 "When this grouping is used for IGMP, this leaf indicates 868 the maximum number of entries in the IGMP instance. 869 When this grouping is used for MLD, this leaf indicates 870 the maximum number of entries in the MLD instance. 871 If this leaf is not specified, the number of entries is not 872 limited."; 873 } 874 leaf max-groups { 875 if-feature global-max-groups; 876 type uint32; 877 description 878 "When this grouping is used for IGMP, this leaf indicates 879 the maximum number of groups in the IGMP instance. 880 When this grouping is used for MLD, this leaf indicates 881 the maximum number of groups in the MLD instance. 882 If this leaf is not specified, the number of groups is not 883 limited."; 884 } 885 } // global-config-attributes 887 grouping global-state-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 IGMP state attributes; 892 when used in MLD schema, this grouping contains the global 893 MLD state attributes;"; 895 leaf entries-count { 896 type uint32; 897 config false; 898 description 899 "When this grouping is used for IGMP, this leaf indicates 900 the number of entries in the IGMP instance. 901 When this grouping is used for MLD, this leaf indicates 902 the number of entries in the MLD instance."; 903 } 904 leaf groups-count { 905 type uint32; 906 config false; 907 description 908 "When this grouping is used for IGMP, this leaf indicates 909 the number of existing groups in the IGMP instance. 910 When this grouping is used for MLD, this leaf indicates 911 the number of existing groups in the MLD instance."; 912 } 914 container statistics { 915 config false; 916 description 917 "When this grouping is used for IGMP, this container contains 918 the statistics for the IGMP instance. 919 When this grouping is used for MLD, this leaf indicates 920 the statistics for the MLD instance."; 922 leaf discontinuity-time { 923 type yang:date-and-time; 924 description 925 "The time on the most recent occasion at which any one 926 or more of the statistic counters suffered a 927 discontinuity. If no such discontinuities have occurred 928 since the last re-initialization of the local 929 management subsystem, then this node contains the time 930 the local management subsystem re-initialized itself."; 931 } 932 container error { 933 description "Statistics of errors."; 934 uses global-statistics-error; 935 } 936 container received { 937 description "Statistics of received messages."; 938 uses global-statistics-sent-received; 939 } 940 container sent { 941 description "Statistics of sent messages."; 942 uses global-statistics-sent-received; 943 } 944 } // statistics 945 } // global-state-attributes 947 grouping global-statistics-error { 948 description 949 "A grouping defining statistics attributes for errors."; 951 uses global-statistics-sent-received; 952 leaf checksum { 953 type yang:counter64; 954 description 955 "The number of checksum errors."; 956 } 957 leaf too-short { 958 type yang:counter64; 959 description 960 "The number of messages that are too short."; 961 } 962 } // global-statistics-error 964 grouping global-statistics-sent-received { 965 description 966 "A grouping defining statistics attributes."; 968 leaf total { 969 type yang:counter64; 970 description 971 "The number of total messages."; 972 } 973 leaf query { 974 type yang:counter64; 975 description 976 "The number of query messages."; 977 } 978 leaf report { 979 type yang:counter64; 980 description 981 "The number of report messages."; 982 } 983 leaf leave { 984 type yang:counter64; 985 description 986 "The number of leave messages."; 987 } 988 } // global-statistics-sent-received 990 grouping interface-global-config-attributes { 991 description 992 "Configuration attributes applied to the interface-global level 993 whose per interface attributes are not configured."; 995 leaf max-groups-per-interface { 996 if-feature intf-max-groups; 997 type uint32; 998 description 999 "The maximum number of groups associated with each interface. 1000 If this leaf is not specified, the number of groups is not 1001 limited."; 1002 } 1003 } //interface-global-config-attributes 1005 grouping interface-common-config-attributes { 1006 description 1007 "Configuration attributes applied to both the interface-global 1008 level and interface level."; 1010 leaf last-member-query-interval { 1011 type uint16 { 1012 range "1..1023"; 1013 } 1014 units seconds; 1015 default 1; 1016 description 1017 "Last Member Query Interval, which may be tuned to modify the 1018 leave latency of the network."; 1019 reference "RFC3376. Sec. 8.8."; 1020 } 1021 leaf query-interval { 1022 type uint16 { 1023 range "1..31744"; 1025 } 1026 units seconds; 1027 default 125; 1028 description 1029 "The Query Interval is the interval between General Queries 1030 sent by the Querier.In RFC3376, Querier's Query 1031 Interval(QQI) is represented from the Querier's Query 1032 Interval Code in query message as follows: 1033 If QQIC < 128, QQI = QQIC. 1034 If QQIC >= 128, QQIC represents a floating-point value as 1035 follows: 1036 0 1 2 3 4 5 6 7 1037 +-+-+-+-+-+-+-+-+ 1038 |1| exp | mant | 1039 +-+-+-+-+-+-+-+-+ 1040 QQI = (mant | 0x10) << (exp + 3). 1041 The maximum value of QQI is 31744."; 1042 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 1043 } 1044 leaf query-max-response-time { 1045 type uint16 { 1046 range "1..1023"; 1047 } 1048 units seconds; 1049 default 10; 1050 description 1051 "Query maximum response time specifies the maximum time 1052 allowed before sending a responding report."; 1053 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1054 } 1055 leaf require-router-alert { 1056 if-feature intf-require-router-alert; 1057 type boolean; 1058 default false; 1059 description 1060 "Protocol packets should contain router alert IP option."; 1061 } 1062 leaf robustness-variable { 1063 type uint8 { 1064 range "1..7"; 1065 } 1066 default 2; 1067 description 1068 "Querier's Robustness Variable allows tuning for the 1069 expected packet loss on a network."; 1070 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1071 } 1072 } // interface-common-config-attributes 1073 grouping interface-common-config-attributes-igmp { 1074 description 1075 "Configuration attributes applied to both the interface-global 1076 level and interface level for IGMP."; 1078 uses interface-common-config-attributes; 1079 leaf version { 1080 type uint8 { 1081 range "1..3"; 1082 } 1083 default 2; 1084 description "IGMP version."; 1085 reference "RFC1112, RFC2236, RFC3376."; 1086 } 1087 } 1089 grouping interface-common-config-attributes-mld { 1090 description 1091 "Configuration attributes applied to both the interface-global 1092 level and interface level for MLD."; 1094 uses interface-common-config-attributes; 1095 leaf version { 1096 type uint8 { 1097 range "1..2"; 1098 } 1099 default 2; 1100 description "MLD version."; 1101 reference "RFC2710, RFC3810."; 1102 } 1103 } 1105 grouping interfaces-config-attributes-igmp { 1106 description 1107 "Configuration attributes applied to the interface-global 1108 level for IGMP."; 1110 uses interface-common-config-attributes-igmp; 1111 uses interface-global-config-attributes; 1112 } 1114 grouping interfaces-config-attributes-mld { 1115 description 1116 "Configuration attributes applied to the interface-global 1117 level for MLD."; 1119 uses interface-common-config-attributes-mld; 1120 uses interface-global-config-attributes; 1121 } 1122 grouping interface-level-config-attributes { 1123 description 1124 "This grouping is used in either IGMP schema or MLD schema. 1125 When used in IGMP schema, this grouping contains the IGMP 1126 configuration attributes that are defined at the interface 1127 level but are not defined at the interface-global level; 1128 when used in MLD schema, this grouping contains the MLD 1129 configuration attributes that are defined at the interface 1130 level but are not defined at the interface-global level."; 1132 leaf enable { 1133 if-feature intf-admin-enable; 1134 type boolean; 1135 default true; 1136 description 1137 "When this grouping is used for IGMP, this leaf indicates 1138 whether IGMP is enabled ('true') or disabled ('false') 1139 on the interface. 1140 When this grouping is used for MLD, this leaf indicates 1141 whether MLD is enabled ('true') or disabled ('false') 1142 on the interface."; 1143 } 1144 leaf group-policy { 1145 type leafref { 1146 path "/acl:acls/acl:acl/acl:name"; 1147 } 1148 description 1149 "When this grouping is used for IGMP, this leaf specifies 1150 the name of the access policy used to filter the 1151 IGMP membership. 1152 When this grouping is used for MLD, this leaf specifies 1153 the name of the access policy used to filter the 1154 MLD membership. 1155 A device can restrict the length and value of this name, 1156 with the possibility that space and certain special 1157 characters are not allowed. 1158 If this leaf is not specified, no policy is applied, and 1159 all packets received from this interface are accepted."; 1160 } 1161 leaf immediate-leave { 1162 if-feature intf-immediate-leave; 1163 type empty; 1164 description 1165 "When this grouping is used for IGMP, the presence of this 1166 leaf requests IGMP to perform an immediate leave upon 1167 receiving an IGMPv2 leave message. 1168 If the router is IGMP-enabled, it sends an IGMP last member 1169 query with a last member query response time. However, the 1170 router does not wait for the response time before it prunes 1171 the group. 1172 When this grouping is used for MLD, the presence of this 1173 leaf requests MLD to perform an immediate leave upon 1174 receiving an MLDv1 leave message. 1175 If the router is MLD-enabled, it sends an MLD last member 1176 query with a last member query response time. However, the 1177 router does not wait for the response time before it prunes 1178 the group."; 1179 } 1180 leaf max-groups { 1181 if-feature intf-max-groups; 1182 type uint32; 1183 description 1184 "When this grouping is used for IGMP, this leaf indicates 1185 the maximum number of groups associated with the IGMP 1186 interface. 1187 When this grouping is used for MLD, this leaf indicates 1188 the maximum number of groups associated with the MLD 1189 interface. 1190 If this leaf is not specified, the number of groups is not 1191 limited."; 1192 } 1193 leaf max-group-sources { 1194 if-feature intf-max-group-sources; 1195 type uint32; 1196 description 1197 "The maximum number of group sources. 1198 If this leaf is not specified, the number of group sources 1199 is not limited."; 1200 } 1201 leaf source-policy { 1202 if-feature intf-source-policy; 1203 type leafref { 1204 path "/acl:acls/acl:acl/acl:name"; 1205 } 1206 description 1207 "Name of the access policy used to filter sources. 1208 A device can restrict the length and value of this name, 1209 with the possibility that space and certain special 1210 characters are not allowed. 1211 If this leaf is not specified, no policy is applied, and 1212 all packets received from this interface are accepted."; 1213 } 1214 leaf verify-source-subnet { 1215 if-feature intf-verify-source-subnet; 1216 type empty; 1217 description 1218 "If present, the interface accepts packets with matching 1219 source IP subnet only."; 1220 } 1221 leaf explicit-tracking { 1222 if-feature intf-explicit-tracking; 1223 type empty; 1224 description 1225 "When this grouping is used for IGMP, the presence of this 1226 leaf enables IGMP-based explicit membership tracking 1227 function for multicast routers and IGMP proxy devices 1228 supporting IGMPv3. 1229 When this grouping is used for MLD, the presence of this 1230 leaf enables MLD-based explicit membership tracking 1231 function for multicast routers and MLD proxy devices 1232 supporting MLDv2. 1233 The explicit membership tracking function contributes to 1234 saving network resources and shortening leave latency."; 1235 } 1236 leaf exclude-lite { 1237 if-feature intf-exclude-lite; 1238 type empty; 1239 description 1240 "When this grouping is used for IGMP, the presence of this 1241 leaf enables the support of the simplified EXCLUDE filter 1242 in the Lightweight IGMPv3 protocol, which simplifies the 1243 standard versions of IGMPv3. 1244 When this grouping is used for MLD, the presence of this 1245 leaf enables the support of the simplified EXCLUDE filter 1246 in the Lightweight MLDv2 protocol, which simplifies the 1247 standard versions of MLDv2."; 1248 reference "RFC5790"; 1249 } 1250 } // interface-level-config-attributes 1252 grouping interface-config-attributes-igmp { 1253 description 1254 "Per interface configuration attributes for IGMP."; 1256 uses interface-common-config-attributes-igmp; 1257 uses interface-level-config-attributes; 1258 leaf-list join-group { 1259 if-feature intf-join-group; 1260 type rt-types:ipv4-multicast-group-address; 1261 description 1262 "The router joins this multicast group on the interface."; 1263 } 1264 list ssm-map { 1265 if-feature intf-ssm-map; 1266 key "ssm-map-source-addr ssm-map-group-policy"; 1267 description "The policy for (*,G) mapping to (S,G)."; 1268 leaf ssm-map-source-addr { 1269 type ssm-map-ipv4-addr-type; 1270 description 1271 "Multicast source IPv4 address."; 1272 } 1273 leaf ssm-map-group-policy { 1274 type string; 1275 description 1276 "Name of the policy used to define ssm-map rules. 1277 A device can restrict the length 1278 and value of this name, possibly space and special 1279 characters are not allowed. "; 1280 } 1281 } 1282 list static-group { 1283 if-feature intf-static-group; 1284 key "group-addr source-addr"; 1285 description 1286 "A static multicast route, (*,G) or (S,G)."; 1288 leaf group-addr { 1289 type rt-types:ipv4-multicast-group-address; 1290 description 1291 "Multicast group IPv4 address."; 1292 } 1293 leaf source-addr { 1294 type rt-types:ipv4-multicast-source-address; 1295 description 1296 "Multicast source IPv4 address."; 1297 } 1298 } 1299 } // interface-config-attributes-igmp 1301 grouping interface-config-attributes-mld { 1302 description 1303 "Per interface configuration attributes for MLD."; 1305 uses interface-common-config-attributes-mld; 1306 uses interface-level-config-attributes; 1307 leaf-list join-group { 1308 if-feature intf-join-group; 1309 type rt-types:ipv6-multicast-group-address; 1310 description 1311 "The router joins this multicast group on the interface."; 1312 } 1313 list ssm-map { 1314 if-feature intf-ssm-map; 1315 key "ssm-map-source-addr ssm-map-group-policy"; 1316 description "The policy for (*,G) mapping to (S,G)."; 1317 leaf ssm-map-source-addr { 1318 type ssm-map-ipv6-addr-type; 1319 description 1320 "Multicast source IPv6 address."; 1321 } 1322 leaf ssm-map-group-policy { 1323 type string; 1324 description 1325 "Name of the policy used to define ssm-map rules. 1326 A device can restrict the length 1327 and value of this name, possibly space and special 1328 characters are not allowed."; 1329 } 1330 } 1331 list static-group { 1332 if-feature intf-static-group; 1333 key "group-addr source-addr"; 1334 description 1335 "A static multicast route, (*,G) or (S,G)."; 1337 leaf group-addr { 1338 type rt-types:ipv6-multicast-group-address; 1339 description 1340 "Multicast group IPv6 address."; 1341 } 1342 leaf source-addr { 1343 type rt-types:ipv6-multicast-source-address; 1344 description 1345 "Multicast source IPv6 address."; 1346 } 1347 } 1348 } // interface-config-attributes-mld 1350 grouping interface-state-attributes-igmp-mld { 1351 description 1352 "Per interface state attributes for both IGMP and MLD."; 1354 leaf oper-status { 1355 type enumeration { 1356 enum up { 1357 description 1358 "Ready to pass packets."; 1359 } 1360 enum down { 1361 description 1362 "The interface does not pass any packets."; 1363 } 1364 } 1365 config false; 1366 mandatory true; 1367 description 1368 "Indicates whether the operational state of the interface 1369 is up or down."; 1370 } 1371 } // interface-config-attributes-igmp-mld 1373 grouping interface-state-attributes-igmp { 1374 description 1375 "Per interface state attributes for IGMP."; 1377 uses interface-state-attributes-igmp-mld; 1378 leaf querier { 1379 type inet:ipv4-address; 1380 config false; 1381 mandatory true; 1382 description "The querier address in the subnet"; 1383 } 1384 leaf-list joined-group { 1385 if-feature intf-join-group; 1386 type rt-types:ipv4-multicast-group-address; 1387 config false; 1388 description 1389 "The routers that joined this multicast group."; 1390 } 1391 list group { 1392 key "group-address"; 1393 config false; 1394 description 1395 "Multicast group membership information 1396 that joined on the interface."; 1398 leaf group-address { 1399 type rt-types:ipv4-multicast-group-address; 1400 description 1401 "Multicast group address."; 1402 } 1403 uses interface-state-group-attributes-igmp-mld; 1404 leaf last-reporter { 1405 type inet:ipv4-address; 1406 description 1407 "The IPv4 address of the last host which has sent the 1408 report to join the multicast group."; 1409 } 1410 list source { 1411 key "source-address"; 1412 description 1413 "List of multicast source information 1414 of the multicast group."; 1416 leaf source-address { 1417 type inet:ipv4-address; 1418 description 1419 "Multicast source address in group record."; 1420 } 1421 uses interface-state-source-attributes-igmp-mld; 1422 leaf last-reporter { 1423 type inet:ipv4-address; 1424 description 1425 "The IPv4 address of the last host which has sent the 1426 report to join the multicast source and group."; 1427 } 1428 list host { 1429 if-feature intf-explicit-tracking; 1430 key "host-address"; 1431 description 1432 "List of hosts with the membership for the specific 1433 multicast source-group."; 1435 leaf host-address { 1436 type inet:ipv4-address; 1437 description 1438 "The IPv6 address of the host."; 1439 } 1440 uses interface-state-host-attributes-igmp-mld; 1441 }// list host 1442 } // list source 1443 } // list group 1444 } // interface-state-attributes-igmp 1446 grouping interface-state-attributes-mld { 1447 description 1448 "Per interface state attributes for MLD."; 1450 uses interface-state-attributes-igmp-mld; 1451 leaf querier { 1452 type inet:ipv6-address; 1453 config false; 1454 mandatory true; 1455 description 1456 "The querier address in the subnet."; 1457 } 1458 leaf-list joined-group { 1459 if-feature intf-join-group; 1460 type rt-types:ipv6-multicast-group-address; 1461 config false; 1462 description 1463 "The routers that joined this multicast group."; 1464 } 1465 list group { 1466 key "group-address"; 1467 config false; 1468 description 1469 "Multicast group membership information 1470 that joined on the interface."; 1472 leaf group-address { 1473 type rt-types:ipv6-multicast-group-address; 1474 description 1475 "Multicast group address."; 1476 } 1477 uses interface-state-group-attributes-igmp-mld; 1478 leaf last-reporter { 1479 type inet:ipv6-address; 1480 description 1481 "The IPv6 address of the last host which has sent the 1482 report to join the multicast group."; 1483 } 1484 list source { 1485 key "source-address"; 1486 description 1487 "List of multicast sources of the multicast group."; 1489 leaf source-address { 1490 type inet:ipv6-address; 1491 description 1492 "Multicast source address in group record"; 1493 } 1494 uses interface-state-source-attributes-igmp-mld; 1495 leaf last-reporter { 1496 type inet:ipv6-address; 1497 description 1498 "The IPv6 address of the last host which has sent the 1499 report to join the multicast source and group."; 1500 } 1501 list host { 1502 if-feature intf-explicit-tracking; 1503 key "host-address"; 1504 description 1505 "List of hosts with the membership for the specific 1506 multicast source-group."; 1508 leaf host-address { 1509 type inet:ipv6-address; 1510 description 1511 "The IPv6 address of the host."; 1513 } 1514 uses interface-state-host-attributes-igmp-mld; 1515 }// list host 1516 } // list source 1517 } // list group 1518 } // interface-state-attributes-mld 1520 grouping interface-state-group-attributes-igmp-mld { 1521 description 1522 "Per interface state attributes for both IGMP and MLD 1523 groups."; 1525 leaf expire { 1526 type uint32; 1527 units seconds; 1528 mandatory true; 1529 description 1530 "The time left before multicast group state expires."; 1531 } 1532 leaf filter-mode { 1533 type enumeration { 1534 enum "include" { 1535 description 1536 "In include mode, reception of packets sent 1537 to the specified multicast address is requested 1538 only from those IP source addresses listed in the 1539 source-list parameter"; 1540 } 1541 enum "exclude" { 1542 description 1543 "In exclude mode, reception of packets sent 1544 to the given multicast address is requested 1545 from all IP source addresses except those 1546 listed in the source-list parameter."; 1547 } 1548 } 1549 mandatory true; 1550 description 1551 "Filter mode for a multicast group, 1552 may be either include or exclude."; 1553 } 1554 leaf up-time { 1555 type uint32; 1556 units seconds; 1557 mandatory true; 1558 description 1559 "The elapsed time since the device created multicast group 1560 record."; 1561 } 1563 } // interface-state-group-attributes-igmp-mld 1565 grouping interface-state-source-attributes-igmp-mld { 1566 description 1567 "Per interface state attributes for both IGMP and MLD 1568 source-group records."; 1570 leaf expire { 1571 type uint32; 1572 units seconds; 1573 mandatory true; 1574 description 1575 "The time left before multicast source-group state expires."; 1576 } 1577 leaf up-time { 1578 type uint32; 1579 units seconds; 1580 mandatory true; 1581 description 1582 "The elapsed time since the device created multicast 1583 source-group record."; 1584 } 1585 leaf host-count { 1586 if-feature intf-explicit-tracking; 1587 type uint32; 1588 description 1589 "The number of host addresses."; 1590 } 1591 } // interface-state-source-attributes-igmp-mld 1593 grouping interface-state-host-attributes-igmp-mld { 1594 description 1595 "Per interface state attributes for both IGMP and MLD 1596 hosts of source-group records."; 1598 leaf host-filter-mode { 1599 type enumeration { 1600 enum "include" { 1601 description 1602 "In include mode"; 1603 } 1604 enum "exclude" { 1605 description 1606 "In exclude mode."; 1607 } 1608 } 1609 mandatory true; 1610 description 1611 "Filter mode for a multicast membership 1612 host may be either include or exclude."; 1613 } 1614 } // interface-state-host-attributes-igmp-mld 1616 /* 1617 * Configuration and Operational state data nodes (NMDA version) 1618 */ 1619 augment "/rt:routing/rt:control-plane-protocols/" 1620 + "rt:control-plane-protocol" { 1621 when "derived-from-or-self(rt:type, 'igmp-mld:igmp')" { 1622 description 1623 "This augmentation is only valid for a control-plane 1624 protocol instance of IGMP (type 'igmp')."; 1625 } 1626 description 1627 "IGMP augmentation to routing control plane protocol 1628 configuration and state."; 1630 container igmp { 1631 if-feature feature-igmp; 1632 description 1633 "IGMP configuration and operational state data."; 1635 container global { 1636 description 1637 "Global attributes."; 1639 uses global-config-attributes; 1640 uses global-state-attributes; 1641 } 1642 container interfaces { 1643 description 1644 "Containing a list of interfaces."; 1646 uses interfaces-config-attributes-igmp { 1647 if-feature global-interface-config; 1648 } 1649 list interface { 1650 key "interface-name"; 1651 description 1652 "List of IGMP interfaces."; 1654 leaf interface-name { 1655 type if:interface-ref; 1656 must "/if:interfaces/if:interface[if:name = current()]/" 1657 + "ip:ipv4" { 1658 description 1659 "The interface must have IPv4 configured, either 1660 enabled or disabled."; 1662 } 1663 description 1664 "Reference to an entry in the global interface list."; 1665 } 1666 uses interface-config-attributes-igmp { 1667 if-feature per-interface-config; 1668 } 1669 uses interface-state-attributes-igmp; 1670 } // interface 1671 } // interfaces 1672 } // igmp 1673 } //augment 1675 augment "/rt:routing/rt:control-plane-protocols/" 1676 + "rt:control-plane-protocol" { 1677 when "derived-from-or-self(rt:type, 'igmp-mld:mld')" { 1678 description 1679 "This augmentation is only valid for a control-plane 1680 protocol instance of IGMP (type 'mld')."; 1681 } 1682 description 1683 "MLD augmentation to routing control plane protocol 1684 configuration and state."; 1686 container mld { 1687 if-feature feature-mld; 1688 description 1689 "MLD configuration and operational state data."; 1691 container global { 1692 description 1693 "Global attributes."; 1695 uses global-config-attributes; 1696 uses global-state-attributes; 1697 } 1698 container interfaces { 1699 description 1700 "Containing a list of interfaces."; 1702 uses interfaces-config-attributes-mld { 1703 if-feature global-interface-config; 1704 } 1705 list interface { 1706 key "interface-name"; 1707 description 1708 "List of MLD interfaces."; 1710 leaf interface-name { 1711 type if:interface-ref; 1712 must "/if:interfaces/if:interface[if:name = current()]/" 1713 + "ip:ipv6" { 1714 description 1715 "The interface must have IPv6 configured, either 1716 enabled or disabled."; 1717 } 1718 description 1719 "Reference to an entry in the global interface list."; 1720 } 1721 uses interface-config-attributes-mld { 1722 if-feature per-interface-config; 1723 } 1724 uses interface-state-attributes-mld; 1725 } // interface 1726 } // interfaces 1727 } // mld 1728 } // augment 1730 /* 1731 * RPCs 1732 */ 1733 rpc clear-igmp-groups { 1734 if-feature feature-igmp; 1735 if-feature rpc-clear-groups; 1736 description 1737 "Clears the specified IGMP cache entries."; 1739 input { 1740 leaf interface-name { 1741 type leafref { 1742 path "/rt:routing/rt:control-plane-protocols/" 1743 + "rt:control-plane-protocol/" 1744 + "igmp-mld:igmp/igmp-mld:interfaces/" 1745 + "igmp-mld:interface/igmp-mld:interface-name"; 1746 } 1747 description 1748 "Name of the IGMP interface. 1749 If it is not specified, IGMP groups from all interfaces 1750 are cleared."; 1751 } 1752 leaf group-address { 1753 type rt-types:ipv4-multicast-group-address; 1754 description 1755 "Multicast group IPv4 address. 1756 If it is not specified, all IGMP group entries are 1757 cleared."; 1758 } 1759 leaf source-address { 1760 type rt-types:ipv4-multicast-source-address; 1761 description 1762 "Multicast source IPv4 address. 1763 If it is not specified, all IGMP source-group entries are 1764 cleared."; 1765 } 1766 } 1767 } // rpc clear-igmp-groups 1769 rpc clear-mld-groups { 1770 if-feature feature-mld; 1771 if-feature rpc-clear-groups; 1772 description 1773 "Clears the specified MLD cache entries."; 1775 input { 1776 leaf interface-name { 1777 if-feature feature-mld; 1778 type leafref { 1779 path "/rt:routing/rt:control-plane-protocols/" 1780 + "rt:control-plane-protocol/" 1781 + "igmp-mld:mld/igmp-mld:interfaces/" 1782 + "igmp-mld:interface/igmp-mld:interface-name"; 1783 } 1784 description 1785 "Name of the MLD interface. 1786 If it is not specified, MLD groups from all interfaces 1787 are cleared."; 1788 } 1789 leaf group-address { 1790 type rt-types:ipv6-multicast-group-address; 1791 description 1792 "Multicast group IPv6 address. 1793 If it is not specified, all MLD group entries are 1794 cleared."; 1795 } 1796 leaf source-address { 1797 type rt-types:ipv6-multicast-source-address; 1798 description 1799 "Multicast source IPv6 address. 1800 If it is not specified, all MLD source-group entries are 1801 cleared."; 1802 } 1803 } 1804 } // rpc clear-mld-groups 1805 } 1806 1808 5. Security Considerations 1810 The YANG module specified in this document defines a schema for data 1811 that is designed to be accessed via network management protocols 1812 such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF 1813 layer is the secure transport layer, and the mandatory-to-implement 1814 secure transport is Secure Shell (SSH) [RFC6242]. The lowest 1815 RESTCONF layer is HTTPS, and the mandatory-to-implement secure 1816 transport is TLS [RFC 8446]. 1818 The Network Configuration Access Control Model (NACM) [RFC8341] 1819 provides the means to restrict access for particular NETCONF or 1820 RESTCONF users to a preconfigured subset of all available NETCONF or 1821 RESTCONF protocol operations and content. 1823 There are a number of data nodes defined in this YANG module that 1824 are writable/creatable/deletable (i.e., config true, which is the 1825 default). These data nodes may be considered sensitive or vulnerable 1826 in some network environments. Write operations (e.g., edit-config) 1827 to these data nodes without proper protection can have a negative 1828 effect on network operations. These are the subtrees and data nodes 1829 and their sensitivity/vulnerability: 1831 Under /rt:routing/rt:control-plane-protocols 1832 /rt:control-plane-protocol/igmp-mld:igmp, 1834 igmp-mld:global 1836 This subtree specifies the configuration for the IGMP attributes 1837 at the global level on an IGMP instance. Modifying the 1838 configuration can cause IGMP membership deleted or reconstructed 1839 on all the interfaces of an IGMP instance. 1841 igmp-mld:interfaces 1843 This subtree specifies the configuration for the IGMP attributes 1844 at the interface-global level on a IGMP instance. Modifying the 1845 configuration can cause IGMP membership deleted or reconstructed 1846 on all the interfaces of an IGMP instance. 1848 igmp-mold:interfaces/interface 1850 This subtree specifies the configuration for the IGMP attributes 1851 at the interface level on an IGMP instance. Modifying the 1852 configuration can cause IGMP membership deleted or reconstructed 1853 on a specific interface of an IGMP instance. 1855 Under /rt:routing/rt:control-plane-protocols 1856 /rt:control-plane-protocol/igmp-mld:mld, 1857 igmp-mld:global 1859 This subtree specifies the configuration for the MLD attributes at 1860 the global level on an MLD instance. Modifying the configuration 1861 can cause MLD membership deleted or reconstructed on all the 1862 interfaces of an MLD instance. 1864 igmp-mld:interfaces 1866 This subtree specifies the configuration for the MLD attributes at 1867 the interface-global level on an MLD instance. Modifying the 1868 configuration can cause MLD membership deleted or reconstructed on 1869 all the interfaces of an MLD instance. 1871 igmp-mld:interfaces/interface 1873 This subtree specifies the configuration for the MLD attributes at 1874 the interface level on a device. Modifying the configuration can 1875 cause MLD membership deleted or reconstructed on a specific 1876 interface of an MLD instance. 1878 Unauthorized access to any data node of these subtrees can adversely 1879 affect the membership records of multicast routing subsystem on the 1880 local device. This may lead to network malfunctions, delivery of 1881 packets to inappropriate destinations, and other problems. 1883 Some of the readable data nodes in this YANG module may be 1884 considered sensitive or vulnerable in some network environments. It 1885 is thus important to control read access (e.g., via get, get-config, 1886 or notification) to these data nodes. These are the subtrees and 1887 data nodes and their sensitivity/vulnerability: 1889 /rt:routing/rt:control-plane-protocols 1890 /rt:control-plane-protocol/igmmp-mld:igmp 1892 /rt:routing/rt:control-plane-protocols 1893 /rt:control-plane-protocol/igmp-mld:mld 1895 Unauthorized access to any data node of the above subtree can 1896 disclose the operational state information of IGMP or MLD on this 1897 device. 1899 Some of the RPC operations in this YANG module may be considered 1900 sensitive or vulnerable in some network environments. It is thus 1901 important to control access to these operations. These are the 1902 operations and their sensitivity/vulnerability: 1904 clear-igmp-groups 1906 clear-mld-groups 1908 Unauthorized access to any of the above RPC operations can delete 1909 the IGMP or MLD membership records on this device. 1911 6. IANA Considerations 1913 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1914 actual RFC number (and remove this note). 1916 This document registers the following namespace URIs in the IETF XML 1917 registry [RFC3688]: 1919 -------------------------------------------------------------------- 1921 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1923 Registrant Contact: The IESG. 1925 XML: N/A, the requested URI is an XML namespace. 1927 -------------------------------------------------------------------- 1929 This document registers the following YANG modules in the YANG Module 1930 Names registry [RFC6020]: 1932 -------------------------------------------------------------------- 1934 name: ietf-igmp-mld 1936 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1938 prefix: igmp-mld 1940 reference: RFC XXXX 1942 -------------------------------------------------------------------- 1944 7. Acknowledgments 1946 The authors would like to thank Steve Baillargeon, Hu Fangwei, 1947 Robert Kebler, Tanmoy Kundu, and Stig Venaas for their valuable 1948 contributions. 1950 8. Contributing Authors 1952 Yisong Liu 1953 Huawei Technologies 1954 Huawei Bldg., No.156 Beiqing Rd. 1955 Beijing 100095 1956 China 1958 Email: liuyisong@huawei.com 1960 9. References 1962 9.1. Normative References 1964 [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, 1965 RFC 1112, August 1989. 1967 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 1968 2", RFC 2236, November 1997. 1970 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 1971 Listener Discovery (MLD) for IPv6", RFC 2710, October 1972 1999. 1974 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 1975 Thyagarajan, "Internet Group Management Protocol, Version 1976 3", RFC 3376, October 2002. 1978 [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific 1979 Multicast (SSM)", RFC 3569, July 2003. 1981 [RFC3688] Mealling, M., "The IETF XML Registry", RFC 3688, January 1982 2004. 1984 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 1985 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 1987 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 1988 IP", RFC 4607, August 2006. 1990 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 1991 (TLS) Protocol Version 1.2", RFC 5246, August 2008. 1993 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1994 the Network Configuration Protocol (NETCONF)", RFC 6020, 1995 October 2010. 1997 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1998 and A. Bierman, Ed., "Network Configuration Protocol 1999 (NETCONF)", RFC 6241, June 2011. 2001 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2002 Shell (SSH)", RFC 6242, June 2011. 2004 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2005 Protocol (NETCONF) Access Control Model", RFC 6536, March 2006 2012. 2008 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 2009 RFC 6991, July 2013. 2011 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2012 RFC 7950, August 2016. 2014 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2015 Protocol", RFC 8040, January 2017. 2017 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 2018 "Common YANG Data Types for the Routing Area", RFC 8294, 2019 December 2017. 2021 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 2022 and R. Wilton, "Network Management Datastore Architecture 2023 (NMDA)", RFC 8342, March 2018. 2025 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 2026 Management", RFC 8343, March 2018. 2028 [RFC8344] M. Bjorklund, "A YANG Data Model for IP Management", 2029 RFC8344, March 2018. 2031 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 2032 Routing Management (NMDA Version)", RFC 8349, March 2018. 2034 [I-D.ietf-acl-yang] M. Jethanandani, L. Huang, S. Agarwal and D. 2035 Blair, "Network Access Control List (ACL) YANG Data 2036 Model", draft-ietf-netmod-acl-model-19(work in progress), 2037 April 2018. 2039 9.2. Informative References 2041 [RFC4541] M. Christensen, K. Kimball and F. Solensky, 2042 "Considerations for Internet Group Management Protocol 2043 (IGMP) and Multicast Listener Discovery (MLD) Snooping 2044 Switches", RFC 4541, May 2006. 2046 [RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet 2047 Group Management Protocol (IGMP) / Multicast Listener 2048 Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD 2049 Proxying")", RFC 4605, August 2006. 2051 [RFC5790] H. Liu, W. Cao and H. Asaeda, "Lightweight Internet Group 2052 Management Protocol Version 3 (IGMPv3) and Multicast 2053 Listener Discovery Version 2 (MLDv2) Protocols", RFC 5790, 2054 February 2010. 2056 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 2057 BCP 215, RFC 8340, March 2018 2059 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of YANG 2060 Data Model Documents", draft-ietf-netmod-rfc6087bis- 2061 20(work in progress), March 2018. 2063 Authors' Addresses 2065 Xufeng Liu 2066 Volta Networks 2068 Email: xufeng.liu.ietf@gmail.com 2070 Feng Guo 2071 Huawei Technologies 2072 Huawei Bldg., No.156 Beiqing Rd. 2073 Beijing 100095 2074 China 2076 Email: guofeng@huawei.com 2078 Mahesh Sivakumar 2079 Juniper Networks 2080 1133 Innovation Way 2081 Sunnyvale, California 2082 USA 2084 Email: sivakumar.mahesh@gmail.com 2086 Pete McAllister 2087 Metaswitch Networks 2088 100 Church Street 2089 Enfield EN2 6BQ 2090 UK 2092 Email: pete.mcallister@metaswitch.com 2094 Anish Peter 2095 Individual 2097 Email: anish.ietf@gmail.com