idnits 2.17.1 draft-ietf-pim-igmp-mld-yang-05.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 36 instances of too long lines in the document, the longest one being 16 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 252 has weird spacing: '...-policy str...' == Line 255 has weird spacing: '...ce-addr sou...' == Line 333 has weird spacing: '...-policy str...' == Line 336 has weird spacing: '...ce-addr sou...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (Sep 19, 2017) is 2411 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'RFC3688' is mentioned on line 1441, but not defined == Unused Reference: 'RFC6087' is defined on line 1478, but no explicit reference was found in the text == Unused Reference: 'I-D.dsdt-nmda-guidelines' is defined on line 1491, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-netmod-rfc6087bis' is defined on line 1503, but no explicit reference was found in the text == Unused Reference: 'I-D.acee-netmod-rfc8022bis' is defined on line 1507, but no explicit reference was found in the text ** Obsolete normative reference: RFC 6087 (Obsoleted by RFC 8407) ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) ** Downref: Normative reference to an Informational draft: draft-dsdt-nmda-guidelines (ref. 'I-D.dsdt-nmda-guidelines') == Outdated reference: A later version (-20) exists of draft-ietf-netmod-rfc6087bis-14 == Outdated reference: A later version (-06) exists of draft-acee-netmod-rfc8022bis-02 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 Jabil 3 Intended Status: Standard Track F. Guo 4 Expires: March 19, 2018 Huawei 5 M. Sivakumar 6 Cisco 7 P. McAllister 8 Metaswitch Networks 9 A. Peter 10 Juniper Networks 11 Sep 19, 2017 13 A YANG data model for Internet Group Management Protocol (IGMP) and 14 Multicast Listener Discovery (MLD) 15 draft-ietf-pim-igmp-mld-yang-05 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 March 20, 2017. 40 Copyright Notice 42 Copyright (c) 2017 IETF Trust and the persons identified as the 43 document authors. All rights reserved. 45 This document is subject to BCP 78 and the IETF Trust's Legal 46 Provisions Relating to IETF Documents 47 (http://trustee.ietf.org/license-info) in effect on the date of 48 publication of this document. Please review these documents 49 carefully, as they describe your rights and restrictions with 50 respect to this document. Code Components extracted from this 51 document must include Simplified BSD License text as described in 52 Section 4.e of the Trust Legal Provisions and are provided without 53 warranty as described in the Simplified BSD License. 55 Abstract 57 This document defines a YANG data model that can be used to 58 configure and manage Internet Group Management Protocol (IGMP) and 59 Multicast Listener Discovery (MLD) devices. 61 Table of Contents 63 1. Introduction ................................................ 2 64 1.1. Requirements Language................................... 3 65 1.2. Terminology ............................................ 3 66 2. Design of Data model......................................... 3 67 2.1. Scope of model ......................................... 3 68 2.2. Optional capabilities................................... 3 69 2.3. Position of address family in hierarchy................. 4 70 3. Module Structure ............................................ 4 71 3.1. IGMP Configuration and Operational state................ 4 72 3.2. MLD Configuration and Operational State................. 6 73 3.3. IGMP and MLD RPC........................................ 8 74 4. IGMP and MLD YANG Modules.................................... 8 75 5. Security Considerations..................................... 30 76 6. IANA Considerations ........................................ 30 77 7. References ................................................. 31 78 7.1. Normative References................................... 31 79 7.2. Informative References................................. 32 80 8. Acknowledgments ............................................ 32 82 1. Introduction 84 YANG [RFC6020] [RFC7950] is a data definition language that was 85 introduced to model the configuration and running state of a device 86 managed using NETCONF [RFC6241]. YANG is now also being used as a 87 component of wider management interfaces, such as CLIs. 89 This document defines a YANG data model that can be used to 90 configure and manage Internet Group Management Protocol (IGMP) and 91 Multicast Listener Discovery (MLD) devices. This model will support 92 the core IGMP and MLD protocols, as well as many other features 93 mentioned in separate IGMP and MLD RFCs. Non-core features are 94 defined as optional in the provided data model. 96 1.1. Requirements Language 98 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 99 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 100 document are to be interpreted as described in RFC-2119 [RFC2119]. 102 1.2. Terminology 104 The terminology for describing YANG data models is found in 105 [RFC6020] [RFC7950]. 107 This document employs YANG tree diagrams, which are explained in [I- 108 D.ietf-netmod-rfc6087bis]. 110 2. Design of Data model 112 2.1. Scope of model 114 The model covers IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 115 [RFC3376] and MLDv1 [RFC2710], MLDv2 [RFC3810]. 117 The configuration of IGMP and MLD features, and the operational 118 state fields and RPC definitions are not all included in this 119 document of the data model. This model can be extended, though the 120 structure of what has been written may be taken as representative of 121 the structure of the whole model. 123 This model does not cover other IGMP and MLD related protocols such 124 as IGMP/MLD Proxy [RFC4605] or IGMP/MLD Snooping [RFC4541] etc., 125 these will be specified in separate documents. 127 2.2. Optional capabilities 129 This model is designed to represent the capabilities of IGMP and MLD 130 devices with various specifications, including some with basic 131 subsets of the IGMP and MLD protocols. The main design goals of 132 this document are that any major now-existing implementation may be 133 said to support the basic model, and that the configuration of all 134 implementations meeting the specification is easy to express through 135 some combination of the features in the basic model and simple 136 vendor augmentations. 138 There is also value in widely-supported features being standardized, 139 to save work for individual vendors, and so that mapping between 140 different vendors' configuration is not needlessly complicated. 141 Therefore these modules declare a number of features representing 142 capabilities that not all deployed devices support. 144 The extensive use of feature declarations should also substantially 145 simplify the capability negotiation process for a vendor's IGMP and 146 MLD implementations. 148 On the other hand, operational state parameters are not so widely 149 designated as features, as there are many cases where the defaulting 150 of an operational state parameter would not cause any harm to the 151 system, and it is much more likely that an implementation without 152 native support for a piece of operational state would be able to 153 derive a suitable value for a state variable that is not natively 154 supported. 156 For the same reason, wide constant ranges (for example, timer 157 maximum and minimum) will be used in the model. It is expected that 158 vendors will augment the model with any specific restrictions that 159 might be required. Vendors may also extend the features list with 160 proprietary extensions. 162 2.3. Position of address family in hierarchy 164 The current document contains IGMP and MLD as separate schema 165 branches in the structure. The reason for this is to make it easier 166 for implementations which may optionally choose to support specific 167 address families. And the names of objects may be different between 168 the IPv4 (IGMP) and IPv6 (MLD) address families. 170 3. Module Structure 172 3.1. IGMP Configuration and Operational state 174 The IGMP YANG model follows the Guidelines for YANG Module Authors 175 (NMDA) [draft-dsdt-nmda-guidelines-01]. The IGMP module defines the 176 routing-control-plane-protocol-wide configuration and operational 177 state options separately in a three-level hierarchy as listed below: 179 Global level: IGMP configuration and operational state attributes 180 for the entire routing system. 182 Interface-global: Only including configuration data nodes now. 183 IGMP configuration attributes are applicable to all the interfaces 184 whose interface-level corresponding attributes are not existing, 185 with same attributes' value for these interfaces. 187 Interface-level: IGMP configuration and operational state 188 attributes specific to the given interface. 190 Where fields are not genuinely essential to protocol operation, they 191 are marked as optional. Some fields will be essential but have a 192 default specified, so that they need not be configured explicitly. 194 We define the IGMP model as a protocol-centric model , and the IGMP 195 model augments "/rt:routing/rt:control-plane-protocols/ rt:control- 196 plane-protocol" in [draft-acee-netmod-rfc8022bis-01] and would allow 197 a single protocol instance per VRF. 199 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 200 +--rw igmp 201 +--rw global 202 | +--rw enable? boolean {global-admin-enable}? 203 | +--rw max-entries? uint32 {global-max-entries}? 204 | +--rw max-groups? uint32 {global-max-groups}? 205 | +--ro entries-count? uint32 206 | +--ro groups-count? uint32 207 | +--ro statistics 208 | +--ro discontinuity-time? yang:date-and-time 209 | +--ro error 210 | | +--ro total? yang:counter64 211 | | +--ro query? yang:counter64 212 | | +--ro report? yang:counter64 213 | | +--ro leave? yang:counter64 214 | | +--ro checksum? yang:counter64 215 | | +--ro too-short? yang:counter64 216 | +--ro received 217 | | +--ro total? yang:counter64 218 | | +--ro query? yang:counter64 219 | | +--ro report? yang:counter64 220 | | +--ro leave? yang:counter64 221 | +--ro sent 222 | +--ro total? yang:counter64 223 | +--ro query? yang:counter64 224 | +--ro report? yang:counter64 225 | +--ro leave? yang:counter64 226 +--rw interfaces 227 +--rw last-member-query-interval? uint16 228 +--rw max-groups-per-interface? uint32 {intf-max-groups}? 229 +--rw query-interval? uint16 230 +--rw query-max-response-time? uint16 231 +--rw require-router-alert? boolean {intf-require-router-alert}? 232 +--rw robustness-variable? uint8 233 +--rw version? uint8 234 +--rw interface* [interface-name] 235 +--rw interface-name if:interface-ref 236 +--rw enable? boolean {intf-admin-enable}? 237 +--rw group-policy? string 238 +--rw immediate-leave? empty {intf-immediate-leave}? 239 +--rw last-member-query-interval? uint16 240 +--rw max-groups? uint32 {intf-max-groups}? 241 +--rw max-group-sources? uint32 {intf-max-group-sources}? 242 +--rw query-interval? uint16 243 +--rw query-max-response-time? uint16 244 +--rw require-router-alert? boolean {intf-require-router-alert}? 245 +--rw robustness-variable? uint8 246 +--rw source-policy? string {intf-source-policy}? 247 +--rw verify-source-subnet? empty {intf-verify-source-subnet}? 248 +--rw version? uint8 249 +--rw join-group* inet:ipv4-address {intf-join-group}? 250 +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? 251 | +--rw source-addr ssm-map-ipv4-addr-type 252 | +--rw group-policy string 253 +--rw static-group* [group-addr source-addr] {intf-static-group} 254 | +--rw group-addr inet:ipv4-address 255 | +--rw source-addr source-ipv4-addr-type 256 +--ro oper-status? enumeration 257 +--ro querier? inet:ipv4-address 258 +--ro joined-group* inet:ipv4-address {intf-join-group}? 259 +--ro group* [address] 260 +--ro address inet:ipv4-address 261 +--ro expire? uint32 262 +--ro filter-mode? enumeration 263 +--ro host-count? uint32 264 +--ro up-time? uint32 265 +--ro host* inet:ipv4-address 266 +--ro last-reporter? inet:ipv4-address 267 +--ro source* [address] 268 +--ro address inet:ipv4-address 269 +--ro expire? uint32 270 +--ro up-time? uint32 271 +--ro last-reporter? inet:ipv4-address 273 3.2. MLD Configuration and Operational State 275 The MLD YANG model uses the same structure as IGMP YANG model. The 276 MLD module also defines the routing-control-plane-protocol-wide 277 configuration and operational state options separately in a three- 278 level hierarchy. 280 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 281 +--rw mld 282 +--rw global 283 | +--rw enable? boolean {global-admin-enable}? 284 | +--rw max-entries? uint32 {global-max-entries}? 285 | +--rw max-groups? uint32 {global-max-groups}? 286 | +--ro entries-count? uint32 287 | +--ro groups-count? uint32 288 | +--ro statistics 289 | +--ro discontinuity-time? yang:date-and-time 290 | +--ro error 291 | | +--ro total? yang:counter64 292 | | +--ro query? yang:counter64 293 | | +--ro report? yang:counter64 294 | | +--ro leave? yang:counter64 295 | | +--ro checksum? yang:counter64 296 | | +--ro too-short? yang:counter64 297 | +--ro received 298 | | +--ro total? yang:counter64 299 | | +--ro query? yang:counter64 300 | | +--ro report? yang:counter64 301 | | +--ro leave? yang:counter64 302 | +--ro sent 303 | +--ro total? yang:counter64 304 | +--ro query? yang:counter64 305 | +--ro report? yang:counter64 306 | +--ro leave? yang:counter64 307 +--rw interfaces 308 +--rw last-member-query-interval? uint16 309 +--rw max-groups-per-interface? uint32 {intf-max-groups}? 310 +--rw query-interval? uint16 311 +--rw query-max-response-time? uint16 312 +--rw require-router-alert? boolean {intf-require-router-alert}? 313 +--rw robustness-variable? uint8 314 +--rw version? uint8 315 +--rw interface* [interface-name] 316 +--rw interface-name if:interface-ref 317 +--rw enable? boolean {intf-admin-enable}? 318 +--rw group-policy? string 319 +--rw immediate-leave? empty {intf-immediate-leave}? 320 +--rw last-member-query-interval? uint16 321 +--rw max-groups? uint32 {intf-max-groups}? 322 +--rw max-group-sources? uint32 {intf-max-group-sources}? 323 +--rw query-interval? uint16 324 +--rw query-max-response-time? uint16 325 +--rw require-router-alert? boolean {intf-require-router-alert}? 326 +--rw robustness-variable? uint8 327 +--rw source-policy? string {intf-source-policy}? 328 +--rw verify-source-subnet? empty {intf-verify-source-subnet}? 329 +--rw version? uint8 330 +--rw join-group* inet:ipv6-address {intf-join-group}? 331 +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? 332 | +--rw source-addr ssm-map-ipv6-addr-type 333 | +--rw group-policy string 334 +--rw static-group* [group source-addr] {intf-static-group}? 335 | +--rw group inet:ipv6-address 336 | +--rw source-addr source-ipv6-addr-type 337 +--ro oper-status? enumeration 338 +--ro querier? inet:ipv6-address 339 +--ro joined-group* inet:ipv6-address {intf-join-group}? 340 +--ro group* [address] 341 +--ro address inet:ipv6-address 342 +--ro expire? uint32 343 +--ro filter-mode? enumeration 344 +--ro host-count? uint32 345 +--ro up-time? uint32 346 +--ro host* inet:ipv6-address 347 +--ro last-reporter? inet:ipv6-address 348 +--ro source* [address] 349 +--ro address inet:ipv6-address 350 +--ro expire? uint32 351 +--ro up-time? uint32 352 +--ro last-reporter? inet:ipv6-address 354 3.3. IGMP and MLD RPC 356 IGMP and MLD RPC clears the specified IGMP and MLD group membership. 358 rpcs: 360 +---x clear-igmp-groups {rpc-clear-groups}? 362 | +---w input 364 | +---w interface? string 366 | +---w group? inet:ipv4-address 368 | +---w source? inet:ipv4-address 370 +---x clear-mld-groups {rpc-clear-groups}? 372 +---w input 374 +---w interface? string 376 +---w group? inet:ipv6-address 378 +---w source? inet:ipv6-address 380 4. IGMP and MLD YANG Modules 382 file "ietf-igmp-mld@2017-09-19.yang" 383 module ietf-igmp-mld { 384 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; 385 // replace with IANA namespace when assigned 386 prefix igmp-mld; 388 import ietf-inet-types { 389 prefix "inet"; 390 } 392 import ietf-yang-types { 393 prefix "yang"; 394 } 396 import ietf-routing-2 { 397 prefix "rt"; 398 } 400 import ietf-interfaces { 401 prefix "if"; 402 } 404 import ietf-ip { 405 prefix ip; 406 } 408 organization 409 "IETF PIM Working Group"; 411 contact 412 "WG Web: 413 WG List: 415 WG Chair: Stig Venaas 416 418 WG Chair: Mike McBride 419 421 Editor: Xufeng Liu 422 424 Editor: Feng Guo 425 427 Editor: Mahesh Sivakumar 428 430 Editor: Pete McAllister 431 433 Editor: Anish Peter 434 "; 436 description 437 "The module defines a collection of YANG definitions common for 438 IGMP and MLD."; 440 revision 2017-09-19 { 441 description 442 "Updated yang data model for NMDA version and errata."; 443 reference 444 "RFC XXXX: A YANG Data Model for IGMP and MLD"; 445 } 447 /* 448 * Features 449 */ 450 feature global-admin-enable { 451 description 452 "Support global configuration to enable or disable protocol."; 453 } 455 feature global-interface-config { 456 description 457 "Support global configuration applied for all interfaces."; 458 } 460 feature global-max-entries { 461 description 462 "Support configuration of global max-entries."; 463 } 465 feature global-max-groups { 466 description 467 "Support configuration of global max-groups."; 468 } 470 feature intf-admin-enable { 471 description 472 "Support configuration of interface administrative enabling."; 473 } 475 feature intf-immediate-leave { 476 description 477 "Support configuration of interface immediate-leave."; 478 } 480 feature intf-join-group { 481 description 482 "Support configuration of interface join-group."; 483 } 484 feature intf-max-groups { 485 description 486 "Support configuration of interface max-groups."; 487 } 489 feature intf-max-group-sources { 490 description 491 "Support configuration of interface max-group-sources."; 492 } 494 feature intf-require-router-alert { 495 description 496 "Support configuration of interface require-router-alert."; 497 } 499 feature intf-source-policy { 500 description 501 "Support configuration of interface source policy."; 502 } 504 feature intf-ssm-map { 505 description 506 "Support configuration of interface ssm-map."; 507 } 509 feature intf-static-group { 510 description 511 "Support configuration of interface static-group."; 512 } 514 feature intf-verify-source-subnet { 515 description 516 "Support configuration of interface verify-source-subnet."; 517 } 519 feature per-interface-config { 520 description 521 "Support per interface configuration."; 522 } 524 feature rpc-clear-groups { 525 description 526 "Support rpc's to clear groups."; 527 } 529 /* 530 * Typedefs 531 */ 533 typedef ssm-map-ipv4-addr-type { 534 type union { 535 type enumeration { 536 enum 'policy' { 537 description 538 "Source address is specified in SSM map policy."; 539 } 540 } 541 type inet:ipv4-address; 542 } 543 description 544 "Multicast source IP address type for SSM map."; 545 } // source-ipv4-addr-type 547 typedef ssm-map-ipv6-addr-type { 548 type union { 549 type enumeration { 550 enum 'policy' { 551 description 552 "Source address is specified in SSM map policy."; 553 } 554 } 555 type inet:ipv6-address; 556 } 557 description 558 "Multicast source IP address type for SSM map."; 559 } // source-ipv6-addr-type 561 typedef source-ipv4-addr-type { 562 type union { 563 type enumeration { 564 enum '*' { 565 description 566 "Any source address."; 567 } 568 } 569 type inet:ipv4-address; 570 } 571 description 572 "Multicast source IP address type."; 573 } // source-ipv4-addr-type 575 typedef source-ipv6-addr-type { 576 type union { 577 type enumeration { 578 enum '*' { 579 description 580 "Any source address."; 581 } 583 } 584 type inet:ipv6-address; 585 } 586 description 587 "Multicast source IP address type."; 588 } // source-ipv6-addr-type 590 /* 591 * Identities 592 */ 594 /* 595 * Groupings 596 */ 597 grouping global-config-attributes { 598 description "Global IGMP and MLD configuration."; 600 leaf enable { 601 if-feature global-admin-enable; 602 type boolean; 603 description 604 "true to enable IGMP or MLD in the routing instance; 605 false to disable IGMP or MLD in the routing instance."; 606 } 608 leaf max-entries { 609 if-feature global-max-entries; 610 type uint32; 611 description 612 "The maximum number of entries in IGMP or MLD."; 613 } 614 leaf max-groups { 615 if-feature global-max-groups; 616 type uint32; 617 description 618 "The maximum number of groups that IGMP 619 or MLD can join."; 620 } 621 } // global-config-attributes 623 grouping global-state-attributes { 625 description "Global IGMP and MLD state attributes."; 627 leaf entries-count { 628 type uint32; 629 config false; 630 description 631 "The number of entries in IGMP or MLD."; 633 } 634 leaf groups-count { 635 type uint32; 636 config false; 637 description 638 "The number of groups that IGMP or MLD can join."; 639 } 641 container statistics { 642 config false; 643 description "Global statistics."; 645 leaf discontinuity-time { 646 type yang:date-and-time; 647 description 648 "The time on the most recent occasion at which any one 649 or more of the statistic counters suffered a 650 discontinuity. If no such discontinuities have occurred 651 since the last re-initialization of the local 652 management subsystem, then this node contains the time 653 the local management subsystem re-initialized itself."; 654 } 656 container error { 657 description "Statistics of errors."; 658 uses global-statistics-error; 659 } 661 container received { 662 description "Statistics of received messages."; 663 uses global-statistics-sent-received; 664 } 665 container sent { 666 description "Statistics of sent messages."; 667 uses global-statistics-sent-received; 668 } 669 } // statistics 670 } // global-state-attributes 672 grouping global-statistics-error { 673 description 674 "A grouping defining statistics attributes for errors."; 675 uses global-statistics-sent-received; 676 leaf checksum { 677 type yang:counter64; 678 description 679 "The number of checksum errors."; 680 } 681 leaf too-short { 682 type yang:counter64; 683 description 684 "The number of messages that are too short."; 685 } 686 } // global-statistics-error 688 grouping global-statistics-sent-received { 689 description 690 "A grouping defining statistics attributes."; 691 leaf total { 692 type yang:counter64; 693 description 694 "The number of total messages."; 695 } 696 leaf query { 697 type yang:counter64; 698 description 699 "The number of query messages."; 700 } 701 leaf report { 702 type yang:counter64; 703 description 704 "The number of report messages."; 705 } 706 leaf leave { 707 type yang:counter64; 708 description 709 "The number of leave messages."; 710 } 711 } // global-statistics-sent-received 713 grouping interfaces-config-attributes { 714 description 715 "Configuration attributes applied to the interfaces whose 716 per interface attributes are not existing."; 718 leaf last-member-query-interval { 719 type uint16 { 720 range "1..65535"; 721 } 722 units seconds; 723 default 1; 724 description 725 "Last Member Query Interval, which may be tuned to modify the 726 leave latency of the network."; 727 reference "RFC3376. Sec. 8.8."; 728 } 730 leaf max-groups-per-interface { 731 if-feature intf-max-groups; 732 type uint32; 733 description 734 "The maximum number of groups that IGMP or MLD can join."; 735 } 737 leaf query-interval { 738 type uint16 { 739 range "1..31744"; 740 } 741 units seconds; 742 default 125; 743 description 744 "The Query Interval is the interval between General Queries 745 sent by the Querier."; 746 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 747 } 749 leaf query-max-response-time { 750 type uint16 { 751 range "1..65535"; 752 } 753 units seconds; 754 default 10; 755 description 756 "Query maximum response time specifies the maximum time 757 allowed before sending a responding report."; 758 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 759 } 761 leaf require-router-alert { 762 if-feature intf-require-router-alert; 763 type boolean; 764 default false; 765 description 766 "Protocol packets should contain router alert IP option."; 767 } 769 leaf robustness-variable { 770 type uint8 { 771 range "2..7"; 772 } 773 default 2; 774 description 775 "Querier's Robustness Variable allows tuning for the expected 776 packet loss on a network."; 777 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 778 } 780 } // interfaces-config-attributes 782 grouping interfaces-config-attributes-igmp { 783 description "interfaces configuration for IGMP."; 785 uses interfaces-config-attributes; 786 leaf version { 787 type uint8 { 788 range "1..3"; 789 } 790 description "IGMP version."; 791 reference "RFC1112, RFC2236, RFC3376."; 792 } 793 } 795 grouping interfaces-config-attributes-mld { 796 description "interfaces configuration for MLD."; 798 uses interfaces-config-attributes; 799 leaf version { 800 type uint8 { 801 range "1..2"; 802 } 803 description "MLD version."; 804 reference "RFC2710, RFC3810."; 805 } 806 } 808 grouping interface-config-attributes-igmp { 809 description "Per interface configuration for IGMP."; 811 uses interface-config-attributes-igmp-mld; 813 leaf version { 814 type uint8 { 815 range "1..3"; 816 } 817 description "IGMP version."; 818 reference "RFC1112, RFC2236, RFC3376."; 819 } 820 leaf-list join-group { 821 if-feature intf-join-group; 822 type inet:ipv4-address; 823 description 824 "The router joins this multicast group on the interface."; 825 } 827 list ssm-map { 828 if-feature intf-ssm-map; 829 key "source-addr group-policy"; 830 description "The policy for (*,G) mapping to (S,G)."; 831 leaf source-addr { 832 type ssm-map-ipv4-addr-type; 833 description 834 "Multicast source IP address."; 835 } 836 leaf group-policy { 837 type string; 838 description 839 "Name of the access policy used to filter IGMP 840 membership.A device can restrict the length 841 and value of this name, possibly space and special 842 characters are not allowed. "; 843 } 844 } 846 list static-group { 847 if-feature intf-static-group; 848 key "group-addr source-addr"; 849 description 850 "A static multicast route, (*,G) or (S,G)."; 852 leaf group-addr { 853 type inet:ipv4-address; 854 description 855 "Multicast group IP address."; 856 } 857 leaf source-addr { 858 type source-ipv4-addr-type; 859 description 860 "Multicast source IP address."; 861 } 862 } 863 } // interface-config-attributes-igmp 865 grouping interface-config-attributes-igmp-mld { 866 description 867 "Per interface configuration for both IGMP and MLD."; 869 leaf enable { 870 if-feature intf-admin-enable; 871 type boolean; 872 default false; 873 description 874 "true to enable IGMP or MLD on the interface; 875 false to disable IGMP or MLD on the interface."; 876 } 877 leaf group-policy { 878 type string; 879 description 880 "Name of the access policy used to filter IGMP or MLD 881 membership.A device can restrict the length 882 and value of this name, possibly space and special 883 characters are not allowed."; 884 } 885 leaf immediate-leave { 886 if-feature intf-immediate-leave; 887 type empty; 888 description 889 "If present, IGMP or MLD perform an immediate leave upon 890 receiving an IGMPv2 or MLDv1 leave message. 891 If the router is IGMP-enabled or MLD-enabled, it sends an 892 IGMP or MLD last member query with a last member query 893 response time. However, the router does not wait for 894 the response time before it prunes off the group."; 895 } 897 leaf last-member-query-interval { 898 type uint16 { 899 range "1..65535"; 900 } 901 units seconds; 902 default 1; 903 description 904 "Last Member Query Interval, which may be tuned to modify the 905 leave latency of the network."; 906 reference "RFC3376. Sec. 8.8."; 907 } 909 leaf max-groups { 910 if-feature intf-max-groups; 911 type uint32; 912 description 913 "The maximum number of groups that IGMP ro MLD can join."; 914 } 915 leaf max-group-sources { 916 if-feature intf-max-group-sources; 917 type uint32; 918 description 919 "The maximum number of group sources."; 920 } 922 leaf query-interval { 923 type uint16 { 924 range "1..31744"; 925 } 926 units seconds; 927 default 125; 928 description 929 "The Query Interval is the interval between General Queries 930 sent by the Querier."; 931 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 932 } 934 leaf query-max-response-time { 935 type uint16 { 936 range "1..65535"; 937 } 938 units seconds; 939 default 10; 940 description 941 "Query maximum response time specifies the maximum time 942 allowed before sending a responding report."; 943 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 944 } 946 leaf require-router-alert { 947 if-feature intf-require-router-alert; 948 type boolean; 949 description 950 "Protocol packets should contain router alert IP option."; 951 } 953 leaf robustness-variable { 954 type uint8 { 955 range "2..7"; 956 } 957 default 2; 958 description 959 "Querier's Robustness Variable allows tuning for the expected 960 packet loss on a network."; 961 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 962 } 964 leaf source-policy { 965 if-feature intf-source-policy; 966 type string; 967 description 968 "Name of the access policy used to filter sources. 969 A device can restrict the length 970 and value of this name, possibly space and special 971 characters are not allowed."; 972 } 973 leaf verify-source-subnet { 974 if-feature intf-verify-source-subnet; 975 type empty; 976 description 977 "If present, the interface accepts packets with matching 978 source IP subnet only."; 979 } 981 } // interface-config-attributes-igmp-mld 983 grouping interface-config-attributes-mld { 984 description "Per interface configuration for MLD."; 986 uses interface-config-attributes-igmp-mld; 988 leaf version { 989 type uint8 { 990 range "1..2"; 991 } 992 description "MLD version."; 993 reference "RFC2710, RFC3810."; 994 } 995 leaf-list join-group { 996 if-feature intf-join-group; 997 type inet:ipv6-address; 998 description 999 "The router joins this multicast group on the interface."; 1000 } 1002 list ssm-map { 1003 if-feature intf-ssm-map; 1004 key "source-addr group-policy"; 1005 description "The policy for (*,G) mapping to (S,G)."; 1006 leaf source-addr { 1007 type ssm-map-ipv6-addr-type; 1008 description 1009 "Multicast source IPv6 address."; 1010 } 1011 leaf group-policy { 1012 type string; 1013 description 1014 "Name of the access policy used to filter MLD 1015 membership.A device can restrict the length 1016 and value of this name, possibly space and special 1017 characters are not allowed."; 1018 } 1019 } 1021 list static-group { 1022 if-feature intf-static-group; 1023 key "group source-addr"; 1024 description 1025 "A static multicast route, (*,G) or (S,G)."; 1027 leaf group { 1028 type inet:ipv6-address; 1029 description 1030 "Multicast group IPv6 address."; 1031 } 1032 leaf source-addr { 1033 type source-ipv6-addr-type; 1034 description 1035 "Multicast source IPv6 address."; 1036 } 1037 } 1038 } // interface-config-attributes-mld 1040 grouping interface-state-attributes-igmp { 1042 description 1043 "Per interface state attributes for IGMP."; 1045 uses interface-state-attributes-igmp-mld; 1047 leaf querier { 1048 type inet:ipv4-address; 1049 config false; 1050 description "The querier address in the subnet"; 1051 } 1052 leaf-list joined-group { 1053 if-feature intf-join-group; 1054 type inet:ipv4-address; 1055 config false; 1056 description 1057 "The routers that joined this multicast group."; 1058 } 1060 list group { 1061 key "address"; 1062 config false; 1063 description 1064 "Multicast group membership information 1065 that joined on the interface."; 1067 leaf address { 1068 type inet:ipv4-address; 1069 description 1070 "Multicast group address."; 1071 } 1072 uses interface-state-group-attributes-igmp-mld; 1073 leaf-list host { 1074 type inet:ipv4-address; 1075 description 1076 "List of host addresses that 1077 joined the multicast group"; 1078 } 1079 leaf last-reporter { 1080 type inet:ipv4-address; 1081 description 1082 "The last host address which has sent the 1083 report to join the multicast group."; 1084 } 1085 list source { 1086 key "address"; 1087 description 1088 "List of multicast source information 1089 of the multicast group."; 1091 leaf address { 1092 type inet:ipv4-address; 1093 description 1094 "Multicast source address"; 1095 } 1096 uses interface-state-source-attributes-igmp-mld; 1097 leaf last-reporter { 1098 type inet:ipv4-address; 1099 description 1100 "The last host address which has sent the 1101 report to join the multicast source and group."; 1102 } 1103 } // list source 1104 } // list group 1105 } // interface-state-attributes-igmp 1107 grouping interface-state-attributes-igmp-mld { 1108 description 1109 "Per interface state attributes for both IGMP and MLD."; 1111 leaf oper-status { 1112 type enumeration { 1113 enum up { 1114 description 1115 "Ready to pass packets."; 1116 } 1117 enum down { 1118 description 1119 "The interface does not pass any packets."; 1120 } 1121 } 1122 config false; 1123 description 1124 "interface up or down state for IGMP or MLD protocol"; 1125 } 1126 } // interface-config-attributes-igmp-mld 1128 grouping interface-state-attributes-mld { 1130 description 1131 "Per interface state attributes for MLD."; 1133 uses interface-state-attributes-igmp-mld; 1135 leaf querier { 1136 type inet:ipv6-address; 1137 config false; 1138 description 1139 "The querier address in the subnet."; 1140 } 1141 leaf-list joined-group { 1142 if-feature intf-join-group; 1143 type inet:ipv6-address; 1144 config false; 1145 description 1146 "The routers that joined this multicast group."; 1147 } 1149 list group { 1150 key "address"; 1151 config false; 1152 description 1153 "Multicast group membership information 1154 that joined on the interface."; 1156 leaf address { 1157 type inet:ipv6-address; 1158 description 1159 "Multicast group address."; 1160 } 1161 uses interface-state-group-attributes-igmp-mld; 1162 leaf-list host { 1163 type inet:ipv6-address; 1164 description 1165 "List of host addresses that 1166 joined the multicast group"; 1167 } 1168 leaf last-reporter { 1169 type inet:ipv6-address; 1170 description 1171 "The last host address which has sent the 1172 report to join the multicast group."; 1173 } 1174 list source { 1175 key "address"; 1176 description 1177 "List of multicast source information 1178 of the multicast group."; 1180 leaf address { 1181 type inet:ipv6-address; 1182 description 1183 "Multicast source address"; 1184 } 1185 uses interface-state-source-attributes-igmp-mld; 1186 leaf last-reporter { 1187 type inet:ipv6-address; 1188 description 1189 "The last host address which has sent the 1190 report to join the multicast source and group."; 1191 } 1192 } // list source 1193 } // list group 1194 } // interface-state-attributes-mld 1196 grouping interface-state-group-attributes-igmp-mld { 1197 description 1198 "Per interface state attributes for both IGMP and MLD 1199 groups."; 1201 leaf expire { 1202 type uint32; 1203 units seconds; 1204 description 1205 "The time left before multicast group state expires."; 1206 } 1207 leaf filter-mode { 1208 type enumeration { 1209 enum "include" { 1210 description 1211 "In include mode, reception of packets sent 1212 to the specified multicast address is requested 1213 only from those IP source addresses listed in the 1214 source-list parameter"; 1215 } 1216 enum "exclude" { 1217 description 1218 "In exclude mode, reception of packets sent 1219 to the given multicast address is requested 1220 from all IP source addresses except those 1221 listed in the source-list parameter."; 1222 } 1223 } 1224 description 1225 "Filter mode for a multicast group, 1226 may be either include or exclude."; 1227 } 1228 leaf host-count { 1229 type uint32; 1230 description 1231 "The number of host addresses."; 1232 } 1233 leaf up-time { 1234 type uint32; 1235 units seconds; 1236 description 1237 "The elapsed time since the device created multicast group record."; 1238 } 1239 } // interface-state-group-attributes-igmp-mld 1241 grouping interface-state-source-attributes-igmp-mld { 1242 description 1243 "Per interface state attributes for both IGMP and MLD 1244 source-group records."; 1246 leaf expire { 1247 type uint32; 1248 units seconds; 1249 description 1250 "The time left before multicast source-group state expires."; 1251 } 1252 leaf up-time { 1253 type uint32; 1254 units seconds; 1255 description 1256 "The elapsed time since the device created multicast 1257 source-group record."; 1258 } 1259 } // interface-state-source-attributes-igmp-mld 1261 /* 1262 * Configuration and Operational state data nodes (NMDA version) 1263 */ 1264 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" 1265 { 1266 description 1267 "IGMP augmentation to routing control plane protocol 1268 configuration and state."; 1270 container igmp { 1271 description 1272 "IGMP operational state data."; 1274 container global { 1275 description 1276 "Global attributes."; 1277 uses global-config-attributes; 1278 uses global-state-attributes; 1279 } 1281 container interfaces { 1282 description 1283 "Containing a list of interfaces."; 1285 uses interfaces-config-attributes-igmp { 1286 if-feature global-interface-config; 1287 } 1289 list interface { 1290 key "interface-name"; 1291 description 1292 "List of IGMP interfaces."; 1293 leaf interface-name { 1294 type if:interface-ref; 1295 must "/if:interfaces/if:interface[if:name = current()]/" 1296 + "ip:ipv4" { 1297 description 1298 "The interface must have IPv4 enabled."; 1299 } 1300 description 1301 "Reference to an entry in the global interface list."; 1302 } 1303 uses interface-config-attributes-igmp { 1304 if-feature per-interface-config; 1305 } 1306 uses interface-state-attributes-igmp; 1307 } // interface 1308 } // interfaces 1309 } // igmp 1310 }//augment 1312 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" 1313 { 1314 description 1315 "MLD augmentation to routing control plane protocol 1316 configuration and state."; 1318 container mld { 1319 description 1320 "MLD operational state data."; 1322 container global { 1323 description 1324 "Global attributes."; 1325 uses global-config-attributes; 1326 uses global-state-attributes; 1327 } 1329 container interfaces { 1330 description 1331 "Containing a list of interfaces."; 1333 uses interfaces-config-attributes-mld { 1334 if-feature global-interface-config; 1335 } 1337 list interface { 1338 key "interface-name"; 1339 description 1340 "List of MLD interfaces."; 1341 leaf interface-name { 1342 type if:interface-ref; 1343 must "/if:interfaces/if:interface[if:name = current()]/" 1344 + "ip:ipv6" { 1345 description 1346 "The interface must have IPv6 enabled."; 1347 } 1348 description 1349 "Reference to an entry in the global interface list."; 1350 } 1351 uses interface-config-attributes-mld { 1352 if-feature per-interface-config; 1353 } 1354 uses interface-state-attributes-mld; 1355 } // interface 1356 } // interfaces 1357 } // mld 1358 } // augment 1360 /* 1361 * RPCs 1362 */ 1363 rpc clear-igmp-groups { 1364 if-feature rpc-clear-groups; 1365 description 1366 "Clears the specified IGMP cache entries."; 1368 input { 1369 leaf interface { 1370 type string; 1371 description 1372 "Name of the IGMP interface. 1373 If it is not specified, groups from all interfaces are 1374 cleared."; 1375 } 1376 leaf group { 1377 type inet:ipv4-address; 1378 description 1379 "Multicast group IPv4 address. 1380 If it is not specified, all IGMP group entries are 1381 cleared."; 1382 } 1383 leaf source { 1384 type inet:ipv4-address; 1385 description 1386 "Multicast source IPv4 address. 1387 If it is not specified, all IGMP source-group entries are 1388 cleared."; 1389 } 1390 } 1391 } // rpc clear-igmp-groups 1393 rpc clear-mld-groups { 1394 if-feature rpc-clear-groups; 1395 description 1396 "Clears the specified MLD cache entires."; 1398 input { 1399 leaf interface { 1400 type string; 1401 description 1402 "Name of the MLD interface. 1403 If it is not specified, groups from all interfaces are 1404 cleared."; 1405 } 1406 leaf group { 1407 type inet:ipv6-address; 1408 description 1409 "Multicast group IPv6 address. 1410 If it is not specified, all MLD group entries are 1411 cleared."; 1412 } 1413 leaf source { 1414 type inet:ipv6-address; 1415 description 1416 "Multicast source IPv6 address. 1417 If it is not specified, all MLD source-group entries are 1418 cleared."; 1419 } 1420 } 1421 } // rpc clear-mld-groups 1423 /* 1424 * Notifications 1425 */ 1426 } 1427 1429 5. Security Considerations 1431 The data model defined does not introduce any security implications. 1432 This document does not change any underlying security issues 1433 inherent in [RFC8022]. 1435 6. IANA Considerations 1437 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1438 actual RFC number (and remove this note). 1440 This document registers the following namespace URIs in the IETF XML 1441 registry [RFC3688]: 1443 -------------------------------------------------------------------- 1445 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1447 Registrant Contact: The IESG. 1449 XML: N/A, the requested URI is an XML namespace. 1451 -------------------------------------------------------------------- 1453 This document registers the following YANG modules in the YANG Module 1454 Names registry [RFC7950]: 1456 -------------------------------------------------------------------- 1458 name: ietf-igmp-mld 1460 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1462 prefix: igmp-mld 1463 reference: RFC XXXX 1465 -------------------------------------------------------------------- 1467 7. References 1469 7.1. Normative References 1471 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1472 Requirement Levels", BCP 14, RFC 2119, March 1997. 1474 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1475 the Network Configuration Protocol (NETCONF)", RFC 6020, 1476 October 2010 1478 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 1479 Data Model Documents", RFC 6087, January 2011 1481 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1482 and A. Bierman, Ed., "Network Configuration Protocol 1483 (NETCONF)", RFC 6241, June 2011 1485 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1486 RFC 7950, August 2016 1488 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1489 Management", RFC 8022, November 2016 1491 [I-D.dsdt-nmda-guidelines] M. Bjorklund, J. Schoenwaelder, P. 1492 Shafer, K. Watsen, R. Wilton, "Guidelines for YANG Module 1493 Authors (NMDA)", draft-dsdt-nmda-guidelines-01, May 2017 1495 [draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data 1496 Model for Interface Management", draft-bjorklund-netmod- 1497 rfc7223bis-00, August 2017 1499 [draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data 1500 Model for IP Management", draft-bjorklund-netmod- 1501 rfc7277bis-00, August 2017 1503 [I-D.ietf-netmod-rfc6087bis] Bierman, A., "Guidelines for Authors 1504 and Reviewers of YANG Data Model Documents", draft-ietf- 1505 netmod-rfc6087bis-14, September 2017 1507 [I-D.acee-netmod-rfc8022bis] L. Lhotka, A. Lindem and Y.Qu, "A YANG 1508 Data Model for Routing Management (NDMA Version)", draft- 1509 acee-netmod-rfc8022bis-02, September 2017 1511 7.2. Informative References 1513 [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, 1514 RFC 1112, August 1989. 1516 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 1517 2", RFC 2236, November 1997. 1519 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 1520 Listener Discovery (MLD) for IPv6", RFC 2710, October 1521 1999. 1523 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 1524 Thyagarajan, "Internet Group Management Protocol, Version 1525 3", RFC 3376, October 2002. 1527 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 1528 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 1530 [RFC4541] M. Christensen, K. Kimball and F. Solensky, 1531 "Considerations for Internet Group Management Protocol 1532 (IGMP) and Multicast Listener Discovery (MLD) Snooping 1533 Switches", RFC 4541, May 2006. 1535 [RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet 1536 Group Management Protocol (IGMP) / Multicast Listener 1537 Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD 1538 Proxying")", RFC 4605, August 2006. 1540 8. Acknowledgments 1542 The authors would like to thank Steve Baillargeon, Hu Fangwei, 1543 Robert Kebler, Tanmoy Kundu, Liu Yisong, and Stig Venaas for their 1544 valuable contributions. 1546 Authors' Addresses 1548 Xufeng Liu 1549 Jabil 1550 8281 Greensboro Drive, Suite 200 1551 McLean VA 22102 1552 USA 1554 EMail: Xufeng_Liu@jabil.com 1556 Feng Guo 1557 Huawei 1558 Huawei Bld., No.156 Beiqing Rd. 1559 Beijing 100095 1560 China 1562 Email: guofeng@huawei.com 1564 Mahesh Sivakumar 1565 Cisco Systems, Inc. 1566 510 McCarthy Boulevard 1567 Milpitas, California 95035 1568 USA 1570 Email: masivaku@cisco.com 1572 Pete McAllister 1573 Metaswitch Networks 1574 100 Church Street 1575 Enfield EN2 6BQ 1576 UK 1578 EMail: pete.mcallister@metaswitch.com 1580 Anish Peter 1581 Individual 1583 EMail: anish.ietf@gmail.com