idnits 2.17.1 draft-ietf-pim-igmp-mld-snooping-yang-03.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 46 instances of too long lines in the document, the longest one being 15 characters in excess of 72. ** There are 5 instances of lines with control characters in the document. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 477 has weird spacing: '...ce-addr sou...' == Line 485 has weird spacing: '...ce-addr sou...' == The document doesn't use any RFC 2119 keywords, yet has text resembling RFC 2119 boilerplate text. -- The document date (May 29, 2018) is 2153 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: 'RFC2119' is mentioned on line 99, but not defined == Missing Reference: 'RFC6241' is mentioned on line 2004, but not defined == Missing Reference: 'RFC8040' is mentioned on line 2004, but not defined == Missing Reference: 'RFC7950' is mentioned on line 2078, but not defined == Missing Reference: 'RFC6242' is mentioned on line 2006, but not defined == Missing Reference: 'RFC5246' is mentioned on line 2008, but not defined ** Obsolete undefined reference: RFC 5246 (Obsoleted by RFC 8446) == Missing Reference: 'RFC6536' is mentioned on line 2010, but not defined ** Obsolete undefined reference: RFC 6536 (Obsoleted by RFC 8341) == Missing Reference: 'RFC3688' is mentioned on line 2065, but not defined == Missing Reference: 'RFC7951' is mentioned on line 2168, but not defined == Unused Reference: 'RFC6021' is defined on line 2098, but no explicit reference was found in the text == Unused Reference: 'RFC2236' is defined on line 2106, but no explicit reference was found in the text == Unused Reference: 'RFC2710' is defined on line 2109, but no explicit reference was found in the text == Unused Reference: 'RFC3376' is defined on line 2112, but no explicit reference was found in the text == Unused Reference: 'RFC3810' is defined on line 2116, but no explicit reference was found in the text == Unused Reference: 'RFC4604' is defined on line 2119, but no explicit reference was found in the text == Unused Reference: 'RFC4607' is defined on line 2124, but no explicit reference was found in the text ** Obsolete normative reference: RFC 6021 (Obsoleted by RFC 6991) ** Downref: Normative reference to an Informational RFC: RFC 4541 Summary: 6 errors (**), 0 flaws (~~), 20 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 PIM Working Group H. Zhao 2 Internet Draft Ericsson 3 Intended status: Standards Track X. Liu 4 Expires: November 28, 2018 Jabil 5 Y. Liu 6 Huawei 7 M. Sivakumar 8 Cisco 9 A. Peter 10 Individual 12 May 29, 2018 14 A Yang Data Model for IGMP and MLD Snooping 15 draft-ietf-pim-igmp-mld-snooping-yang-03.txt 17 Abstract 19 This document defines a YANG data model that can be used to 20 configure and manage Internet Group Management Protocol (IGMP) and 21 Multicast Listener Discovery (MLD) Snooping devices. 23 Status of this Memo 25 This Internet-Draft is submitted in full conformance with the 26 provisions of BCP 78 and BCP 79. 28 Internet-Drafts are working documents of the Internet Engineering 29 Task Force (IETF), its areas, and its working groups. Note that 30 other groups may also distribute working documents as Internet- 31 Drafts. 33 Internet-Drafts are draft documents valid for a maximum of six months 34 and may be updated, replaced, or obsoleted by other documents at any 35 time. It is inappropriate to use Internet-Drafts as reference 36 material or to cite them other than as "work in progress." 38 The list of current Internet-Drafts can be accessed at 39 http://www.ietf.org/ietf/1id-abstracts.txt 41 The list of Internet-Draft Shadow Directories can be accessed at 42 http://www.ietf.org/shadow.html 44 This Internet-Draft will expire on November 28, 2018. 46 Copyright Notice 48 Copyright (c) 2018 IETF Trust and the persons identified as the 49 document authors. All rights reserved. 51 This document is subject to BCP 78 and the IETF Trust's Legal 52 Provisions Relating to IETF Documents 53 (http://trustee.ietf.org/license-info) in effect on the date of 54 publication of this document. Please review these documents 55 carefully, as they describe your rights and restrictions with respect 56 to this document. Code Components extracted from this document must 57 include Simplified BSD License text as described in Section 4.e of 58 the Trust Legal Provisions and are provided without warranty as 59 described in the Simplified BSD License. 61 Table of Contents 63 1. Introduction...................................................3 64 1.1. Terminology...............................................3 65 1.2. Tree Diagrams.............................................3 66 2. Design of Data Model...........................................4 67 2.1. Overview..................................................4 68 2.2. IGMP Snooping Instances...................................4 69 2.3. MLD Snooping Instances....................................7 70 2.4. IGMP and MLD Snooping References..........................9 71 2.5. Augment /if:interfaces/if:interface......................10 72 2.6. IGMP and MLD Snooping RPC................................12 73 3. IGMP and MLD Snooping YANG Module.............................12 74 4. Security Considerations.......................................42 75 5. IANA Considerations...........................................43 76 6. Normative References..........................................44 77 Appendix A. Data Tree Example...................................45 78 Authors' Addresses...............................................49 80 1. Introduction 82 This document defines a YANG [RFC6020] data model for the management 83 of Internet Group Management Protocol (IGMP) and Multicast Listener 84 Discovery (MLD) Snooping devices. 86 The YANG model in this document conforms to the Network Management 87 Datastore Architecture defined in [I-D.ietf-netmod-revised- 88 datastores]. The "Network Management Datastore Architecture" (NMDA) 89 adds the ability to inspect the current operational values for 90 configuration, allowing clients to use identical paths for retrieving 91 the configured values and the operational values. 93 1.1. Terminology 95 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 96 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 97 "OPTIONAL" in this document are to be interpreted as described in BCP 14 98 [RFC2119]. 100 The terminology for describing YANG data models is found in[RFC6020]. 102 1.2. Tree Diagrams 104 A simplified graphical representation of the data model is used in this 105 document. The meaning of the symbols in these diagrams is as follows: 107 o Brackets "[" and "]" enclose list keys. 109 o Abbreviations before data node names: "rw" means configuration 110 (read-write), and "ro" means state data (read-only). 112 o Symbols after data node names: "?" means an optional node, "!" 113 means a presence container, and "*" denotes a list and leaf-list. 115 o Parentheses enclose choice and case nodes, and case nodes are also 116 marked with a colon (":"). 118 o Ellipsis ("...") stands for contents of subtrees that are not 119 shown. 121 2. Design of Data Model 123 The model covers Considerations for Internet Group Management Protocol 124 (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches 125 [RFC4541]. 127 The goal of this document is to define a data model that provides a 128 common user interface to IGMP and MLD Snooping. This document provides 129 freedom for vendors to adapt this data model to their product 130 implementations. 132 2.1. Overview 134 The IGMP and MLD Snooping YANG module defined in this document has all 135 the common building blocks for the IGMP and MLD Snooping protocol. 137 The YANG module includes IGMP and MLD Snooping instance definition, 138 instance reference in the scenario of BRIDGE, L2VPN. The module also 139 includes the RPC methods for clearing IGMP and MLD Snooping group 140 tables. 142 This YANG model follows the Guidelines for YANG Module Authors (NMDA) 143 [draft-dsdt-nmda-guidelines-01]. This NMDA ("Network Management 144 Datastore Architecture") architecture provides an architectural 145 framework for datastores as they are used by network management 146 protocols such as NETCONF [RFC6241], RESTCONF [RFC8040] and the YANG 147 [RFC7950] data modeling language. 149 2.2. IGMP Snooping Instances 151 The YANG module defines igmp-snooping-instance which could be referenced 152 in the BRIDGE or L2VPN scenario to enable IGMP Snooping. 154 All the IGMP Snooping related attributes have been defined in the igmp- 155 snooping-instance. The read-write attribute is configurable data. The 156 read-only attribute shows state data. The key attribute of the igmp- 157 snooping-instance is name. 159 The value of type in igmp-snooping-instance is bridge or l2vpn. When it 160 is bridge, the igmp-snooping-instance will be referenced in the BRIDGE 161 scenario. When it is l2vpn, the igmp-snooping-instance will be 162 referenced in the L2VPN scenario. 164 The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, 165 l2vpn-mrouter-interface-pw are filled by routing system dynamically. 166 They are different from static-bridge-mrouter-interface, static-l2vpn- 167 mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw which are 168 configured statically. 170 module: ietf-igmp-mld-snooping 172 +--rw igmp-snooping-instances 174 | +--rw igmp-snooping-instance* [name] 176 | +--rw name string 178 | +--rw type? enumeration 180 | +--rw enable? boolean {admin-enable}? 182 | +--rw forwarding-mode? enumeration 184 | +--rw explicit-tracking? boolean {explicit-tracking}? 186 | +--rw exclude-lite? boolean {exclude-lite}? 188 | +--rw send-query? boolean 190 | +--rw immediate-leave? empty {immediate-leave}? 192 | +--rw last-member-query-interval? uint16 194 | +--rw query-interval? uint16 196 | +--rw query-max-response-time? uint16 198 | +--rw require-router-alert? boolean {require-router- 199 alert}? 201 | +--rw robustness-variable? uint8 203 | +--rw version? uint8 205 | +--rw static-bridge-mrouter-interface* if:interface-ref {static- 206 mrouter-interface}? 208 | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref {static- 209 mrouter-interface}? 211 | +--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref 212 {static-mrouter-interface}? 214 | +--rw querier-source? inet:ipv4-address 216 | +--rw static-l2-multicast-group* [group source-addr] {static-l2- 217 multicast-group}? 218 | | +--rw group inet:ipv4-address 220 | | +--rw source-addr source-ipv4-addr-type 222 | | +--rw bridge-outgoing-interface* if:interface-ref 224 | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref 226 | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref 228 | +--ro entries-count? uint32 230 | +--ro bridge-mrouter-interface* if:interface-ref 232 | +--ro l2vpn-mrouter-interface-ac* if:interface-ref 234 | +--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref 236 | +--ro group* [address] 238 | +--ro address inet:ipv4-address 240 | +--ro mac-address? yang:phys-address 242 | +--ro expire? uint32 244 | +--ro up-time? uint32 246 | +--ro last-reporter? inet:ipv4-address 248 | +--ro source* [address] 250 | +--ro address inet:ipv4-address 252 | +--ro bridge-outgoing-interface* if:interface-ref 254 | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref 256 | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref 258 | +--ro up-time? uint32 260 | +--ro expire? uint32 262 | +--ro host-count? uint32 {explicit-tracking}? 264 | +--ro last-reporter? inet:ipv4-address 266 | +--ro host* [host-address] {explicit-tracking}? 268 | +--ro host-address inet:ipv4-address 269 | +--ro host-filter-mode? enumeration 271 2.3. MLD Snooping Instances 273 The YANG module defines mld-snooping-instance which could be referenced 274 in the BRIDGE or L2VPN scenario to enable MLD Snooping. 276 The mld-snooping-instance is the same as IGMP snooping except changing 277 IPV4 addresses to IPV6 addresses. 279 module: ietf-igmp-mld-snooping 281 +--rw mld-snooping-instances 283 | +--rw mld-snooping-instance* [name] 285 | +--rw name string 287 | +--rw type? enumeration 289 | +--rw enable? boolean {admin-enable}? 291 | +--rw forwarding-mode? enumeration 293 | +--rw explicit-tracking? boolean {explicit- 294 tracking}? 296 | +--rw exclude-lite? boolean {exclude-lite}? 298 | +--rw send-query? boolean 300 | +--rw immediate-leave? empty {immediate-leave}? 302 | +--rw last-member-query-interval? uint16 304 | +--rw query-interval? uint16 306 | +--rw query-max-response-time? uint16 308 | +--rw require-router-alert? boolean {require-router- 309 alert}? 311 | +--rw robustness-variable? uint8 313 | +--rw version? uint8 315 | +--rw static-bridge-mrouter-interface* if:interface-ref {static- 316 mrouter-interface}? 317 | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref {static- 318 mrouter-interface}? 320 | +--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref 321 {static-mrouter-interface}? 323 | +--rw querier-source? inet:ipv6-address 325 | +--rw static-l2-multicast-group* [group source-addr] {static-l2- 326 multicast-group}? 328 | | +--rw group inet:ipv6-address 330 | | +--rw source-addr source-ipv6-addr-type 332 | | +--rw bridge-outgoing-interface* if:interface-ref 334 | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref 336 | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref 338 | +--ro entries-count? uint32 340 | +--ro bridge-mrouter-interface* if:interface-ref 342 | +--ro l2vpn-mrouter-interface-ac* if:interface-ref 344 | +--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref 346 | +--ro group* [address] 348 | +--ro address inet:ipv6-address 350 | +--ro mac-address? yang:phys-address 352 | +--ro expire? uint32 354 | +--ro up-time? uint32 356 | +--ro last-reporter? inet:ipv6-address 358 | +--ro source* [address] 360 | +--ro address inet:ipv6-address 362 | +--ro bridge-outgoing-interface* if:interface-ref 364 | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref 366 | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref 367 | +--ro up-time? uint32 369 | +--ro expire? uint32 371 | +--ro host-count? uint32 {explicit-tracking}? 373 | +--ro last-reporter? inet:ipv6-address 375 | +--ro host* [host-address] {explicit-tracking}? 377 | +--ro host-address inet:ipv6-address 379 | +--ro host-filter-mode? enumeration 381 2.4. IGMP and MLD Snooping References 383 The igmp-snooping-instance could be referenced in the scenario of BRIDGE 384 or L2VPN to configure the IGMP Snooping. The name of the instance is the 385 key attribute. 387 When the igmp-snooping-instance is referenced under the bridge view, it 388 means IGMP Snooping is enabled in the whole bridge. When the igmp- 389 snooping-instance is referenced under the VLAN view, it means IGMP 390 Snooping is enabled in the certain VLAN of the bridge. 392 The mld-snooping-instance could be referenced in concurrence with igmp- 393 snooping-instance to configure the MLD Snooping. 395 +--rw bridges 397 | +--rw bridge* [name] 399 | +--rw name name-type 401 | +--rw igmp-snooping-instance? igmp-snooping-instance-ref 403 | +--rw mld-snooping-instance? mld-snooping-instance-ref 405 | +--rw component* [name] 407 | +--rw name string 409 | +--rw bridge-vlan 411 | +--rw vlan* [vid] 413 | +--rw vid vlan-index-type 415 | +--rw igmp-snooping-instance? igmp-snooping-instance-ref 416 | +--rw mld-snooping-instance? mld-snooping-instance-ref 418 +--rw l2vpn-instances 420 +--rw l2vpn-instance* [name] 422 +--rw name string 424 +--rw igmp-snooping-instance? igmp-snooping-instance-ref 426 +--rw mld-snooping-instance? mld-snooping-instance-ref 428 2.5. Augment /if:interfaces/if:interface 430 This model augment /if:interfaces/if:interface and then add the IGMP and 431 MLD Snooping related attributes under it. The attributes include enable, 432 version, etc. 434 The static-mrouter-interface and static-l2-multicast-group could be 435 configured statically under the /if:interfaces/if:interface/ims:igmp- 436 mld-snooping view. Meanwhile, you can configure them under the IGMP and 437 MLD Snooping instance view. 439 The attributes under the statistics are read-only. They show the 440 statistics of IGMP and MLD Snooping related packets. 442 augment /if:interfaces/if:interface: 444 +--rw igmp-mld-snooping 446 +--rw enable? boolean {admin-enable}? 448 +--rw version? uint8 450 +--rw type? enumeration 452 +--rw static-mrouter-interface 454 | +--rw (static-mrouter-interface)? 456 | +--:(bridge) 458 | | +--rw bridge-name? string 460 | | +--rw vlan-id* uint32 462 | +--:(l2vpn) 464 | +--rw l2vpn-instance-name? string 465 +--rw static-l2-multicast-group 467 | +--rw (static-l2-multicast-group)? 469 | +--:(bridge) 471 | | +--rw bridge-name? string 473 | | +--rw bridge-group-v4* [group source-addr] 475 | | | +--rw group inet:ipv4-address 477 | | | +--rw source-addr source-ipv4-addr-type 479 | | | +--rw vlan-id* uint32 481 | | +--rw bridge-group-v6* [group source-addr] 483 | | +--rw group inet:ipv6-address 485 | | +--rw source-addr source-ipv6-addr-type 487 | | +--rw vlan-id* uint32 489 | +--:(l2vpn) 491 | +--rw l2vpn-group-v4* [group source-addr] 493 | | +--rw group inet:ipv4-address 495 | | +--rw source-addr source-ipv4-addr-type 497 | | +--rw l2vpn-instance-name? string 499 | +--rw l2vpn-group-v6* [group source-addr] 501 | +--rw group inet:ipv6-address 503 | +--rw source-addr source-ipv6-addr-type 505 | +--rw l2vpn-instance-name? string 507 +--ro statistics 509 +--ro received 511 | +--ro query? yang:counter64 513 | +--ro membership-report-v1? yang:counter64 515 | +--ro membership-report-v2? yang:counter64 516 | +--ro membership-report-v3? yang:counter64 518 | +--ro leave? yang:counter64 520 | +--ro non-member-leave? yang:counter64 522 | +--ro pim? yang:counter64 524 +--ro sent 526 +--ro query? yang:counter64 528 +--ro membership-report-v1? yang:counter64 530 +--ro membership-report-v2? yang:counter64 532 +--ro membership-report-v3? yang:counter64 534 +--ro leave? yang:counter64 536 +--ro non-member-leave? yang:counter64 538 +--ro pim? yang:counter64 540 2.6. IGMP and MLD Snooping RPC 542 IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping 543 group tables. 545 rpcs: 546 +---x clear-igmp-snooping-groups {rpc-clear-groups}? 547 | +---w input 548 | +---w name? string 549 | +---w group? inet:ipv4-address 550 | +---w source? inet:ipv4-address 551 +---x clear-mld-snooping-groups {rpc-clear-groups}? 552 +---w input 553 +---w name? string 554 +---w group? inet:ipv6-address 555 +---w source? inet:ipv6-address 557 3. IGMP and MLD Snooping YANG Module 559 file ietf-igmp-mld-snooping@2018-05-03.yang 560 module ietf-igmp-mld-snooping { 561 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; 562 // replace with IANA namespace when assigned 563 prefix ims; 565 import ietf-inet-types { 566 prefix inet; 567 } 569 import ietf-yang-types { 570 prefix "yang"; 571 } 573 import ietf-interfaces { 574 prefix "if"; 575 } 577 import ietf-l2vpn { 578 prefix "l2vpn"; 579 } 581 import ietf-network-instance { 582 prefix "ni"; 583 } 585 organization 586 "IETF PIM Working Group"; 588 contact 589 "WG Web: 590 WG List: 592 Editors: Hongji Zhao 593 595 Xufeng Liu 596 598 Yisong Liu 599 601 Anish Peter 602 604 Mahesh Sivakumar 605 607 "; 609 description 610 "The module defines a collection of YANG definitions common for 611 all Internet Group Management Protocol (IGMP) and Multicast 613 Listener Discovery (MLD) Snooping devices. 615 Copyright (c) 2018 IETF Trust and the persons identified as 616 authors of the code. All rights reserved. 618 Redistribution and use in source and binary forms, with or 619 without modification, is permitted pursuant to, and subject to 620 the license terms contained in, the Simplified BSD License set 621 forth in Section 4.c of the IETF Trust's Legal Provisions 622 Relating to IETF Documents 623 (http://trustee.ietf.org/license-info). 625 This version of this YANG module is part of RFC XXXX; see the 626 RFC itself for full legal notices."; 628 revision 2018-05-03 { 629 description 630 "Initial revision."; 631 reference 632 "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; 633 } 635 /* 636 * Features 637 */ 639 feature admin-enable { 640 description 641 "Support configuration to enable or disable IGMP and MLD 642 Snooping."; 643 } 645 feature immediate-leave { 646 description 647 "Support configuration of immediate-leave."; 648 } 650 feature join-group { 651 description 652 "Support configuration of join-group."; 653 } 655 feature require-router-alert { 656 description 657 "Support configuration of require-router-alert."; 658 } 660 feature static-l2-multicast-group { 661 description 662 "Support configuration of L2 multicast static-group."; 664 } 666 feature static-mrouter-interface { 667 description 668 "Support configuration of mrouter interface."; 669 } 671 feature per-instance-config { 672 description 673 "Support configuration of each VLAN or l2vpn instance or EVPN 674 instance."; 675 } 677 feature rpc-clear-groups { 678 description 679 "Support to clear statistics by RPC for IGMP and MLD 680 Snooping."; 681 } 683 feature explicit-tracking { 684 description 685 "Support configuration of per instance explicit-tracking 686 hosts."; 687 } 689 feature exclude-lite { 690 description 691 "Support configuration of per instance exclude-lite."; 692 } 694 /* 695 * Typedefs 696 */ 697 typedef name-type { 698 type string { 699 length "0..32"; 700 } 701 description 702 "A text string of up to 32 characters, of locally determined 703 significance."; 704 } 705 typedef vlan-index-type { 706 type uint32 { 707 range "1..4094 | 4096..4294967295"; 708 } 709 description 710 "A value used to index per-VLAN tables. Values of 0 and 4095 711 are not permitted. The range of valid VLAN indices. If the 712 value is greater than 4095, then it represents a VLAN with 713 scope local to the particular agent, i.e., one without a 714 global VLAN-ID assigned to it. Such VLANs are outside the 715 scope of IEEE 802.1Q, but it is convenient to be able to 716 manage them in the same way using this YANG module."; 717 reference 718 "IEEE Std 802.1Q-2014: Virtual Bridged Local Area Networks."; 719 } 721 typedef igmp-snooping-instance-ref { 722 type leafref { 723 path "/igmp-snooping-instances/igmp-snooping-instance/name"; 724 } 725 description 726 "This type is used by data models that need to reference igmp 727 snooping instance."; 728 } 730 typedef mld-snooping-instance-ref { 731 type leafref { 732 path "/mld-snooping-instances/mld-snooping-instance/name"; 733 } 734 description 735 "This type is used by data models that need to reference mld 736 snooping instance."; 737 } 739 typedef l2vpn-instance-ac-ref { 740 type leafref { 741 path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name"; 742 } 743 description "l2vpn-instance-ac-ref"; 744 } 746 typedef l2vpn-instance-pw-ref { 747 type leafref { 748 path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name"; 749 } 750 description "l2vpn-instance-pw-ref"; 751 } 753 typedef source-ipv4-addr-type { 754 type union { 755 type enumeration { 756 enum '*' { 757 description 758 "Any source address."; 759 } 760 } 761 type inet:ipv4-address; 762 } 763 description 764 "Multicast source IPV4 address type."; 765 } // source-ipv4-addr-type 767 typedef source-ipv6-addr-type { 768 type union { 769 type enumeration { 770 enum '*' { 771 description 772 "Any source address."; 773 } 774 } 775 type inet:ipv6-address; 776 } 777 description 778 "Multicast source IPV6 address type."; 779 } // source-ipv6-addr-type 781 /* 782 * Identities 783 */ 785 /* 786 * Groupings 787 */ 789 grouping general-state-attributes { 791 description "General State attributes"; 793 container received { 794 config false; 795 description "Statistics of received IGMP and MLD Snooping 796 related packets."; 797 uses general-statistics-sent-received; 798 } 799 container sent { 800 config false; 801 description "Statistics of sent IGMP and MLD Snooping related 802 packets."; 803 uses general-statistics-sent-received; 804 } 806 } // general-state-attributes 808 grouping instance-config-attributes-igmp-snooping { 809 description "IGMP snooping configuration for each VLAN or l2vpn 810 instance or EVPN instance."; 812 uses instance-config-attributes-igmp-mld-snooping; 814 leaf querier-source { 815 type inet:ipv4-address; 816 description "Use the IGMP snooping querier to support IGMP 817 snooping in a VLAN where PIM and IGMP are not configured. 818 The IPV4 address is used as the source address in 819 messages."; 820 } 822 list static-l2-multicast-group { 823 if-feature static-l2-multicast-group; 824 key "group source-addr"; 825 description 826 "A static multicast route, (*,G) or (S,G)."; 828 leaf group { 829 type inet:ipv4-address; 830 description 831 "Multicast group IPV4 address"; 832 } 834 leaf source-addr { 835 type source-ipv4-addr-type; 836 description 837 "Multicast source IPV4 address."; 838 } 840 leaf-list bridge-outgoing-interface { 841 when "../../type = 'bridge'"; 842 type if:interface-ref; 843 description "Outgoing interface in bridge fowarding"; 845 } 847 leaf-list l2vpn-outgoing-ac { 848 when "../../type = 'l2vpn'"; 849 type l2vpn-instance-ac-ref; 850 description "Outgoing AC in L2VPN fowarding"; 852 } 854 leaf-list l2vpn-outgoing-pw { 855 when "../../type = 'l2vpn'"; 856 type l2vpn-instance-pw-ref; 857 description "Outgoing PW in L2VPN fowarding"; 859 } 861 } // static-l2-multicast-group 863 } // instance-config-attributes-igmp-snooping 865 grouping instance-config-attributes-igmp-mld-snooping { 866 description 867 "IGMP and MLD Snooping configuration of each VLAN."; 869 leaf enable { 870 if-feature admin-enable; 871 type boolean; 872 default false; 873 description 874 "Set the value to true to enable IGMP and MLD Snooping in 875 the VLAN instance."; 876 } 878 leaf forwarding-mode { 879 type enumeration { 880 enum "mac" { 881 description 882 "MAC-based lookup mode"; 883 } 884 enum "ip" { 885 description 886 "IP-based lookup mode"; 887 } 888 } 889 default "ip"; 890 description "The default forwarding mode for IGMP and MLD 891 Snooping is ip. 892 cisco command is as below 893 Router(config-vlan-config)# multicast snooping lookup 894 { ip | mac } "; 895 } 897 leaf explicit-tracking { 898 if-feature explicit-tracking; 899 type boolean; 900 default false; 901 description "Tracks IGMP & MLD Snooping v3 membership reports 902 from individual hosts. 903 It contributes to saving network resources and 904 shortening leave latency."; 906 } 908 leaf exclude-lite { 909 if-feature exclude-lite; 910 type boolean; 911 default false; 912 description 913 "lightweight IGMPv3 and MLDv2 protocols, which simplify the 914 standard versions of IGMPv3 and MLDv2."; 915 reference "RFC5790"; 916 } 918 leaf send-query { 919 type boolean; 920 default true; 921 description "Enable quick response for topo changes. 922 To support IGMP snooping in a VLAN where PIM and IGMP are 923 not configured. 924 It cooperates with param querier-source. "; 925 } 927 /** 928 leaf mrouter-aging-time { 929 type uint16 ; 930 default 180; 931 description "Aging time for mrouter interface"; 932 } 933 **/ 935 leaf immediate-leave { 936 if-feature immediate-leave; 937 type empty; 938 description 939 "When fast leave is enabled, the IGMP software assumes that 940 no more than one host is present on each VLAN port."; 941 } 943 leaf last-member-query-interval { 944 type uint16 { 945 range "1..65535"; 946 } 947 units seconds; 948 default 1; 949 description 950 "Last Member Query Interval, which may be tuned to modify 951 the 952 leave latency of the network."; 953 reference "RFC3376. Sec. 8.8."; 954 } 956 leaf query-interval { 958 type uint16; 959 units seconds; 960 default 125; 961 description 962 "The Query Interval is the interval between General 963 Queries 964 sent by the Querier."; 965 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 966 } 968 leaf query-max-response-time { 970 type uint16; 971 units seconds; 972 default 10; 973 description 974 "Query maximum response time specifies the maximum time 975 allowed before sending a responding report."; 976 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 978 } 980 leaf require-router-alert { 981 if-feature require-router-alert; 982 type boolean; 983 default false; 984 description 985 "When the value is true, router alert should exist in the IP 986 head of IGMP or MLD packet."; 987 } 989 leaf robustness-variable { 990 type uint8 { 991 range "1..7"; 992 } 993 default 2; 994 description 995 "Querier's Robustness Variable allows tuning for the 996 expected 997 packet loss on a network."; 998 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 999 } 1001 leaf version { 1002 type uint8 { 1003 range "1..3"; 1004 } 1005 description "IGMP and MLD Snooping version."; 1006 } 1008 leaf-list static-bridge-mrouter-interface { 1010 when "../type = 'bridge'"; 1011 if-feature static-mrouter-interface; 1012 type if:interface-ref; 1013 description "static mrouter interface in bridge fowarding"; 1015 } 1017 leaf-list static-l2vpn-mrouter-interface-ac { 1019 when "../type = 'l2vpn'"; 1020 if-feature static-mrouter-interface; 1021 type if:interface-ref; 1022 description "static mrouter interface whose type is interface 1023 in l2vpn forwarding"; 1025 } 1027 leaf-list static-l2vpn-mrouter-interface-pw { 1029 when "../type = 'l2vpn'"; 1030 if-feature static-mrouter-interface; 1031 type l2vpn-instance-pw-ref; 1032 description "static mrouter interface whose type is pw in l2vpn 1033 forwarding"; 1035 } 1037 } // instance-config-attributes-igmp-mld-snooping 1039 grouping instance-config-attributes-mld-snooping { 1040 description "MLD snooping configuration of each VLAN."; 1042 uses instance-config-attributes-igmp-mld-snooping; 1044 leaf querier-source { 1045 type inet:ipv6-address; 1046 description 1047 "Use the MLD snooping querier to support MLD snooping where PIM 1048 and MLD are not configured. 1049 The IPV6 address is used as the source address in messages."; 1050 } 1052 list static-l2-multicast-group { 1053 if-feature static-l2-multicast-group; 1054 key "group source-addr"; 1055 description 1056 "A static multicast route, (*,G) or (S,G)."; 1058 leaf group { 1059 type inet:ipv6-address; 1060 description 1061 "Multicast group IPV6 address"; 1062 } 1064 leaf source-addr { 1065 type source-ipv6-addr-type; 1066 description 1067 "Multicast source IPV6 address."; 1068 } 1070 leaf-list bridge-outgoing-interface { 1071 when "../../type = 'bridge'"; 1072 type if:interface-ref; 1073 description "Outgoing interface in bridge fowarding"; 1075 } 1077 leaf-list l2vpn-outgoing-ac { 1078 when "../../type = 'l2vpn'"; 1079 type l2vpn-instance-ac-ref; 1080 description "Outgoing AC in L2VPN fowarding"; 1082 } 1084 leaf-list l2vpn-outgoing-pw { 1085 when "../../type = 'l2vpn'"; 1086 type l2vpn-instance-pw-ref; 1087 description "Outgoing PW in L2VPN fowarding"; 1089 } 1091 } // static-l2-multicast-group 1093 } // instance-config-attributes-mld-snooping 1095 grouping instance-state-group-attributes-igmp-mld-snooping { 1096 description 1097 "Attributes for both IGMP and MLD snooping groups."; 1099 leaf mac-address { 1100 type yang:phys-address; 1101 description "Destination MAC address for L2 multicast 1102 forwarding."; 1103 } 1105 leaf expire { 1106 type uint32; 1107 units seconds; 1108 description 1109 "The time left before multicast group timeout."; 1110 } 1111 leaf up-time { 1112 type uint32; 1113 units seconds; 1114 description 1115 "The time elapsed since the device created L2 multicast 1116 record."; 1117 } 1119 } // instance-state-group-attributes-igmp-mld-snooping 1121 grouping instance-state-attributes-igmp-snooping { 1123 description 1124 "State attributes for IGMP snooping for each VLAN or l2vpn 1125 instance or EVPN instance."; 1127 uses instance-state-attributes-igmp-mld-snooping; 1129 list group { 1131 key "address"; 1133 config false; 1135 description "IGMP snooping information"; 1137 leaf address { 1138 type inet:ipv4-address; 1139 description 1140 "Multicast group IPV4 address"; 1141 } 1143 uses instance-state-group-attributes-igmp-mld-snooping; 1145 leaf last-reporter { 1146 type inet:ipv4-address; 1147 description 1148 "Address of the last host which has sent report to join 1149 the multicast group."; 1150 } 1152 list source { 1153 key "address"; 1154 description "Source IPV4 address for multicast stream"; 1155 leaf address { 1156 type inet:ipv4-address; 1157 description "Source IPV4 address for multicast stream"; 1158 } 1159 uses instance-state-source-attributes-igmp-mld-snooping; 1161 leaf last-reporter { 1162 type inet:ipv4-address; 1163 description 1164 "Address of the last host which has sent report to join 1165 the multicast group."; 1166 } 1168 list host { 1169 if-feature explicit-tracking; 1170 key "host-address"; 1171 description 1172 "List of multicast membership hosts 1173 of the specific multicast source-group."; 1175 leaf host-address { 1176 type inet:ipv4-address; 1177 description 1178 "Multicast membership host address."; 1179 } 1180 leaf host-filter-mode { 1181 type enumeration { 1182 enum "include" { 1183 description 1184 "In include mode"; 1185 } 1186 enum "exclude" { 1187 description 1188 "In exclude mode."; 1189 } 1190 } 1191 description 1192 "Filter mode for a multicast membership 1193 host may be either include or exclude."; 1194 } 1195 }// list host 1197 } // list source 1198 } // list group 1200 } // instance-state-attributes-igmp-snooping 1202 grouping instance-state-attributes-igmp-mld-snooping { 1204 description 1205 "State attributes for both IGMP and MLD Snooping of each 1206 VLAN or l2vpn instance or EVPN instance."; 1208 leaf entries-count { 1209 type uint32; 1210 config false; 1211 description 1212 "The number of L2 multicast entries in IGMP and MLD 1213 Snooping."; 1214 } 1216 leaf-list bridge-mrouter-interface { 1218 when "../type = 'bridge'"; 1219 type if:interface-ref; 1220 config false; 1221 description " mrouter interface in bridge fowarding"; 1223 } 1225 leaf-list l2vpn-mrouter-interface-ac { 1227 when "../type = 'l2vpn'"; 1228 type if:interface-ref; 1229 config false; 1230 description " mrouter interface whose type is interface in 1231 l2vpn fowarding"; 1233 } 1235 leaf-list l2vpn-mrouter-interface-pw { 1237 when "../type = 'l2vpn'"; 1238 type l2vpn-instance-pw-ref; 1239 config false; 1240 description " mrouter interface whose type is pw in l2vpn 1241 fowarding"; 1243 } 1245 } // instance-config-attributes-igmp-mld-snooping 1247 grouping instance-state-attributes-mld-snooping { 1248 description 1249 "State attributes for MLD snooping of each VLAN."; 1251 uses instance-state-attributes-igmp-mld-snooping; 1253 list group { 1255 key "address"; 1257 config false; 1258 description "MLD snooping statistics information"; 1260 leaf address { 1261 type inet:ipv6-address; 1262 description 1263 "Multicast group IPV6 address"; 1264 } 1266 uses instance-state-group-attributes-igmp-mld-snooping; 1268 leaf last-reporter { 1269 type inet:ipv6-address; 1270 description 1271 "Address of the last host which has sent report to join 1272 the multicast group."; 1273 } 1275 list source { 1276 key "address"; 1277 description "Source IPV6 address for multicast stream"; 1279 leaf address { 1280 type inet:ipv6-address; 1281 description "Source IPV6 address for multicast stream"; 1282 } 1284 uses instance-state-source-attributes-igmp-mld-snooping; 1286 leaf last-reporter { 1287 type inet:ipv6-address; 1288 description 1289 "Address of the last host which has sent report to join 1290 the multicast group."; 1291 } 1293 list host { 1294 if-feature explicit-tracking; 1295 key "host-address"; 1296 description 1297 "List of multicast membership hosts 1298 of the specific multicast source-group."; 1300 leaf host-address { 1301 type inet:ipv6-address; 1302 description 1303 "Multicast membership host address."; 1304 } 1305 leaf host-filter-mode { 1306 type enumeration { 1307 enum "include" { 1308 description 1309 "In include mode"; 1310 } 1311 enum "exclude" { 1312 description 1313 "In exclude mode."; 1314 } 1315 } 1316 description 1317 "Filter mode for a multicast membership 1318 host may be either include or exclude."; 1319 } 1320 }// list host 1322 } // list source 1323 } // list group 1325 } // instance-state-attributes-mld-snooping 1327 grouping instance-state-source-attributes-igmp-mld-snooping { 1328 description 1329 "State attributes for both IGMP and MLD Snooping of each VLAN 1330 or l2vpn instance or EVPN instance."; 1332 leaf-list bridge-outgoing-interface { 1333 when "../../../type = 'bridge'"; 1334 type if:interface-ref; 1335 description "Outgoing interface in bridge fowarding"; 1337 } 1339 leaf-list l2vpn-outgoing-ac { 1340 when "../../../type = 'l2vpn'"; 1341 type l2vpn-instance-ac-ref; 1342 description "Outgoing AC in L2VPN fowarding"; 1344 } 1346 leaf-list l2vpn-outgoing-pw { 1347 when "../../../type = 'l2vpn'"; 1348 type l2vpn-instance-pw-ref; 1349 description "Outgoing PW in L2VPN fowarding"; 1351 } 1353 leaf up-time { 1354 type uint32; 1355 units seconds; 1356 description "The time elapsed since the device created L2 1357 multicast record"; 1358 } 1360 leaf expire { 1361 type uint32; 1362 units seconds; 1363 description 1364 "The time left before multicast group timeout."; 1365 } 1367 leaf host-count { 1368 if-feature explicit-tracking; 1369 type uint32; 1370 description 1371 "The number of host addresses."; 1372 } 1374 } // instance-state-source-attributes-igmp-mld-snooping 1376 grouping general-statistics-error { 1377 description 1378 "A grouping defining statistics attributes for errors."; 1380 leaf checksum { 1381 type yang:counter64; 1382 description 1383 "The number of checksum errors."; 1384 } 1385 leaf too-short { 1386 type yang:counter64; 1387 description 1388 "The number of messages that are too short."; 1389 } 1390 } // general-statistics-error 1392 grouping general-statistics-sent-received { 1393 description 1394 "A grouping defining statistics attributes."; 1396 leaf query { 1397 type yang:counter64; 1398 description 1399 "The number of query messages."; 1400 } 1401 leaf membership-report-v1 { 1402 type yang:counter64; 1403 description 1404 "The number of membership report v1 messages."; 1405 } 1406 leaf membership-report-v2 { 1407 type yang:counter64; 1408 description 1409 "The number of membership report v2 messages."; 1411 } 1412 leaf membership-report-v3 { 1413 type yang:counter64; 1414 description 1415 "The number of membership report v3 messages."; 1416 } 1417 leaf leave { 1418 type yang:counter64; 1419 description 1420 "The number of leave messages."; 1421 } 1422 leaf non-member-leave { 1423 type yang:counter64; 1424 description 1425 "The number of non member leave messages."; 1426 } 1427 leaf pim { 1428 type yang:counter64; 1429 description 1430 "The number of pim hello messages."; 1431 } 1432 } // general-statistics-sent-received 1434 grouping interface-endpoint-attributes-igmp-snooping { 1436 description "interface attributes for igmp snooping"; 1438 list host { 1440 if-feature explicit-tracking; 1442 key "host-address"; 1444 config false; 1446 description 1447 "List of multicast membership hosts 1448 of the specific multicast source-group."; 1450 leaf host-address { 1451 type inet:ipv4-address; 1452 description 1453 "Multicast membership host address."; 1454 } 1455 leaf host-filter-mode { 1456 type enumeration { 1457 enum "include" { 1458 description 1459 "In include mode"; 1461 } 1462 enum "exclude" { 1463 description 1464 "In exclude mode."; 1465 } 1466 } 1467 description 1468 "Filter mode for a multicast membership 1469 host may be either include or exclude."; 1470 } 1471 }// list host 1472 } // interface-endpoint-attributes-igmp-snooping 1474 grouping interface-endpoint-attributes-mld-snooping { 1476 description "interface endpoint attributes mld snooping"; 1478 list host { 1480 if-feature explicit-tracking; 1482 key "host-address"; 1484 config false; 1486 description 1487 "List of multicast membership hosts 1488 of the specific multicast source-group."; 1490 leaf host-address { 1491 type inet:ipv6-address; 1492 description 1493 "Multicast membership host address."; 1494 } 1495 leaf host-filter-mode { 1496 type enumeration { 1497 enum "include" { 1498 description 1499 "In include mode"; 1500 } 1501 enum "exclude" { 1502 description 1503 "In exclude mode."; 1504 } 1505 } 1506 description 1507 "Filter mode for a multicast membership 1508 host may be either include or exclude."; 1509 } 1510 }// list host 1511 } // interface-endpoint-attributes-mld-snooping 1512 /* 1513 * igmp-snooping-instance 1514 */ 1515 container igmp-snooping-instances { 1516 description 1517 "igmp-snooping-instance list"; 1519 list igmp-snooping-instance { 1520 key "name"; 1521 description 1522 "IGMP Snooping instance to configure the igmp- 1523 snooping."; 1525 leaf name { 1526 type string; 1527 description 1528 "Name of the igmp-snooping-instance to configure the igmp 1529 snooping."; 1530 } 1532 leaf type { 1533 type enumeration { 1534 enum "bridge" { 1535 description "bridge"; 1536 } 1537 enum "l2vpn" { 1538 description "l2vpn"; 1539 } 1540 } 1541 description "The type indicates bridge or l2vpn."; 1542 } 1544 uses instance-config-attributes-igmp-snooping { 1545 if-feature per-instance-config; 1546 } 1548 uses instance-state-attributes-igmp-snooping; 1550 } //igmp-snooping-instance 1551 } //igmp-snooping-instances 1553 /* 1554 * mld-snooping-instance 1555 */ 1556 container mld-snooping-instances { 1557 description 1558 "mld-snooping-instance list"; 1560 list mld-snooping-instance { 1561 key "name"; 1562 description 1563 "MLD Snooping instance to configure the mld-snooping."; 1565 leaf name { 1566 type string; 1567 description 1568 "Name of the mld-snooping-instance to configure the mld 1569 snooping."; 1570 } 1572 leaf type { 1573 type enumeration { 1574 enum "bridge" { 1575 description "bridge"; 1576 } 1577 enum "l2vpn" { 1578 description "l2vpn"; 1579 } 1580 } 1581 description "The type indicates bridge or l2vpn."; 1582 } 1584 uses instance-config-attributes-mld-snooping { 1585 if-feature per-instance-config; 1586 } 1588 uses instance-state-attributes-mld-snooping; 1590 } //mld-snooping-instance 1591 } //mld-snooping-instances 1593 container bridges { 1594 description 1595 "Apply igmp-mld-snooping instance in the bridge scenario"; 1597 list bridge { 1598 key name; 1600 description 1601 "bridge list"; 1603 leaf name { 1604 type name-type; 1605 description 1606 "bridge name"; 1608 } 1609 leaf igmp-snooping-instance { 1610 type igmp-snooping-instance-ref; 1611 description "Configure igmp-snooping instance under the 1612 bridge view"; 1613 } 1614 leaf mld-snooping-instance { 1615 type mld-snooping-instance-ref; 1616 description "Configure mld-snooping instance under the 1617 bridge view"; 1618 } 1619 list component { 1620 key "name"; 1621 description 1622 " "; 1624 leaf name { 1625 type string; 1626 description 1627 "The name of the Component."; 1628 } 1629 container bridge-vlan { 1630 description "bridge vlan"; 1631 list vlan { 1632 key "vid"; 1633 description 1634 ""; 1636 leaf vid { 1637 type vlan-index-type; 1638 description 1639 "The VLAN identifier to which this entry 1640 applies."; 1642 } 1643 leaf igmp-snooping-instance { 1644 type igmp-snooping-instance-ref; 1645 description "Configure igmp-snooping instance 1646 under the vlan view"; 1647 } 1648 leaf mld-snooping-instance { 1649 type mld-snooping-instance-ref; 1650 description "Configure mld-snooping instance 1651 under the vlan view"; 1652 } 1654 }//vlan 1655 }//bridge-vlan 1656 }//component 1657 }//bridge 1658 } //bridges 1660 container l2vpn-instances { 1661 description "Apply igmp-mld-snooping instance in the l2vpn 1662 scenario"; 1664 list l2vpn-instance { 1665 key "name"; 1666 description "An l2vpn service instance"; 1668 leaf name { 1669 type string; 1670 description "Name of l2vpn service instance"; 1671 } 1673 leaf igmp-snooping-instance { 1674 type igmp-snooping-instance-ref; 1675 description "Configure igmp-snooping instance under the 1676 l2vpn-instance view"; 1677 } 1678 leaf mld-snooping-instance { 1679 type mld-snooping-instance-ref; 1680 description "Configure mld-snooping instance under the 1681 l2vpn-instance view"; 1682 } 1684 } 1685 } 1687 /* augments */ 1689 augment "/if:interfaces/if:interface" { 1690 description "Augment interface for referencing attributes which 1691 only fit for interface view."; 1693 container igmp-mld-snooping { 1694 description 1695 "igmp-mld-snooping related attributes under interface view"; 1697 leaf enable { 1698 if-feature admin-enable; 1699 type boolean; 1700 default false; 1701 description 1702 "Set the value to true to enable IGMP and MLD Snooping in 1703 the VLAN instance."; 1704 } 1706 leaf version { 1707 type uint8 { 1708 range "1..3"; 1709 } 1710 description "IGMP and MLD Snooping version."; 1711 } 1713 leaf type { 1714 type enumeration { 1715 enum "bridge" { 1716 description "bridge"; 1717 } 1718 enum "l2vpn" { 1719 description "l2vpn"; 1720 } 1721 } 1722 description "The type indicates bridge or l2vpn."; 1723 } 1725 container static-mrouter-interface { 1726 description 1727 "Container for choice static-mrouter-interface"; 1729 choice static-mrouter-interface { 1730 description 1731 "Configure static multicast router interface under the 1732 interface view"; 1734 case bridge { 1735 when "../type = 'bridge'" { 1736 description 1737 "Applies to bridge scenario."; 1738 } 1739 description 1740 "Applies to bridge scenario."; 1742 leaf bridge-name { 1743 type string; 1744 description 1745 "The name for a bridge. Each interface 1746 belongs to only one bridge."; 1748 } 1749 leaf-list vlan-id { 1750 type uint32; 1751 description 1752 "The vlan ids for bridge. If you don't 1753 specify vlan id here, the interface serves as the mrouter interface for 1754 all the vlans in this bridge."; 1755 } 1757 } 1758 case l2vpn { 1759 when "../type = 'l2vpn'" { 1760 description 1761 "Applies to l2vpn scenario."; 1762 } 1763 description 1764 "Applies to l2vpn scenario."; 1766 leaf l2vpn-instance-name { 1767 type string; 1768 description 1769 "The l2vpn instance name applied in the 1770 interface"; 1772 } 1773 } 1775 } // choice static-mrouter-interface 1776 } // container static-mrouter-interface 1778 container static-l2-multicast-group { 1779 description 1780 "Container for static-l2-multicast-group"; 1782 choice static-l2-multicast-group { 1783 description 1784 "Configure static l2 multicast group under the 1785 interface view"; 1787 case bridge { 1788 when "../type = 'bridge'" { 1789 description 1790 "Applies to bridge scenario."; 1791 } 1792 description 1793 "Applies to bridge scenario."; 1795 leaf bridge-name { 1796 type string; 1797 description 1798 "bridge name."; 1800 } 1801 list bridge-group-v4 { 1803 key "group source-addr"; 1804 description 1805 "A static multicast route, (*,G) or (S,G)."; 1807 leaf group { 1808 type inet:ipv4-address; 1809 description 1810 "Multicast group IPV4 address"; 1811 } 1813 leaf source-addr { 1814 type source-ipv4-addr-type; 1815 description 1816 "Multicast source IPV4 address."; 1817 } 1819 leaf-list vlan-id { 1820 type uint32; 1821 description 1822 "vlan id."; 1823 } 1825 } 1827 list bridge-group-v6 { 1828 key "group source-addr"; 1829 description 1830 "A static multicast route, (*,G) or (S,G)."; 1832 leaf group { 1833 type inet:ipv6-address; 1834 description 1835 "Multicast group IPV6 address"; 1836 } 1838 leaf source-addr { 1839 type source-ipv6-addr-type; 1840 description 1841 "Multicast source IPV6 address."; 1842 } 1844 leaf-list vlan-id { 1845 type uint32; 1846 description 1847 "vlan id."; 1848 } 1850 } 1852 } 1853 case l2vpn { 1855 when "../type = 'l2vpn'" { 1856 description 1857 "Applies to l2vpn scenario."; 1858 } 1859 description 1860 "Applies to l2vpn scenario."; 1862 list l2vpn-group-v4 { 1863 key "group source-addr"; 1864 description "A static multicast route, (*,G) or 1865 (S,G)."; 1867 leaf group { 1868 type inet:ipv4-address; 1869 description 1870 "Multicast group IPV4 address"; 1871 } 1873 leaf source-addr { 1874 type source-ipv4-addr-type; 1875 description 1876 "Multicast source IPV4 address."; 1877 } 1879 leaf l2vpn-instance-name { 1880 type string; 1881 description 1882 "The l2vpn instance name applied in the 1883 interface"; 1885 } 1886 } 1887 list l2vpn-group-v6 { 1889 key "group source-addr"; 1891 description 1892 "A static multicast route, (*,G) or (S,G)."; 1894 leaf group { 1895 type inet:ipv6-address; 1896 description 1897 "Multicast group IPV6 address"; 1898 } 1900 leaf source-addr { 1901 type source-ipv6-addr-type; 1902 description 1903 "Multicast source IPV6 address."; 1904 } 1906 leaf l2vpn-instance-name { 1907 type string; 1908 description 1909 "The l2vpn instance name applied in the 1910 interface"; 1912 } 1913 } 1914 } 1916 } //choice static-l2-multicast-group 1918 } // container static-l2-multicast-group 1920 container statistics { 1921 config false; 1922 description 1923 "A collection of interface-related statistics objects."; 1925 uses general-state-attributes; 1927 } 1929 } 1931 } 1933 /* RPCs */ 1935 rpc clear-igmp-snooping-groups { 1936 if-feature rpc-clear-groups; 1937 description 1938 "Clears the specified IGMP Snooping cache tables."; 1940 input { 1942 leaf name { 1943 type string; 1944 description 1945 "Name of the igmp-snooping-instance"; 1946 } 1948 leaf group { 1949 type inet:ipv4-address; 1950 description 1951 "Multicast group IPv4 address. 1952 If it is not specified, all IGMP snooping group tables 1953 are 1954 cleared."; 1955 } 1957 leaf source { 1958 type inet:ipv4-address; 1959 description 1960 "Multicast source IPv4 address. 1961 If it is not specified, all IGMP snooping source-group 1962 tables are 1963 cleared."; 1964 } 1965 } 1966 } // rpc clear-igmp-snooping-groups 1968 rpc clear-mld-snooping-groups { 1969 if-feature rpc-clear-groups; 1970 description 1971 "Clears the specified MLD Snooping cache tables."; 1973 input { 1974 leaf name { 1975 type string; 1976 description 1977 "Name of the mld-snooping-instance"; 1978 } 1980 leaf group { 1981 type inet:ipv6-address; 1982 description 1983 "Multicast group IPv6 address. 1984 If it is not specified, all MLD snooping group tables are 1985 cleared."; 1986 } 1988 leaf source { 1989 type inet:ipv6-address; 1990 description 1991 "Multicast source IPv6 address. 1992 If it is not specified, all MLD snooping source-group 1993 tables are 1994 cleared."; 1995 } 1996 } 1997 } // rpc clear-mld-snooping-groups 1998 } 1999 2000 4. Security Considerations 2002 The YANG module specified in this document defines a schema for data 2003 that is designed to be accessed via network management protocols such 2004 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 2005 is the secure transport layer, and the mandatory-to-implement secure 2006 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 2007 is HTTPS, and the mandatory-to-implement secure transport is TLS 2008 [RFC5246]. 2010 The NETCONF access control model [RFC6536] provides the means to 2011 restrict access for particular NETCONF or RESTCONF users to a 2012 preconfigured subset of all available NETCONF or RESTCONF protocol 2013 operations and content. 2015 There are a number of data nodes defined in this YANG module that are 2016 writable/creatable/deletable (i.e., config true, which is the 2017 default). These data nodes may be considered sensitive or vulnerable 2018 in some network environments. Write operations (e.g., edit-config) to 2019 these data nodes without proper protection can have a negative effect 2020 on network operations. These are the subtrees and data nodes and 2021 their sensitivity/vulnerability: 2023 /ims:igmp-snooping-instances/ims:igmp-snooping-instance 2025 /ims:mld-snooping-instances/ims:mld-snooping-instance 2027 /if:interfaces/if:interface/ims:igmp-mld-snooping 2029 Unauthorized access to any data node of these subtrees can adversely 2030 affect the IGMP & MLD Snooping subsystem of both the local device and 2031 the network. This may lead to network malfunctions, delivery of 2032 packets to inappropriate destinations, and other problems. 2034 Some of the readable data nodes in this YANG module may be considered 2035 sensitive or vulnerable in some network environments. It is thus 2036 important to control read access (e.g., via get, get-config, or 2037 notification) to these data nodes. These are the subtrees and data 2038 nodes and their sensitivity/vulnerability: 2040 /ims:igmp-snooping-instances/ims:igmp-snooping-instance 2042 /ims:mld-snooping-instances/ims:mld-snooping-instance 2044 /if:interfaces/if:interface/ims:igmp-mld-snooping 2046 Unauthorized access to any data node of these subtrees can disclose 2047 the operational state information of IGMP & MLD Snooping on this 2048 device. 2050 Some of the RPC operations in this YANG module may be considered 2051 sensitive or vulnerable in some network environments. It is thus 2052 important to control access to these operations. The IGMP & MLD 2053 Snooping Yang module support the "clear-igmp-snooping-groups" and " 2054 clear-mld-snooping-groups" RPCs. If it meets unauthorized RPC 2055 operation invocation, the IGMP and MLD Snooping group tables will be 2056 cleared unexpectedly. 2058 5. IANA Considerations 2060 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 2061 actual RFC number (and remove this note). 2063 This document registers the following namespace URIs in the IETF XML 2065 registry [RFC3688]: 2067 -------------------------------------------------------------------- 2069 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 2071 Registrant Contact: The IESG. 2073 XML: N/A, the requested URI is an XML namespace. 2075 -------------------------------------------------------------------- 2077 This document registers the following YANG modules in the YANG 2078 Module Names registry [RFC7950]: 2080 -------------------------------------------------------------------- 2082 name: ietf-igmp-mld-snooping 2084 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 2086 prefix: ims 2088 reference: RFC XXXX 2090 -------------------------------------------------------------------- 2092 6. Normative References 2094 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2095 the Network Configuration Protocol (NETCONF)", RFC 6020, 2096 October 2010. 2098 [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6021, 2099 October 2010. 2101 [RFC4541] M. Christensen, K. Kimball, F. Solensky, "Considerations 2102 for Internet Group Management Protocol (IGMP) and Multicast 2103 Listener Discovery (MLD) Snooping Switches", RFC 4541, May 2104 2006. 2106 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 2107 2", RFC 2236, November 1997. 2109 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 2110 Listener Discovery (MLD) for IPv6", RFC 2710, October 1999. 2112 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 2113 Thyagarajan, "Internet Group Management Protocol, Version 2114 3", RFC 3376, October 2002. 2116 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 2117 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 2119 [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using 2120 InternetGroup Management Protocol Version 3 (IGMPv3) and 2121 Multicast Listener Discovery Protocol Version 2 (MLDv2) for 2122 Source-Specific Multicast", RFC 4604, August 2006. 2124 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 2125 IP", RFC 4607, August 2006. 2127 [draft-ietf-pim-igmp-mld-yang-01] X. Liu, F. Guo, M. Sivakumar, P. 2128 McAllister, A. Peter, "A YANG data model for Internet Group 2129 Management Protocol (IGMP) and Multicast Listener Discovery 2130 (MLD)", draft-ietf-pim-igmp-mld-yang-01, October 28, 2016. 2132 [draft-ietf-pim-igmp-mld-yang-03] X. Liu, F. Guo, M. Sivakumar, P. 2133 McAllister, A. Peter, "A YANG data model for Internet Group 2134 Management Protocol (IGMP) and Multicast Listener Discovery 2135 (MLD)", draft-ietf-pim-igmp-mld-yang-03, March 13, 2017. 2137 [draft-dsdt-nmda-guidelines-01] M. Bjorklund, J. Schoenwaelder, P. 2138 Shafer, K. Watsen, R. Wilton, "Guidelines for YANG Module 2139 Authors (NMDA)", draft-dsdt-nmda-guidelines-01, May 2017 2141 [draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data 2142 Model for Interface Management", draft-bjorklund-netmod- 2143 rfc7223bis-00, August 21, 2017 2145 [draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data 2146 Model for IP Management", draft-bjorklund-netmod- 2147 rfc7277bis-00, August 21, 2017 2149 [draft-ietf-netmod-revised-datastores-03] M. Bjorklund, J. 2150 Schoenwaelder, P. Shafer, K. Watsen, R. Wilton, "Network 2151 Management Datastore Architecture", draft-ietf-netmod- 2152 revised-datastores-03, July 3, 2017 2154 [draft-ietf-bess-evpn-yang-02] P.Brissette, A. Sajassi, H. Shah, Z. 2155 Li, H. Chen, K. Tiruveedhula, I. Hussain, J. Rabadan, "Yang 2156 Data Model for EVPN", draft-ietf-bess-evpn-yang-02, March 2157 13, 2017 2159 [draft-ietf-bess-l2vpn-yang-06] H. Shah, P. Brissette, I. Chen, I. 2160 Hussain, B. Wen, K. Tiruveedhula, "YANG Data Model for 2161 MPLS-based L2VPN", draft-ietf-bess-l2vpn-yang-06.txt, June 2162 30, 2017 2164 Appendix A. Data Tree Example 2166 This section contains an example of an instance data tree in the JSON 2168 encoding [RFC7951], containing both configuration and state data. 2170 | +-------+ | 2171 | eth2/1 | | eth2/2 | +------------+ 2172 | +-----+ R2 +-----------+----+ Receiver 1 + 2173 | | | | | +------------+ 2174 | | +-------+ | 2175 | | | 2176 | +-------+ eth1/2 | +-------+ | 2177 | | +-----------+ | | eth3/2 | +------------+ 2178 eth1/1 +--+ R1 | | R3 +-----------+----+ Receiver 2 + 2179 | | +-----------------+ | | +------------+ 2180 +-------+ | +-------+ eth1/3 eth3/1 +-------+ | 2181 | | | | 2182 | +--+ | 2183 | | | | 2184 | | | | 2185 +-------+ | | 2186 Source 2188 The configuration instance data tree for R1 in the above figure could be 2189 as follows: 2191 { 2192 "ietf-igmp-mld-snooping:igmp-snooping-instances": { 2193 "igmp-snooping-instance": [ 2194 { 2195 "name": "ins101", 2196 "type": "bridge", 2197 "enable": true 2198 } 2199 ] 2200 }, 2201 "ietf-igmp-mld-snooping:mld-snooping-instances": { 2202 "mld-snooping-instance": [ 2203 { 2204 "name": "ins102", 2205 "type": "bridge", 2206 "enable": true 2207 } 2208 ] 2209 }, 2210 "ietf-igmp-mld-snooping:bridges": { 2211 "bridge": [ 2212 { 2213 "name": "isp", 2214 "component": [ 2215 { 2216 "name": "comp1", 2217 "bridge-vlan": { 2218 "vlan": [ 2219 { 2220 "vid": 101, 2221 "igmp-snooping-instance": "ins101" 2222 }, 2223 { 2224 "vid": 102, 2225 "mld-snooping-instance": "ins102" 2226 } 2227 ] 2228 } 2229 } 2230 ] 2231 } 2232 ] 2233 } 2234 } 2235 The corresponding operational state data for R1 could be as follows: 2237 { 2238 "ietf-interfaces:interfaces": { 2239 "interface": [ 2240 { 2241 "name": "1/1", 2242 "type": "iana-if-type:ethernetCsmacd", 2243 "admin-status": "up", 2244 "if-index": 214748, 2245 "oper-status": "up", 2246 "statistics": { 2247 "discontinuity-time": "2018-05-23T12:34:56-05:00" 2248 } 2249 }, 2250 { 2251 "name": "1/2", 2252 "type": "iana-if-type:ethernetCsmacd", 2253 "admin-status": "up", 2254 "if-index": 214749, 2255 "oper-status": "up", 2256 "statistics": { 2257 "discontinuity-time": "2018-05-23T12:35:06-05:02" 2258 } 2259 } 2260 ] 2261 }, 2262 "ietf-igmp-mld-snooping:igmp-snooping-instances": { 2263 "igmp-snooping-instance": [ 2264 { 2265 "name": "ins101", 2266 "type": "bridge", 2267 "enable": true, 2268 "forwarding-mode": "ip", 2269 "explicit-tracking": false, 2270 "exclude-lite": false, 2271 "send-query": true, 2272 "immediate-leave": [null], 2273 "last-member-query-interval": 1, 2274 "query-interval": 125, 2275 "query-max-response-time": 10, 2276 "require-router-alert": false, 2277 "robustness-variable": 2, 2278 "entries-count": 1, 2279 "bridge-mrouter-interface": ["1/1"], 2280 "group": [ 2281 { 2282 "address": "223.0.0.1", 2283 "mac-address": "01:00:5e:00:00:01", 2284 "expire": 120, 2285 "up-time": 180, 2286 "last-reporter": "100.0.0.1", 2287 "source": [ 2288 { 2289 "address": "192.168.0.1", 2290 "bridge-outgoing-interface": ["1/2"], 2291 "up-time": 180, 2292 "expire": 120, 2293 "last-reporter": "100.0.0.1" 2294 } 2295 ] 2296 } 2297 ] 2298 } 2299 ] 2300 }, 2301 "ietf-igmp-mld-snooping:mld-snooping-instances": { 2302 "mld-snooping-instance": [ 2303 { 2304 "name": "ins102", 2305 "type": "bridge", 2306 "enable": true, 2307 "forwarding-mode": "ip", 2308 "explicit-tracking": false, 2309 "exclude-lite": false, 2310 "send-query": true, 2311 "immediate-leave": [null], 2312 "last-member-query-interval": 1, 2313 "query-interval": 125, 2314 "query-max-response-time": 10, 2315 "require-router-alert": false, 2316 "robustness-variable": 2, 2317 "entries-count": 1, 2318 "bridge-mrouter-interface": ["1/1"], 2319 "group": [ 2320 { 2321 "address": "FF0E::1", 2322 "mac-address": "01:00:5e:00:00:01", 2323 "expire": 120, 2324 "up-time": 180, 2325 "last-reporter": "2001::1", 2326 "source": [ 2327 { 2328 "address": "3001::1", 2329 "bridge-outgoing-interface": ["1/2"], 2330 "up-time": 180, 2331 "expire": 120, 2332 "last-reporter": "2001::1" 2333 } 2334 ] 2335 } 2336 ] 2337 } 2338 ] 2339 } 2340 } 2341 Authors' Addresses 2343 Hongji Zhao 2344 Ericsson (China) Communications Company Ltd. 2345 Ericsson Tower, No. 5 Lize East Street, 2346 Chaoyang District Beijing 100102, P.R. China 2348 Email: hongji.zhao@ericsson.com 2350 Xufeng Liu 2351 Jabil 2352 8281 Greensboro Drive, Suite 200 2353 McLean VA 22102 2354 USA 2356 EMail: Xufeng.liu.ietf@gmail.com 2358 Yisong Liu 2359 Huawei Technologies 2360 Huawei Bld., No.156 Beiqing Rd. 2361 Beijing 100095 2362 China 2364 Email: liuyisong@huawei.com 2366 Anish Peter 2367 Individual 2369 EMail: anish.ietf@gmail.com 2371 Mahesh Sivakumar 2372 Cisco Systems 2373 510 McCarthy Boulevard 2374 Milpitas, California 2375 USA 2377 EMail: sivakumar.mahesh@gmail.com