idnits 2.17.1 draft-ietf-pim-igmp-mld-snooping-yang-02.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 44 instances of too long lines in the document, the longest one being 12 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 14, 2018) is 2173 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 1997, but not defined == Missing Reference: 'RFC8040' is mentioned on line 1997, but not defined == Missing Reference: 'RFC7950' is mentioned on line 2071, but not defined == Missing Reference: 'RFC6242' is mentioned on line 1999, but not defined == Missing Reference: 'RFC5246' is mentioned on line 2001, but not defined ** Obsolete undefined reference: RFC 5246 (Obsoleted by RFC 8446) == Missing Reference: 'RFC6536' is mentioned on line 2003, but not defined ** Obsolete undefined reference: RFC 6536 (Obsoleted by RFC 8341) == Missing Reference: 'RFC3688' is mentioned on line 2058, but not defined == Missing Reference: 'RFC7951' is mentioned on line 2161, but not defined == Unused Reference: 'RFC6021' is defined on line 2091, but no explicit reference was found in the text == Unused Reference: 'RFC2236' is defined on line 2099, but no explicit reference was found in the text == Unused Reference: 'RFC2710' is defined on line 2102, but no explicit reference was found in the text == Unused Reference: 'RFC3376' is defined on line 2105, but no explicit reference was found in the text == Unused Reference: 'RFC3810' is defined on line 2109, but no explicit reference was found in the text == Unused Reference: 'RFC4604' is defined on line 2112, but no explicit reference was found in the text == Unused Reference: 'RFC4607' is defined on line 2117, 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 13, 2018 Jabil 5 Y. Liu 6 Huawei 7 M. Sivakumar 8 Cisco 9 A. Peter 10 Individual 12 May 14, 2018 14 A Yang Data Model for IGMP and MLD Snooping 15 draft-ietf-pim-igmp-mld-snooping-yang-02.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 13, 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.............................13 74 4. Security Considerations.......................................42 75 5. IANA Considerations...........................................44 76 6. Normative References..........................................44 77 Appendix A. Data Tree Example...................................46 78 Authors' Addresses...............................................52 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 215 | +--rw static-l2-multicast-group* [group source-addr] {static-l2- 216 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 265 | +--ro host* [host-address] {explicit-tracking}? 267 | +--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 312 | +--rw version? uint8 314 | +--rw static-bridge-mrouter-interface* if:interface-ref {static- 315 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 361 | +--ro bridge-outgoing-interface* if:interface-ref 363 | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref 365 | +--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 408 | +--rw bridge-vlan 410 | +--rw vlan* [vid] 412 | +--rw vid vlan-index-type 414 | +--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)? 455 | +--:(bridge) 457 | | +--rw bridge-name? string 459 | | +--rw vlan-id* uint32 461 | +--:(l2vpn) 463 | +--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 504 | +--rw l2vpn-instance-name? string 506 +--ro statistics 508 +--ro received 510 | +--ro query? yang:counter64 512 | +--ro membership-report-v1? yang:counter64 514 | +--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 597 Yisong Liu 598 600 Anish Peter 601 603 Mahesh Sivakumar 604 606 "; 608 description 609 "The module defines a collection of YANG definitions common for 610 all Internet Group Management Protocol (IGMP) and Multicast 611 Listener Discovery (MLD) Snooping devices. 613 Copyright (c) 2018 IETF Trust and the persons identified as 614 authors of the code. All rights reserved. 616 Redistribution and use in source and binary forms, with or 617 without modification, is permitted pursuant to, and subject to 618 the license terms contained in, the Simplified BSD License set 619 forth in Section 4.c of the IETF Trust's Legal Provisions 620 Relating to IETF Documents 621 (http://trustee.ietf.org/license-info). 623 This version of this YANG module is part of RFC XXXX; see the 624 RFC itself for full legal notices."; 626 revision 2018-05-03 { 627 description 628 "Initial revision."; 629 reference 630 "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; 631 } 633 /* 634 * Features 635 */ 637 feature admin-enable { 638 description 639 "Support configuration to enable or disable IGMP and MLD 640 Snooping."; 641 } 643 feature immediate-leave { 644 description 645 "Support configuration of immediate-leave."; 647 } 649 feature join-group { 650 description 651 "Support configuration of join-group."; 652 } 654 feature require-router-alert { 655 description 656 "Support configuration of require-router-alert."; 657 } 659 feature static-l2-multicast-group { 660 description 661 "Support configuration of L2 multicast static-group."; 662 } 664 feature static-mrouter-interface { 665 description 666 "Support configuration of mrouter interface."; 667 } 669 feature per-instance-config { 670 description 671 "Support configuration of each VLAN or l2vpn instance or EVPN 672 instance."; 673 } 675 feature rpc-clear-groups { 676 description 677 "Support to clear statistics by RPC for IGMP and MLD 678 Snooping."; 679 } 681 feature explicit-tracking { 682 description 683 "Support configuration of per instance explicit-tracking 684 hosts."; 685 } 687 feature exclude-lite { 688 description 689 "Support configuration of per instance exclude-lite."; 690 } 692 /* 693 * Typedefs 694 */ 695 typedef name-type { 696 type string { 697 length "0..32"; 698 } 699 description 700 "A text string of up to 32 characters, of locally determined 701 significance."; 702 } 703 typedef vlan-index-type { 704 type uint32 { 705 range "1..4094 | 4096..4294967295"; 706 } 707 description 708 "A value used to index per-VLAN tables. Values of 0 and 4095 709 are not permitted. The range of valid VLAN indices. If the 710 value is greater than 4095, then it represents a VLAN with 711 scope local to the particular agent, i.e., one without a 712 global VLAN-ID assigned to it. Such VLANs are outside the 713 scope of IEEE 802.1Q, but it is convenient to be able to 714 manage them in the same way using this YANG module."; 715 reference 716 "IEEE Std 802.1Q-2014: Virtual Bridged Local Area Networks."; 717 } 719 typedef igmp-snooping-instance-ref { 720 type leafref { 721 path "/igmp-snooping-instances/igmp-snooping-instance/name"; 722 } 723 description 724 "This type is used by data models that need to reference igmp 725 snooping instance."; 726 } 728 typedef mld-snooping-instance-ref { 729 type leafref { 730 path "/mld-snooping-instances/mld-snooping-instance/name"; 731 } 732 description 733 "This type is used by data models that need to reference mld 734 snooping instance."; 735 } 737 typedef l2vpn-instance-ac-ref { 738 type leafref { 739 path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name"; 740 } 741 description "l2vpn-instance-ac-ref"; 742 } 744 typedef l2vpn-instance-pw-ref { 745 type leafref { 746 path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name"; 747 } 748 description "l2vpn-instance-pw-ref"; 749 } 751 typedef source-ipv4-addr-type { 752 type union { 753 type enumeration { 754 enum '*' { 755 description 756 "Any source address."; 757 } 758 } 759 type inet:ipv4-address; 760 } 761 description 762 "Multicast source IPV4 address type."; 763 } // source-ipv4-addr-type 765 typedef source-ipv6-addr-type { 766 type union { 767 type enumeration { 768 enum '*' { 769 description 770 "Any source address."; 771 } 772 } 773 type inet:ipv6-address; 774 } 775 description 776 "Multicast source IPV6 address type."; 777 } // source-ipv6-addr-type 779 /* 780 * Identities 781 */ 783 /* 784 * Groupings 785 */ 787 grouping general-state-attributes { 789 description "General State attributes"; 791 container received { 792 config false; 793 description "Statistics of received IGMP and MLD Snooping 794 related packets."; 795 uses general-statistics-sent-received; 796 } 797 container sent { 798 config false; 799 description "Statistics of sent IGMP and MLD Snooping related 800 packets."; 801 uses general-statistics-sent-received; 802 } 804 } // general-state-attributes 806 grouping instance-config-attributes-igmp-snooping { 807 description "IGMP snooping configuration for each VLAN or l2vpn 808 instance or EVPN instance."; 810 uses instance-config-attributes-igmp-mld-snooping; 812 leaf querier-source { 813 type inet:ipv4-address; 814 description "Use the IGMP snooping querier to support IGMP 815 snooping in a VLAN where PIM and IGMP are not configured. 816 The IPV4 address is used as the source address in 817 messages."; 818 } 820 list static-l2-multicast-group { 821 if-feature static-l2-multicast-group; 822 key "group source-addr"; 823 description 824 "A static multicast route, (*,G) or (S,G)."; 826 leaf group { 827 type inet:ipv4-address; 828 description 829 "Multicast group IPV4 address"; 830 } 832 leaf source-addr { 833 type source-ipv4-addr-type; 834 description 835 "Multicast source IPV4 address."; 836 } 838 leaf-list bridge-outgoing-interface { 839 when "../../type = 'bridge'"; 840 type if:interface-ref; 841 description "Outgoing interface in bridge fowarding"; 843 } 845 leaf-list l2vpn-outgoing-ac { 846 when "../../type = 'l2vpn'"; 847 type l2vpn-instance-ac-ref; 848 description "Outgoing AC in L2VPN fowarding"; 850 } 852 leaf-list l2vpn-outgoing-pw { 853 when "../../type = 'l2vpn'"; 854 type l2vpn-instance-pw-ref; 855 description "Outgoing PW in L2VPN fowarding"; 857 } 859 } // static-l2-multicast-group 861 } // instance-config-attributes-igmp-snooping 863 grouping instance-config-attributes-igmp-mld-snooping { 864 description 865 "IGMP and MLD Snooping configuration of each VLAN."; 867 leaf enable { 868 if-feature admin-enable; 869 type boolean; 870 default false; 871 description 872 "Set the value to true to enable IGMP and MLD Snooping in 873 the VLAN instance."; 874 } 876 leaf forwarding-mode { 877 type enumeration { 878 enum "mac" { 879 description 880 "MAC-based lookup mode"; 881 } 882 enum "ip" { 883 description 884 "IP-based lookup mode"; 885 } 886 } 887 default "ip"; 888 description "The default forwarding mode for IGMP and MLD 889 Snooping is ip. 890 cisco command is as below 891 Router(config-vlan-config)# multicast snooping lookup 892 { ip | mac } "; 893 } 895 leaf explicit-tracking { 896 if-feature explicit-tracking; 897 type boolean; 898 default false; 899 description "Tracks IGMP & MLD Snooping v3 membership reports 900 from individual hosts. 901 It contributes to saving network resources and 902 shortening leave latency."; 904 } 906 leaf exclude-lite { 907 if-feature exclude-lite; 908 type boolean; 909 default false; 910 description 911 "lightweight IGMPv3 and MLDv2 protocols, which simplify the 912 standard versions of IGMPv3 and MLDv2."; 913 reference "RFC5790"; 914 } 916 leaf send-query { 917 type boolean; 918 default true; 919 description "Enable quick response for topo changes. 920 To support IGMP snooping in a VLAN where PIM and IGMP are 921 not configured. 922 It cooperates with param querier-source. "; 923 } 925 /** 926 leaf mrouter-aging-time { 927 type uint16 ; 928 default 180; 929 description "Aging time for mrouter interface"; 930 } 931 **/ 933 leaf immediate-leave { 934 if-feature immediate-leave; 935 type empty; 936 description 937 "When fast leave is enabled, the IGMP software assumes that 938 no more than one host is present on each VLAN port."; 939 } 941 leaf last-member-query-interval { 942 type uint16 { 943 range "1..65535"; 944 } 945 units seconds; 946 default 1; 947 description 948 "Last Member Query Interval, which may be tuned to modify 949 the 950 leave latency of the network."; 951 reference "RFC3376. Sec. 8.8."; 952 } 954 leaf query-interval { 956 type uint16; 957 units seconds; 958 default 125; 959 description 960 "The Query Interval is the interval between General 961 Queries 962 sent by the Querier."; 963 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 964 } 966 leaf query-max-response-time { 968 type uint16; 969 units seconds; 970 default 10; 971 description 972 "Query maximum response time specifies the maximum time 973 allowed before sending a responding report."; 974 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 976 } 978 leaf require-router-alert { 979 if-feature require-router-alert; 980 type boolean; 981 default false; 982 description 983 "When the value is true, router alert should exist in the IP 984 head of IGMP or MLD packet."; 985 } 986 leaf robustness-variable { 987 type uint8 { 988 range "1..7"; 989 } 990 default 2; 991 description 992 "Querier's Robustness Variable allows tuning for the 993 expected 994 packet loss on a network."; 995 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 996 } 998 leaf version { 999 type uint8 { 1000 range "1..3"; 1001 } 1002 description "IGMP and MLD Snooping version."; 1003 } 1005 leaf-list static-bridge-mrouter-interface { 1007 when "../type = 'bridge'"; 1008 if-feature static-mrouter-interface; 1009 type if:interface-ref; 1010 description "static mrouter interface in bridge fowarding"; 1012 } 1014 leaf-list static-l2vpn-mrouter-interface-ac { 1016 when "../type = 'l2vpn'"; 1017 if-feature static-mrouter-interface; 1018 type if:interface-ref; 1019 description "static mrouter interface whose type is interface 1020 in l2vpn forwarding"; 1022 } 1024 leaf-list static-l2vpn-mrouter-interface-pw { 1026 when "../type = 'l2vpn'"; 1027 if-feature static-mrouter-interface; 1028 type l2vpn-instance-pw-ref; 1029 description "static mrouter interface whose type is pw in l2vpn 1030 forwarding"; 1032 } 1033 } // instance-config-attributes-igmp-mld-snooping 1035 grouping instance-config-attributes-mld-snooping { 1036 description "MLD snooping configuration of each VLAN."; 1038 uses instance-config-attributes-igmp-mld-snooping; 1040 leaf querier-source { 1041 type inet:ipv6-address; 1042 description 1043 "Use the MLD snooping querier to support MLD snooping where PIM 1044 and MLD are not configured. 1045 The IPV6 address is used as the source address in messages."; 1046 } 1048 list static-l2-multicast-group { 1049 if-feature static-l2-multicast-group; 1050 key "group source-addr"; 1051 description 1052 "A static multicast route, (*,G) or (S,G)."; 1054 leaf group { 1055 type inet:ipv6-address; 1056 description 1057 "Multicast group IPV6 address"; 1058 } 1060 leaf source-addr { 1061 type source-ipv6-addr-type; 1062 description 1063 "Multicast source IPV6 address."; 1064 } 1066 leaf-list bridge-outgoing-interface { 1067 when "../../type = 'bridge'"; 1068 type if:interface-ref; 1069 description "Outgoing interface in bridge fowarding"; 1071 } 1073 leaf-list l2vpn-outgoing-ac { 1074 when "../../type = 'l2vpn'"; 1075 type l2vpn-instance-ac-ref; 1076 description "Outgoing AC in L2VPN fowarding"; 1078 } 1080 leaf-list l2vpn-outgoing-pw { 1081 when "../../type = 'l2vpn'"; 1082 type l2vpn-instance-pw-ref; 1083 description "Outgoing PW in L2VPN fowarding"; 1085 } 1087 } // static-l2-multicast-group 1089 } // instance-config-attributes-mld-snooping 1091 grouping instance-state-group-attributes-igmp-mld-snooping { 1092 description 1093 "Attributes for both IGMP and MLD snooping groups."; 1095 leaf mac-address { 1096 type yang:phys-address; 1097 description "Destination MAC address for L2 multicast 1098 forwarding."; 1099 } 1101 leaf expire { 1102 type uint32; 1103 units seconds; 1104 description 1105 "The time left before multicast group timeout."; 1106 } 1108 leaf up-time { 1109 type uint32; 1110 units seconds; 1111 description 1112 "The time elapsed since the device created L2 multicast 1113 record."; 1114 } 1116 } // instance-state-group-attributes-igmp-mld-snooping 1118 grouping instance-state-attributes-igmp-snooping { 1120 description 1121 "State attributes for IGMP snooping for each VLAN or l2vpn 1122 instance or EVPN instance."; 1124 uses instance-state-attributes-igmp-mld-snooping; 1126 list group { 1128 key "address"; 1129 config false; 1131 description "IGMP snooping information"; 1133 leaf address { 1134 type inet:ipv4-address; 1135 description 1136 "Multicast group IPV4 address"; 1137 } 1139 uses instance-state-group-attributes-igmp-mld-snooping; 1141 leaf last-reporter { 1142 type inet:ipv4-address; 1143 description 1144 "Address of the last host which has sent report to join 1145 the multicast group."; 1146 } 1148 list source { 1149 key "address"; 1150 description "Source IPV4 address for multicast stream"; 1151 leaf address { 1152 type inet:ipv4-address; 1153 description "Source IPV4 address for multicast stream"; 1154 } 1156 uses instance-state-source-attributes-igmp-mld-snooping; 1158 leaf last-reporter { 1159 type inet:ipv4-address; 1160 description 1161 "Address of the last host which has sent report to join 1162 the multicast group."; 1163 } 1165 list host { 1166 if-feature explicit-tracking; 1167 key "host-address"; 1168 description 1169 "List of multicast membership hosts 1170 of the specific multicast source-group."; 1172 leaf host-address { 1173 type inet:ipv4-address; 1174 description 1175 "Multicast membership host address."; 1176 } 1177 leaf host-filter-mode { 1178 type enumeration { 1179 enum "include" { 1180 description 1181 "In include mode"; 1182 } 1183 enum "exclude" { 1184 description 1185 "In exclude mode."; 1186 } 1187 } 1188 description 1189 "Filter mode for a multicast membership 1190 host may be either include or exclude."; 1191 } 1192 }// list host 1194 } // list source 1195 } // list group 1197 } // instance-state-attributes-igmp-snooping 1199 grouping instance-state-attributes-igmp-mld-snooping { 1201 description 1202 "State attributes for both IGMP and MLD Snooping of each 1203 VLAN or l2vpn instance or EVPN instance."; 1205 leaf entries-count { 1206 type uint32; 1207 config false; 1208 description 1209 "The number of L2 multicast entries in IGMP and MLD 1210 Snooping."; 1211 } 1213 leaf-list bridge-mrouter-interface { 1215 when "../type = 'bridge'"; 1216 type if:interface-ref; 1217 config false; 1218 description " mrouter interface in bridge fowarding"; 1220 } 1222 leaf-list l2vpn-mrouter-interface-ac { 1224 when "../type = 'l2vpn'"; 1225 type if:interface-ref; 1226 config false; 1227 description " mrouter interface whose type is interface in 1228 l2vpn fowarding"; 1229 } 1231 leaf-list l2vpn-mrouter-interface-pw { 1233 when "../type = 'l2vpn'"; 1234 type l2vpn-instance-pw-ref; 1235 config false; 1236 description " mrouter interface whose type is pw in l2vpn 1237 fowarding"; 1239 } 1241 } // instance-config-attributes-igmp-mld-snooping 1243 grouping instance-state-attributes-mld-snooping { 1244 description 1245 "State attributes for MLD snooping of each VLAN."; 1247 uses instance-state-attributes-igmp-mld-snooping; 1249 list group { 1251 key "address"; 1253 config false; 1255 description "MLD snooping statistics information"; 1257 leaf address { 1258 type inet:ipv6-address; 1259 description 1260 "Multicast group IPV6 address"; 1261 } 1263 uses instance-state-group-attributes-igmp-mld-snooping; 1265 leaf last-reporter { 1266 type inet:ipv6-address; 1267 description 1268 "Address of the last host which has sent report to join 1269 the multicast group."; 1270 } 1272 list source { 1273 key "address"; 1274 description "Source IPV6 address for multicast stream"; 1275 leaf address { 1276 type inet:ipv6-address; 1277 description "Source IPV6 address for multicast stream"; 1278 } 1280 uses instance-state-source-attributes-igmp-mld-snooping; 1282 leaf last-reporter { 1283 type inet:ipv6-address; 1284 description 1285 "Address of the last host which has sent report to join 1286 the multicast group."; 1287 } 1289 list host { 1290 if-feature explicit-tracking; 1291 key "host-address"; 1292 description 1293 "List of multicast membership hosts 1294 of the specific multicast source-group."; 1296 leaf host-address { 1297 type inet:ipv6-address; 1298 description 1299 "Multicast membership host address."; 1300 } 1301 leaf host-filter-mode { 1302 type enumeration { 1303 enum "include" { 1304 description 1305 "In include mode"; 1306 } 1307 enum "exclude" { 1308 description 1309 "In exclude mode."; 1310 } 1311 } 1312 description 1313 "Filter mode for a multicast membership 1314 host may be either include or exclude."; 1315 } 1316 }// list host 1318 } // list source 1319 } // list group 1321 } // instance-state-attributes-mld-snooping 1323 grouping instance-state-source-attributes-igmp-mld-snooping { 1324 description 1325 "State attributes for both IGMP and MLD Snooping of each VLAN 1326 or l2vpn instance or EVPN instance."; 1328 leaf-list bridge-outgoing-interface { 1329 when "../../../type = 'bridge'"; 1330 type if:interface-ref; 1331 description "Outgoing interface in bridge fowarding"; 1333 } 1335 leaf-list l2vpn-outgoing-ac { 1336 when "../../../type = 'l2vpn'"; 1337 type l2vpn-instance-ac-ref; 1338 description "Outgoing AC in L2VPN fowarding"; 1340 } 1342 leaf-list l2vpn-outgoing-pw { 1343 when "../../../type = 'l2vpn'"; 1344 type l2vpn-instance-pw-ref; 1345 description "Outgoing PW in L2VPN fowarding"; 1347 } 1349 leaf up-time { 1350 type uint32; 1351 units seconds; 1352 description "The time elapsed since the device created L2 1353 multicast record"; 1354 } 1356 leaf expire { 1357 type uint32; 1358 units seconds; 1359 description 1360 "The time left before multicast group timeout."; 1361 } 1363 leaf host-count { 1364 if-feature explicit-tracking; 1365 type uint32; 1366 description 1367 "The number of host addresses."; 1368 } 1370 } // instance-state-source-attributes-igmp-mld-snooping 1372 grouping general-statistics-error { 1373 description 1374 "A grouping defining statistics attributes for errors."; 1376 leaf checksum { 1377 type yang:counter64; 1378 description 1379 "The number of checksum errors."; 1380 } 1381 leaf too-short { 1382 type yang:counter64; 1383 description 1384 "The number of messages that are too short."; 1385 } 1386 } // general-statistics-error 1388 grouping general-statistics-sent-received { 1389 description 1390 "A grouping defining statistics attributes."; 1392 leaf query { 1393 type yang:counter64; 1394 description 1395 "The number of query messages."; 1396 } 1397 leaf membership-report-v1 { 1398 type yang:counter64; 1399 description 1400 "The number of membership report v1 messages."; 1401 } 1402 leaf membership-report-v2 { 1403 type yang:counter64; 1404 description 1405 "The number of membership report v2 messages."; 1406 } 1407 leaf membership-report-v3 { 1408 type yang:counter64; 1409 description 1410 "The number of membership report v3 messages."; 1411 } 1412 leaf leave { 1413 type yang:counter64; 1414 description 1415 "The number of leave messages."; 1416 } 1417 leaf non-member-leave { 1418 type yang:counter64; 1419 description 1420 "The number of non member leave messages."; 1421 } 1422 leaf pim { 1423 type yang:counter64; 1424 description 1425 "The number of pim hello messages."; 1426 } 1427 } // general-statistics-sent-received 1429 grouping interface-endpoint-attributes-igmp-snooping { 1431 description "interface attributes for igmp snooping"; 1433 list host { 1435 if-feature explicit-tracking; 1437 key "host-address"; 1439 config false; 1441 description 1442 "List of multicast membership hosts 1443 of the specific multicast source-group."; 1445 leaf host-address { 1446 type inet:ipv4-address; 1447 description 1448 "Multicast membership host address."; 1449 } 1450 leaf host-filter-mode { 1451 type enumeration { 1452 enum "include" { 1453 description 1454 "In include mode"; 1455 } 1456 enum "exclude" { 1457 description 1458 "In exclude mode."; 1459 } 1460 } 1461 description 1462 "Filter mode for a multicast membership 1463 host may be either include or exclude."; 1464 } 1465 }// list host 1466 } // interface-endpoint-attributes-igmp-snooping 1468 grouping interface-endpoint-attributes-mld-snooping { 1470 description "interface endpoint attributes mld snooping"; 1472 list host { 1473 if-feature explicit-tracking; 1475 key "host-address"; 1477 config false; 1479 description 1480 "List of multicast membership hosts 1481 of the specific multicast source-group."; 1483 leaf host-address { 1484 type inet:ipv6-address; 1485 description 1486 "Multicast membership host address."; 1487 } 1488 leaf host-filter-mode { 1489 type enumeration { 1490 enum "include" { 1491 description 1492 "In include mode"; 1493 } 1494 enum "exclude" { 1495 description 1496 "In exclude mode."; 1497 } 1498 } 1499 description 1500 "Filter mode for a multicast membership 1501 host may be either include or exclude."; 1502 } 1503 }// list host 1504 } // interface-endpoint-attributes-mld-snooping 1506 /* 1507 * igmp-snooping-instance 1508 */ 1509 container igmp-snooping-instances { 1510 description 1511 "igmp-snooping-instance list"; 1513 list igmp-snooping-instance { 1514 key "name"; 1515 description 1516 "IGMP Snooping instance to configure the igmp- 1517 snooping."; 1519 leaf name { 1520 type string; 1521 description 1522 "Name of the igmp-snooping-instance to configure the igmp 1523 snooping."; 1524 } 1526 leaf type { 1527 type enumeration { 1528 enum "bridge" { 1529 description "bridge"; 1530 } 1531 enum "l2vpn" { 1532 description "l2vpn"; 1533 } 1534 } 1535 description "The type indicates bridge or l2vpn."; 1536 } 1538 uses instance-config-attributes-igmp-snooping { 1539 if-feature per-instance-config; 1540 } 1542 uses instance-state-attributes-igmp-snooping; 1544 } //igmp-snooping-instance 1545 } //igmp-snooping-instances 1547 /* 1548 * mld-snooping-instance 1549 */ 1550 container mld-snooping-instances { 1551 description 1552 "mld-snooping-instance list"; 1554 list mld-snooping-instance { 1555 key "name"; 1556 description 1557 "MLD Snooping instance to configure the mld-snooping."; 1559 leaf name { 1560 type string; 1561 description 1562 "Name of the mld-snooping-instance to configure the mld 1563 snooping."; 1564 } 1566 leaf type { 1567 type enumeration { 1568 enum "bridge" { 1569 description "bridge"; 1570 } 1571 enum "l2vpn" { 1572 description "l2vpn"; 1573 } 1574 } 1575 description "The type indicates bridge or l2vpn."; 1576 } 1578 uses instance-config-attributes-mld-snooping { 1579 if-feature per-instance-config; 1580 } 1582 uses instance-state-attributes-mld-snooping; 1584 } //mld-snooping-instance 1585 } //mld-snooping-instances 1587 container bridges { 1588 description 1589 "Apply igmp-mld-snooping instance in the bridge scenario"; 1591 list bridge { 1592 key name; 1594 description 1595 "bridge list"; 1597 leaf name { 1598 type name-type; 1599 description 1600 "bridge name"; 1602 } 1603 leaf igmp-snooping-instance { 1604 type igmp-snooping-instance-ref; 1605 description "Configure igmp-snooping instance under the 1606 bridge view"; 1607 } 1608 leaf mld-snooping-instance { 1609 type mld-snooping-instance-ref; 1610 description "Configure mld-snooping instance under the 1611 bridge view"; 1612 } 1613 list component { 1614 key "name"; 1615 description 1616 " "; 1618 leaf name { 1619 type string; 1620 description 1621 "The name of the Component."; 1622 } 1623 container bridge-vlan { 1624 description "bridge vlan"; 1625 list vlan { 1626 key "vid"; 1627 description 1628 ""; 1630 leaf vid { 1631 type vlan-index-type; 1632 description 1633 "The VLAN identifier to which this entry 1634 applies."; 1636 } 1637 leaf igmp-snooping-instance { 1638 type igmp-snooping-instance-ref; 1639 description "Configure igmp-snooping instance 1640 under the vlan view"; 1641 } 1642 leaf mld-snooping-instance { 1643 type mld-snooping-instance-ref; 1644 description "Configure mld-snooping instance 1645 under the vlan view"; 1646 } 1648 }//vlan 1649 }//bridge-vlan 1650 }//component 1651 }//bridge 1652 } //bridges 1654 container l2vpn-instances { 1655 description "Apply igmp-mld-snooping instance in the l2vpn 1656 scenario"; 1658 list l2vpn-instance { 1659 key "name"; 1660 description "An l2vpn service instance"; 1662 leaf name { 1663 type string; 1664 description "Name of l2vpn service instance"; 1665 } 1667 leaf igmp-snooping-instance { 1668 type igmp-snooping-instance-ref; 1669 description "Configure igmp-snooping instance under the 1670 l2vpn-instance view"; 1671 } 1672 leaf mld-snooping-instance { 1673 type mld-snooping-instance-ref; 1674 description "Configure mld-snooping instance under the 1675 l2vpn-instance view"; 1676 } 1678 } 1679 } 1681 /* augments */ 1683 augment "/if:interfaces/if:interface" { 1684 description "Augment interface for referencing attributes which 1685 only fit for interface view."; 1687 container igmp-mld-snooping { 1688 description 1689 "igmp-mld-snooping related attributes under interface view"; 1691 leaf enable { 1692 if-feature admin-enable; 1693 type boolean; 1694 default false; 1695 description 1696 "Set the value to true to enable IGMP and MLD Snooping in 1697 the VLAN instance."; 1698 } 1700 leaf version { 1701 type uint8 { 1702 range "1..3"; 1703 } 1704 description "IGMP and MLD Snooping version."; 1705 } 1707 leaf type { 1708 type enumeration { 1709 enum "bridge" { 1710 description "bridge"; 1711 } 1712 enum "l2vpn" { 1713 description "l2vpn"; 1714 } 1715 } 1716 description "The type indicates bridge or l2vpn."; 1717 } 1719 container static-mrouter-interface { 1720 description 1721 "Container for choice static-mrouter-interface"; 1723 choice static-mrouter-interface { 1724 description 1725 "Configure static multicast router interface under the 1726 interface view"; 1728 case bridge { 1729 when "../type = 'bridge'" { 1730 description 1731 "Applies to bridge scenario."; 1732 } 1733 description 1734 "Applies to bridge scenario."; 1736 leaf bridge-name { 1737 type string; 1738 description 1739 "The name for a bridge. Each interface 1740 belongs to only one bridge."; 1742 } 1743 leaf-list vlan-id { 1744 type uint32; 1745 description 1746 "The vlan ids for bridge. If you don't 1747 specify vlan id here, the interface serves as the mrouter interface for 1748 all the vlans in this bridge."; 1749 } 1751 } 1752 case l2vpn { 1753 when "../type = 'l2vpn'" { 1754 description 1755 "Applies to l2vpn scenario."; 1756 } 1757 description 1758 "Applies to l2vpn scenario."; 1760 leaf l2vpn-instance-name { 1761 type string; 1762 description 1763 "The l2vpn instance name applied in the 1764 interface"; 1766 } 1767 } 1769 } // choice static-mrouter-interface 1770 } // container static-mrouter-interface 1772 container static-l2-multicast-group { 1773 description 1774 "Container for static-l2-multicast-group"; 1776 choice static-l2-multicast-group { 1777 description 1778 "Configure static l2 multicast group under the 1779 interface view"; 1781 case bridge { 1782 when "../type = 'bridge'" { 1783 description 1784 "Applies to bridge scenario."; 1785 } 1786 description 1787 "Applies to bridge scenario."; 1789 leaf bridge-name { 1790 type string; 1791 description 1792 "bridge name."; 1794 } 1796 list bridge-group-v4 { 1798 key "group source-addr"; 1799 description 1800 "A static multicast route, (*,G) or (S,G)."; 1802 leaf group { 1803 type inet:ipv4-address; 1804 description 1805 "Multicast group IPV4 address"; 1806 } 1807 leaf source-addr { 1808 type source-ipv4-addr-type; 1809 description 1810 "Multicast source IPV4 address."; 1811 } 1813 leaf-list vlan-id { 1814 type uint32; 1815 description 1816 "vlan id."; 1817 } 1819 } 1821 list bridge-group-v6 { 1822 key "group source-addr"; 1823 description 1824 "A static multicast route, (*,G) or (S,G)."; 1826 leaf group { 1827 type inet:ipv6-address; 1828 description 1829 "Multicast group IPV6 address"; 1830 } 1832 leaf source-addr { 1833 type source-ipv6-addr-type; 1834 description 1835 "Multicast source IPV6 address."; 1836 } 1838 leaf-list vlan-id { 1839 type uint32; 1840 description 1841 "vlan id."; 1842 } 1844 } 1846 } 1847 case l2vpn { 1849 when "../type = 'l2vpn'" { 1850 description 1851 "Applies to l2vpn scenario."; 1852 } 1853 description 1854 "Applies to l2vpn scenario."; 1855 list l2vpn-group-v4 { 1856 key "group source-addr"; 1857 description "A static multicast route, (*,G) or 1858 (S,G)."; 1860 leaf group { 1861 type inet:ipv4-address; 1862 description 1863 "Multicast group IPV4 address"; 1864 } 1866 leaf source-addr { 1867 type source-ipv4-addr-type; 1868 description 1869 "Multicast source IPV4 address."; 1870 } 1872 leaf l2vpn-instance-name { 1873 type string; 1874 description 1875 "The l2vpn instance name applied in the 1876 interface"; 1878 } 1879 } 1880 list l2vpn-group-v6 { 1882 key "group source-addr"; 1884 description 1885 "A static multicast route, (*,G) or (S,G)."; 1887 leaf group { 1888 type inet:ipv6-address; 1889 description 1890 "Multicast group IPV6 address"; 1891 } 1893 leaf source-addr { 1894 type source-ipv6-addr-type; 1895 description 1896 "Multicast source IPV6 address."; 1897 } 1899 leaf l2vpn-instance-name { 1900 type string; 1901 description 1902 "The l2vpn instance name applied in the 1903 interface"; 1904 } 1905 } 1906 } 1908 } //choice static-l2-multicast-group 1910 } // container static-l2-multicast-group 1912 container statistics { 1913 config false; 1914 description 1915 "A collection of interface-related statistics objects."; 1917 uses general-state-attributes; 1919 } 1921 } 1923 } 1925 /* RPCs */ 1927 rpc clear-igmp-snooping-groups { 1928 if-feature rpc-clear-groups; 1929 description 1930 "Clears the specified IGMP Snooping cache tables."; 1932 input { 1934 leaf name { 1935 type string; 1936 description 1937 "Name of the igmp-snooping-instance"; 1938 } 1940 leaf group { 1941 type inet:ipv4-address; 1942 description 1943 "Multicast group IPv4 address. 1944 If it is not specified, all IGMP snooping group tables 1945 are 1946 cleared."; 1947 } 1949 leaf source { 1950 type inet:ipv4-address; 1951 description 1952 "Multicast source IPv4 address. 1953 If it is not specified, all IGMP snooping source-group 1954 tables are 1955 cleared."; 1956 } 1957 } 1958 } // rpc clear-igmp-snooping-groups 1960 rpc clear-mld-snooping-groups { 1961 if-feature rpc-clear-groups; 1962 description 1963 "Clears the specified MLD Snooping cache tables."; 1965 input { 1966 leaf name { 1967 type string; 1968 description 1969 "Name of the mld-snooping-instance"; 1970 } 1972 leaf group { 1973 type inet:ipv6-address; 1974 description 1975 "Multicast group IPv6 address. 1976 If it is not specified, all MLD snooping group tables are 1977 cleared."; 1978 } 1980 leaf source { 1981 type inet:ipv6-address; 1982 description 1983 "Multicast source IPv6 address. 1984 If it is not specified, all MLD snooping source-group 1985 tables are 1986 cleared."; 1987 } 1988 } 1989 } // rpc clear-mld-snooping-groups 1990 } 1991 1993 4. Security Considerations 1995 The YANG module specified in this document defines a schema for data 1996 that is designed to be accessed via network management protocols such 1997 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 1998 is the secure transport layer, and the mandatory-to-implement secure 1999 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 2000 is HTTPS, and the mandatory-to-implement secure transport is TLS 2001 [RFC5246]. 2003 The NETCONF access control model [RFC6536] provides the means to 2004 restrict access for particular NETCONF or RESTCONF users to a 2005 preconfigured subset of all available NETCONF or RESTCONF protocol 2006 operations and content. 2008 There are a number of data nodes defined in this YANG module that are 2009 writable/creatable/deletable (i.e., config true, which is the 2010 default). These data nodes may be considered sensitive or vulnerable 2011 in some network environments. Write operations (e.g., edit-config) to 2012 these data nodes without proper protection can have a negative effect 2013 on network operations. These are the subtrees and data nodes and 2014 their sensitivity/vulnerability: 2016 /ims:igmp-snooping-instances/ims:igmp-snooping-instance 2018 /ims:mld-snooping-instances/ims:mld-snooping-instance 2020 /if:interfaces/if:interface/ims:igmp-mld-snooping 2022 Unauthorized access to any data node of these subtrees can adversely 2023 affect the IGMP & MLD Snooping subsystem of both the local device and 2024 the network. This may lead to network malfunctions, delivery of 2025 packets to inappropriate destinations, and other problems. 2027 Some of the readable data nodes in this YANG module may be considered 2028 sensitive or vulnerable in some network environments. It is thus 2029 important to control read access (e.g., via get, get-config, or 2030 notification) to these data nodes. These are the subtrees and data 2031 nodes and their sensitivity/vulnerability: 2033 /ims:igmp-snooping-instances/ims:igmp-snooping-instance 2035 /ims:mld-snooping-instances/ims:mld-snooping-instance 2037 /if:interfaces/if:interface/ims:igmp-mld-snooping 2039 Unauthorized access to any data node of these subtrees can disclose 2040 the operational state information of IGMP & MLD Snooping on this 2041 device. 2043 Some of the RPC operations in this YANG module may be considered 2044 sensitive or vulnerable in some network environments. It is thus 2045 important to control access to these operations. The IGMP & MLD 2046 Snooping Yang module support the "clear-igmp-snooping-groups" and " 2047 clear-mld-snooping-groups" RPCs. If it meets unauthorized RPC 2048 operation invocation, the IGMP and MLD Snooping group tables will be 2049 cleared unexpectedly. 2051 5. IANA Considerations 2053 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 2054 actual RFC number (and remove this note). 2056 This document registers the following namespace URIs in the IETF XML 2058 registry [RFC3688]: 2060 -------------------------------------------------------------------- 2062 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 2064 Registrant Contact: The IESG. 2066 XML: N/A, the requested URI is an XML namespace. 2068 -------------------------------------------------------------------- 2070 This document registers the following YANG modules in the YANG 2071 Module Names registry [RFC7950]: 2073 -------------------------------------------------------------------- 2075 name: ietf-igmp-mld-snooping 2077 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 2079 prefix: ims 2081 reference: RFC XXXX 2083 -------------------------------------------------------------------- 2085 6. Normative References 2087 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2088 the Network Configuration Protocol (NETCONF)", RFC 6020, 2089 October 2010. 2091 [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6021, 2092 October 2010. 2094 [RFC4541] M. Christensen, K. Kimball, F. Solensky, "Considerations 2095 for Internet Group Management Protocol (IGMP) and Multicast 2096 Listener Discovery (MLD) Snooping Switches", RFC 4541, May 2097 2006. 2099 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 2100 2", RFC 2236, November 1997. 2102 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 2103 Listener Discovery (MLD) for IPv6", RFC 2710, October 1999. 2105 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 2106 Thyagarajan, "Internet Group Management Protocol, Version 2107 3", RFC 3376, October 2002. 2109 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 2110 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 2112 [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using 2113 InternetGroup Management Protocol Version 3 (IGMPv3) and 2114 Multicast Listener Discovery Protocol Version 2 (MLDv2) for 2115 Source-Specific Multicast", RFC 4604, August 2006. 2117 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 2118 IP", RFC 4607, August 2006. 2120 [draft-ietf-pim-igmp-mld-yang-01] X. Liu, F. Guo, M. Sivakumar, P. 2121 McAllister, A. Peter, "A YANG data model for Internet Group 2122 Management Protocol (IGMP) and Multicast Listener Discovery 2123 (MLD)", draft-ietf-pim-igmp-mld-yang-01, October 28, 2016. 2125 [draft-ietf-pim-igmp-mld-yang-03] X. Liu, F. Guo, M. Sivakumar, P. 2126 McAllister, A. Peter, "A YANG data model for Internet Group 2127 Management Protocol (IGMP) and Multicast Listener Discovery 2128 (MLD)", draft-ietf-pim-igmp-mld-yang-03, March 13, 2017. 2130 [draft-dsdt-nmda-guidelines-01] M. Bjorklund, J. Schoenwaelder, P. 2131 Shafer, K. Watsen, R. Wilton, "Guidelines for YANG Module 2132 Authors (NMDA)", draft-dsdt-nmda-guidelines-01, May 2017 2134 [draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data 2135 Model for Interface Management", draft-bjorklund-netmod- 2136 rfc7223bis-00, August 21, 2017 2138 [draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data 2139 Model for IP Management", draft-bjorklund-netmod- 2140 rfc7277bis-00, August 21, 2017 2142 [draft-ietf-netmod-revised-datastores-03] M. Bjorklund, J. 2143 Schoenwaelder, P. Shafer, K. Watsen, R. Wilton, "Network 2144 Management Datastore Architecture", draft-ietf-netmod- 2145 revised-datastores-03, July 3, 2017 2147 [draft-ietf-bess-evpn-yang-02] P.Brissette, A. Sajassi, H. Shah, Z. 2148 Li, H. Chen, K. Tiruveedhula, I. Hussain, J. Rabadan, "Yang 2149 Data Model for EVPN", draft-ietf-bess-evpn-yang-02, March 2150 13, 2017 2152 [draft-ietf-bess-l2vpn-yang-06] H. Shah, P. Brissette, I. Chen, I. 2153 Hussain, B. Wen, K. Tiruveedhula, "YANG Data Model for 2154 MPLS-based L2VPN", draft-ietf-bess-l2vpn-yang-06.txt, June 2155 30, 2017 2157 Appendix A. Data Tree Example 2159 This section contains an example of an instance data tree in the JSON 2161 encoding [RFC7951], containing both configuration and state data. 2163 | +-------+ | 2164 | eth2/1 | | eth2/2 | +------------+ 2165 | +-----+ R2 +-----------+----+ Receiver 1 + 2166 | | | | | +------------+ 2167 | | +-------+ | 2168 | | | 2169 | +-------+ eth1/2 | +-------+ | 2170 | | +-----------+ | | eth3/2 | +------------+ 2171 eth1/1 +--+ R1 | | R3 +-----------+----+ Receiver 2 + 2172 | | +-----------------+ | | +------------+ 2173 +-------+ | +-------+ eth1/3 eth3/1 +-------+ | 2174 | | | | 2175 | +--+ | 2176 | | | | 2177 | | | | 2178 +-------+ | | 2179 Source 2181 The configuration instance data tree for R1 in the above figure could be 2182 as follows: 2184 { 2186 "ietf-igmp-mld-snooping:igmp-snooping-instances": { 2188 "igmp-snooping-instance": [ 2190 { 2192 "name": "ins101", 2194 "type": "bridge", 2196 "enable": true 2198 } 2200 ] 2202 }, 2204 "ietf-igmp-mld-snooping:mld-snooping-instances": { 2206 "mld-snooping-instance": [ 2208 { 2210 "name": "ins102", 2212 "type": "bridge", 2214 "enable": true 2216 } 2218 ] 2220 }, 2222 "ietf-igmp-mld-snooping:bridges": { 2224 "bridge": [ 2226 { 2228 "name": "isp", 2230 "component": [ 2231 { 2233 "name": "comp1", 2235 "bridge-vlan": { 2237 "vlan": [ 2239 { 2241 "vid": 101, 2243 "igmp-snooping-instance": "ins101" 2245 }, 2247 { 2249 "vid": 102, 2251 "mld-snooping-instance": "ins102" 2253 } 2255 ] 2257 } 2259 } 2261 ] 2263 } 2265 ] 2267 } 2269 } 2271 The corresponding operational state data for R1 could be as follows: 2273 { 2275 "ietf-igmp-mld-snooping:igmp-snooping-instances": { 2277 "igmp-snooping-instance": [ 2279 { 2281 "name": "ins101", 2282 "type": "bridge", 2284 "enable": true, 2286 "forwarding-mode": "ip", 2288 "explicit-tracking": false, 2290 "exclude-lite": false, 2292 "send-query": true, 2294 "immediate-leave": [null], 2296 "last-member-query-interval": 1, 2298 "query-interval": 125, 2300 "query-max-response-time": 10, 2302 "require-router-alert": false, 2304 "robustness-variable": 2, 2306 "entries-count": 1, 2308 "bridge-mrouter-interface": ["1/1"], 2310 "group": [ 2312 { 2314 "address": "223.0.0.1", 2316 "mac-address": "01:00:5e:00:00:01", 2318 "expire": 120, 2320 "up-time": 180, 2322 "last-reporter": "100.0.0.1", 2324 "source": [ 2326 { 2328 "address": "192.168.0.1", 2330 "bridge-outgoing-interface": ["1/2"], 2332 "up-time": 180, 2333 "expire": 120, 2335 "last-reporter": "100.0.0.1" 2337 } 2339 ] 2341 } 2343 ] 2345 } 2347 ] 2349 }, 2351 "ietf-igmp-mld-snooping:mld-snooping-instances": { 2353 "mld-snooping-instance": [ 2355 { 2357 "name": "ins102", 2359 "type": "bridge", 2361 "enable": true, 2363 "forwarding-mode": "ip", 2365 "explicit-tracking": false, 2367 "exclude-lite": false, 2369 "send-query": true, 2371 "immediate-leave": [null], 2373 "last-member-query-interval": 1, 2375 "query-interval": 125, 2377 "query-max-response-time": 10, 2379 "require-router-alert": false, 2381 "robustness-variable": 2, 2383 "entries-count": 1, 2384 "bridge-mrouter-interface": ["1/1"], 2386 "group": [ 2388 { 2390 "address": "FF0E::1", 2392 "mac-address": "01:00:5e:00:00:01", 2394 "expire": 120, 2396 "up-time": 180, 2398 "last-reporter": "2001::1", 2400 "source": [ 2402 { 2404 "address": "3001::1", 2406 "bridge-outgoing-interface": ["1/2"], 2408 "up-time": 180, 2410 "expire": 120, 2412 "last-reporter": "2001::1" 2414 } 2416 ] 2418 } 2420 ] 2422 } 2424 ] 2426 } 2428 Authors' Addresses 2430 Hongji Zhao 2431 Ericsson (China) Communications Company Ltd. 2432 Ericsson Tower, No. 5 Lize East Street, 2433 Chaoyang District Beijing 100102, P.R. China 2435 Email: hongji.zhao@ericsson.com 2437 Xufeng Liu 2438 Jabil 2439 8281 Greensboro Drive, Suite 200 2440 McLean VA 22102 2441 USA 2443 EMail: Xufeng.liu.ietf@gmail.com 2445 Yisong Liu 2446 Huawei Technologies 2447 Huawei Bld., No.156 Beiqing Rd. 2448 Beijing 100095 2449 China 2451 Email: liuyisong@huawei.com 2453 Anish Peter 2454 Individual 2456 EMail: anish.ietf@gmail.com 2458 Mahesh Sivakumar 2459 Cisco Systems 2460 510 McCarthy Boulevard 2461 Milpitas, California 2462 USA 2464 EMail: sivakumar.mahesh@gmail.com