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