| < draft-ietf-pim-igmp-mld-snooping-yang-05.txt | draft-ietf-pim-igmp-mld-snooping-yang-20.txt > | |||
|---|---|---|---|---|
| PIM Working Group H. Zhao | PIM Working Group H. Zhao | |||
| Internet Draft Ericsson | Internet Draft Ericsson | |||
| Intended status: Standards Track X. Liu | Intended status: Standards Track X. Liu | |||
| Expires: April 10, 2019 Jabil | Expires: April 07, 2022 Volta Networks | |||
| Y. Liu | Y. Liu | |||
| Huawei | China Mobile | |||
| M. Sivakumar | M. Sivakumar | |||
| Juniper | Juniper | |||
| A. Peter | A. Peter | |||
| Individual | Individual | |||
| October 11, 2018 | October 08, 2021 | |||
| A Yang Data Model for IGMP and MLD Snooping | A Yang Data Model for IGMP and MLD Snooping | |||
| draft-ietf-pim-igmp-mld-snooping-yang-05.txt | draft-ietf-pim-igmp-mld-snooping-yang-20.txt | |||
| Abstract | Abstract | |||
| This document defines a YANG data model that can be used to | This document defines a YANG data model that can be used to configure | |||
| configure and manage Internet Group Management Protocol (IGMP) and | and manage Internet Group Management Protocol (IGMP) and Multicast | |||
| Multicast Listener Discovery (MLD) Snooping devices. The YANG module in | Listener Discovery (MLD) Snooping devices. The YANG module in this | |||
| this document conforms to Network Management Datastore Architecture | document conforms to Network Management Datastore Architecture (NMDA). | |||
| (NMDA). | ||||
| Status of this Memo | Status of this Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
| Drafts. | Drafts. | |||
| skipping to change at page 2, line 4 ¶ | skipping to change at page 1, line 45 ¶ | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt | http://www.ietf.org/ietf/1id-abstracts.txt | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html | http://www.ietf.org/shadow.html | |||
| This Internet-Draft will expire on April 10, 2019. | ||||
| This Internet-Draft will expire on April 07, 2022. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction...................................................3 | 1. Introduction...................................................3 | |||
| 1.1. Terminology...............................................3 | 1.1. Terminology...............................................3 | |||
| 1.2. Tree Diagrams.............................................3 | 1.2. Tree Diagrams.............................................3 | |||
| 2. Design of Data Model...........................................3 | 1.3. Prefixes in Data Node Names...............................4 | |||
| 2.1. Overview..................................................4 | 2. Design of Data Model...........................................4 | |||
| 2.2. IGMP Snooping Instances...................................4 | 2.1. Overview..................................................5 | |||
| 2.3. MLD Snooping Instances....................................6 | 2.2. Optional Capabilities.....................................5 | |||
| 2.4. IGMP and MLD Snooping Instances Reference.................8 | 2.3. Position of Address Family in Hierarchy...................6 | |||
| 2.5. IGMP and MLD Snooping RPC.................................9 | 3. Module Structure...............................................6 | |||
| 3. IGMP and MLD Snooping YANG Module..............................9 | 3.1. IGMP Snooping Instances...................................6 | |||
| 4. Security Considerations.......................................32 | 3.2. MLD Snooping Instances....................................8 | |||
| 5. IANA Considerations...........................................33 | 3.3. Using IGMP and MLD Snooping Instances....................10 | |||
| 6. Normative References..........................................34 | 3.4. IGMP and MLD Snooping Actions............................11 | |||
| 4. IGMP and MLD Snooping YANG Module.............................11 | ||||
| 5. Security Considerations.......................................31 | ||||
| 6. IANA Considerations...........................................33 | ||||
| 6.1. XML Registry.............................................33 | ||||
| 6.2. YANG Module Names Registry...............................33 | ||||
| 7. References....................................................34 | ||||
| 7.1. Normative References.....................................34 | ||||
| 7.2. Informative References...................................35 | ||||
| Appendix A. Data Tree Example...................................36 | Appendix A. Data Tree Example...................................36 | |||
| Authors' Addresses...............................................42 | Authors' Addresses...............................................39 | |||
| 1. Introduction | 1. Introduction | |||
| This document defines a YANG [RFC6020] data model for the management of | This document defines a YANG [RFC7950] data model for the management of | |||
| Internet Group Management Protocol (IGMP) and Multicast Listener | Internet Group Management Protocol (IGMP) and Multicast Listener | |||
| Discovery (MLD) Snooping devices. | Discovery (MLD) Snooping [RFC4541] devices. | |||
| The YANG module in this document conforms to the Network Management | The YANG module in this document conforms to the Network Management | |||
| Datastore Architecture defined in [RFC8342]. The "Network Management | Datastore Architecture defined in [RFC8342]. The "Network Management | |||
| Datastore Architecture" (NMDA) adds the ability to inspect the current | Datastore Architecture" (NMDA) adds the ability to inspect the current | |||
| operational values for configuration, allowing clients to use identical | operational values for configuration, allowing clients to use identical | |||
| paths for retrieving the configured values and the operational values. | paths for retrieving the configured values and the operational values. | |||
| 1.1. Terminology | 1.1. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The terminology for describing YANG data models is found in [RFC6020] | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in BCP 14 | ||||
| [RFC2119]. | ||||
| The terminology for describing YANG data models is found in [RFC6020]. | and [RFC7950], including: | |||
| 1.2. Tree Diagrams | * augment | |||
| A simplified graphical representation of the data model is used in this | * data model | |||
| document. The meaning of the symbols in these diagrams is as follows: | ||||
| o Brackets "[" and "]" enclose list keys. | * data node | |||
| o Abbreviations before data node names: "rw" means configuration | * identity | |||
| (read-write), and "ro" means state data (read-only). | ||||
| o Symbols after data node names: "?" means an optional node, "!" | * module | |||
| means a presence container, and "*" denotes a list and leaf-list. | ||||
| o Parentheses enclose choice and case nodes, and case nodes are also | The following terminologies are used in this document: | |||
| marked with a colon (":"). | ||||
| o Ellipsis ("...") stands for contents of subtrees that are not | * mrouter: multicast router, which is a router that has multicast | |||
| shown. | routing enabled [RFC4286]. | |||
| * mrouter interfaces: snooping switch ports where multicast routers | ||||
| are attached [RFC4541]. | ||||
| The following abbreviations are used in this document and defined model: | ||||
| IGMP: Internet Group Management Protocol [RFC3376]. | ||||
| MLD: Multicast Listener Discovery [RFC3810]. | ||||
| 1.2. Tree Diagrams | ||||
| Tree diagrams used in this document follow the notation defined in | ||||
| [RFC8340]. | ||||
| 1.3. Prefixes in Data Node Names | ||||
| In this document, names of data nodes, actions, and other data model | ||||
| objects are often used without a prefix, as long as it is clear from the | ||||
| context in which YANG module each name is defined. Otherwise, names are | ||||
| prefixed using the standard prefix associated with the corresponding | ||||
| YANG module, as shown in Table 1. | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | Prefix | YANG module | Reference | | ||||
| +==========+=======================+=================================+ | ||||
| | inet | ietf-inet-types | [RFC6991] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | yang | ietf-yang-types | [RFC6991] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | if | ietf-interfaces | [RFC8343] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | rt | ietf-routing | [RFC8349] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | rt-types | ietf-routing-types | [RFC8294] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | dot1q | ieee802-dot1q-bridge | [dot1Qcp] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| Table 1: Prefixes and Corresponding YANG Modules | ||||
| 2. Design of Data Model | 2. Design of Data Model | |||
| The model covers Considerations for Internet Group Management Protocol | An IGMP/MLD snooping switch [RFC4541] analyzes IGMP/MLD packets and sets | |||
| up forwarding tables for multicast traffic. If a switch does not run | ||||
| IGMP/MLD snooping, multicast traffic will be flooded in the broadcast | ||||
| domain. If a switch runs IGMP/MLD snooping, multicast traffic will be | ||||
| forwarded based on the forwarding tables to avoid wasting bandwidth. The | ||||
| IGMP/MLD snooping switch does not need to run any of the IGMP/MLD | ||||
| protocols. Because the IGMP/MLD snooping is independent of the IGMP/MLD | ||||
| protocols, the data model defined in this document does not augment, or | ||||
| even require, the IGMP/MLD data model defined in [RFC8652]. | ||||
| The model covers considerations for Internet Group Management Protocol | ||||
| (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches | (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches | |||
| [RFC4541]. | [RFC4541]. | |||
| The goal of this document is to define a data model that provides a | IGMP and MLD snooping switches do not adhere to the conceptual model | |||
| common user interface to IGMP and MLD Snooping. This document provides | that provides the strict separation of functionality between different | |||
| freedom for vendors to adapt this data model to their product | communications layers in the ISO model, and instead utilize information | |||
| implementations. | in the upper level protocol headers as factors to be considered in | |||
| processing at the lower levels [RFC4541]. | ||||
| IGMP Snooping switches utilize IGMP, and could support IGMPv1 [RFC1112], | ||||
| IGMPv2 [RFC2236], and IGMPv3 [RFC3376]. MLD Snooping switches utilize | ||||
| MLD, and could support MLDv1 [RFC2710] and MLDv2 [RFC3810]. The goal of | ||||
| this document is to define a data model that provides a common user | ||||
| interface to IGMP and MLD Snooping. | ||||
| 2.1. Overview | 2.1. Overview | |||
| The IGMP and MLD Snooping YANG module defined in this document has all | The IGMP and MLD Snooping YANG module defined in this document has all | |||
| the common building blocks for the IGMP and MLD Snooping protocol. | the common building blocks for the IGMP and MLD Snooping switches. | |||
| The YANG module includes IGMP and MLD Snooping instance definition, | The YANG module includes IGMP and MLD Snooping instance definition, | |||
| instance reference in the scenario of BRIDGE and L2VPN. The module also | using instance in the L2 service type of BRIDGE [dot1Qcp]. It also | |||
| includes the RPC methods for clearing IGMP and MLD Snooping group | includes actions for clearing IGMP and MLD Snooping group tables. | |||
| tables. | ||||
| This YANG module follows the Guidelines for YANG Module Authors (NMDA) | The YANG module doesn't cover L2VPN, which will be specified in a | |||
| [draft-dsdt-nmda-guidelines-01]. This NMDA ("Network Management | separated document. | |||
| Datastore Architecture") architecture provides an architectural | ||||
| framework for datastores as they are used by network management | ||||
| protocols such as NETCONF [RFC6241], RESTCONF [RFC8040] and the YANG | ||||
| [RFC7950] data modeling language. | ||||
| 2.2. IGMP Snooping Instances | 2.2. Optional Capabilities | |||
| The YANG module defines igmp-snooping-instance which could be referenced | This model is designed to represent the basic capability subsets of IGMP | |||
| in the BRIDGE or L2VPN scenario to enable IGMP Snooping. | and MLD Snooping. The main design goals of this document are that the | |||
| basic capabilities described in the model are supported by any major | ||||
| now-existing implementation, and that the configuration of all | ||||
| implementations meeting the specifications is easy to express through | ||||
| some combination of the optional features in the model and simple vendor | ||||
| augmentations. | ||||
| There is also value in widely supported features being standardized, to | ||||
| provide a standardized way to access these features, to save work for | ||||
| individual vendors, and so that mapping between different vendors' | ||||
| configuration is not needlessly complicated. Therefore, this model | ||||
| declares a number of features representing capabilities that not all | ||||
| deployed devices support. | ||||
| The extensive use of feature declarations should also substantially | ||||
| simplify the capability negotiation process for a vendor's IGMP and MLD | ||||
| Snooping implementations. | ||||
| On the other hand, operational state parameters are not so widely | ||||
| designated as features, as there are many cases where the defaulting | ||||
| of an operational state parameter would not cause any harm to the | ||||
| system, and it is much more likely that an implementation without | ||||
| native support for a piece of operational state would be able to derive | ||||
| a suitable value for a state variable that is not natively supported. | ||||
| 2.3. Position of Address Family in Hierarchy | ||||
| IGMP Snooping only supports IPv4, while MLD Snooping only supports IPv6. | ||||
| The data model defined in this document can be used for both IPv4 and | ||||
| IPv6 address families. | ||||
| This document defines IGMP Snooping and MLD Snooping as separate schema | ||||
| branches in the structure. The benefits are: | ||||
| * The model can support IGMP Snooping (IPv4), MLD Snooping (IPv6), or | ||||
| both optionally and independently. Such flexibility cannot be achieved | ||||
| cleanly with a combined branch. | ||||
| * The structure is consistent with other YANG data models such as | ||||
| [RFC8652], which uses separate branches for IPv4 and IPv6. | ||||
| * Having separate branches for IGMP Snooping and MLD Snooping allows | ||||
| minor differences in their behavior to be modelled more simply and | ||||
| cleanly. The two branches can better support different features and node | ||||
| types. | ||||
| 3. Module Structure | ||||
| This model augments the core routing data model specified in [RFC8349]. | ||||
| +--rw routing | ||||
| +--rw router-id? | ||||
| +--rw control-plane-protocols | ||||
| | +--rw control-plane-protocol* [type name] | ||||
| | +--rw type | ||||
| | +--rw name | ||||
| | +--rw igmp-snooping-instance <= Augmented by this Model | ||||
| ... | ||||
| | +--rw mld-snooping-instance <= Augmented by this Model | ||||
| ... | ||||
| The "igmp-snooping-instance" container instantiates an IGMP Snooping | ||||
| Instance. The "mld-snooping-instance" container instantiates an MLD | ||||
| Snooping Instance. | ||||
| The YANG data model defined in this document conforms to the Network | ||||
| Management Datastore Architecture (NMDA) [RFC8342]. The operational | ||||
| state data is combined with the associated configuration data in the | ||||
| same hierarchy [RFC8407]. | ||||
| 3.1. IGMP Snooping Instances | ||||
| The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | ||||
| plane-protocols/rt:control-plane-protocol to add the igmp-snooping- | ||||
| instance container. | ||||
| All the IGMP Snooping related attributes have been defined in the igmp- | All the IGMP Snooping related attributes have been defined in the igmp- | |||
| snooping-instance. The read-write attribute means configurable data. The | snooping-instance. The read-write attributes represent configurable | |||
| read-only attribute means state data. The key attribute of the igmp- | data. The read-only attributes represent state data. | |||
| snooping-instance is name. | ||||
| One igmp-snooping-instance could be referenced in one BRIDGE instance or | One igmp-snooping-instance could be used in one BRIDGE [dot1Qcp] | |||
| L2VPN instance. One igmp-snooping-instance corresponds to one BRIDGE | instance, and it corresponds to one BRIDGE instance. | |||
| instance or L2VPN instance. | ||||
| The value of type in igmp-snooping-instance is bridge or l2vpn. When it | Currently the value of l2-service-type in igmp-snooping-instance could | |||
| is bridge, the igmp-snooping-instance will be referenced in the BRIDGE | only be set bridge. After it is set, igmp-snooping-instance could be | |||
| scenario. When it is l2vpn, the igmp-snooping-instance will be | used in the BRIDGE service. | |||
| referenced in the L2VPN scenario. | ||||
| The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, | The values of bridge-mrouter-interface is filled by the snooping device | |||
| l2vpn-mrouter-interface-pw are filled by snooping device dynamically. | dynamically. It is different from static-bridge-mrouter-interface which | |||
| They are different from static-bridge-mrouter-interface, static-l2vpn- | is configured. | |||
| mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw which are | ||||
| configured statically. | ||||
| The attributes under the statistics are read-only. They show the | The attributes under the interfaces show the statistics of IGMP Snooping | |||
| statistics of IGMP and MLD Snooping related packets. | related packets. | |||
| module: ietf-igmp-mld-snooping | augment /rt:routing/rt:control-plane-protocols | |||
| +--rw igmp-snooping-instances | /rt:control-plane-protocol: | |||
| | +--rw igmp-snooping-instance* [name] | +--rw igmp-snooping-instance {igmp-snooping}? | |||
| | +--rw name string | +--rw l2-service-type? l2-service-type | |||
| | +--rw type? enumeration | +--rw enable? boolean | |||
| | +--rw enable? boolean | +--rw forwarding-table-type? enumeration | |||
| | +--rw forwarding-mode? enumeration | +--rw explicit-tracking? boolean | |||
| | +--rw explicit-tracking? boolean | | {explicit-tracking}? | |||
| | | {explicit-tracking}? | +--rw lite-exclude-filter? empty | |||
| | +--rw exclude-lite? boolean | | {lite-exclude-filter}? | |||
| | | {exclude-lite}? | +--rw send-query? boolean | |||
| | +--rw send-query? boolean | +--rw fast-leave? empty {fast-leave}? | |||
| | +--rw immediate-leave? empty | +--rw last-member-query-interval? uint16 | |||
| | | {immediate-leave}? | +--rw query-interval? uint16 | |||
| | +--rw last-member-query-interval? uint16 | +--rw query-max-response-time? uint16 | |||
| | +--rw query-interval? uint16 | +--rw require-router-alert? boolean | |||
| | +--rw query-max-response-time? uint16 | | {require-router-alert}? | |||
| | +--rw require-router-alert? boolean | +--rw robustness-variable? uint8 | |||
| | | {require-router-alert}? | +--rw static-bridge-mrouter-interface* if:interface-ref | |||
| | +--rw robustness-variable? uint8 | | {static-mrouter-interface}? | |||
| | +--rw version? uint8 | +--rw igmp-version? uint8 | |||
| | +--rw static-bridge-mrouter-interface* if:interface-ref | +--rw querier-source? inet:ipv4-address | |||
| | | {static-mrouter-interface}? | +--rw static-l2-multicast-group* [group source-addr] | |||
| | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref | | {static-l2-multicast-group}? | |||
| | | {static-mrouter-interface}? | | +--rw group | |||
| | +--rw static-l2vpn-mrouter-interface-pw* | | | rt-types:ipv4-multicast-group-address | |||
| | | l2vpn-instance-pw-ref {static-mrouter-interface}? | | +--rw source-addr | |||
| | +--rw querier-source? inet:ipv4-address | | | rt-types:ipv4-multicast-source-address | |||
| | +--rw static-l2-multicast-group* [group source-addr] | | +--rw bridge-outgoing-interface* if:interface-ref | |||
| | | {static-l2-multicast-group}? | +--ro entries-count? yang:gauge32 | |||
| | | +--rw group inet:ipv4-address | +--ro bridge-mrouter-interface* if:interface-ref | |||
| | | +--rw source-addr source-ipv4-addr-type | +--ro group* [address] | |||
| | | +--rw bridge-outgoing-interface* if:interface-ref | | +--ro address | |||
| | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | | rt-types:ipv4-multicast-group-address | |||
| | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--ro mac-address? yang:phys-address | |||
| | +--ro entries-count? uint32 | | +--ro expire? rt-types:timer-value-seconds16 | |||
| | +--ro bridge-mrouter-interface* if:interface-ref | | +--ro up-time uint32 | |||
| | +--ro l2vpn-mrouter-interface-ac* if:interface-ref | | +--ro last-reporter? inet:ipv4-address | |||
| | +--ro l2vpn-mrouter-interface-pw* | | +--ro source* [address] | |||
| | | l2vpn-instance-pw-ref | | +--ro address | |||
| | +--ro group* [address] | | | rt-types:ipv4-multicast-source-address | |||
| | | +--ro address inet:ipv4-address | | +--ro bridge-outgoing-interface* if:interface-ref | |||
| | | +--ro mac-address? yang:phys-address | | +--ro up-time uint32 | |||
| | | +--ro expire? uint32 | | +--ro expire? | |||
| | | +--ro up-time? uint32 | | | rt-types:timer-value-seconds16 | |||
| | | +--ro last-reporter? inet:ipv4-address | | +--ro host-count? yang:gauge32 | |||
| | | +--ro source* [address] | | | {explicit-tracking}? | |||
| | | +--ro address inet:ipv4-address | | +--ro last-reporter? inet:ipv4-address | |||
| | | +--ro bridge-outgoing-interface* if:interface-ref | | +--ro host* [address] {explicit-tracking}? | |||
| | | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | +--ro address inet:ipv4-address | |||
| | | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--ro filter-mode filter-mode-type | |||
| | | +--ro up-time? uint32 | +--ro interfaces | |||
| | | +--ro expire? uint32 | +--ro interface* [name] | |||
| | | +--ro host-count? uint32 | +--ro name if:interface-ref | |||
| | | | {explicit-tracking}? | +--ro statistics | |||
| | | +--ro last-reporter? inet:ipv4-address | +--ro discontinuity-time? yang:date-and-time | |||
| | | +--ro host* [host-address] {explicit-tracking}? | +--ro received | |||
| | | +--ro host-address inet:ipv4-address | | +--ro query-count? yang:counter64 | |||
| | | +--ro host-filter-mode? enumeration | | +--ro membership-report-v1-count? yang:counter64 | |||
| | +--ro interfaces | | +--ro membership-report-v2-count? yang:counter64 | |||
| | +--ro interface* [name] | | +--ro membership-report-v3-count? yang:counter64 | |||
| | +--ro name if:interface-ref | | +--ro leave-count? yang:counter64 | |||
| | +--ro statistics | | +--ro pim-hello-count? yang:counter64 | |||
| | +--ro received | +--ro sent | |||
| | | +--ro query? yang:counter64 | +--ro query-count? yang:counter64 | |||
| | | +--ro membership-report-v1? yang:counter64 | +--ro membership-report-v1-count? yang:counter64 | |||
| | | +--ro membership-report-v2? yang:counter64 | +--ro membership-report-v2-count? yang:counter64 | |||
| | | +--ro membership-report-v3? yang:counter64 | +--ro membership-report-v3-count? yang:counter64 | |||
| | | +--ro leave? yang:counter64 | +--ro leave-count? yang:counter64 | |||
| | | +--ro non-member-leave? yang:counter64 | +--ro pim-hello-count? yang:counter64 | |||
| | | +--ro pim? yang:counter64 | ||||
| | +--ro sent | ||||
| | +--ro query? yang:counter64 | ||||
| | +--ro membership-report-v1? yang:counter64 | ||||
| | +--ro membership-report-v2? yang:counter64 | ||||
| | +--ro membership-report-v3? yang:counter64 | ||||
| | +--ro leave? yang:counter64 | ||||
| | +--ro non-member-leave? yang:counter64 | ||||
| | +--ro pim? yang:counter64 | ||||
| 2.3. MLD Snooping Instances | 3.2. MLD Snooping Instances | |||
| The YANG module defines mld-snooping-instance which could be referenced | The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | |||
| in the BRIDGE or L2VPN scenario to enable MLD Snooping. | plane-protocols/rt:control-plane-protocol to add the mld-snooping- | |||
| instance container. The mld-snooping-instance could be used in the | ||||
| BRIDGE [dot1Qcp] service to enable MLD Snooping. | ||||
| The mld-snooping-instance is the same as IGMP snooping except changing | All the MLD Snooping related attributes have been defined in the mld- | |||
| IPV4 addresses to IPV6 addresses. | snooping-instance. The read-write attributes represent configurable | |||
| data. The read-only attributes represent state data. | ||||
| module: ietf-igmp-mld-snooping | The mld-snooping-instance has similar structure as IGMP snooping. Some | |||
| +--rw mld-snooping-instances | of leaves are protocol related. The mld-snooping-instance uses IPv6 | |||
| +--rw mld-snooping-instance* [name] | addresses and mld-version, while igmp-snooping-instance uses IPv4 | |||
| +--rw name string | addresses and igmp-version. Statistic counters in each of the above | |||
| +--rw type? enumeration | snooping instances are also tailored to the specific protocol type. One | |||
| +--rw enable? boolean | mld-snooping-instance could be used in one BRIDGE instance, and it | |||
| +--rw forwarding-mode? enumeration | corresponds to one BRIDGE instance. | |||
| +--rw explicit-tracking? boolean | ||||
| | {explicit-tracking}? | ||||
| +--rw exclude-lite? boolean | ||||
| | {exclude-lite}? | ||||
| +--rw send-query? boolean | ||||
| +--rw immediate-leave? empty | ||||
| | {immediate-leave}? | ||||
| +--rw last-member-query-interval? uint16 | ||||
| +--rw query-interval? uint16 | ||||
| +--rw query-max-response-time? uint16 | ||||
| +--rw require-router-alert? boolean | ||||
| | {require-router-alert}? | ||||
| +--rw robustness-variable? uint8 | ||||
| +--rw version? uint8 | ||||
| +--rw static-bridge-mrouter-interface* if:interface-ref | ||||
| | {static-mrouter-interface}? | ||||
| +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref | ||||
| | {static-mrouter-interface}? | ||||
| +--rw static-l2vpn-mrouter-interface-pw* | ||||
| | l2vpn-instance-pw-ref {static-mrouter-interface}? | ||||
| +--rw querier-source? inet:ipv6-address | ||||
| +--rw static-l2-multicast-group* [group source-addr] | ||||
| | {static-l2-multicast-group}? | ||||
| | +--rw group inet:ipv6-address | ||||
| | +--rw source-addr source-ipv6-addr-type | ||||
| | +--rw bridge-outgoing-interface* if:interface-ref | ||||
| | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref | ||||
| | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | ||||
| +--ro entries-count? uint32 | ||||
| +--ro bridge-mrouter-interface* if:interface-ref | ||||
| +--ro l2vpn-mrouter-interface-ac* if:interface-ref | ||||
| +--ro l2vpn-mrouter-interface-pw* | ||||
| | l2vpn-instance-pw-ref | ||||
| +--ro group* [address] | ||||
| | +--ro address inet:ipv6-address | ||||
| | +--ro mac-address? yang:phys-address | ||||
| | +--ro expire? uint32 | ||||
| | +--ro up-time? uint32 | ||||
| | +--ro last-reporter? inet:ipv6-address | ||||
| | +--ro source* [address] | ||||
| | +--ro address inet:ipv6-address | ||||
| | +--ro bridge-outgoing-interface* if:interface-ref | ||||
| | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref | ||||
| | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | ||||
| | +--ro up-time? uint32 | ||||
| | +--ro expire? uint32 | ||||
| | +--ro host-count? uint32 | ||||
| | | {explicit-tracking}? | ||||
| | +--ro last-reporter? inet:ipv6-address | ||||
| | +--ro host* [host-address] {explicit-tracking}? | ||||
| | +--ro host-address inet:ipv6-address | ||||
| | +--ro host-filter-mode? enumeration | ||||
| +--ro interfaces | ||||
| +--ro interface* [name] | ||||
| +--ro name if:interface-ref | ||||
| +--ro statistics | ||||
| +--ro received | ||||
| | +--ro query? yang:counter64 | ||||
| | +--ro report-v1? yang:counter64 | ||||
| | +--ro report-v2? yang:counter64 | ||||
| | +--ro done? yang:counter64 | ||||
| | +--ro pim? yang:counter64 | ||||
| +--ro sent | ||||
| +--ro query? yang:counter64 | ||||
| +--ro report-v1? yang:counter64 | ||||
| +--ro report-v2? yang:counter64 | ||||
| +--ro done? yang:counter64 | ||||
| +--ro pim? yang:counter64 | ||||
| 2.4. IGMP and MLD Snooping Instances Reference | Currently the value of l2-service-type in mld-snooping-instance could | |||
| only be set bridge. After it is set, mld-snooping-instance could be used | ||||
| in the BRIDGE service. | ||||
| The igmp-snooping-instance could be referenced in the scenario of BRIDGE | The value of bridge-mrouter-interface is filled by the snooping device | |||
| or L2VPN to configure the IGMP Snooping. | dynamically. It is different from static-bridge-mrouter-interface which | |||
| is configured. | ||||
| For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge | The attributes under the interfaces show the statistics of MLD Snooping | |||
| to reference igmp-snooping-instance. It means IGMP Snooping is enabled | related packets. | |||
| in the whole bridge. | ||||
| It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/ | augment /rt:routing/rt:control-plane-protocols | |||
| dot1q:bridge-vlan/dot1q:vlan to reference igmp-snooping-instance. It | /rt:control-plane-protocol: | |||
| means IGMP Snooping is enabled in the certain VLAN of the bridge. | +--rw mld-snooping-instance {mld-snooping}? | |||
| +--rw l2-service-type? l2-service-type | ||||
| +--rw enable? boolean | ||||
| +--rw forwarding-table-type? enumeration | ||||
| +--rw explicit-tracking? boolean | ||||
| | {explicit-tracking}? | ||||
| +--rw lite-exclude-filter? empty | ||||
| | {lite-exclude-filter}? | ||||
| +--rw send-query? boolean | ||||
| +--rw fast-leave? empty {fast-leave}? | ||||
| +--rw last-member-query-interval? uint16 | ||||
| +--rw query-interval? uint16 | ||||
| +--rw query-max-response-time? uint16 | ||||
| +--rw require-router-alert? boolean | ||||
| | {require-router-alert}? | ||||
| +--rw robustness-variable? uint8 | ||||
| +--rw static-bridge-mrouter-interface* if:interface-ref | ||||
| | {static-mrouter-interface}? | ||||
| +--rw mld-version? uint8 | ||||
| +--rw querier-source? inet:ipv6-address | ||||
| +--rw static-l2-multicast-group* [group source-addr] | ||||
| | {static-l2-multicast-group}? | ||||
| | +--rw group | ||||
| | | rt-types:ipv6-multicast-group-address | ||||
| | +--rw source-addr | ||||
| | | rt-types:ipv6-multicast-source-address | ||||
| | +--rw bridge-outgoing-interface* if:interface-ref | ||||
| +--ro entries-count? yang:gauge32 | ||||
| +--ro bridge-mrouter-interface* if:interface-ref | ||||
| +--ro group* [address] | ||||
| | +--ro address | ||||
| | | rt-types:ipv6-multicast-group-address | ||||
| | +--ro mac-address? yang:phys-address | ||||
| | +--ro expire? rt-types:timer-value-seconds16 | ||||
| | +--ro up-time uint32 | ||||
| | +--ro last-reporter? inet:ipv6-address | ||||
| | +--ro source* [address] | ||||
| | +--ro address | ||||
| | | rt-types:ipv6-multicast-source-address | ||||
| | +--ro bridge-outgoing-interface* if:interface-ref | ||||
| | +--ro up-time uint32 | ||||
| | +--ro expire? | ||||
| | | rt-types:timer-value-seconds16 | ||||
| | +--ro host-count? yang:gauge32 | ||||
| | | {explicit-tracking}? | ||||
| | +--ro last-reporter? inet:ipv6-address | ||||
| | +--ro host* [address] {explicit-tracking}? | ||||
| | +--ro address inet:ipv6-address | ||||
| | +--ro filter-mode filter-mode-type | ||||
| +--ro interfaces | ||||
| +--ro interface* [name] | ||||
| +--ro name if:interface-ref | ||||
| +--ro statistics | ||||
| +--ro discontinuity-time? yang:date-and-time | ||||
| +--ro received | ||||
| | +--ro query-count? yang:counter64 | ||||
| | +--ro report-v1-count? yang:counter64 | ||||
| | +--ro report-v2-count? yang:counter64 | ||||
| | +--ro done-count? yang:counter64 | ||||
| | +--ro pim-hello-count? yang:counter64 | ||||
| +--ro sent | ||||
| +--ro query-count? yang:counter64 | ||||
| +--ro report-v1-count? yang:counter64 | ||||
| +--ro report-v2-count? yang:counter64 | ||||
| +--ro done-count? yang:counter64 | ||||
| +--ro pim-hello-count? yang:counter64 | ||||
| augment /dot1q:bridges/dot1q:bridge: | 3.3. Using IGMP and MLD Snooping Instances | |||
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | ||||
| +--rw mld-snooping-instance? mld-snooping-instance-ref | ||||
| augment /dot1q:bridges/dot1q:bridge/dot1q:component/dot1q:bridge-vlan/dot1q:vlan: | The igmp-snooping-instance could be used in the service of BRIDGE | |||
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | [dot1Qcp] to configure the IGMP Snooping. | |||
| +--rw mld-snooping-instance? mld-snooping-instance-ref | ||||
| For the L2VPN scenario this model augments /ni:network-instances/ | For the BRIDGE service this model augments /dot1q:bridges/dot1q:bridge | |||
| ni:network-instance/ni:ni-type/l2vpn:l2vpn to reference igmp-snooping- | to use igmp-snooping-instance. It means IGMP Snooping is enabled in the | |||
| instance. It means IGMP Snooping is enabled in the specified l2vpn | whole bridge. | |||
| instance. | ||||
| augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn: | It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/ | |||
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | dot1q:bridge-vlan/dot1q:vlan to use igmp-snooping-instance. It means | |||
| +--rw mld-snooping-instance? mld-snooping-instance-ref | IGMP Snooping is enabled in the specified VLAN on the bridge. | |||
| The mld-snooping-instance could be referenced in concurrence with igmp- | The mld-snooping-instance could be used in concurrence with igmp- | |||
| snooping-instance to configure the MLD Snooping. | snooping-instance to configure the MLD Snooping. | |||
| 2.5. IGMP and MLD Snooping RPC | augment /dot1q:bridges/dot1q:bridge: | |||
| +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref | ||||
| +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref | ||||
| IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping | augment /dot1q:bridges/dot1q:bridge/dot1q:component | |||
| group tables. | /dot1q:bridge-vlan/dot1q:vlan: | |||
| +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref | ||||
| +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref | ||||
| rpcs: | 3.4. IGMP and MLD Snooping Actions | |||
| +---x clear-igmp-snooping-groups {rpc-clear-groups}? | ||||
| | +---w input | IGMP and MLD Snooping actions clear the specified IGMP and MLD Snooping | |||
| | +---w name? string | group tables. If both source X and group Y are specified, only source X | |||
| | +---w group? inet:ipv4-address | from group Y in that specific instance will be cleared. | |||
| | +---w source? inet:ipv4-address | ||||
| +---x clear-mld-snooping-groups {rpc-clear-groups}? | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol: | ||||
| +--rw igmp-snooping-instance {igmp-snooping}? | ||||
| +---x clear-igmp-snooping-groups {action-clear-groups}? | ||||
| +---w input | +---w input | |||
| +---w name? string | +---w group union | |||
| +---w group? inet:ipv6-address | +---w source rt-types:ipv4-multicast-source-address | |||
| +---w source? inet:ipv6-address | ||||
| 3. IGMP and MLD Snooping YANG Module | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol: | ||||
| +--rw mld-snooping-instance {mld-snooping}? | ||||
| +---x clear-mld-snooping-groups {action-clear-groups}? | ||||
| +---w input | ||||
| +---w group union | ||||
| +---w source rt-types:ipv6-multicast-source-address | ||||
| <CODE BEGINS> file ietf-igmp-mld-snooping@2018-10-11.yang | 4. IGMP and MLD Snooping YANG Module | |||
| This module references [RFC1112],[RFC2236],[RFC2710],[RFC3376], | ||||
| [RFC3810],[RFC4541],[RFC5790],[RFC6636],[RFC6991],[RFC7761], | ||||
| [RFC8343],[dot1Qcp]. | ||||
| <CODE BEGINS> file ietf-igmp-mld-snooping@2021-10-08.yang | ||||
| module ietf-igmp-mld-snooping { | module ietf-igmp-mld-snooping { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; | namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; | |||
| // replace with IANA namespace when assigned | ||||
| prefix ims; | prefix ims; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| reference | ||||
| "RFC 6991: Common YANG Data Types"; | ||||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| reference | ||||
| "RFC 6991: Common YANG Data Types"; | ||||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| reference | ||||
| "RFC 8343: A YANG Data Model for Interface Management"; | ||||
| } | } | |||
| import ietf-l2vpn { | import ietf-routing { | |||
| prefix "l2vpn"; | prefix "rt"; | |||
| reference | ||||
| "RFC 8349: A YANG Data Model for Routing Management (NMDA | ||||
| Version)"; | ||||
| } | } | |||
| import ietf-network-instance { | import ietf-routing-types { | |||
| prefix "ni"; | prefix "rt-types"; | |||
| reference | ||||
| "RFC 8294: Common YANG Data Types for the Routing Area"; | ||||
| } | } | |||
| import ieee802-dot1q-bridge { | import ieee802-dot1q-bridge { | |||
| prefix "dot1q"; | prefix "dot1q"; | |||
| reference | ||||
| "dot1Qcp: IEEE 802.1Qcp-2018 Bridges and Bridged Networks | ||||
| - Amendment: YANG Data Model"; | ||||
| } | } | |||
| organization | organization | |||
| "IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/pim/> | "WG Web: <http://tools.ietf.org/wg/pim/> | |||
| WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
| Editors: Hongji Zhao | Editors: Hongji Zhao | |||
| <mailto:hongji.zhao@ericsson.com> | <mailto:hongji.zhao@ericsson.com> | |||
| Xufeng Liu | Xufeng Liu | |||
| <mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
| Yisong Liu | Yisong Liu | |||
| <mailto:liuyisong@huawei.com> | <mailto:liuyisong@chinamobile.com> | |||
| Anish Peter | Anish Peter | |||
| <mailto:anish.ietf@gmail.com> | <mailto:anish.ietf@gmail.com> | |||
| Mahesh Sivakumar | Mahesh Sivakumar | |||
| <mailto:sivakumar.mahesh@gmail.com> | <mailto:sivakumar.mahesh@gmail.com> | |||
| "; | "; | |||
| description | description | |||
| "The module defines a collection of YANG definitions common for | "The module defines a collection of YANG definitions common for | |||
| all Internet Group Management Protocol (IGMP) and Multicast | all devices that implement Internet Group Management Protocol | |||
| Listener Discovery (MLD) Snooping devices. | (IGMP) and Multicast Listener Discovery (MLD) Snooping which is | |||
| described in RFC 4541. | ||||
| Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2021 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see the | This version of this YANG module is part of RFC XXXX; see the | |||
| RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
| revision 2018-10-11 { | revision 2021-10-08 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; | "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature immediate-leave { | feature igmp-snooping { | |||
| description | description | |||
| "Support configuration of immediate-leave."; | "Support IGMP snooping."; | |||
| reference | ||||
| "RFC 4541"; | ||||
| } | } | |||
| feature join-group { | feature mld-snooping { | |||
| description | description | |||
| "Support configuration of join-group."; | "Support MLD snooping."; | |||
| reference | ||||
| "RFC 4541"; | ||||
| } | } | |||
| feature require-router-alert { | feature fast-leave { | |||
| description | description | |||
| "Support configuration of require-router-alert."; | "Support configuration of fast leave. The fast leave feature | |||
| does not send last member query messages to hosts."; | ||||
| reference | ||||
| "RFC 3376"; | ||||
| } | } | |||
| feature static-l2-multicast-group { | feature static-l2-multicast-group { | |||
| description | description | |||
| "Support configuration of L2 multicast static-group."; | "Support configuration of static L2 multicast group."; | |||
| } | } | |||
| feature static-mrouter-interface { | feature static-mrouter-interface { | |||
| description | description | |||
| "Support configuration of mrouter interface."; | "Support multicast router interface explicitly configured | |||
| by management"; | ||||
| reference | ||||
| "RFC 4541"; | ||||
| } | } | |||
| feature rpc-clear-groups { | feature action-clear-groups { | |||
| description | description | |||
| "Support clearing statistics by RPC for IGMP & MLD snooping."; | "Support clearing statistics by action for IGMP & MLD snooping."; | |||
| } | } | |||
| feature explicit-tracking { | feature require-router-alert { | |||
| description | description | |||
| "Support configuration of per instance explicit-tracking."; | "Support configuration of require-router-alert."; | |||
| reference | ||||
| "RFC 3376"; | ||||
| } | } | |||
| feature exclude-lite { | feature lite-exclude-filter { | |||
| description | description | |||
| "Support configuration of per instance exclude-lite."; | "Enable the support of the simplified EXCLUDE filter."; | |||
| reference | ||||
| "RFC 5790"; | ||||
| } | } | |||
| /* | feature explicit-tracking { | |||
| * Typedefs | ||||
| */ | ||||
| typedef igmp-snooping-instance-ref { | ||||
| type leafref { | ||||
| path "/igmp-snooping-instances/igmp-snooping-instance/name"; | ||||
| } | ||||
| description | description | |||
| "This type is used by data models that need to reference | "Support configuration of per instance explicit-tracking."; | |||
| IGMP snooping instance."; | reference | |||
| "RFC 6636"; | ||||
| } | } | |||
| typedef mld-snooping-instance-ref { | /* identities */ | |||
| type leafref { | identity l2-service-type { | |||
| path "/mld-snooping-instances/mld-snooping-instance/name"; | ||||
| } | ||||
| description | description | |||
| "This type is used by data models that need to reference | "Base identity for L2 service type in IGMP & MLD snooping"; | |||
| MLD snooping instance."; | } | |||
| } | ||||
| typedef l2vpn-instance-ac-ref { | identity bridge { | |||
| type leafref { | base l2-service-type; | |||
| path "/ni:network-instances/ni:network-instance"+ | description | |||
| "/l2vpn:endpoint/l2vpn:name"; | "This identity represents BRIDGE service."; | |||
| } | ||||
| description "l2vpn-instance-ac-ref"; | ||||
| } | } | |||
| typedef l2vpn-instance-pw-ref { | identity filter-mode { | |||
| type leafref { | description | |||
| path "/ni:network-instances/ni:network-instance"+ | "Base identity for filter mode in IGMP & MLD snooping"; | |||
| "/l2vpn:endpoint/l2vpn:name"; | ||||
| } | ||||
| description "l2vpn-instance-pw-ref"; | ||||
| } | } | |||
| typedef source-ipv4-addr-type { | identity include { | |||
| type union { | base filter-mode; | |||
| type enumeration { | ||||
| enum '*' { | ||||
| description | ||||
| "Any source address."; | ||||
| } | ||||
| } | ||||
| type inet:ipv4-address; | ||||
| } | ||||
| description | description | |||
| "Multicast source IPV4 address type."; | "This identity represents include mode."; | |||
| } // source-ipv4-addr-type | } | |||
| typedef source-ipv6-addr-type { | identity exclude { | |||
| type union { | base filter-mode; | |||
| type enumeration { | ||||
| enum '*' { | ||||
| description | ||||
| "Any source address."; | ||||
| } | ||||
| } | ||||
| type inet:ipv6-address; | ||||
| } | ||||
| description | description | |||
| "Multicast source IPV6 address type."; | "This identity represents exclude mode."; | |||
| } // source-ipv6-addr-type | } | |||
| /* | identity igmp-snooping { | |||
| * Groupings | base rt:control-plane-protocol; | |||
| */ | description | |||
| "IGMP snooping"; | ||||
| } | ||||
| grouping instance-config-attributes-igmp-snooping { | identity mld-snooping { | |||
| description "IGMP snooping configuration for each"+ | base rt:control-plane-protocol; | |||
| "BRIDGE or L2VPN instance."; | description | |||
| "MLD snooping"; | ||||
| } | ||||
| uses instance-config-attributes-igmp-mld-snooping; | /* | |||
| * Typedefs | ||||
| */ | ||||
| leaf querier-source { | typedef l2-service-type { | |||
| type inet:ipv4-address; | type identityref { | |||
| description "Use the IGMP snooping querier to support IGMP | base "l2-service-type"; | |||
| snooping in a VLAN where PIM and IGMP are not configured. | ||||
| The IPV4 address is used as source address in messages."; | ||||
| } | } | |||
| description "The L2 service type used with IGMP & MLD snooping "; | ||||
| } | ||||
| typedef filter-mode-type { | ||||
| type identityref { | ||||
| base "filter-mode"; | ||||
| } | ||||
| description "The host filter mode"; | ||||
| } | ||||
| list static-l2-multicast-group { | typedef igmp-mld-snooping-instance-ref { | |||
| if-feature static-l2-multicast-group; | type leafref { | |||
| key "group source-addr"; | path "/rt:routing/rt:control-plane-protocols"+ | |||
| description | "/rt:control-plane-protocol/rt:name"; | |||
| "A static multicast route, (*,G) or (S,G)."; | } | |||
| description | ||||
| leaf group { | "This type is used by data models which need to | |||
| type inet:ipv4-address; | reference IGMP & MLD snooping instance."; | |||
| description | } | |||
| "Multicast group IPV4 address"; | ||||
| } | ||||
| leaf source-addr { | ||||
| type source-ipv4-addr-type; | ||||
| description | ||||
| "Multicast source IPV4 address."; | ||||
| } | ||||
| leaf-list bridge-outgoing-interface { | ||||
| when "../../type = 'bridge'"; | ||||
| type if:interface-ref; | ||||
| description "Outgoing interface in BRIDGE forwarding"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-ac { | ||||
| when "../../type = 'l2vpn'"; | ||||
| type l2vpn-instance-ac-ref; | ||||
| description "Outgoing AC in L2VPN forwarding"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-pw { | /* | |||
| when "../../type = 'l2vpn'"; | * Groupings | |||
| type l2vpn-instance-pw-ref; | */ | |||
| description "Outgoing PW in L2VPN forwarding"; | ||||
| } | ||||
| } // static-l2-multicast-group | ||||
| } // instance-config-attributes-igmp-snooping | ||||
| grouping instance-config-attributes-igmp-mld-snooping { | grouping instance-config-attributes-igmp-mld-snooping { | |||
| description | description | |||
| "IGMP and MLD snooping configuration of each VLAN."; | "IGMP and MLD snooping configuration of each VLAN."; | |||
| leaf enable { | leaf enable { | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description | description | |||
| "Set the value to true to enable IGMP & MLD snooping."; | "Set the value to true to enable IGMP & MLD snooping."; | |||
| } | } | |||
| leaf forwarding-mode { | leaf forwarding-table-type { | |||
| type enumeration { | type enumeration { | |||
| enum "mac" { | enum "mac" { | |||
| description | description | |||
| "MAC-based lookup mode"; | "MAC-based lookup mode"; | |||
| } | } | |||
| enum "ip" { | enum "ip" { | |||
| description | description | |||
| "IP-based lookup mode"; | "IP-based lookup mode"; | |||
| } | } | |||
| } | } | |||
| default "ip"; | default "ip"; | |||
| description "The default forwarding mode is ip"; | description "The default forwarding table type is ip"; | |||
| } | } | |||
| leaf explicit-tracking { | leaf explicit-tracking { | |||
| if-feature explicit-tracking; | if-feature explicit-tracking; | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description "Tracks IGMP & MLD snooping v3 membership reports | description | |||
| from individual hosts. It contributes to saving network | "Track the IGMPv3 and MLDv2 snooping membership reports | |||
| resources and shortening leave latency."; | from individual hosts. It contributes to saving network | |||
| resources and shortening leave latency."; | ||||
| } | } | |||
| leaf exclude-lite { | ||||
| if-feature exclude-lite; | leaf lite-exclude-filter { | |||
| type boolean; | if-feature lite-exclude-filter; | |||
| default false; | type empty; | |||
| description | description | |||
| "lightweight IGMPv3 and MLDv2 protocols, which simplify the | "For IGMP Snooping, the presence of this | |||
| standard versions of IGMPv3 and MLDv2."; | leaf enables the support of the simplified EXCLUDE filter | |||
| reference "RFC5790"; | in the Lightweight IGMPv3 protocol, which simplifies the | |||
| standard versions of IGMPv3. | ||||
| For MLD Snooping, the presence of this | ||||
| leaf enables the support of the simplified EXCLUDE filter | ||||
| in the Lightweight MLDv2 protocol, which simplifies the | ||||
| standard versions of MLDv2."; | ||||
| reference | ||||
| "RFC 5790"; | ||||
| } | } | |||
| leaf send-query { | leaf send-query { | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description "Enable quick response for topo changes. | description | |||
| To support IGMP snooping in a VLAN where PIM and IGMP are | "When it is true, this switch will send out periodic | |||
| not configured. It cooperates with param querier-source. "; | IGMP General Query Message or MLD General Query Message."; | |||
| } | } | |||
| leaf immediate-leave { | leaf fast-leave { | |||
| if-feature immediate-leave; | if-feature fast-leave; | |||
| type empty; | type empty; | |||
| description | description | |||
| "When immediate leave is enabled, the IGMP software assumes | "When immediate leave is enabled, the IGMP software assumes | |||
| that no more than one host is present on each VLAN port."; | that no more than one host is present on each VLAN port."; | |||
| } | } | |||
| leaf last-member-query-interval { | leaf last-member-query-interval { | |||
| type uint16 { | type uint16 { | |||
| range "1..65535"; | range "10..10230"; | |||
| } | } | |||
| units seconds; | units deciseconds; | |||
| default 1; | default 10; | |||
| description | description | |||
| "Last Member Query Interval, which may be tuned to modify | "Last Member Query Interval, which may be tuned to modify | |||
| the leave latency of the network."; | the leave latency of the network. | |||
| reference "RFC3376. Sec. 8.8."; | It is represented in units of 1/10 second."; | |||
| reference "RFC 3376. Sec. 8.8."; | ||||
| } | } | |||
| leaf query-interval { | leaf query-interval { | |||
| type uint16; | type uint16; | |||
| units seconds; | units seconds; | |||
| default 125; | default 125; | |||
| description | description | |||
| "The Query Interval is the interval between General Queries | "The Query Interval is the interval between General Queries | |||
| sent by the Querier."; | sent by the Querier."; | |||
| reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; | reference "RFC 3376. Sec. 4.1.7, 8.2, 8.14.2."; | |||
| } | } | |||
| leaf query-max-response-time { | leaf query-max-response-time { | |||
| type uint16; | type uint16; | |||
| units seconds; | units deciseconds; | |||
| default 10; | default 100; | |||
| description | description | |||
| "Query maximum response time specifies the maximum time | "Query maximum response time specifies the maximum time | |||
| allowed before sending a responding report."; | allowed before sending a responding report. | |||
| reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; | It is represented in units of 1/10 second."; | |||
| reference "RFC 3376. Sec. 4.1.1, 8.3, 8.14.3."; | ||||
| } | } | |||
| leaf require-router-alert { | leaf require-router-alert { | |||
| if-feature require-router-alert; | if-feature require-router-alert; | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description | description | |||
| "When the value is true, router alert should exist | "When the value is true, router alert should exist | |||
| in the IP head of IGMP or MLD packet."; | in the IP header of IGMP or MLD packet. If it doesn't exist, | |||
| the IGMP or MLD packet will be ignored."; | ||||
| reference "RFC 3376. Sec. 9.1, 9.2, 9.3."; | ||||
| } | } | |||
| leaf robustness-variable { | leaf robustness-variable { | |||
| type uint8 { | type uint8 { | |||
| range "1..7"; | range "1..7"; | |||
| } | } | |||
| default 2; | default 2; | |||
| description | description | |||
| "Querier's Robustness Variable allows tuning for the | "Querier's Robustness Variable allows tuning for the | |||
| expected packet loss on a network."; | expected packet loss on a network."; | |||
| reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; | reference "RFC 3376. Sec. 4.1.6, 8.1, 8.14.1."; | |||
| } | ||||
| leaf version { | ||||
| type uint8 { | ||||
| range "1..3"; | ||||
| } | ||||
| default 2; | ||||
| description "IGMP and MLD snooping version."; | ||||
| } | } | |||
| leaf-list static-bridge-mrouter-interface { | leaf-list static-bridge-mrouter-interface { | |||
| when "../type = 'bridge'"; | when 'derived-from-or-self(../l2-service-type,"ims:bridge")'; | |||
| if-feature static-mrouter-interface; | if-feature static-mrouter-interface; | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description "static mrouter interface in BRIDGE forwarding"; | description "static mrouter interface in BRIDGE forwarding"; | |||
| } | } | |||
| leaf-list static-l2vpn-mrouter-interface-ac { | ||||
| when "../type = 'l2vpn'"; | ||||
| if-feature static-mrouter-interface; | ||||
| type if:interface-ref; | ||||
| description "static mrouter interface whose type is interface | ||||
| in L2VPN forwarding"; | ||||
| } | ||||
| leaf-list static-l2vpn-mrouter-interface-pw { | ||||
| when "../type = 'l2vpn'"; | ||||
| if-feature static-mrouter-interface; | ||||
| type l2vpn-instance-pw-ref; | ||||
| description "static mrouter interface whose type is PW | ||||
| in L2VPN forwarding"; | ||||
| } | ||||
| } // instance-config-attributes-igmp-mld-snooping | } // instance-config-attributes-igmp-mld-snooping | |||
| grouping instance-config-attributes-mld-snooping { | ||||
| description "MLD snooping configuration of each VLAN."; | ||||
| uses instance-config-attributes-igmp-mld-snooping; | ||||
| leaf querier-source { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Use the MLD snooping querier to support MLD snooping where | ||||
| PIM and MLD are not configured. The IPV6 address is used as | ||||
| the source address in messages."; | ||||
| } | ||||
| list static-l2-multicast-group { | ||||
| if-feature static-l2-multicast-group; | ||||
| key "group source-addr"; | ||||
| description | ||||
| "A static multicast route, (*,G) or (S,G)."; | ||||
| leaf group { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Multicast group IPV6 address"; | ||||
| } | ||||
| leaf source-addr { | ||||
| type source-ipv6-addr-type; | ||||
| description | ||||
| "Multicast source IPV6 address."; | ||||
| } | ||||
| leaf-list bridge-outgoing-interface { | ||||
| when "../../type = 'bridge'"; | ||||
| type if:interface-ref; | ||||
| description "Outgoing interface in BRIDGE forwarding"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-ac { | ||||
| when "../../type = 'l2vpn'"; | ||||
| type l2vpn-instance-ac-ref; | ||||
| description "Outgoing AC in L2VPN forwarding"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-pw { | ||||
| when "../../type = 'l2vpn'"; | ||||
| type l2vpn-instance-pw-ref; | ||||
| description "Outgoing PW in L2VPN forwarding"; | ||||
| } | ||||
| } // static-l2-multicast-group | ||||
| } // instance-config-attributes-mld-snooping | ||||
| grouping instance-state-group-attributes-igmp-mld-snooping { | grouping instance-state-group-attributes-igmp-mld-snooping { | |||
| description | description | |||
| "Attributes for both IGMP and MLD snooping groups."; | "Attributes for both IGMP and MLD snooping groups."; | |||
| leaf mac-address { | leaf mac-address { | |||
| type yang:phys-address; | type yang:phys-address; | |||
| description "Destination MAC address for L2 multicast."; | description "Destination MAC address for L2 multicast."; | |||
| } | } | |||
| leaf expire { | leaf expire { | |||
| type uint32; | type rt-types:timer-value-seconds16; | |||
| units seconds; | units seconds; | |||
| description | description | |||
| "The time left before multicast group timeout."; | "The time left before multicast group timeout."; | |||
| } | } | |||
| leaf up-time { | leaf up-time { | |||
| type uint32; | type uint32; | |||
| units seconds; | units seconds; | |||
| mandatory true; | ||||
| description | description | |||
| "The time elapsed since L2 multicast record created."; | "The time elapsed since L2 multicast record created."; | |||
| } | } | |||
| } // instance-state-group-attributes-igmp-mld-snooping | } // instance-state-group-attributes-igmp-mld-snooping | |||
| grouping instance-state-attributes-igmp-snooping { | ||||
| description | ||||
| "State attributes for IGMP snooping for each instance."; | ||||
| uses instance-state-attributes-igmp-mld-snooping; | ||||
| list group { | ||||
| key "address"; | ||||
| config false; | ||||
| description "IGMP snooping information"; | ||||
| leaf address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "Multicast group IPV4 address"; | ||||
| } | ||||
| uses instance-state-group-attributes-igmp-mld-snooping; | ||||
| leaf last-reporter { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "Address of the last host which has sent report to join | ||||
| the multicast group."; | ||||
| } | ||||
| list source { | ||||
| key "address"; | ||||
| description "Source IPV4 address for multicast stream"; | ||||
| leaf address { | ||||
| type inet:ipv4-address; | ||||
| description "Source IPV4 address for multicast stream"; | ||||
| } | ||||
| uses instance-state-source-attributes-igmp-mld-snooping; | ||||
| leaf last-reporter { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "Address of the last host which has sent report | ||||
| to join the multicast group."; | ||||
| } | ||||
| list host { | ||||
| if-feature explicit-tracking; | ||||
| key "host-address"; | ||||
| description | ||||
| "List of multicast membership hosts | ||||
| of the specific multicast source-group."; | ||||
| leaf host-address { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "Multicast membership host address."; | ||||
| } | ||||
| leaf host-filter-mode { | ||||
| type enumeration { | ||||
| enum "include" { | ||||
| description | ||||
| "In include mode"; | ||||
| } | ||||
| enum "exclude" { | ||||
| description | ||||
| "In exclude mode."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Filter mode for a multicast membership | ||||
| host may be either include or exclude."; | ||||
| } | ||||
| }// list host | ||||
| } // list source | ||||
| } // list group | ||||
| } // instance-state-attributes-igmp-snooping | ||||
| grouping instance-state-attributes-igmp-mld-snooping { | grouping instance-state-attributes-igmp-mld-snooping { | |||
| description | description | |||
| "State attributes for IGMP & MLD snooping instance."; | "State attributes for IGMP & MLD snooping instance."; | |||
| leaf entries-count { | leaf entries-count { | |||
| type uint32; | type yang:gauge32; | |||
| config false; | config false; | |||
| description | description | |||
| "The number of L2 multicast entries in IGMP & MLD snooping"; | "The number of L2 multicast entries in IGMP & MLD snooping"; | |||
| } | } | |||
| leaf-list bridge-mrouter-interface { | leaf-list bridge-mrouter-interface { | |||
| when "../type = 'bridge'"; | when 'derived-from-or-self(../l2-service-type,"ims:bridge")'; | |||
| type if:interface-ref; | ||||
| config false; | ||||
| description "mrouter interface in BRIDGE forwarding"; | ||||
| } | ||||
| leaf-list l2vpn-mrouter-interface-ac { | ||||
| when "../type = 'l2vpn'"; | ||||
| type if:interface-ref; | type if:interface-ref; | |||
| config false; | config false; | |||
| description "mrouter interface whose type is interface | description | |||
| in L2VPN forwarding"; | "Indicates a list of mrouter interfaces dynamically learned in a | |||
| bridge. When this switch receives IGMP/MLD queries from a | ||||
| } | multicast router on an interface, the interface will become | |||
| mrouter interface for IGMP/MLD snooping."; | ||||
| leaf-list l2vpn-mrouter-interface-pw { | ||||
| when "../type = 'l2vpn'"; | ||||
| type l2vpn-instance-pw-ref; | ||||
| config false; | ||||
| description "mrouter interface whose type is PW | ||||
| in L2VPN forwarding"; | ||||
| } | } | |||
| } // instance-config-attributes-igmp-mld-snooping | } // instance-config-attributes-igmp-mld-snooping | |||
| grouping instance-state-attributes-mld-snooping { | ||||
| description | ||||
| "State attributes for MLD snooping of each VLAN."; | ||||
| uses instance-state-attributes-igmp-mld-snooping; | ||||
| list group { | ||||
| key "address"; | ||||
| config false; | ||||
| description "MLD snooping statistics information"; | ||||
| leaf address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Multicast group IPV6 address"; | ||||
| } | ||||
| uses instance-state-group-attributes-igmp-mld-snooping; | ||||
| leaf last-reporter { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Address of the last host which has sent report | ||||
| to join the multicast group."; | ||||
| } | ||||
| list source { | ||||
| key "address"; | ||||
| description "Source IPV6 address for multicast stream"; | ||||
| leaf address { | ||||
| type inet:ipv6-address; | ||||
| description "Source IPV6 address for multicast stream"; | ||||
| } | ||||
| uses instance-state-source-attributes-igmp-mld-snooping; | ||||
| leaf last-reporter { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Address of the last host which has sent report | ||||
| to join the multicast group."; | ||||
| } | ||||
| list host { | ||||
| if-feature explicit-tracking; | ||||
| key "host-address"; | ||||
| description | ||||
| "List of multicast membership hosts | ||||
| of the specific multicast source-group."; | ||||
| leaf host-address { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Multicast membership host address."; | ||||
| } | ||||
| leaf host-filter-mode { | ||||
| type enumeration { | ||||
| enum "include" { | ||||
| description | ||||
| "In include mode"; | ||||
| } | ||||
| enum "exclude" { | ||||
| description | ||||
| "In exclude mode."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Filter mode for a multicast membership | ||||
| host may be either include or exclude."; | ||||
| } | ||||
| }// list host | ||||
| } // list source | ||||
| } // list group | ||||
| } // instance-state-attributes-mld-snooping | ||||
| grouping instance-state-source-attributes-igmp-mld-snooping { | grouping instance-state-source-attributes-igmp-mld-snooping { | |||
| description | description | |||
| "State attributes for IGMP & MLD snooping instance."; | "State attributes for IGMP & MLD snooping instance."; | |||
| leaf-list bridge-outgoing-interface { | leaf-list bridge-outgoing-interface { | |||
| when "../../../type = 'bridge'"; | when 'derived-from-or-self(../../../l2-service- | |||
| type,"ims:bridge")'; | ||||
| type if:interface-ref; | type if:interface-ref; | |||
| description "Outgoing interface in BRIDGE forwarding"; | description "Outgoing interface in BRIDGE forwarding"; | |||
| } | } | |||
| leaf-list l2vpn-outgoing-ac { | ||||
| when "../../../type = 'l2vpn'"; | ||||
| type l2vpn-instance-ac-ref; | ||||
| description "Outgoing AC in L2VPN forwarding"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-pw { | ||||
| when "../../../type = 'l2vpn'"; | ||||
| type l2vpn-instance-pw-ref; | ||||
| description "Outgoing PW in L2VPN forwarding"; | ||||
| } | ||||
| leaf up-time { | leaf up-time { | |||
| type uint32; | type uint32; | |||
| units seconds; | units seconds; | |||
| description "The time elapsed since L2 multicast | mandatory true; | |||
| record created"; | description | |||
| "The time elapsed since L2 multicast record created"; | ||||
| } | } | |||
| leaf expire { | leaf expire { | |||
| type uint32; | type rt-types:timer-value-seconds16; | |||
| units seconds; | units seconds; | |||
| description | description | |||
| "The time left before multicast group timeout."; | "The time left before multicast group timeout."; | |||
| } | } | |||
| leaf host-count { | leaf host-count { | |||
| if-feature explicit-tracking; | if-feature explicit-tracking; | |||
| type uint32; | type yang:gauge32; | |||
| description | description | |||
| "The number of host addresses."; | "The number of host addresses."; | |||
| } | } | |||
| } // instance-state-source-attributes-igmp-mld-snooping | } // instance-state-source-attributes-igmp-mld-snooping | |||
| grouping igmp-snooping-statistics-sent-received { | grouping igmp-snooping-statistics { | |||
| description | description | |||
| "The statistics attributes for IGMP snooping."; | "The statistics attributes for IGMP snooping."; | |||
| leaf query { | leaf query-count { | |||
| type yang:counter64; | ||||
| description | ||||
| "The number of query messages."; | ||||
| } | ||||
| leaf membership-report-v1 { | ||||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of membership report v1 messages."; | "The number of Membership Query messages."; | |||
| reference | ||||
| "RFC 2236"; | ||||
| } | } | |||
| leaf membership-report-v2 { | leaf membership-report-v1-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of membership report v2 messages."; | "The number of Version 1 Membership Report messages."; | |||
| reference | ||||
| "RFC 1112"; | ||||
| } | } | |||
| leaf membership-report-v3 { | leaf membership-report-v2-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of membership report v3 messages."; | "The number of Version 2 Membership Report messages."; | |||
| reference | ||||
| "RFC 2236"; | ||||
| } | } | |||
| leaf leave { | leaf membership-report-v3-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of leave messages."; | "The number of Version 3 Membership Report messages."; | |||
| reference | ||||
| "RFC 3376"; | ||||
| } | } | |||
| leaf non-member-leave { | leaf leave-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of non member leave messages."; | "The number of Leave Group messages."; | |||
| reference | ||||
| "RFC 2236"; | ||||
| } | } | |||
| leaf pim { | leaf pim-hello-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of pim hello messages."; | "The number of PIM hello messages."; | |||
| reference | ||||
| "RFC 7761"; | ||||
| } | } | |||
| } // igmp-snooping-statistics-sent-received | } // igmp-snooping-statistics | |||
| grouping mld-snooping-statistics-sent-received { | grouping mld-snooping-statistics { | |||
| description | description | |||
| "The statistics attributes for MLD snooping."; | "The statistics attributes for MLD snooping."; | |||
| leaf query { | leaf query-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Multicast Listener Query messages."; | "The number of Multicast Listener Query messages."; | |||
| reference | ||||
| "RFC 3810"; | ||||
| } | } | |||
| leaf report-v1 { | leaf report-v1-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Version 1 Multicast Listener Report."; | "The number of Version 1 Multicast Listener Report."; | |||
| reference | ||||
| "RFC 2710"; | ||||
| } | } | |||
| leaf report-v2 { | leaf report-v2-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Version 2 Multicast Listener Report."; | "The number of Version 2 Multicast Listener Report."; | |||
| reference | ||||
| "RFC 3810"; | ||||
| } | } | |||
| leaf done { | leaf done-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Version 1 Multicast Listener Done."; | "The number of Version 1 Multicast Listener Done."; | |||
| reference | ||||
| "RFC 2710"; | ||||
| } | } | |||
| leaf pim { | leaf pim-hello-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of pim hello messages."; | "The number of PIM hello messages."; | |||
| reference | ||||
| "RFC 7761"; | ||||
| } | } | |||
| } // mld-snooping-statistics-sent-received | } // mld-snooping-statistics | |||
| grouping interface-endpoint-attributes-igmp-snooping { | ||||
| description "interface attributes for IGMP snooping"; | ||||
| list host { | ||||
| if-feature explicit-tracking; | ||||
| key "host-address"; | ||||
| config false; | augment "/rt:routing/rt:control-plane-protocols"+ | |||
| "/rt:control-plane-protocol" { | ||||
| when 'derived-from-or-self(rt:type, "ims:igmp-snooping")' { | ||||
| description | ||||
| "This container is only valid for IGMP snooping."; | ||||
| } | ||||
| description | ||||
| "IGMP snooping augmentation to control plane protocol | ||||
| configuration and state."; | ||||
| container igmp-snooping-instance { | ||||
| if-feature igmp-snooping; | ||||
| description | description | |||
| "List of multicast membership hosts"+ | "IGMP snooping instance to configure igmp-snooping."; | |||
| "of the specific multicast source-group."; | ||||
| leaf host-address { | leaf l2-service-type { | |||
| type inet:ipv4-address; | type l2-service-type; | |||
| default bridge; | ||||
| description | description | |||
| "Multicast membership host address."; | "It indicates BRIDGE or other services."; | |||
| } | } | |||
| leaf host-filter-mode { | ||||
| type enumeration { | uses instance-config-attributes-igmp-mld-snooping; | |||
| enum "include" { | ||||
| description | leaf igmp-version { | |||
| "In include mode"; | type uint8 { | |||
| } | range "1..3"; | |||
| enum "exclude" { | ||||
| description | ||||
| "In exclude mode."; | ||||
| } | ||||
| } | } | |||
| default 2; | ||||
| description "IGMP version."; | ||||
| } | ||||
| leaf querier-source { | ||||
| type inet:ipv4-address; | ||||
| description | description | |||
| "Filter mode for a multicast membership | "The source address of IGMP General Query message, | |||
| host may be either include or exclude."; | which is sent out by this switch."; | |||
| } | } | |||
| }// list host | ||||
| } // interface-endpoint-attributes-igmp-snooping | ||||
| grouping interface-endpoint-attributes-mld-snooping { | list static-l2-multicast-group { | |||
| if-feature static-l2-multicast-group; | ||||
| key "group source-addr"; | ||||
| description | ||||
| "A static multicast route, (*,G) or (S,G)."; | ||||
| description "interface endpoint attributes MLD snooping"; | leaf group { | |||
| type rt-types:ipv4-multicast-group-address; | ||||
| description | ||||
| "Multicast group IPv4 address"; | ||||
| } | ||||
| list host { | leaf source-addr { | |||
| type rt-types:ipv4-multicast-source-address; | ||||
| description | ||||
| "Multicast source IPv4 address."; | ||||
| } | ||||
| if-feature explicit-tracking; | leaf-list bridge-outgoing-interface { | |||
| when 'derived-from-or-self(../../l2-service- | ||||
| type,"ims:bridge")'; | ||||
| type if:interface-ref; | ||||
| description "Outgoing interface in BRIDGE forwarding"; | ||||
| } | ||||
| } // static-l2-multicast-group | ||||
| key "host-address"; | uses instance-state-attributes-igmp-mld-snooping; | |||
| config false; | list group { | |||
| description | key "address"; | |||
| "List of multicast membership hosts | ||||
| of the specific multicast source-group."; | ||||
| leaf host-address { | config false; | |||
| type inet:ipv6-address; | ||||
| description | description "IGMP snooping information"; | |||
| "Multicast membership host address."; | ||||
| } | leaf address { | |||
| leaf host-filter-mode { | type rt-types:ipv4-multicast-group-address; | |||
| type enumeration { | description | |||
| enum "include" { | "Multicast group IPv4 address"; | |||
| description | ||||
| "In include mode"; | ||||
| } | ||||
| enum "exclude" { | ||||
| description | ||||
| "In exclude mode."; | ||||
| } | ||||
| } | } | |||
| description | ||||
| "Filter mode for a multicast membership | ||||
| host may be either include or exclude."; | ||||
| } | ||||
| }// list host | ||||
| } // interface-endpoint-attributes-mld-snooping | ||||
| grouping igmp-snooping-interface-statistics-attributes { | uses instance-state-group-attributes-igmp-mld-snooping; | |||
| leaf last-reporter { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "Address of the last host which has sent report to join | ||||
| the multicast group."; | ||||
| } | ||||
| description "Interface statistics attributes for IGMP snooping"; | list source { | |||
| key "address"; | ||||
| description "Source IPv4 address for multicast stream"; | ||||
| container interfaces { | leaf address { | |||
| config false; | type rt-types:ipv4-multicast-source-address; | |||
| description "Source IPv4 address for multicast stream"; | ||||
| } | ||||
| description | uses instance-state-source-attributes-igmp-mld-snooping; | |||
| "Interfaces associated with the IGMP snooping instance"; | ||||
| list interface { | leaf last-reporter { | |||
| key "name"; | type inet:ipv4-address; | |||
| description | ||||
| "Address of the last host which has sent report | ||||
| to join the multicast group."; | ||||
| } | ||||
| description | list host { | |||
| "Interfaces associated with the IGMP snooping instance"; | if-feature explicit-tracking; | |||
| key "address"; | ||||
| description | ||||
| "List of multicast membership hosts | ||||
| of the specific multicast source-group."; | ||||
| leaf name { | leaf address { | |||
| type if:interface-ref; | type inet:ipv4-address; | |||
| description | description | |||
| "The name of interface"; | "Multicast membership host address."; | |||
| } | ||||
| leaf filter-mode { | ||||
| type filter-mode-type; | ||||
| mandatory true; | ||||
| description | ||||
| "Filter mode for a multicast membership | ||||
| host may be either include or exclude."; | ||||
| } | ||||
| }// list host | ||||
| } // list source | ||||
| } // list group | ||||
| } | container interfaces { | |||
| config false; | ||||
| description | ||||
| "Contains the interfaces associated with the IGMP snooping | ||||
| instance"; | ||||
| list interface { | ||||
| key "name"; | ||||
| container statistics { | ||||
| description | description | |||
| "The interface statistics for IGMP snooping"; | "A list of interfaces associated with the IGMP snooping | |||
| instance"; | ||||
| container received { | leaf name { | |||
| type if:interface-ref; | ||||
| description | description | |||
| "Statistics of received IGMP snooping packets."; | "The name of interface"; | |||
| uses igmp-snooping-statistics-sent-received; | ||||
| } | } | |||
| container sent { | ||||
| container statistics { | ||||
| description | description | |||
| "Statistics of sent IGMP snooping packets."; | "The interface statistics for IGMP snooping"; | |||
| uses igmp-snooping-statistics-sent-received; | leaf discontinuity-time { | |||
| } | type yang:date-and-time; | |||
| description | ||||
| "The time on the most recent occasion at which any one | ||||
| or more of the statistic counters suffered a | ||||
| discontinuity. If no such discontinuities have | ||||
| occurred since the last re-initialization of the local | ||||
| management subsystem, then this node contains the time | ||||
| the local management subsystem re-initialized | ||||
| itself."; | ||||
| } | ||||
| container received { | ||||
| description | ||||
| "Number of received snooped IGMP packets"; | ||||
| uses igmp-snooping-statistics; | ||||
| } | ||||
| container sent { | ||||
| description | ||||
| "Number of sent snooped IGMP packets"; | ||||
| uses igmp-snooping-statistics; | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | ||||
| } //igmp-snooping-interface-statistics-attributes | ||||
| grouping mld-snooping-interface-statistics-attributes { | action clear-igmp-snooping-groups { | |||
| if-feature action-clear-groups; | ||||
| description | ||||
| "Clear IGMP snooping cache tables."; | ||||
| description "Interface statistics attributes for MLD snooping"; | input { | |||
| leaf group { | ||||
| type union { | ||||
| type enumeration { | ||||
| enum 'all-groups' { | ||||
| description | ||||
| "All multicast group addresses."; | ||||
| } | ||||
| } | ||||
| type rt-types:ipv4-multicast-group-address; | ||||
| } | ||||
| mandatory true; | ||||
| description | ||||
| "Multicast group IPv4 address. If value 'all-groups' is | ||||
| specified, all IGMP snooping group entries are cleared | ||||
| for specified source address."; | ||||
| } | ||||
| leaf source { | ||||
| type rt-types:ipv4-multicast-source-address; | ||||
| mandatory true; | ||||
| description | ||||
| "Multicast source IPv4 address. If value '*' is specified, | ||||
| all IGMP snooping source-group tables are cleared."; | ||||
| } | ||||
| } | ||||
| } // action clear-igmp-snooping-groups | ||||
| } // igmp-snooping-instance | ||||
| } // augment | ||||
| container interfaces { | augment "/rt:routing/rt:control-plane-protocols"+ | |||
| config false; | "/rt:control-plane-protocol" { | |||
| when 'derived-from-or-self(rt:type, "ims:mld-snooping")' { | ||||
| description | ||||
| "This container is only valid for MLD snooping."; | ||||
| } | ||||
| description | ||||
| "MLD snooping augmentation to control plane protocol | ||||
| configuration and state."; | ||||
| description | container mld-snooping-instance { | |||
| "Interfaces associated with the MLD snooping instance"; | if-feature mld-snooping; | |||
| description | ||||
| "MLD snooping instance to configure mld-snooping."; | ||||
| list interface { | leaf l2-service-type { | |||
| key "name"; | type l2-service-type; | |||
| default bridge; | ||||
| description | ||||
| "It indicates BRIDGE or other services."; | ||||
| } | ||||
| description | uses instance-config-attributes-igmp-mld-snooping; | |||
| "Interfaces associated with the MLD snooping instance"; | ||||
| leaf name { | leaf mld-version { | |||
| type if:interface-ref; | type uint8 { | |||
| description | range "1..2"; | |||
| "The name of interface"; | } | |||
| default 2; | ||||
| description "MLD version."; | ||||
| } | ||||
| } | leaf querier-source { | |||
| type inet:ipv6-address; | ||||
| description | ||||
| "The source address of MLD General Query message, | ||||
| which is sent out by this switch."; | ||||
| } | ||||
| container statistics { | list static-l2-multicast-group { | |||
| description | if-feature static-l2-multicast-group; | |||
| "The interface statistics for MLD snooping"; | key "group source-addr"; | |||
| description | ||||
| "A static multicast route, (*,G) or (S,G)."; | ||||
| container received { | leaf group { | |||
| description | type rt-types:ipv6-multicast-group-address; | |||
| "Statistics of received MLD snooping packets."; | description | |||
| "Multicast group IPv6 address"; | ||||
| } | ||||
| uses mld-snooping-statistics-sent-received; | leaf source-addr { | |||
| } | type rt-types:ipv6-multicast-source-address; | |||
| container sent { | description | |||
| description | "Multicast source IPv6 address."; | |||
| "Statistics of sent MLD snooping packets."; | } | |||
| uses mld-snooping-statistics-sent-received; | leaf-list bridge-outgoing-interface { | |||
| } | when 'derived-from-or-self(../../l2-service- | |||
| } | type,"ims:bridge")'; | |||
| } | type if:interface-ref; | |||
| } | description "Outgoing interface in BRIDGE forwarding"; | |||
| } //mld-snooping-interface-statistics-attributes | } | |||
| } // static-l2-multicast-group | ||||
| /* | uses instance-state-attributes-igmp-mld-snooping; | |||
| * igmp-snooping-instance | ||||
| */ | ||||
| container igmp-snooping-instances { | ||||
| description | ||||
| "igmp-snooping-instance list"; | ||||
| list igmp-snooping-instance { | list group { | |||
| key "name"; | key "address"; | |||
| description | config false; | |||
| "IGMP snooping instance to configure the igmp-snooping."; | description "MLD snooping statistics information"; | |||
| leaf name { | leaf address { | |||
| type string; | type rt-types:ipv6-multicast-group-address; | |||
| description | description | |||
| "Name of the igmp-snooping-instance"; | "Multicast group IPv6 address"; | |||
| } | } | |||
| leaf type { | uses instance-state-group-attributes-igmp-mld-snooping; | |||
| type enumeration { | ||||
| enum "bridge" { | leaf last-reporter { | |||
| description "BRIDGE"; | type inet:ipv6-address; | |||
| description | ||||
| "Address of the last host which has sent report | ||||
| to join the multicast group."; | ||||
| } | ||||
| list source { | ||||
| key "address"; | ||||
| description "Source IPv6 address for multicast stream"; | ||||
| leaf address { | ||||
| type rt-types:ipv6-multicast-source-address; | ||||
| description "Source IPv6 address for multicast stream"; | ||||
| } | } | |||
| enum "l2vpn" { | ||||
| description "L2VPN"; | uses instance-state-source-attributes-igmp-mld-snooping; | |||
| leaf last-reporter { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Address of the last host which has sent report | ||||
| to join the multicast group."; | ||||
| } | } | |||
| } | ||||
| description "The type indicates BRIDGE or L2VPN."; | ||||
| } | ||||
| uses instance-config-attributes-igmp-snooping; | list host { | |||
| if-feature explicit-tracking; | ||||
| key "address"; | ||||
| description | ||||
| "List of multicast membership hosts | ||||
| of the specific multicast source-group."; | ||||
| uses instance-state-attributes-igmp-snooping; | leaf address { | |||
| type inet:ipv6-address; | ||||
| description | ||||
| "Multicast membership host address."; | ||||
| } | ||||
| leaf filter-mode { | ||||
| type filter-mode-type; | ||||
| mandatory true; | ||||
| description | ||||
| "Filter mode for a multicast membership | ||||
| host may be either include or exclude."; | ||||
| } | ||||
| }// list host | ||||
| } // list source | ||||
| } // list group | ||||
| uses igmp-snooping-interface-statistics-attributes; | container interfaces { | |||
| config false; | ||||
| } //igmp-snooping-instance | description | |||
| } //igmp-snooping-instances | "Contains the interfaces associated with the MLD snooping | |||
| instance"; | ||||
| /* | list interface { | |||
| * mld-snooping-instance | key "name"; | |||
| */ | ||||
| container mld-snooping-instances { | description | |||
| description | "A list of interfaces associated with the MLD snooping | |||
| "mld-snooping-instance list"; | instance"; | |||
| list mld-snooping-instance { | leaf name { | |||
| key "name"; | type if:interface-ref; | |||
| description | description | |||
| "MLD snooping instance to configure the mld-snooping."; | "The name of interface"; | |||
| leaf name { | } | |||
| type string; | ||||
| description | ||||
| "Name of the mld-snooping-instance"; | ||||
| } | ||||
| leaf type { | container statistics { | |||
| type enumeration { | description | |||
| enum "bridge" { | "The interface statistics for MLD snooping"; | |||
| description "BRIDGE"; | ||||
| } | ||||
| enum "l2vpn" { | ||||
| description "L2VPN"; | ||||
| } | ||||
| } | ||||
| description "The type indicates BRIDGE or L2VPN."; | ||||
| } | ||||
| uses instance-config-attributes-mld-snooping; | leaf discontinuity-time { | |||
| type yang:date-and-time; | ||||
| description | ||||
| "The time on the most recent occasion at which any one | ||||
| or more of the statistic counters suffered a | ||||
| discontinuity. If no such discontinuities have | ||||
| occurred since the last re-initialization of the local | ||||
| management subsystem, then this node contains the time | ||||
| the local management subsystem re-initialized | ||||
| itself."; | ||||
| } | ||||
| container received { | ||||
| description | ||||
| "Number of received snooped MLD packets"; | ||||
| uses instance-state-attributes-mld-snooping; | uses mld-snooping-statistics; | |||
| } | ||||
| container sent { | ||||
| description | ||||
| "Number of sent snooped MLD packets"; | ||||
| uses mld-snooping-interface-statistics-attributes; | uses mld-snooping-statistics; | |||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } //mld-snooping-instance | action clear-mld-snooping-groups { | |||
| } //mld-snooping-instances | if-feature action-clear-groups; | |||
| description | ||||
| "Clear MLD snooping cache tables."; | ||||
| /* augments */ | input { | |||
| leaf group { | ||||
| type union { | ||||
| type enumeration { | ||||
| enum 'all-groups' { | ||||
| description | ||||
| "All multicast group addresses."; | ||||
| } | ||||
| } | ||||
| type rt-types:ipv6-multicast-group-address; | ||||
| } | ||||
| mandatory true; | ||||
| description | ||||
| "Multicast group IPv6 address. If value 'all-groups' is | ||||
| specified, all MLD snooping group entries are cleared | ||||
| for specified source address."; | ||||
| } | ||||
| leaf source { | ||||
| type rt-types:ipv6-multicast-source-address; | ||||
| mandatory true; | ||||
| description | ||||
| "Multicast source IPv6 address. If value '*' is specified, | ||||
| all MLD snooping source-group tables are cleared."; | ||||
| } | ||||
| } | ||||
| } // action clear-mld-snooping-groups | ||||
| }// mld-snooping-instance | ||||
| } // augment | ||||
| augment "/dot1q:bridges/dot1q:bridge" { | augment "/dot1q:bridges/dot1q:bridge" { | |||
| description | description | |||
| "Reference IGMP & MLD snooping instance in BRIDGE scenario"; | "Use IGMP & MLD snooping instance in BRIDGE."; | |||
| leaf igmp-snooping-instance { | leaf igmp-snooping-instance { | |||
| type igmp-snooping-instance-ref; | type igmp-mld-snooping-instance-ref; | |||
| description | ||||
| "Configure IGMP snooping instance under bridge view"; | ||||
| } | ||||
| leaf mld-snooping-instance { | ||||
| type mld-snooping-instance-ref; | ||||
| description | description | |||
| "Configure MLD snooping instance under bridge view"; | "Configure IGMP snooping instance under bridge view"; | |||
| } | ||||
| } | ||||
| augment "/dot1q:bridges/dot1q:bridge"+ | ||||
| "/dot1q:component/dot1q:bridge-vlan/dot1q:vlan" { | ||||
| description | ||||
| "Refrence IGMP & MLD snooping instance in BRIDGE scenario"; | ||||
| leaf igmp-snooping-instance { | ||||
| type igmp-snooping-instance-ref; | ||||
| description | ||||
| "Configure IGMP snooping instance under VLAN view"; | ||||
| } | } | |||
| leaf mld-snooping-instance { | leaf mld-snooping-instance { | |||
| type mld-snooping-instance-ref; | type igmp-mld-snooping-instance-ref; | |||
| description | description | |||
| "Configure MLD snooping instance under VLAN view"; | "Configure MLD snooping instance under bridge view"; | |||
| } | } | |||
| } | } | |||
| augment "/ni:network-instances/ni:network-instance"+ | augment "/dot1q:bridges/dot1q:bridge"+ | |||
| "/ni:ni-type/l2vpn:l2vpn" { | "/dot1q:component/dot1q:bridge-vlan/dot1q:vlan" { | |||
| description | description | |||
| "Reference IGMP & MLD snooping instance in L2VPN scenario"; | "Use IGMP & MLD snooping instance in certain VLAN of BRIDGE"; | |||
| leaf igmp-snooping-instance { | leaf igmp-snooping-instance { | |||
| type igmp-snooping-instance-ref; | type igmp-mld-snooping-instance-ref; | |||
| description | description | |||
| "Configure IGMP snooping instance in L2VPN scenario"; | "Configure IGMP snooping instance under VLAN view"; | |||
| } | } | |||
| leaf mld-snooping-instance { | leaf mld-snooping-instance { | |||
| type mld-snooping-instance-ref; | type igmp-mld-snooping-instance-ref; | |||
| description | description | |||
| "Configure MLD snooping instance in L2VPN scenario"; | "Configure MLD snooping instance under VLAN view"; | |||
| } | } | |||
| } | } | |||
| } | ||||
| <CODE ENDS> | ||||
| /* RPCs */ | 5. Security Considerations | |||
| rpc clear-igmp-snooping-groups { | ||||
| if-feature rpc-clear-groups; | ||||
| description | ||||
| "Clears the specified IGMP snooping cache tables."; | ||||
| input { | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Name of the igmp-snooping-instance"; | ||||
| } | ||||
| leaf group { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "Multicast group IPv4 address. | ||||
| If it is not specified, all IGMP snooping group tables | ||||
| are cleared."; | ||||
| } | ||||
| leaf source { | ||||
| type inet:ipv4-address; | ||||
| description | ||||
| "Multicast source IPv4 address. | ||||
| If it is not specified, all IGMP snooping source-group | ||||
| tables are cleared."; | ||||
| } | ||||
| } | ||||
| } // rpc clear-igmp-snooping-groups | ||||
| rpc clear-mld-snooping-groups { | ||||
| if-feature rpc-clear-groups; | ||||
| description | ||||
| "Clears the specified MLD snooping cache tables."; | ||||
| input { | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Name of the mld-snooping-instance"; | ||||
| } | ||||
| leaf group { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "Multicast group IPv6 address. | ||||
| If it is not specified, all MLD snooping group tables are | ||||
| cleared."; | ||||
| } | ||||
| leaf source { | The YANG module specified in this document defines a schema for data | |||
| type inet:ipv6-address; | that is designed to be accessed via network management protocols such as | |||
| description | NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the | |||
| "Multicast source IPv6 address. | secure transport layer, and the mandatory-to-implement secure transport | |||
| If it is not specified, all MLD snooping source-group | is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and | |||
| tables are cleared."; | the mandatory-to-implement secure transport is TLS [RFC8446]. | |||
| } | ||||
| } | ||||
| } // rpc clear-mld-snooping-groups | ||||
| } | The Network Configuration Access Control Model (NACM) [RFC8341] provides | |||
| <CODE ENDS> | the means to restrict access for particular NETCONF or RESTCONF users to | |||
| a preconfigured subset of all available NETCONF or RESTCONF protocol | ||||
| operations and content. | ||||
| 4. Security Considerations | There are a number of data nodes defined in this YANG module that are | |||
| writable/creatable/deletable (i.e., config true, which is the default). | ||||
| These data nodes may be considered sensitive or vulnerable in some | ||||
| network environments. Write operations (e.g., edit-config) to these data | ||||
| nodes without proper protection can have a negative effect on network | ||||
| operations. These are the subtrees and data nodes and their | ||||
| sensitivity/vulnerability: | ||||
| The YANG module specified in this document defines a schema for data | Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
| that is designed to be accessed via network management protocols such | ||||
| as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | ||||
| is the secure transport layer, and the mandatory-to-implement secure | ||||
| transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | ||||
| is HTTPS, and the mandatory-to-implement secure transport is TLS | ||||
| [RFC5246]. | ||||
| The NETCONF access control model [RFC6536] provides the means to | ims:igmp-snooping-instance | |||
| restrict access for particular NETCONF or RESTCONF users to a | ||||
| preconfigured subset of all available NETCONF or RESTCONF protocol | ||||
| operations and content. | ||||
| There are a number of data nodes defined in this YANG module that are | ims:mld-snooping-instance | |||
| writable/creatable/deletable (i.e., config true, which is the | ||||
| default). These data nodes may be considered sensitive or vulnerable | ||||
| in some network environments. Write operations (e.g., edit-config) to | ||||
| these data nodes without proper protection can have a negative effect | ||||
| on network operations. These are the subtrees and data nodes and | ||||
| their sensitivity/vulnerability: | ||||
| /ims:igmp-snooping-instances/ims:igmp-snooping-instance | The subtrees under /dot1q:bridges/dot1q:bridge | |||
| /ims:mld-snooping-instances/ims:mld-snooping-instance | ims:igmp-snooping-instance | |||
| Unauthorized access to any data node of these subtrees can adversely | ims:mld-snooping-instance | |||
| affect the IGMP & MLD Snooping subsystem of both the local device and | ||||
| the network. This may lead to network malfunctions, delivery of | ||||
| packets to inappropriate destinations, and other problems. | ||||
| Some of the readable data nodes in this YANG module may be considered | The subtrees under /dot1q:bridges/dot1q:bridge/dot1q:component | |||
| sensitive or vulnerable in some network environments. It is thus | /dot1q:bridge-vlan/dot1q:vlan | |||
| important to control read access (e.g., via get, get-config, or | ||||
| notification) to these data nodes. These are the subtrees and data | ||||
| nodes and their sensitivity/vulnerability: | ||||
| /ims:igmp-snooping-instances/ims:igmp-snooping-instance | ims:igmp-snooping-instance | |||
| /ims:mld-snooping-instances/ims:mld-snooping-instance | ims:mld-snooping-instance | |||
| Unauthorized access to any data node of these subtrees can disclose | Unauthorized access to any data node of these subtrees can adversely | |||
| the operational state information of IGMP & MLD Snooping on this | affect the IGMP & MLD Snooping subsystem of both the local device and | |||
| device. | the network. This may lead to network malfunctions, delivery of packets | |||
| to inappropriate destinations, and other problems. | ||||
| Some of the RPC operations in this YANG module may be considered | Some of the readable data nodes in this YANG module may be considered | |||
| sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
| important to control access to these operations. The IGMP & MLD | important to control read access (e.g., via get, get-config, or | |||
| Snooping Yang module support the "clear-igmp-snooping-groups" and " | notification) to these data nodes. These are the subtrees and data nodes | |||
| clear-mld-snooping-groups" RPCs. If it meets unauthorized RPC | and their sensitivity/vulnerability: | |||
| operation invocation, the IGMP and MLD Snooping group tables will be | ||||
| cleared unexpectedly. | ||||
| 5. IANA Considerations | Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | ims:igmp-snooping-instance | |||
| actual RFC number (and remove this note). | ||||
| This document registers the following namespace URIs in the IETF XML | ims:mld-snooping-instance | |||
| registry [RFC3688]: | Unauthorized access to any data node of these subtrees can disclose the | |||
| operational state information of IGMP & MLD Snooping on this device. The | ||||
| group/source/host information may expose multicast group memberships, | ||||
| and transitively the associations between the user on the host and the | ||||
| contents from the source which could be privately sensitive. Some of the | ||||
| action operations in this YANG module may be considered sensitive or | ||||
| vulnerable in some network environments. It is thus important to control | ||||
| access to these operations. These are the operations and their | ||||
| sensitivity/vulnerability: | ||||
| -------------------------------------------------------------------- | Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping | ims:igmp-snooping-instance/ims:clear-igmp-snooping-groups | |||
| Registrant Contact: The IESG. | ims:mld-snooping-instance/ims:clear-mld-snooping-groups | |||
| Some of the actions in this YANG module may be considered sensitive or | ||||
| vulnerable in some network environments. The IGMP & MLD Snooping YANG | ||||
| module supports the "clear-igmp-snooping-groups" and "clear-mld- | ||||
| snooping-groups" actions. If unauthorized action is invoked, the IGMP | ||||
| and MLD Snooping group tables will be cleared unexpectedly. Especially | ||||
| when using wildcard, all the multicast traffic will be flooded in the | ||||
| broadcast domain. The devices that use this YANG module should heed the | ||||
| Security Considerations in [RFC4541]. | ||||
| XML: N/A, the requested URI is an XML namespace. | 6. IANA Considerations | |||
| -------------------------------------------------------------------- | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number (and remove this note). | ||||
| This document registers the following YANG modules in the YANG | 6.1. XML Registry | |||
| Module Names registry [RFC7950]: | ||||
| -------------------------------------------------------------------- | This document registers the following namespace URIs in the IETF XML | |||
| name: ietf-igmp-mld-snooping | registry [RFC3688]: | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping | -------------------------------------------------------------------- | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping | ||||
| Registrant Contact: The IETF. | ||||
| XML: N/A, the requested URI is an XML namespace. | ||||
| -------------------------------------------------------------------- | ||||
| prefix: ims | 6.2. YANG Module Names Registry | |||
| reference: RFC XXXX | This document registers the following YANG modules in the YANG Module | |||
| Names registry [RFC7950]: | ||||
| -------------------------------------------------------------------- | ||||
| name: ietf-igmp-mld-snooping | ||||
| namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping | ||||
| prefix: ims | ||||
| reference: RFC XXXX | ||||
| -------------------------------------------------------------------- | ||||
| 7. References | ||||
| -------------------------------------------------------------------- | 7.1. Normative References | |||
| 6. Normative References | [dot1Qcp] IEEE, "Standard for Local and metropolitan area networks-- | |||
| Bridges and Bridged Networks--Amendment 30: YANG Data | ||||
| Model", IEEE Std 802.1Qcp-2018 (Revision of IEEE Std | ||||
| 802.1Q-2014), September 2018, | ||||
| <https://ieeexplore.ieee.org/servlet/opac?punumber=8467505> | ||||
| [P802.1Qcp/D2.2] IEEE Approved Draft Standard for Local and | [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, | |||
| Metropolitan Area Networks, "Bridges and Bridged Networks | RFC 1112, August 1989. | |||
| Amendment: YANG Data Model", Mar 2018 | ||||
| [RFC2236] Fenner, W., "Internet Group Management Protocol, Version | [RFC2236] W. Fenner, "Internet Group Management Protocol, Version 2", | |||
| 2", RFC 2236, November 1997. | RFC 2236, November 1997. | |||
| [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast | [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast | |||
| Listener Discovery (MLD) for IPv6", RFC 2710, October 1999. | Listener Discovery (MLD) for IPv6", RFC 2710, October 1999. | |||
| [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | |||
| Thyagarajan, "Internet Group Management Protocol, Version | Thyagarajan, "Internet Group Management Protocol, Version | |||
| 3", RFC 3376, October 2002. | 3", RFC 3376, October 2002. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", RFC 3688, January | ||||
| 2004. | ||||
| [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery | [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery | |||
| Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. | Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. | |||
| [RFC4286] B. Haberman and J. Martin, "Multicast Router Discovery", | ||||
| RFC 4286, December 2005. | ||||
| [RFC4541] M. Christensen, K. Kimball, F. Solensky, "Considerations | [RFC4541] M. Christensen, K. Kimball, F. Solensky, "Considerations | |||
| for Internet Group Management Protocol (IGMP) and Multicast | for Internet Group Management Protocol (IGMP) and Multicast | |||
| Listener Discovery (MLD) Snooping Switches", RFC 4541, May | Listener Discovery (MLD) Snooping Switches", RFC 4541, May | |||
| 2006. | 2006. | |||
| [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using Internet | [RFC5790] H. Liu, W. Cao, H. Asaeda, "Lightweight Internet Group | |||
| Group Management Protocol Version 3 (IGMPv3) and Multicast | Management Protocol Version 3 (IGMPv3) and Multicast | |||
| Listener Discovery Protocol Version 2 (MLDv2) for Source- | Listener Discovery Version 2 (MLDv2) Protocols", RFC 5790, | |||
| Specific Multicast", RFC 4604, August 2006. | February 2010. | |||
| [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for | ||||
| IP", RFC 4607, August 2006. | ||||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| October 2010. | October 2010. | |||
| [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6021, | [RFC6241] R. Enns, Ed., M. Bjorklund, Ed., J. Schoenwaelder, Ed., A. | |||
| October 2010. | Bierman, Ed., "Network Configuration Protocol (NETCONF)", | |||
| RFC 6241, June 2011. | ||||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
| Shell (SSH)", RFC 6242, June 2011. | ||||
| [RFC6636] H. Asaeda, H. Liu, Q. Wu, "Tuning the Behavior of the | ||||
| Internet Group Management Protocol (IGMP) and Multicast | ||||
| Listener Discovery (MLD) for Routers in Mobile and Wireless | ||||
| Networks", RFC 6636, May 2012. | ||||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, | |||
| July 2013. | July 2013. | |||
| [RFC7761] B. Fenner, M. Handley, H. Holbrook, I. Kouvelas, R. Parekh, | ||||
| Z. Zhang, L. Zheng, "Protocol Independent Multicast - | ||||
| Sparse Mode (PIM-SM): Protocol Specification (Revised)", | ||||
| RFC 7761, March 2016. | ||||
| [RFC7950] M. Bjorklund, Ed., "The YANG 1.1 Data Modeling Language", | ||||
| RFC 7950, August 2016. | ||||
| [RFC8040] A. Bierman, M. Bjorklund, K. Watsen, "RESTCONF Protocol", | ||||
| RFC 8040, January 2017. | ||||
| [RFC8294] X. Liu, Y. Qu, A. Lindem, C. Hopps, L. Berger, "Common YANG | ||||
| Data Types for the Routing Area", RFC 8294, December 2017. | ||||
| [RFC8340] M. Bjorklund, and L. Berger, Ed., "YANG Tree Diagrams", RFC | ||||
| 8340, March 2018. | ||||
| [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration Access | ||||
| Control Model", RFC 8341, March 2018. | ||||
| [RFC8342] M. Bjorklund and J. Schoenwaelder, "Network Management | [RFC8342] M. Bjorklund and J. Schoenwaelder, "Network Management | |||
| Datastore Architecture (NMDA)", RFC 8342, March 2018. | Datastore Architecture (NMDA)", RFC 8342, March 2018. | |||
| [RFC8343] M. Bjorklund, "A YANG Data Model for Interface Management", | [RFC8343] M. Bjorklund, "A YANG Data Model for Interface Management", | |||
| RFC 8343, March 2018. | RFC 8343, March 2018. | |||
| [draft-ietf-pim-igmp-mld-yang-06] X. Liu, F. Guo, M. Sivakumar, P. | [RFC8349] L. Lhotka, A. Lindem, Y. Qu, "A YANG Data Model for Routing | |||
| McAllister, A. Peter, "A YANG data model for Internet Group | Management (NMDA Version)", RFC 8349, March 2018. | |||
| Management Protocol (IGMP) and Multicast Listener Discovery | ||||
| (MLD)", draft-ietf-pim-igmp-mld-yang-06, Oct 20, 2017. | ||||
| [draft-dsdt-nmda-guidelines-01] M. Bjorklund, J. Schoenwaelder, P. | ||||
| Shafer, K. Watsen, R. Wilton, "Guidelines for YANG Module | ||||
| Authors (NMDA)", draft-dsdt-nmda-guidelines-01, May 2017 | ||||
| [draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data | ||||
| Model for Interface Management", draft-bjorklund-netmod- | ||||
| rfc7223bis-00, August 21, 2017 | ||||
| [draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Model for IP Management", draft-bjorklund-netmod- | Version 1.3", RFC 8446, August 2018. | |||
| rfc7277bis-00, August 21, 2017 | ||||
| [draft-ietf-netmod-revised-datastores-03] M. Bjorklund, J. | 7.2. Informative References | |||
| Schoenwaelder, P. Shafer, K. Watsen, R. Wilton, "Network | ||||
| Management Datastore Architecture", draft-ietf-netmod- | ||||
| revised-datastores-03, July 3, 2017 | ||||
| [draft-ietf-bess-evpn-yang-02] P.Brissette, A. Sajassi, H. Shah, Z. | [RFC7951] L. Lhotka, "JSON Encoding of Data Modeled with YANG", RFC | |||
| Li, H. Chen, K. Tiruveedhula, I. Hussain, J. Rabadan, "Yang | 7951, August 2016. | |||
| Data Model for EVPN", draft-ietf-bess-evpn-yang-02, March | ||||
| 13, 2017 | ||||
| [draft-ietf-bess-l2vpn-yang-08] H. Shah, P. Brissette, I. Chen, I. | [RFC8407] A. Bierman, "Guidelines for Authors and Reviewers of | |||
| Hussain, B. Wen, K. Tiruveedhula, "YANG Data Model for | Documents Containing YANG Data Models", RFC 8407, October | |||
| MPLS-based L2VPN", draft-ietf-bess-l2vpn-yang-06.txt, | 2018. | |||
| February 17, 2018 | ||||
| [draft-ietf-rtgwg-ni-model-12] L. Berger, C. Hopps, A. Lindem, X. | [RFC8652] X. Liu, F. Guo, M. Sivakumar, P. McAllister, A. Peter, "A | |||
| Liu, "YANG Model for Network Instances", draft-ietf-rtgwg- | YANG Data Model for the Internet Group Management Protocol | |||
| ni-model-12.txt, March 19, 2018 | (IGMP) and Multicast Listener Discovery (MLD)", RFC 8652, | |||
| November 2019. | ||||
| Appendix A. Data Tree Example | Appendix A. Data Tree Example | |||
| This section contains an example of an instance data tree in the JSON | This section contains an example for bridge service in the JSON encoding | |||
| [RFC7951], containing both configuration and state data. | ||||
| encoding [RFC7951], containing both configuration and state data. | ||||
| +-----------+ | +-----------+ | |||
| + Source + | + Source + | |||
| +-----+-----+ | +-----+-----+ | |||
| | | | | |||
| -----------------+---------------------------- | -----------------+---------------------------- | |||
| |eth1/1 | |eth1/1 | |||
| +---+---+ | +---+---+ | |||
| + R1 + | + R1 + | |||
| +-+---+-+ | +-+---+-+ | |||
| skipping to change at page 37, line 5 ¶ | skipping to change at page 36, line 42 ¶ | |||
| +---+---+ +--+---+ | +---+---+ +--+---+ | |||
| eth2/2 | | eth3/2 | eth2/2 | | eth3/2 | |||
| | | | | | | |||
| ---------------+----------+------------------- | ---------------+----------+------------------- | |||
| | | | | | | |||
| | | | | | | |||
| +--------+--+ +---+--------+ | +--------+--+ +---+--------+ | |||
| + Receiver1 + + Receiver2 + | + Receiver1 + + Receiver2 + | |||
| +-----------+ +------------+ | +-----------+ +------------+ | |||
| The configuration instance data tree for R1 in the above figure could be | The configuration data for R1 in the above figure could be as follows: | |||
| as follows: | ||||
| { | { | |||
| "ietf-igmp-mld-snooping:igmp-snooping-instances": { | "ietf-interfaces:interfaces":{ | |||
| "igmp-snooping-instance": [ | "interface":[ | |||
| { | { | |||
| "name": "ins101", | "name":"eth1/1", | |||
| "type": "bridge", | "type":"iana-if-type:ethernetCsmacd" | |||
| "enable": true | } | |||
| } | ] | |||
| ] | ||||
| }, | }, | |||
| "ietf-igmp-mld-snooping:mld-snooping-instances": { | "ietf-routing:routing":{ | |||
| "mld-snooping-instance": [ | "control-plane-protocols":{ | |||
| { | "control-plane-protocol":[ | |||
| "name": "ins102", | { | |||
| "type": "bridge", | "type":"ietf-igmp-mld-snooping:igmp-snooping", | |||
| "enable": true | "name":"bis1", | |||
| } | "ietf-igmp-mld-snooping:igmp-snooping-instance":{ | |||
| ] | "l2-service-type":"ietf-igmp-mld-snooping:bridge", | |||
| }, | "enable":true | |||
| "ieee802-dot1q-bridge:bridges": { | } | |||
| "bridge": [ | } | |||
| { | ] | |||
| "name": "isp", | } | |||
| "address": "00-23-ef-a5-77-12", | }, | |||
| "bridge-type": "ieee802-dot1q-bridge:customer-vlan-bridge", | "ieee802-dot1q-bridge:bridges":{ | |||
| "component": [ | "bridge":[ | |||
| { | { | |||
| "name": "comp1", | "name":"isp1", | |||
| "type": "ieee802-dot1q-bridge:c-vlan-component", | "address":"00-23-ef-a5-77-12", | |||
| "bridge-vlan": { | "bridge-type":"ieee802-dot1q-bridge:customer-vlan-bridge", | |||
| "vlan": [ | "component":[ | |||
| { | { | |||
| "vid": 101, | "name":"comp1", | |||
| "ietf-igmp-mld-snooping:igmp-snooping-instance": "ins101" | "type":"ieee802-dot1q-bridge:c-vlan-component", | |||
| }, | "bridge-vlan":{ | |||
| { | "vlan":[ | |||
| "vid": 102, | { | |||
| "ietf-igmp-mld-snooping:mld-snooping-instance": "ins102" | "vid":101, | |||
| } | "ietf-igmp-mld-snooping:igmp-snooping-instance":"bis1" | |||
| ] | } | |||
| } | ] | |||
| } | } | |||
| ] | } | |||
| } | ] | |||
| ] | ||||
| } | ||||
| } | } | |||
| ] | ||||
| } | ||||
| } | ||||
| The corresponding operational state data for R1 could be as follows: | The corresponding operational state data for R1 could be as follows: | |||
| { | { | |||
| "ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
| "interface": [ | "interface": [ | |||
| { | { | |||
| "name": "1/1", | "name": "eth1/1", | |||
| "type": "iana-if-type:ethernetCsmacd", | "type": "iana-if-type:ethernetCsmacd", | |||
| "admin-status": "up", | "oper-status": "up", | |||
| "if-index": 214748, | "statistics": { | |||
| "oper-status": "up", | "discontinuity-time": "2018-05-23T12:34:56-05:00" | |||
| "statistics": { | ||||
| "discontinuity-time": "2018-05-23T12:34:56-05:00" | } | |||
| } | } | |||
| }, | ] | |||
| { | ||||
| "name": "1/2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "admin-status": "up", | ||||
| "if-index": 214749, | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2018-05-23T12:35:06-05:02" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | }, | |||
| "ietf-igmp-mld-snooping:igmp-snooping-instances": { | "ietf-routing:routing": { | |||
| "igmp-snooping-instance": [ | "control-plane-protocols": { | |||
| { | "control-plane-protocol": [ | |||
| "name": "ins101", | { | |||
| "type": "bridge", | "type": "ietf-igmp-mld-snooping:igmp-snooping", | |||
| "enable": true, | "name": "bis1", | |||
| "forwarding-mode": "ip", | "ietf-igmp-mld-snooping:igmp-snooping-instance": { | |||
| "explicit-tracking": false, | "l2-service-type": "ietf-igmp-mld-snooping:bridge", | |||
| "exclude-lite": false, | "enable": true | |||
| "send-query": true, | } | |||
| "immediate-leave": [null], | } | |||
| "last-member-query-interval": 1, | ] | |||
| "query-interval": 125, | } | |||
| "query-max-response-time": 10, | }, | |||
| "require-router-alert": false, | "ieee802-dot1q-bridge:bridges": { | |||
| "robustness-variable": 2, | "bridge": [ | |||
| "entries-count": 1, | { | |||
| "bridge-mrouter-interface": ["1/1"], | "name": "isp1", | |||
| "group": [ | "address": "00-23-ef-a5-77-12", | |||
| { | "bridge-type": "ieee802-dot1q-bridge:customer-vlan-bridge", | |||
| "address": "223.0.0.1", | "component": [ | |||
| "mac-address": "01:00:5e:00:00:01", | { | |||
| "expire": 120, | "name": "comp1", | |||
| "up-time": 180, | "type": "ieee802-dot1q-bridge:c-vlan-component", | |||
| "last-reporter": "100.0.0.1", | "bridge-vlan": { | |||
| "source": [ | "vlan": [ | |||
| { | ||||
| "address": "192.168.0.1", | ||||
| "bridge-outgoing-interface": ["1/2"], | ||||
| "up-time": 180, | ||||
| "expire": 120, | ||||
| "last-reporter": "100.0.0.1" | ||||
| } | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "1/1", | ||||
| "statistics": { | ||||
| "received": { | ||||
| "query": 5, | ||||
| "membership-report-v1": 0, | ||||
| "membership-report-v2": 0, | ||||
| "membership-report-v3": 0, | ||||
| "leave": 0, | ||||
| "non-member-leave": 0, | ||||
| "pim": 11 | ||||
| }, | ||||
| "sent": { | ||||
| "query": 0, | ||||
| "membership-report-v1": 0, | ||||
| "membership-report-v2": 3, | ||||
| "membership-report-v3": 0, | ||||
| "leave": 0, | ||||
| "non-member-leave": 0, | ||||
| "pim": 0 | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "1/2", | ||||
| "statistics": { | ||||
| "received": { | ||||
| "query": 0, | ||||
| "membership-report-v1": 0, | ||||
| "membership-report-v2": 3, | ||||
| "membership-report-v3": 0, | ||||
| "leave": 0, | ||||
| "non-member-leave": 0, | ||||
| "pim": 0 | ||||
| }, | ||||
| "sent": { | ||||
| "query": 5, | ||||
| "membership-report-v1": 0, | ||||
| "membership-report-v2": 0, | ||||
| "membership-report-v3": 0, | ||||
| "leave": 0, | ||||
| "non-member-leave": 0, | ||||
| "pim": 11 | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-igmp-mld-snooping:mld-snooping-instances": { | ||||
| "mld-snooping-instance": [ | ||||
| { | { | |||
| "name": "ins102", | "vid": 101, | |||
| "type": "bridge", | "ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1" | |||
| "enable": true, | ||||
| "forwarding-mode": "ip", | ||||
| "explicit-tracking": false, | ||||
| "exclude-lite": false, | ||||
| "send-query": true, | ||||
| "immediate-leave": [null], | ||||
| "last-member-query-interval": 1, | ||||
| "query-interval": 125, | ||||
| "query-max-response-time": 10, | ||||
| "require-router-alert": false, | ||||
| "robustness-variable": 2, | ||||
| "entries-count": 1, | ||||
| "bridge-mrouter-interface": ["1/1"], | ||||
| "group": [ | ||||
| { | ||||
| "address": "FF0E::1", | ||||
| "mac-address": "01:00:5e:00:00:01", | ||||
| "expire": 120, | ||||
| "up-time": 180, | ||||
| "last-reporter": "2001::1", | ||||
| "source": [ | ||||
| { | ||||
| "address": "3001::1", | ||||
| "bridge-outgoing-interface": ["1/2"], | ||||
| "up-time": 180, | ||||
| "expire": 120, | ||||
| "last-reporter": "2001::1" | ||||
| } | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "1/1", | ||||
| "statistics": { | ||||
| "received": { | ||||
| "query": 7, | ||||
| "report-v1": 0, | ||||
| "report-v2": 0, | ||||
| "done": 0, | ||||
| "pim": 15 | ||||
| }, | ||||
| "sent": { | ||||
| "query": 0, | ||||
| "report-v1": 0, | ||||
| "report-v2": 3, | ||||
| "done": 0, | ||||
| "pim": 0 | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "1/2", | ||||
| "statistics": { | ||||
| "received": { | ||||
| "query": 0, | ||||
| "report-v1": 0, | ||||
| "report-v2": 3, | ||||
| "done": 0, | ||||
| "pim": 0 | ||||
| }, | ||||
| "sent": { | ||||
| "query": 7, | ||||
| "report-v1": 0, | ||||
| "report-v2": 0, | ||||
| "done": 0, | ||||
| "pim": 15 | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | } | |||
| ] | ] | |||
| } | ||||
| } | ||||
| ] | ||||
| } | } | |||
| ] | ||||
| } | ||||
| } | ||||
| The following action is to clear all the entries whose group address is | ||||
| 225.1.1.1 for igmp-snooping-instance bis1. | ||||
| POST /restconf/operations/ietf-routing:routing/control-plane-protocols/\ | ||||
| control-plane-protocol=ietf-igmp-mld-snooping:igmp-snooping,bis1/\ | ||||
| ietf-igmp-mld-snooping:igmp-snooping-instance/\ | ||||
| clear-igmp-snooping-groups HTTP/1.1 | ||||
| Host: example.com | ||||
| Content-Type: application/yang-data+json | ||||
| { | ||||
| "ietf-igmp-mld-snooping:input" : { | ||||
| "group": "225.1.1.1", | ||||
| "source": "*" | ||||
| } | ||||
| } | } | |||
| Authors' Addresses | Authors' Addresses | |||
| Hongji Zhao | Hongji Zhao | |||
| Ericsson (China) Communications Company Ltd. | Ericsson (China) Communications Company Ltd. | |||
| Ericsson Tower, No. 5 Lize East Street, | Ericsson Tower, No. 5 Lize East Street, | |||
| Chaoyang District Beijing 100102, P.R. China | Chaoyang District Beijing 100102, China | |||
| Email: hongji.zhao@ericsson.com | Email: hongji.zhao@ericsson.com | |||
| Xufeng Liu | Xufeng Liu | |||
| Jabil | Volta Networks | |||
| 8281 Greensboro Drive, Suite 200 | ||||
| McLean VA 22102 | ||||
| USA | USA | |||
| EMail: Xufeng.liu.ietf@gmail.com | EMail: xufeng.liu.ietf@gmail.com | |||
| Yisong Liu | Yisong Liu | |||
| Huawei Technologies | China Mobile | |||
| Huawei Bld., No.156 Beiqing Rd. | ||||
| Beijing 100095 | ||||
| China | China | |||
| Email: liuyisong@huawei.com | Email: liuyisong@chinamobile.com | |||
| Anish Peter | Anish Peter | |||
| Individual | Individual | |||
| EMail: anish.ietf@gmail.com | EMail: anish.ietf@gmail.com | |||
| Mahesh Sivakumar | Mahesh Sivakumar | |||
| Cisco Systems | Juniper Networks | |||
| 510 McCarthy Boulevard | 1133 Innovation Way | |||
| Milpitas, California | Sunnyvale, California | |||
| USA | USA | |||
| EMail: sivakumar.mahesh@gmail.com | EMail: sivakumar.mahesh@gmail.com | |||
| End of changes. 301 change blocks. | ||||
| 1361 lines changed or deleted | 1262 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||