rfc9166xml2.original.xml   rfc9166.xml 
<?xml version='1.0' encoding='utf-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ <!DOCTYPE rfc [
<!ENTITY RFC1112 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF <!ENTITY nbsp "&#160;">
C.1112.xml"> <!ENTITY zwsp "&#8203;">
<!ENTITY RFC2236 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF <!ENTITY nbhy "&#8209;">
C.2236.xml"> <!ENTITY wj "&#8288;">
<!ENTITY RFC2710 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.2710.xml">
<!ENTITY RFC3376 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.3376.xml">
<!ENTITY RFC3688 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.3688.xml">
<!ENTITY RFC3810 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.3810.xml">
<!ENTITY RFC4286 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.4286.xml">
<!ENTITY RFC4541 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.4541.xml">
<!ENTITY RFC5790 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.5790.xml">
<!ENTITY RFC6020 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.6020.xml">
<!ENTITY RFC6241 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.6241.xml">
<!ENTITY RFC6242 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.6242.xml">
<!ENTITY RFC6636 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.6636.xml">
<!ENTITY RFC6991 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.6991.xml">
<!ENTITY RFC7761 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.7761.xml">
<!ENTITY RFC7950 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.7950.xml">
<!ENTITY RFC8040 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8040.xml">
<!ENTITY RFC8294 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8294.xml">
<!ENTITY RFC8340 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8340.xml">
<!ENTITY RFC8341 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8341.xml">
<!ENTITY RFC8342 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8342.xml">
<!ENTITY RFC8343 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8343.xml">
<!ENTITY RFC8349 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8349.xml">
<!ENTITY RFC8446 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8446.xml">
<!ENTITY RFC8529 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8529.xml">
<!ENTITY I-D.ietf-bess-l2vpn-yang SYSTEM "https://xml2rfc.ietf.org/public/rfc/bi
bxml3/reference.I-D.draft-ietf-bess-l2vpn-yang-10.xml">
<!ENTITY I-D.ietf-bess-l2vpn-yang SYSTEM "https://xml2rfc.ietf.org/public/rfc/bi
bxml3/reference.I-D.ietf-bess-l2vpn-yang.xml">
<!ENTITY RFC3916 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.3916.xml">
<!ENTITY RFC7951 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.7951.xml">
<!ENTITY RFC8407 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8407.xml">
<!ENTITY RFC8652 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
C.8652.xml">
]> ]>
<rfc submissionType="IETF" docName="draft-ietf-pim-igmp-mld-snooping-yang-18" ca <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-pim-igmp-mld
tegory="std" ipr="trust200902"> -snooping-yang-20" number="9166" submissionType="IETF" category="std" consensus=
<!-- Generated by id2xml 1.5.0 on 2020-08-27T22:26:26Z --> "true" ipr="trust200902" obsoletes="" updates="" xml:lang="en" symRefs="true" so
<?rfc strict="yes"?> rtRefs="true" tocInclude="true" version="3">
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="no"?>
<?rfc text-list-symbols="*o+-"?>
<?rfc toc="yes"?>
<front>
<title abbrev="IGMP &amp; MLD Snooping Yang Module">A Yang Data Model for
IGMP and MLD Snooping</title>
<author initials="H." surname="Zhao" fullname="Hongji Zhao">
<organization>Ericsson (China) Communications Company Ltd.</organization>
<address>
<postal>
<street>Ericsson Tower, No. 5 Lize East Street</street>
<city>Chaoyang District</city>
<region>Beijing</region>
<code>100102</code>
<country>P.R. China</country>
</postal>
<phone></phone>
<email>hongji.zhao@ericsson.com</email>
<uri></uri>
</address>
</author>
<author initials="X." surname="Liu" fullname="Xufeng Liu"> <front>
<organization>Volta Networks</organization> <title abbrev="IGMP &amp; MLD Snooping YANG Module">A YANG Data Model for In
<address> ternet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) S
<postal> nooping</title>
<street></street> <seriesInfo name="RFC" value="9166"/>
<city></city> <author initials="H." surname="Zhao" fullname="Hongji Zhao">
<region></region> <organization abbrev="Ericsson">Ericsson (China) Communications Company Lt
<code></code> d.</organization>
<country>USA</country> <address>
</postal> <postal>
<phone></phone> <street>Ericsson Tower, No. 5 Lize East Street</street>
<city>Beijing</city>
<region/>
<code>100102</code>
<country>China</country>
</postal>
<phone/>
<email>hongji.zhao@ericsson.com</email>
<uri/>
</address>
</author>
<author initials="X." surname="Liu" fullname="Xufeng Liu">
<organization>IBM Corporation</organization>
<address>
<postal>
<street>2300 Dulles Station Blvd.</street>
<city>Herndon</city>
<region>VA</region>
<code>20171</code>
<country>United States of America</country>
</postal>
<phone/>
<email>xufeng.liu.ietf@gmail.com</email> <email>xufeng.liu.ietf@gmail.com</email>
<uri></uri> <uri/>
</address> </address>
</author> </author>
<author initials="Y." surname="Liu" fullname="Yisong Liu">
<author initials="Y." surname="Liu" fullname="Yisong Liu"> <organization>China Mobile</organization>
<organization>China Mobile</organization> <address>
<address> <postal>
<postal> <street/>
<street></street> <city/>
<city></city> <region/>
<region></region> <code/>
<code></code> <country>China</country>
<country>China</country> </postal>
</postal> <phone/>
<phone></phone> <email>liuyisong@chinamobile.com</email>
<email>liuyisong@chinamobile.com</email> <uri/>
<uri></uri> </address>
</address> </author>
</author> <author initials="A." surname="Peter" fullname="Anish Peter">
<organization>Individual</organization>
<author initials="A." surname="Peter" fullname="Anish Peter"> <address>
<organization>Individual</organization>
<address>
<email>anish.ietf@gmail.com</email> <email>anish.ietf@gmail.com</email>
<uri></uri> <uri/>
</address> </address>
</author> </author>
<author initials="M." surname="Sivakumar" fullname="Mahesh Sivakumar">
<author initials="M." surname="Sivakumar" fullname="Mahesh Sivakumar"> <organization>Juniper Networks</organization>
<organization>Juniper Networks</organization> <address>
<address> <postal>
<postal> <street>1133 Innovation Way</street>
<street>1133 Innovation Way</street> <city>Sunnyvale</city>
<city>Sunnyvale</city> <region>CA</region>
<region>CA</region> <code/>
<code></code> <country>United States of America</country>
<country>USA</country> </postal>
</postal> <phone/>
<phone></phone>
<email>sivakumar.mahesh@gmail.com</email> <email>sivakumar.mahesh@gmail.com</email>
<uri></uri> <uri/>
</address> </address>
</author> </author>
<date month="January" year="2022"/>
<date year="2020" month="September"/> <area>RTG</area>
<workgroup>PIM Working Group</workgroup> <workgroup>PIM</workgroup>
<abstract><t>
This document defines a YANG data model that can be used to configure and
manage Internet Group Management Protocol (IGMP) and Multicast Listener
Discovery (MLD) Snooping devices. The YANG module in this document conforms
to Network Management Datastore Architecture (NMDA).</t>
</abstract>
</front>
<middle> <keyword>YANG</keyword>
<section title="Introduction" anchor="sect-1"><t> <keyword>IGMP Snooping</keyword>
This document defines a YANG <xref target="RFC7950"/> data model for the mana <keyword>MLD Snooping</keyword>
gement of <keyword>multicast</keyword>
Internet Group Management Protocol (IGMP) and Multicast Listener Discovery <keyword>data model</keyword>
(MLD) Snooping <xref target="RFC4541"/> devices.</t> <keyword>ietf-igmp-mld-snooping</keyword>
<keyword>network management</keyword>
<keyword>routing</keyword>
<t> <abstract>
The YANG module in this document conforms to the Network Management <t>
Datastore Architecture defined in <xref target="RFC8342"/>. The "Network This document defines a YANG data model that can be used to configure and
Management Datastore Architecture" (NMDA) adds the ability to inspect the manage Internet Group Management Protocol (IGMP) and Multicast Listener Disco
very
(MLD) snooping devices. The YANG module in this document conforms
to the Network Management Datastore Architecture (NMDA).</t>
</abstract>
</front>
<middle>
<section anchor="sect-1" numbered="true" toc="default">
<name>Introduction</name>
<t>
This document defines a YANG <xref target="RFC7950" format="default"/> data m
odel for the management of
IGMP and MLD snooping <xref target="RFC4541" format="default"/> devices.</t>
<t>
The YANG module in this document conforms to the NMDA defined in <xref target
="RFC8342" format="default"/>. The NMDA adds the ability to inspect the
current operational values for configuration, allowing clients to use current operational values for configuration, allowing clients to use
identical paths for retrieving the configured values and the operational identical paths for retrieving the configured values and the operational
values.</t> values.</t>
<section anchor="sect-1.1" numbered="true" toc="default">
<name>Terminology</name>
<t>
The terminology for describing YANG data models is found in <xref target="RFC
6020" format="default"/> and
<xref target="RFC7950" format="default"/>, including:
<section title="Terminology" anchor="sect-1.1"><t> </t>
The terminology for describing YANG data models is found in <xref target="RFC <ul spacing="normal">
6020"/> and <li>augment</li>
<xref target="RFC7950"/>, including: <li>data model</li>
<li>data node</li>
<list style="symbols"> <li>identity</li>
<li>module</li>
<t>augment</t> </ul>
<t>
<t>data model</t>
<t>data node</t>
<t>identity</t>
<t>module</t>
</list>
</t>
<t>
The following terminologies are used in this document:</t> The following terminologies are used in this document:</t>
<dl newline="false" spacing="normal" indent="6">
<t><list style="hanging" hangIndent="6"> <dt>mrouter:</dt>
<dd>multicast router, which is a router that has
<t hangText="mrouter:">multicast router, which is a router that has multicast routing enabled <xref target="RFC4286" format="default"/>.</dd
multicast routing enabled <xref target="RFC4286"/>.</t> >
<dt>mrouter interfaces:</dt>
<t hangText="mrouter interfaces:">snooping switch ports where <dd>snooping switch ports where
multicast routers are attached <xref target="RFC4541"/>.</t> multicast routers are attached <xref target="RFC4541" format="default"/>
.</dd>
</list> </dl>
</t>
<t>
The following abbreviations are used in this document and defined model:</t>
<t>
IGMP: Internet Group Management Protocol <xref target="RFC3376"/>.</t>
<t> <t>
MLD: Multicast Listener Discovery <xref target="RFC3810"/>.</t> The following abbreviations are used in this document and defined model:</t>
<t>
AC: Attachment Circuit <xref target="RFC3916"/>.</t>
<t> <dl>
PW: Pseudo Wire <xref target="RFC3916"/>.</t> <dt>IGMP:</dt><dd>Internet Group Management Protocol <xref target="RFC3376" fo
rmat="default"/>.</dd>
</section> <dt>MLD:</dt><dd>Multicast Listener Discovery <xref target="RFC3810" format="d
efault"/>.</dd>
</dl>
<section title="Tree Diagrams" anchor="sect-1.2"><t> </section>
<section anchor="sect-1.2" numbered="true" toc="default">
<name>Tree Diagrams</name>
<t>
Tree diagrams used in this document follow the notation defined in Tree diagrams used in this document follow the notation defined in
<xref target="RFC8340"/>.</t> <xref target="RFC8340" format="default"/>.</t>
</section>
</section> <section anchor="sect-1.3" numbered="true" toc="default">
<name>Prefixes in Data Node Names</name>
<section title="Prefixes in Data Node Names" anchor="sect-1.3"><t> <t>
In this document, names of data nodes, actions, and other data model 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 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 context in which YANG module each name is defined. Otherwise, names are
prefixed using the standard prefix associated with the corresponding YANG prefixed using the standard prefix associated with the corresponding YANG
module, as shown in Table 1.<!-- module, as shown in <xref target="tab-1"/>.
draft-ietf-pim-igmp-mld-snooping-yang-18-manual.txt(159): Warning: Unexpected </t>
title: expected 'Figure ...', found 'Table 1: Prefixes and Corresponding YANG <table anchor="tab-1">
Modules'. This looks like a figure that has been entered as a texttable.
The generated XML will need adjustment.
--></t>
<figure title="Prefixes and Corresponding YANG Modules" anchor="tab-1"><a
rtwork><![CDATA[
+----------+-----------------------+---------------------------------+
| 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]
+----------+-----------------------+---------------------------------+
| ni | ietf-network-instance | [RFC8529] |
+----------+-----------------------+---------------------------------+
| pw | ietf-pseudowires | [draft-ietf-bess-l2vpn-yang] |
+----------+-----------------------+---------------------------------+
| l2vpn | ietf-l2vpn | [draft-ietf-bess-l2vpn-yang] |
+----------+-----------------------+---------------------------------+
| dot1q | ieee802-dot1q-bridge | [dot1Qcp] |
+----------+-----------------------+---------------------------------+
]]></artwork>
</figure>
</section>
</section> <name>Prefixes and Corresponding YANG Modules</name>
<section title="Design of Data Model" anchor="sect-2"><t> <thead>
An IGMP/MLD snooping switch <xref target="RFC4541"/> analyzes IGMP/MLD packet <tr>
s and sets up <th>Prefix</th>
<th>YANG module</th>
<th>Reference</th>
</tr>
</thead>
<tbody>
<tr>
<td>inet</td>
<td>ietf-inet-types</td>
<td><xref target="RFC6991"/></td>
</tr>
<tr>
<td>yang</td>
<td>ietf-yang-types</td>
<td><xref target="RFC6991"/></td>
</tr>
<tr>
<td>if</td>
<td>ietf-interfaces</td>
<td><xref target="RFC8343"/></td>
</tr>
<tr>
<td>rt</td>
<td>ietf-routing</td>
<td><xref target="RFC8349"/></td>
</tr>
<tr>
<td>rt-types</td>
<td>ietf-routing-types</td>
<td><xref target="RFC8294"/></td>
</tr>
<tr>
<td>dot1q</td>
<td>ieee802-dot1q-bridge</td>
<td><xref target="dot1Qcp"/></td>
</tr>
</tbody>
</table>
</section>
</section>
<section anchor="sect-2" numbered="true" toc="default">
<name>Design of Data Model</name>
<t>
An IGMP/MLD snooping switch <xref target="RFC4541" format="default"/> analyze
s IGMP/MLD packets and sets up
forwarding tables for multicast traffic. If a switch does not run IGMP/MLD 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 snooping, multicast traffic will be flooded in the broadcast domain. If a
switch runs IGMP/MLD snooping, multicast traffic will be forwarded based on switch runs IGMP/MLD snooping, multicast traffic will be forwarded based on
the forwarding tables to avoid wasting bandwidth. The IGMP/MLD snooping 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 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 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 defined in this document does not augment, or even require, the IGMP/MLD
data model defined in <xref target="RFC8652"/>. The model covers considerati data model defined in <xref target="RFC8652" format="default"/>. The model c
ons for overs considerations for IGMP and MLD snooping switches <xref target="RFC4541" f
Internet Group Management Protocol (IGMP) and Multicast Listener Discovery ormat="default"/>.</t>
(MLD) Snooping Switches <xref target="RFC4541"/>.</t> <t>
<t>
IGMP and MLD snooping switches do not adhere to the conceptual model that IGMP and MLD snooping switches do not adhere to the conceptual model that
provides the strict separation of functionality between different provides the strict separation of functionality between different
communications layers in the ISO model, and instead utilize information in communications layers in the ISO model and instead utilize information in
the upper level protocol headers as factors to be considered in processing the upper-level protocol headers as factors to be considered in processing
at the lower levels <xref target="RFC4541"/>.</t> at the lower levels <xref target="RFC4541" format="default"/>.</t>
<t>
<t> IGMP snooping switches utilize IGMP and could support IGMPv1 <xref target="RF
IGMP Snooping switches utilize IGMP, and could support IGMPv1 <xref C1112" format="default"/>, IGMPv2 <xref target="RFC2236" format="default"/>, and
target="RFC1112"/>, IGMPv2 <xref target="RFC2236"/>, and IGMPv3 <xref IGMPv3 <xref target="RFC3376" format="default"/>. MLD snooping switches utilize
target="RFC3376"/>. MLD Snooping switches utilize MLD, and could support MLD and could support
MLDv1 <xref target="RFC2710"/> and MLDv2 <xref target="RFC3810"/>. The goal MLDv1 <xref target="RFC2710" format="default"/> and MLDv2 <xref target="RFC38
10" format="default"/>. The goal
of this document is to define a data model that provides a common user of this document is to define a data model that provides a common user
interface to IGMP and MLD Snooping.</t> interface to IGMP and MLD snooping.</t>
<section anchor="sect-2.1" numbered="true" toc="default">
<section title="Overview" anchor="sect-2.1"><t> <name>Overview</name>
The IGMP and MLD Snooping YANG module defined in this document has all the <t>
common building blocks for the IGMP and MLD Snooping switches.</t> The YANG module on IGMP and MLD snooping defined in this document has all the
common building blocks for the IGMP and MLD snooping switches.</t>
<t> <t>
The YANG module includes IGMP and MLD Snooping instance definition, using The YANG module includes an IGMP and MLD snooping instance definition that us
instance in the L2 service type of BRIDGE <xref target="dot1Qcp"/> and L2VPN es the instance in the L2 service type of bridge <xref target="dot1Qcp" format="
<xref target="I-D.ietf-bess-l2vpn-yang"/>. The module also includes actions f default"/>. It also includes actions for clearing
or clearing IGMP and MLD snooping group tables.</t>
IGMP and MLD Snooping group tables.</t> <t>The YANG module doesn't cover L2VPN, which will be specified in a sep
arate document.
</section> </t>
</section>
<section title="Optional Capabilities" anchor="sect-2.2"><t> <section anchor="sect-2.2" numbered="true" toc="default">
<name>Optional Capabilities</name>
<t>
This model is designed to represent the basic capability subsets of IGMP This model is designed to represent the basic capability subsets of IGMP
and MLD Snooping. The main design goals of this document are that the basic 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 capabilities described in the model are supported by any major now-existing
implementation, and that the configuration of all implementations meeting implementation and that the configuration of all implementations meeting
the specifications is easy to express through some combination of the the specifications is easy to express through some combination of the
optional features in the model and simple vendor augmentations.</t> optional features in the model and simple vendor augmentations.</t>
<t>
<t> There is also value in widely supported features being standardized to
There is also value in widely supported features being standardized, to
provide a standardized way to access these features, to save work for provide a standardized way to access these features, to save work for
individual vendors, and so that mapping between different vendors' individual vendors, and to ensure that mapping between different vendors'
configuration is not needlessly complicated. Therefore, this model declares configuration is not needlessly complicated. Therefore, this model declares
a number of features representing capabilities that not all deployed a number of features representing capabilities that not all deployed
devices support.</t> devices support.</t>
<t>
<t>
The extensive use of feature declarations should also substantially The extensive use of feature declarations should also substantially
simplify the capability negotiation process for a vendor's IGMP and MLD simplify the capability negotiation process for a vendor's IGMP and MLD
Snooping implementations.</t> snooping implementations.</t>
<t>
<t>
On the other hand, operational state parameters are not so widely On the other hand, operational state parameters are not so widely
designated as features, as there are many cases where the defaulting of an 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 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 is much more likely that an implementation without intrinsic support for a
piece of operational state would be able to derive a suitable value for a piece of operational state would be able to derive a suitable value for a
state variable that is not natively supported.</t> state variable that is not intrinsically supported.</t>
</section>
</section> <section anchor="sect-2.3" numbered="true" toc="default">
<name>Position of Address Family in Hierarchy</name>
<section title="Position of Address Family in Hierarchy" anchor="sect-2.3 <t>
"><t> IGMP snooping only supports IPv4, while MLD snooping only supports IPv6.
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 The data model defined in this document can be used for both IPv4 and IPv6
address families.</t> address families.</t>
<t>
<t> This document defines IGMP snooping and MLD snooping as separate schema
This document defines IGMP Snooping and MLD Snooping as separate schema
branches in the structure. The benefits are: branches in the structure. The benefits are:
<list style="symbols"> </t>
<ul spacing="normal">
<t>The model can support IGMP Snooping (IPv4), MLD Snooping (IPv6), or <li>The model can support IGMP snooping (IPv4), MLD snooping (IPv6), o
both optionally and independently. Such flexibility cannot be achieved r
cleanly with a combined branch.</t> both optionally and independently. Such flexibility cannot be achieved
cleanly with a combined branch.</li>
<t>The structure is consistent with other YANG data models such as <li>The structure is consistent with other YANG data models such as
<xref target="RFC8652"/>, which uses separate branches for IPv4 and <xref target="RFC8652" format="default"/>, which uses separate branches
IPv6.</t> for IPv4 and
IPv6.</li>
<t>Having separate branches for IGMP Snooping and MLD Snooping allows <li>Having separate branches for IGMP snooping and MLD snooping allows
minor differences in their behavior to be modelled more simply and minor differences in their behavior to be modeled more simply and
cleanly. The two branches can better support different features and cleanly. The two branches can better support different features and
node types.</t> node types.</li>
</ul>
</list> </section>
</t> </section>
<section anchor="sect-3" numbered="true" toc="default">
</section> <name>Module Structure</name>
<t>This model augments the core routing data model specified in <xref targ
</section> et="RFC8349" format="default"/>.</t>
<sourcecode type="yangtree"><![CDATA[
<section title="Module Structure" anchor="sect-3">
<t>This model augments the core routing data model specified in <xref tar
get="RFC8349"/>.</t>
<figure><artwork><![CDATA[
+--rw routing +--rw routing
+--rw router-id? +--rw router-id?
+--rw control-plane-protocols +--rw control-plane-protocols
| +--rw control-plane-protocol* [type name] | +--rw control-plane-protocol* [type name]
| +--rw type | +--rw type
| +--rw name | +--rw name
| +--rw igmp-snooping-instance <= Augmented by this Model | +--rw igmp-snooping-instance <= Augmented by this Model
... ...
| +--rw mld-snooping-instance <= Augmented by this Model | +--rw mld-snooping-instance <= Augmented by this Model
... ...
]]></artwork> ]]></sourcecode>
</figure> <t>
<t> The "igmp-snooping-instance" container instantiates an IGMP snooping
The "igmp-snooping-instance" container instantiates an IGMP Snooping instance. The "mld-snooping-instance" container instantiates an MLD
Instance. The "mld-snooping-instance" container instantiates an MLD snooping instance.</t>
Snooping Instance.</t> <t>
The YANG data model defined in this document conforms to the NMDA <xref targe
<t> t="RFC8342" format="default"/>. The operational state
The YANG data model defined in this document conforms to the Network
Management Datastore Architecture (NMDA) <xref target="RFC8342"/>. The operat
ional state
data is combined with the associated configuration data in the same data is combined with the associated configuration data in the same
hierarchy <xref target="RFC8407"/>.</t> hierarchy <xref target="RFC8407" format="default"/>.</t>
<section anchor="sect-3.1" numbered="true" toc="default">
<section title="IGMP Snooping Instances" anchor="sect-3.1"><t> <name>IGMP Snooping Instances</name>
<t>
The YANG module ietf-igmp-mld-snooping augments The YANG module ietf-igmp-mld-snooping augments
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol to add the /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol to add the
igmp-snooping-instance container.</t> igmp-snooping-instance container.</t>
<t>
<t> All the IGMP snooping-related attributes have been defined in the
All the IGMP Snooping related attributes have been defined in the
igmp-snooping-instance. The read-write attributes represent configurable igmp-snooping-instance. The read-write attributes represent configurable
data. The read-only attributes represent state data.</t> data. The read-only attributes represent state data.</t>
<t>
<t> One igmp-snooping-instance could be used in one bridge <xref target="dot1
One igmp-snooping-instance could be used in one BRIDGE <xref target="dot1Qcp" Qcp" format="default"/> instance, and it corresponds to one bridge instance.</t>
/> instance <t>
or L2VPN <xref target="I-D.ietf-bess-l2vpn-yang"/> instance. One igmp-snoopin Currently, the value of l2-service-type in igmp-snooping-instance could only
g-instance be set to 'bridge'. After it is set, igmp-snooping-instance could be used in the
corresponds to one BRIDGE instance or one L2VPN instance.</t> bridge
<t>
The value of l2-service-type in igmp-snooping-instance is bridge or
l2vpn. When it is bridge, igmp-snooping-instance will be used in the BRIDGE
service. When it is l2vpn, igmp-snooping-instance will be used in the L2VPN
service.</t> service.</t>
<t>
<t> The values of bridge-mrouter-interface are filled by the snooping device
The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, dynamically. It is different from static-bridge-mrouter-interface,
l2vpn-mrouter-interface-pw are filled by the snooping device which is configured.</t>
dynamically. They are different from static-bridge-mrouter-interface, <t>
static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw The attributes under the interfaces show the statistics of IGMP snooping-rela
which are configured.</t> ted packets.</t>
<sourcecode type="yangtree"><![CDATA[
<t>
The attributes under the interfaces show the statistics of IGMP Snooping
related packets.</t>
<figure><artwork><![CDATA[
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol: /rt:control-plane-protocol:
+--rw igmp-snooping-instance {igmp-snooping}? +--rw igmp-snooping-instance {igmp-snooping}?
+--rw l2-service-type? l2-service-type +--rw l2-service-type? l2-service-type
+--rw enable? boolean +--rw enabled? boolean
+--rw forwarding-table-type? enumeration +--rw forwarding-table-type? enumeration
+--rw explicit-tracking? boolean +--rw explicit-tracking? boolean
| {explicit-tracking}? | {explicit-tracking}?
+--rw lite-exclude-filter? empty +--rw lite-exclude-filter? empty
| {lite-exclude-filter}? | {lite-exclude-filter}?
+--rw send-query? boolean +--rw send-query? boolean
+--rw immediate-leave? empty +--rw fast-leave? empty {fast-leave}?
| {immediate-leave}?
+--rw last-member-query-interval? uint16 +--rw last-member-query-interval? uint16
+--rw query-interval? uint16 +--rw query-interval? uint16
+--rw query-max-response-time? uint16 +--rw query-max-response-time? uint16
+--rw require-router-alert? boolean +--rw require-router-alert? boolean
| {require-router-alert}? | {require-router-alert}?
+--rw robustness-variable? uint8 +--rw robustness-variable? uint8
+--rw static-bridge-mrouter-interface* if:interface-ref +--rw static-bridge-mrouter-interface* if:interface-ref
| {static-mrouter-interface}? | {static-mrouter-interface}?
+--rw static-l2vpn-mrouter-interface-ac* if:interface-ref
| {static-mrouter-interface}?
+--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref
| {static-mrouter-interface}?
+--rw igmp-version? uint8 +--rw igmp-version? uint8
+--rw querier-source? inet:ipv4-address +--rw querier-source? inet:ipv4-address
+--rw static-l2-multicast-group* [group source-addr] +--rw static-l2-multicast-group* [group source-addr]
| {static-l2-multicast-group}? | {static-l2-multicast-group}?
| +--rw group | +--rw group
| | rt-types:ipv4-multicast-group-address | | rt-types:ipv4-multicast-group-address
| +--rw source-addr | +--rw source-addr
| | rt-types:ipv4-multicast-source-address | | rt-types:ipv4-multicast-source-address
| +--rw bridge-outgoing-interface* if:interface-ref | +--rw bridge-outgoing-interface* if:interface-ref
| +--rw l2vpn-outgoing-ac* if:interface-ref
| +--rw l2vpn-outgoing-pw* pw:pseudowire-ref
+--ro entries-count? yang:gauge32 +--ro entries-count? yang:gauge32
+--ro bridge-mrouter-interface* if:interface-ref +--ro bridge-mrouter-interface* if:interface-ref
+--ro l2vpn-mrouter-interface-ac* if:interface-ref
+--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref
+--ro group* [address] +--ro group* [address]
| +--ro address | +--ro address
| | rt-types:ipv4-multicast-group-address | | rt-types:ipv4-multicast-group-address
| +--ro mac-address? yang:phys-address | +--ro mac-address? yang:phys-address
| +--ro expire? rt-types:timer-value-seconds16 | +--ro expire? rt-types:timer-value-seconds16
| +--ro up-time uint32 | +--ro up-time uint32
| +--ro last-reporter? inet:ipv4-address | +--ro last-reporter? inet:ipv4-address
| +--ro source* [address] | +--ro source* [address]
| +--ro address | +--ro address
| | rt-types:ipv4-multicast-source-address | | rt-types:ipv4-multicast-source-address
| +--ro bridge-outgoing-interface* if:interface-ref | +--ro bridge-outgoing-interface* if:interface-ref
| +--ro l2vpn-outgoing-ac* if:interface-ref
| +--ro l2vpn-outgoing-pw* pw:pseudowire-ref
| +--ro up-time uint32 | +--ro up-time uint32
| +--ro expire? | +--ro expire?
| | rt-types:timer-value-seconds16 | | rt-types:timer-value-seconds16
| +--ro host-count? yang:gauge32 | +--ro host-count? yang:gauge32
| | {explicit-tracking}? | | {explicit-tracking}?
| +--ro last-reporter? inet:ipv4-address | +--ro last-reporter? inet:ipv4-address
| +--ro host* [host-address] {explicit-tracking}? | +--ro host* [address] {explicit-tracking}?
| +--ro host-address inet:ipv4-address | +--ro address inet:ipv4-address
| +--ro host-filter-mode filter-mode-type | +--ro filter-mode filter-mode-type
+--ro interfaces +--ro interfaces
+--ro interface* [name] +--ro interface* [name]
+--ro name if:interface-ref +--ro name if:interface-ref
+--ro statistics +--ro statistics
+--ro discontinuity-time? yang:date-and-time +--ro discontinuity-time? yang:date-and-time
+--ro received +--ro received
| +--ro query-count? yang:counter64 | +--ro query-count? yang:counter64
| +--ro membership-report-v1-count? yang:counter64 | +--ro membership-report-v1-count? yang:counter64
| +--ro membership-report-v2-count? yang:counter64 | +--ro membership-report-v2-count? yang:counter64
| +--ro membership-report-v3-count? yang:counter64 | +--ro membership-report-v3-count? yang:counter64
| +--ro leave-count? yang:counter64 | +--ro leave-count? yang:counter64
| +--ro pim-hello-count? yang:counter64 | +--ro pim-hello-count? yang:counter64
+--ro sent +--ro sent
+--ro query-count? yang:counter64 +--ro query-count? yang:counter64
+--ro membership-report-v1-count? yang:counter64 +--ro membership-report-v1-count? yang:counter64
+--ro membership-report-v2-count? yang:counter64 +--ro membership-report-v2-count? yang:counter64
+--ro membership-report-v3-count? yang:counter64 +--ro membership-report-v3-count? yang:counter64
+--ro leave-count? yang:counter64 +--ro leave-count? yang:counter64
+--ro pim-hello-count? yang:counter64 +--ro pim-hello-count? yang:counter64
]]></artwork> ]]></sourcecode>
</figure> </section>
</section> <section anchor="sect-3.2" numbered="true" toc="default">
<name>MLD Snooping Instances</name>
<section title="MLD Snooping Instances" anchor="sect-3.2"><t> <t>
The YANG module ietf-igmp-mld-snooping augments The YANG module ietf-igmp-mld-snooping augments
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol to add the /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol to add the
mld-snooping-instance container. The mld-snooping-instance could be used in mld-snooping-instance container. The mld-snooping-instance could be used in
the BRIDGE <xref target="dot1Qcp"/> or L2VPN <xref target="I-D.ietf-bess-l2vp the bridge <xref target="dot1Qcp" format="default"/> service to
n-yang"/> service to enable MLD snooping.</t>
enable MLD Snooping.</t> <t>
All the MLD snooping-related attributes have been defined in the
<t>
All the MLD Snooping related attributes have been defined in the
mld-snooping-instance. The read-write attributes represent configurable mld-snooping-instance. The read-write attributes represent configurable
data. The read-only attributes represent state data.</t> data. The read-only attributes represent state data.</t>
<t>
<t> The mld-snooping-instance has a similar structure to IGMP snooping. Some
The mld-snooping-instance has similar structure as IGMP snooping. Some of
leaves are protocol related. The mld-snooping-instance uses IPv6 addresses leaves are protocol related. The mld-snooping-instance uses IPv6 addresses
and mld-version, while igmp-snooping-instance uses IPv4 addresses and and mld-version, while igmp-snooping-instance uses IPv4 addresses and
igmp-version. Statistic counters in each of the above snooping instances igmp-version. Statistic counters in each of the above snooping instances
are also tailored to the specific protocol type. One mld-snooping-instance are also tailored to the specific protocol type. One mld-snooping-instance
could be used in one BRIDGE instance or L2VPN instance. One could be used in one bridge instance and corresponds to one bridge instance.<
mld-snooping-instance corresponds to one BRIDGE instance or L2VPN instance.</ /t>
t>
<t> <t>
The value of l2-service-type in mld-snooping-instance is bridge or Currently, the value of l2-service-type in mld-snooping-instance could only b
l2vpn. When it is bridge, mld-snooping-instance will be used in the BRIDGE e set to 'bridge'. After it is set, mld-snooping-instance could be used in the b
service. When it is l2vpn, mld-snooping-instance will be used in the L2VPN ridge
service.</t> service.</t>
<t>
<t> The value of bridge-mrouter-interface is filled by the snooping device
The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, dynamically. It is different from static-bridge-mrouter-interface,
l2vpn-mrouter-interface-pw are filled by the snooping device which is configured.</t>
dynamically. They are different from static-bridge-mrouter-interface, <t>
static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw The attributes under the interfaces show the statistics of MLD snooping-relat
which are configured.</t> ed packets.</t>
<sourcecode type="yangtree"><![CDATA[
<t>
The attributes under the interfaces show the statistics of MLD Snooping
related packets.</t>
<figure><artwork><![CDATA[
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol: /rt:control-plane-protocol:
+--rw mld-snooping-instance {mld-snooping}? +--rw mld-snooping-instance {mld-snooping}?
+--rw l2-service-type? l2-service-type +--rw l2-service-type? l2-service-type
+--rw enable? boolean +--rw enabled? boolean
+--rw forwarding-table-type? enumeration +--rw forwarding-table-type? enumeration
+--rw explicit-tracking? boolean +--rw explicit-tracking? boolean
| {explicit-tracking}? | {explicit-tracking}?
+--rw lite-exclude-filter? empty +--rw lite-exclude-filter? empty
| {lite-exclude-filter}? | {lite-exclude-filter}?
+--rw send-query? boolean +--rw send-query? boolean
+--rw immediate-leave? empty +--rw fast-leave? empty {fast-leave}?
| {immediate-leave}? +--rw last-member-query-interval? uint16
+--rw last-member-query-interval? uint16 +--rw query-interval? uint16
+--rw query-interval? uint16 +--rw query-max-response-time? uint16
+--rw query-max-response-time? uint16 +--rw require-router-alert? boolean
+--rw require-router-alert? boolean | {require-router-alert}?
| {require-router-alert}? +--rw robustness-variable? uint8
+--rw robustness-variable? uint8 +--rw static-bridge-mrouter-interface* if:interface-ref
+--rw static-bridge-mrouter-interface* if:interface-ref | {static-mrouter-interface}?
| {static-mrouter-interface}? +--rw mld-version? uint8
+--rw static-l2vpn-mrouter-interface-ac* if:interface-ref +--rw querier-source? inet:ipv6-address
| {static-mrouter-interface}? +--rw static-l2-multicast-group* [group source-addr]
+--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref | {static-l2-multicast-group}?
| {static-mrouter-interface}? | +--rw group
+--rw mld-version? uint8 | | rt-types:ipv6-multicast-group-address
+--rw querier-source? inet:ipv6-address | +--rw source-addr
+--rw static-l2-multicast-group* [group source-addr] | | rt-types:ipv6-multicast-source-address
| {static-l2-multicast-group}? | +--rw bridge-outgoing-interface* if:interface-ref
| +--rw group +--ro entries-count? yang:gauge32
| | rt-types:ipv6-multicast-group-address +--ro bridge-mrouter-interface* if:interface-ref
| +--rw source-addr +--ro group* [address]
| | rt-types:ipv6-multicast-source-address | +--ro address
| +--rw bridge-outgoing-interface* if:interface-ref | | rt-types:ipv6-multicast-group-address
| +--rw l2vpn-outgoing-ac* if:interface-ref | +--ro mac-address? yang:phys-address
| +--rw l2vpn-outgoing-pw* pw:pseudowire-ref | +--ro expire? rt-types:timer-value-seconds16
+--ro entries-count? yang:gauge32 | +--ro up-time uint32
+--ro bridge-mrouter-interface* if:interface-ref | +--ro last-reporter? inet:ipv6-address
+--ro l2vpn-mrouter-interface-ac* if:interface-ref | +--ro source* [address]
+--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref | +--ro address
+--ro group* [address] | | rt-types:ipv6-multicast-source-address
| +--ro address | +--ro bridge-outgoing-interface* if:interface-ref
| | rt-types:ipv6-multicast-group-address | +--ro up-time uint32
| +--ro mac-address? yang:phys-address | +--ro expire?
| +--ro expire? rt-types:timer-value-seconds16 | | rt-types:timer-value-seconds16
| +--ro up-time uint32 | +--ro host-count? yang:gauge32
| +--ro last-reporter? inet:ipv6-address | | {explicit-tracking}?
| +--ro source* [address] | +--ro last-reporter? inet:ipv6-address
| +--ro address | +--ro host* [address] {explicit-tracking}?
| | rt-types:ipv6-multicast-source-address | +--ro address inet:ipv6-address
| +--ro bridge-outgoing-interface* if:interface-ref | +--ro filter-mode filter-mode-type
| +--ro l2vpn-outgoing-ac* if:interface-ref +--ro interfaces
| +--ro l2vpn-outgoing-pw* pw:pseudowire-ref +--ro interface* [name]
| +--ro up-time uint32 +--ro name if:interface-ref
| +--ro expire? +--ro statistics
| | rt-types:timer-value-seconds16 +--ro discontinuity-time? yang:date-and-time
| +--ro host-count? yang:gauge32 +--ro received
| | {explicit-tracking}? | +--ro query-count? yang:counter64
| +--ro last-reporter? inet:ipv6-address | +--ro report-v1-count? yang:counter64
| +--ro host* [host-address] {explicit-tracking}? | +--ro report-v2-count? yang:counter64
| +--ro host-address inet:ipv6-address | +--ro done-count? yang:counter64
| +--ro host-filter-mode filter-mode-type | +--ro pim-hello-count? yang:counter64
+--ro interfaces +--ro sent
+--ro interface* [name] +--ro query-count? yang:counter64
+--ro name if:interface-ref +--ro report-v1-count? yang:counter64
+--ro statistics +--ro report-v2-count? yang:counter64
+--ro discontinuity-time? yang:date-and-time +--ro done-count? yang:counter64
+--ro received +--ro pim-hello-count? yang:counter64
| +--ro query-count? yang:counter64 ]]></sourcecode>
| +--ro report-v1-count? yang:counter64 </section>
| +--ro report-v2-count? yang:counter64 <section anchor="sect-3.3" numbered="true" toc="default">
| +--ro done-count? yang:counter64 <name>Using IGMP and MLD Snooping Instances</name>
| +--ro pim-hello-count? yang:counter64 <t>
+--ro sent The igmp-snooping-instance could be used in the service of bridge <xref t
+--ro query-count? yang:counter64 arget="dot1Qcp" format="default"/> to configure the IGMP snooping.</t>
+--ro report-v1-count? yang:counter64 <t>
+--ro report-v2-count? yang:counter64 For the bridge service, this model augments /dot1q:bridges/dot1q:bridge to
+--ro done-count? yang:counter64 use igmp-snooping-instance. It means IGMP snooping is enabled in the bridge.<
+--ro pim-hello-count? yang:counter64 /t>
]]></artwork> <t>
</figure> It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/dot1q:bridge-vla
</section> n/dot1q:vlan to use igmp-snooping-instance. It means IGMP
snooping is enabled in the specified VLAN on the bridge.</t>
<section title="Using IGMP and MLD Snooping Instances" anchor="sect-3.3">
<t>
The igmp-snooping-instance could be used in the service of BRIDGE <xref targe
t="dot1Qcp"/>
or L2VPN <xref target="I-D.ietf-bess-l2vpn-yang"/> to configure the IGMP Snoo
ping.</t>
<t>
For the BRIDGE service this model augments /dot1q:bridges/dot1q:bridge to
use igmp-snooping-instance. It means IGMP Snooping is enabled in the whole
bridge.</t>
<t>
It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/
dot1q:bridge-vlan/dot1q:vlan to use igmp-snooping-instance. It means IGMP
Snooping is enabled in the specified VLAN on the bridge.</t>
<figure><artwork><![CDATA[
augment /dot1q:bridges/dot1q:bridge:
+--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref
+--rw mld-snooping-instance? igmp-mld-snooping-instance-ref
augment /dot1q:bridges/dot1q:bridge/dot1q:component
/dot1q:bridge-vlan/dot1q:vlan:
+--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref
+--rw mld-snooping-instance? igmp-mld-snooping-instance-ref
]]></artwork></figure>
<t>
For the L2VPN service this model augments /ni:network-instances/
ni:network-instance/ni:ni-type/l2vpn:l2vpn <xref target="RFC8529"/> to use
igmp-snooping-instance. It means IGMP Snooping is enabled in the specified
l2vpn instance.</t>
<figure><artwork><![CDATA[
augment /ni:network-instances/ni:network-instance/ni:ni-type
/l2vpn:l2vpn:
+--rw igmp-snooping-instance?"> igmp-mld-snooping-instance-ref
+--rw mld-snooping-instance? igmp-mld-snooping-instance-ref
]]></artwork></figure>
<t> <t>The mld-snooping-instance could be used in concurrence with igmp-snooping-
The mld-snooping-instance could be used in concurrence with instance to configure the MLD snooping.
igmp-snooping-instance to configure the MLD Snooping.</t> </t>
</section> <sourcecode name="" type="yangtree"><![CDATA[
augment /dot1q:bridges/dot1q:bridge:
+--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref
+--rw mld-snooping-instance? igmp-mld-snooping-instance-ref
<section title="IGMP and MLD Snooping Actions" anchor="sect-3.4"><t> augment /dot1q:bridges/dot1q:bridge/dot1q:component
IGMP and MLD Snooping actions clear the specified IGMP and MLD Snooping /dot1q:bridge-vlan/dot1q:vlan:
+--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref
+--rw mld-snooping-instance? igmp-mld-snooping-instance-ref
]]></sourcecode>
</section>
<section anchor="sect-3.4" numbered="true" toc="default">
<name>IGMP and MLD Snooping Actions</name>
<t>
IGMP and MLD snooping actions clear the specified IGMP and MLD snooping
group tables. If both source X and group Y are specified, only source X group tables. If both source X and group Y are specified, only source X
from group Y in that specific instance will be cleared.</t> from group Y in that specific instance will be cleared.</t>
<sourcecode name="" type="yangtree"><![CDATA[
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 group union
+---w source rt-types:ipv4-multicast-source-address
<figure><artwork><![CDATA[ augment /rt:routing/rt:control-plane-protocols
augment /rt:routing/rt:control-plane-protocols /rt:control-plane-protocol:
/rt:control-plane-protocol: +--rw mld-snooping-instance {mld-snooping}?
+--rw igmp-snooping-instance {igmp-snooping}? +---x clear-mld-snooping-groups {action-clear-groups}?
+---x clear-igmp-snooping-groups {action-clear-groups}? +---w input
+---w input +---w group union
+---w group union +---w source rt-types:ipv6-multicast-source-address
+---w source rt-types:ipv4-multicast-source-address ]]></sourcecode>
</section>
augment /rt:routing/rt:control-plane-protocols </section>
/rt:control-plane-protocol: <section anchor="sect-4" numbered="true" toc="default">
+--rw mld-snooping-instance {mld-snooping}? <name>IGMP and MLD Snooping YANG Module</name>
+---x clear-mld-snooping-groups {action-clear-groups}? <t>
+---w input
+---w group union
+---w source rt-types:ipv6-multicast-source-address
]]></artwork></figure>
</section>
</section>
<section title="IGMP and MLD Snooping YANG Module" anchor="sect-4"> This module references <xref target="RFC1112"/>, <xref target="RFC2236"/>, <x
<t> ref target="RFC2710"/>, <xref target="RFC3376"/>,
This module references [RFC1112],[RFC2236],[RFC2710],[RFC3376], <xref target="RFC3810"/>, <xref target="RFC4541"/>, <xref target="RFC5790"
[RFC3810],[RFC4541],<xref target="RFC5790"/>,<xref target="RFC6636"/>,<xref format="default"/>, <xref target="RFC6636" format="default"/>, <xref target="RF
target="RFC6991"/>,<xref target="RFC7761"/>, <xref C6991" format="default"/>, <xref target="RFC7761" format="default"/>, <xref targ
target="RFC8343"/>,[RFC8529],[dot1Qcp], and et="RFC8343" format="default"/>, and <xref target="dot1Qcp"/>.</t>
[draft-ietf-bess-l2vpn-yang].</t>
<figure><artwork><![CDATA[ <sourcecode name="ietf-igmp-mld-snooping@2021-12-20.yang" type="yang" markers="t
<CODE BEGINS> file ietf-igmp-mld-snooping@2020-08-07.yang rue"><![CDATA[
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";
prefix ims; prefix ims;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix rt;
reference reference
"RFC 8349: A YANG Data Model for Routing Management (NMDA "RFC 8349: A YANG Data Model for Routing Management (NMDA
Version)"; Version)";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix rt-types;
reference reference
"RFC 8294: Common YANG Data Types for the Routing Area"; "RFC 8294: Common YANG Data Types for the Routing Area";
} }
import ietf-l2vpn {
prefix "l2vpn";
reference
"draft-ietf-bess-l2vpn-yang: YANG Data Model for MPLS-based
L2VPN";
}
import ietf-network-instance {
prefix "ni";
reference
"RFC 8529: YANG Data Model for Network Instances";
}
import ietf-pseudowires {
prefix "pw";
reference
"draft-ietf-bess-l2vpn-yang: YANG Data Model for MPLS-based
L2VPN";
}
import ieee802-dot1q-bridge { import ieee802-dot1q-bridge {
prefix "dot1q"; prefix dot1q;
reference reference
"dot1Qcp: IEEE 802.1Qcp-2018 Bridges and Bridged Networks "dot1Qcp: IEEE 802.1Qcp-2018 Standard for Local and
- Amendment: YANG Data Model"; Metropolitan area networks--Bridges and Bridged Networks
--Amendment 30: 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://datatracker.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@chinamobile.com> <mailto:liuyisong@chinamobile.com>
skipping to change at line 775 skipping to change at line 630
Yisong Liu Yisong Liu
<mailto:liuyisong@chinamobile.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 devices that implement Internet Group Management Protocol all devices that implement Internet Group Management Protocol
(IGMP) and Multicast Listener Discovery (MLD) Snooping which is (IGMP) and Multicast Listener Discovery (MLD) snooping, which is
described in RFC 4541. described in RFC 4541.
Copyright (c) 2020 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 9166; see the
RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2020-08-07 { revision 2021-12-20 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; "RFC 9166: A YANG Data Model for Internet Group Management
Protocol (IGMP) and Multicast Listener Discovery (MLD)
Snooping";
} }
/* /*
* Features * Features
*/ */
feature igmp-snooping { feature igmp-snooping {
description description
"Support IGMP snooping."; "Support IGMP snooping.";
reference reference
"RFC 4541"; "RFC 4541: Considerations for Internet Group Management
Protocol (IGMP) and Multicast Listener Discovery (MLD)
Snooping Switches";
} }
feature mld-snooping { feature mld-snooping {
description description
"Support MLD snooping."; "Support MLD snooping.";
reference reference
"RFC 4541"; "RFC 4541: Considerations for Internet Group Management
Protocol (IGMP) and Multicast Listener Discovery (MLD)
Snooping Switches";
} }
feature immediate-leave { feature fast-leave {
description description
"Support configuration of fast leave. The fast leave feature "Support configuration of fast leave. The fast leave feature
does not send last member query messages to hosts."; does not send last member query messages to hosts.";
reference reference
"RFC 3376"; "RFC 3376: Internet Group Management Protocol, Version 3";
} }
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 multicast router interface explicitly configured "Support multicast router interface explicitly configured
by management"; by management.";
reference reference
"RFC 4541"; "RFC 4541: Considerations for Internet Group Management
Protocol (IGMP) and Multicast Listener Discovery (MLD)
Snooping Switches";
} }
feature action-clear-groups { feature action-clear-groups {
description description
"Support clearing statistics by action for IGMP & MLD snooping."; "Support clearing statistics by action for IGMP and MLD
snooping.";
} }
feature require-router-alert { feature require-router-alert {
description description
"Support configuration of require-router-alert."; "Support configuration of require-router-alert.";
reference reference
"RFC 3376"; "RFC 3376: Internet Group Management Protocol, Version 3";
} }
feature lite-exclude-filter { feature lite-exclude-filter {
description description
"Enable the support of the simplified EXCLUDE filter."; "Enable the support of the simplified EXCLUDE filter.";
reference reference
"RFC 5790"; "RFC 5790: Lightweight Internet Group Management Protocol
Version 3 (IGMPv3) and Multicast Listener Discovery Version
2 (MLDv2) Protocols";
} }
feature explicit-tracking { feature explicit-tracking {
description description
"Support configuration of per instance explicit-tracking."; "Support configuration of per-instance explicit-tracking.";
reference reference
"RFC 6636"; "RFC 6636: Tuning the Behavior of the Internet Group Management
Protocol (IGMP) and Multicast Listener Discovery (MLD) for
Routers in Mobile and Wireless Networks";
} }
/* identities */ /* identities */
identity l2-service-type { identity l2-service-type {
description description
"Base identity for L2 service type in IGMP & MLD snooping"; "Base identity for L2 service type in IGMP and MLD snooping.";
} }
identity bridge { identity bridge {
base l2-service-type; base l2-service-type;
description description
"This identity represents BRIDGE service."; "This identity represents bridge service.";
}
identity l2vpn {
base l2-service-type;
description
"This identity represents L2VPN service.";
} }
identity filter-mode { identity filter-mode {
description description
"Base identity for filter mode in IGMP & MLD snooping"; "Base identity for filter mode in IGMP and MLD snooping.";
} }
identity include { identity include {
base filter-mode; base filter-mode;
description description
"This identity represents include mode."; "This identity represents include mode.";
} }
identity exclude { identity exclude {
base filter-mode; base filter-mode;
description description
"This identity represents exclude mode."; "This identity represents exclude mode.";
} }
identity igmp-snooping { identity igmp-snooping {
base rt:control-plane-protocol; base rt:control-plane-protocol;
description description
"IGMP snooping"; "IGMP snooping.";
} }
identity mld-snooping { identity mld-snooping {
base rt:control-plane-protocol; base rt:control-plane-protocol;
description description
"MLD snooping"; "MLD snooping.";
} }
/* /*
* Typedefs * Typedefs
*/ */
typedef l2-service-type { typedef l2-service-type {
type identityref { type identityref {
base "l2-service-type"; base l2-service-type;
} }
description "The L2 service type used with IGMP & MLD snooping "; description
"The L2 service type used with IGMP and MLD
snooping.";
} }
typedef filter-mode-type { typedef filter-mode-type {
type identityref { type identityref {
base "filter-mode"; base filter-mode;
} }
description "The host filter mode"; description
"The host filter mode.";
} }
typedef igmp-mld-snooping-instance-ref { typedef igmp-mld-snooping-instance-ref {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols"+ path "/rt:routing/rt:control-plane-protocols"
"/rt:control-plane-protocol/rt:name"; + "/rt:control-plane-protocol/rt:name";
} }
description description
"This type is used by data models which need to "This type is used by data models that need to
reference IGMP & MLD snooping instance."; reference IGMP or MLD snooping instance.";
} }
/* /*
* Groupings * Groupings
*/ */
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 enabled {
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 and MLD snooping.";
} }
leaf forwarding-table-type { 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 table type 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 description
"Track the IGMPv3 and MLDv2 snooping membership reports "Track the IGMPv3 and MLDv2 snooping membership reports
from individual hosts. It contributes to saving network from individual hosts. It contributes to saving network
resources and shortening leave latency."; resources and shortening leave latency.";
} }
leaf lite-exclude-filter { leaf lite-exclude-filter {
if-feature lite-exclude-filter; if-feature "lite-exclude-filter";
type empty; type empty;
description description
"For IGMP Snooping, the presence of this "For IGMP snooping, the presence of this
leaf enables the support of the simplified EXCLUDE filter leaf enables the support of the simplified EXCLUDE filter
in the Lightweight IGMPv3 protocol, which simplifies the in the Lightweight IGMPv3 protocol, which simplifies the
standard versions of IGMPv3. standard versions of IGMPv3.
For MLD Snooping, the presence of this For MLD Snooping, the presence of this
leaf enables the support of the simplified EXCLUDE filter leaf enables the support of the simplified EXCLUDE filter
in the Lightweight MLDv2 protocol, which simplifies the in the Lightweight MLDv2 protocol, which simplifies the
standard versions of MLDv2."; standard versions of MLDv2.";
reference reference
"RFC 5790"; "RFC 5790: Lightweight Internet Group Management Protocol
Version 3 (IGMPv3) and Multicast Listener Discovery Version
2 (MLDv2) Protocols";
} }
leaf send-query { leaf send-query {
type boolean; type boolean;
default false; default "false";
description description
"Enable quick response for topology changes. "When it is true, this switch will send out a periodic IGMP
To support IGMP snooping in a VLAN where PIM and IGMP are General Query Message or MLD General Query Message.";
not configured. It cooperates with parameter querier-source.";
} }
leaf fast-leave {
leaf immediate-leave { if-feature "fast-leave";
if-feature immediate-leave;
type empty; type empty;
description description
"When immediate leave is enabled, the IGMP software assumes "When fast leave is enabled, the 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 "10..10230"; range "10..10230";
} }
units deciseconds; units "deciseconds";
default 10; 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.
It is represented in units of 1/10 second."; It is represented in units of 1/10 second.";
reference "RFC 3376. Sec. 8.8."; reference
"RFC 3376: Internet Group Management Protocol, Version 3,
Section 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 "RFC 3376. Sec. 4.1.7, 8.2, 8.14.2."; reference
"RFC 3376: Internet Group Management Protocol, Version 3,
Sections 4.1.7, 8.2, and 8.14.2";
} }
leaf query-max-response-time { leaf query-max-response-time {
type uint16; type uint16;
units deciseconds; units "deciseconds";
default 100; 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.
It is represented in units of 1/10 second."; It is represented in units of 1/10 second.";
reference "RFC 3376. Sec. 4.1.1, 8.3, 8.14.3."; reference
"RFC 3376: Internet Group Management Protocol, Version 3,
Sections 4.1.1, 8.3, and 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, a router alert should exist
in the IP header of IGMP or MLD packet."; in the IP header of the IGMP or MLD packet. If it
doesn't exist, the IGMP or MLD packet will be ignored.";
reference
"RFC 3376: Internet Group Management Protocol, Version 3,
Sections 9.1, 9.2, and 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 "RFC 3376. Sec. 4.1.6, 8.1, 8.14.1."; reference
"RFC 3376: Internet Group Management Protocol, Version 3,
Sections 4.1.6, 8.1, and 8.14.1";
} }
leaf-list static-bridge-mrouter-interface { leaf-list static-bridge-mrouter-interface {
when 'derived-from-or-self(../l2-service-type,"ims: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;
description "static mrouter interface in BRIDGE forwarding";
}
leaf-list static-l2vpn-mrouter-interface-ac {
when 'derived-from-or-self(../l2-service-type,"ims:l2vpn")';
if-feature static-mrouter-interface;
type if:interface-ref; type if:interface-ref;
description description
"static mrouter interface whose type is interface "Static mrouter interface in bridge forwarding";
in L2VPN forwarding";
}
leaf-list static-l2vpn-mrouter-interface-pw {
when 'derived-from-or-self(../l2-service-type,"ims:l2vpn")';
if-feature static-mrouter-interface;
type pw:pseudowire-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-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 rt-types:timer-value-seconds16; 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; mandatory true;
description description
"The time elapsed since L2 multicast record created."; "The time elapsed since the L2 multicast record was
created.";
} }
} // instance-state-group-attributes-igmp-mld-snooping } // instance-state-group-attributes-igmp-mld-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 or MLD snooping instance.";
leaf entries-count { leaf entries-count {
type yang:gauge32; 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 and MLD
snooping.";
} }
leaf-list bridge-mrouter-interface { leaf-list bridge-mrouter-interface {
when 'derived-from-or-self(../l2-service-type,"ims:bridge")'; when 'derived-from-or-self(../l2-service-type,"ims:bridge")';
type if:interface-ref; type if:interface-ref;
config false; config false;
description description
"Indicates a list of mrouter interfaces dynamicly learned in a "Indicates a list of mrouter interfaces dynamically learned
bridge. When this switch receives IGMP/MLD queries from a in a bridge. When this switch receives IGMP/MLD queries
multicast router on an interface, the interface will become from a multicast router on an interface, the interface will
mrouter interface for IGMP/MLD snooping."; become an mrouter interface for IGMP/MLD snooping.";
}
leaf-list l2vpn-mrouter-interface-ac {
when 'derived-from-or-self(../l2-service-type,"ims:l2vpn")';
type if:interface-ref;
config false;
description
"The mrouter interface whose type is interface in L2VPN
forwarding. When switch receives IGMP/MLD queries from
multicast router on an interface, this interface will
become mrouter interface for IGMP/MLD snooping.";
}
leaf-list l2vpn-mrouter-interface-pw {
when 'derived-from-or-self(../l2-service-type,"ims:l2vpn")';
type pw:pseudowire-ref;
config false;
description
"The mrouter interface whose type is PW in L2VPN forwarding.
When switch receives IGMP/MLD queries from multicast router
on a PW, this PW will become mrouter interface for IGMP/MLD
snooping.";
} }
} // instance-config-attributes-igmp-mld-snooping } // instance-config-attributes-igmp-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 or MLD snooping instance.";
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when 'derived-from-or-self(../../../l2-service- when 'derived-from-or-self(../../../l2-service-type,
type,"ims:bridge")'; "ims:bridge")';
type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding";
}
leaf-list l2vpn-outgoing-ac {
when 'derived-from-or-self(../../../l2-service-type,"ims:l2vpn")';
type if:interface-ref; type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN"; description
} "Outgoing interface in bridge forwarding.";
leaf-list l2vpn-outgoing-pw {
when 'derived-from-or-self(../../../l2-service-type,"ims:l2vpn")';
type pw:pseudowire-ref;
description "Outgoing Pseudo Wire (PW) in L2VPN";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units "seconds";
mandatory true; mandatory true;
description description
"The time elapsed since L2 multicast record created"; "The time elapsed since L2 multicast record was created.";
} }
leaf expire { leaf expire {
type rt-types:timer-value-seconds16; 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 yang:gauge32; 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 { grouping igmp-snooping-statistics {
description description
"The statistics attributes for IGMP snooping."; "The statistics attributes for IGMP snooping.";
leaf query-count { leaf query-count {
type yang:counter64; type yang:counter64;
description description
"The number of Membership Query messages."; "The number of Membership Query messages.";
reference reference
"RFC 2236"; "RFC 2236: Internet Group Management Protocol, Version 2";
} }
leaf membership-report-v1-count { leaf membership-report-v1-count {
type yang:counter64; type yang:counter64;
description description
"The number of Version 1 Membership Report messages."; "The number of Version 1 Membership Report messages.";
reference reference
"RFC 1112"; "RFC 1112: Host extensions for IP multicasting";
} }
leaf membership-report-v2-count { leaf membership-report-v2-count {
type yang:counter64; type yang:counter64;
description description
"The number of Version 2 Membership Report messages."; "The number of Version 2 Membership Report messages.";
reference reference
"RFC 2236"; "RFC 2236: Internet Group Management Protocol, Version 2";
} }
leaf membership-report-v3-count { leaf membership-report-v3-count {
type yang:counter64; type yang:counter64;
description description
"The number of Version 3 Membership Report messages."; "The number of Version 3 Membership Report messages.";
reference reference
"RFC 3376"; "RFC 3376: Internet Group Management Protocol, Version 3";
} }
leaf leave-count { leaf leave-count {
type yang:counter64; type yang:counter64;
description description
"The number of Leave Group messages."; "The number of Leave Group messages.";
reference reference
"RFC 2236"; "RFC 2236: Internet Group Management Protocol, Version 2";
} }
leaf pim-hello-count { 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 reference
"RFC 7761"; "RFC 7761: Protocol Independent Multicast - Sparse Mode
} (PIM-SM): Protocol Specification (Revised)";
}
} // igmp-snooping-statistics } // igmp-snooping-statistics
grouping mld-snooping-statistics { grouping mld-snooping-statistics {
description description
"The statistics attributes for MLD snooping."; "The statistics attributes for MLD snooping.";
leaf query-count {
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
reference "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
"RFC 3810"; for IPv6";
} }
leaf report-v1-count { 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 reference
"RFC 2710"; "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
} }
leaf report-v2-count { 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 reference
"RFC 3810"; "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
} for IPv6";
leaf done-count { }
type yang:counter64; leaf done-count {
description type yang:counter64;
"The number of Version 1 Multicast Listener Done."; description
reference "The number of Version 1 Multicast Listener Done.";
"RFC 2710"; reference
} "RFC 2710: Multicast Listener Discovery (MLD) for IPv6";
leaf pim-hello-count { }
type yang:counter64; leaf pim-hello-count {
description type yang:counter64;
"The number of PIM hello messages."; description
reference "The number of PIM hello messages.";
"RFC 7761"; reference
} "RFC 7761: Protocol Independent Multicast - Sparse Mode
(PIM-SM): Protocol Specification (Revised)";
}
} // mld-snooping-statistics } // mld-snooping-statistics
augment "/rt:routing/rt:control-plane-protocols"+ augment "/rt:routing/rt:control-plane-protocols"
"/rt:control-plane-protocol" { + "/rt:control-plane-protocol" {
when 'derived-from-or-self(rt:type, "ims:igmp-snooping")' { when 'derived-from-or-self(rt:type, "ims:igmp-snooping")' {
description description
"This container is only valid for IGMP snooping."; "This container is only valid for IGMP snooping.";
} }
description description
"IGMP snooping augmentation to control plane protocol "IGMP snooping augmentation to control-plane protocol
configuration and state."; configuration and state.";
container igmp-snooping-instance { container igmp-snooping-instance {
if-feature igmp-snooping; if-feature "igmp-snooping";
description description
"IGMP snooping instance to configure igmp-snooping."; "IGMP snooping instance to configure igmp-snooping.";
leaf l2-service-type { leaf l2-service-type {
type l2-service-type; type l2-service-type;
default bridge; default "bridge";
description description
"The l2-service-type indicates BRIDGE or L2VPN."; "It indicates bridge or other services.";
} }
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
leaf igmp-version { leaf igmp-version {
type uint8 { type uint8 {
range "1..3"; range "1..3";
} }
default 2; default "2";
description "IGMP version."; description
"IGMP version.";
} }
leaf querier-source { leaf querier-source {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Use the IGMP snooping querier to support IGMP "The source address of the IGMP General Query message,
snooping in a VLAN where PIM and IGMP are not configured. which is sent out by this switch.";
The IPv4 address is used as source address in messages.";
} }
list static-l2-multicast-group { list static-l2-multicast-group {
if-feature static-l2-multicast-group; if-feature "static-l2-multicast-group";
key "group source-addr"; key "group source-addr";
description description
"A static multicast route, (*,G) or (S,G)."; "A static multicast route, (*,G) or (S,G).";
leaf group { leaf group {
type rt-types:ipv4-multicast-group-address; type rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPv4 address"; "Multicast group IPv4 address.";
} }
leaf source-addr { leaf source-addr {
type rt-types:ipv4-multicast-source-address; type rt-types:ipv4-multicast-source-address;
description description
"Multicast source IPv4 address."; "Multicast source IPv4 address.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when 'derived-from-or-self(../../l2-service- when 'derived-from-or-self(../../l2-service-type,
type,"ims:bridge")'; "ims:bridge")';
type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding";
}
leaf-list l2vpn-outgoing-ac {
when 'derived-from-or-self(../../l2-service-
type,"ims:l2vpn")';
type if:interface-ref; type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN"; description
} "Outgoing interface in bridge forwarding.";
leaf-list l2vpn-outgoing-pw {
when 'derived-from-or-self(../../l2-service-
type,"ims:l2vpn")';
type pw:pseudowire-ref;
description "Outgoing Pseudo Wire (PW) in L2VPN";
} }
} // static-l2-multicast-group } // static-l2-multicast-group
uses instance-state-attributes-igmp-mld-snooping; uses instance-state-attributes-igmp-mld-snooping;
list group { list group {
key "address"; key "address";
config false; config false;
description
description "IGMP snooping information"; "IGMP snooping information.";
leaf address { leaf address {
type rt-types:ipv4-multicast-group-address; type rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPv4 address"; "Multicast group IPv4 address.";
} }
uses instance-state-group-attributes-igmp-mld-snooping; uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report to join "Address of the last host that has sent a report to join
the multicast group."; the multicast group.";
} }
list source { list source {
key "address"; key "address";
description "Source IPv4 address for multicast stream"; description
"Source IPv4 address for multicast stream.";
leaf address { leaf address {
type rt-types:ipv4-multicast-source-address; type rt-types:ipv4-multicast-source-address;
description "Source IPv4 address for multicast stream"; description
"Source IPv4 address for multicast stream.";
} }
uses instance-state-source-attributes-igmp-mld-snooping; uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report "Address of the last host that has sent a report
to join the multicast group."; to join the multicast group.";
} }
list host { list host {
if-feature explicit-tracking; if-feature "explicit-tracking";
key "host-address"; key "address";
description description
"List of multicast membership hosts "List of multicast membership hosts
of the specific multicast source-group."; of the specific multicast source group.";
leaf address {
leaf host-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Multicast membership host address."; "Multicast membership host address.";
} }
leaf host-filter-mode { leaf filter-mode {
type filter-mode-type; type filter-mode-type;
mandatory true; mandatory true;
description description
"Filter mode for a multicast membership "Filter mode for a multicast membership
host may be either include or exclude."; host may be either include or exclude.";
} }
}// list host } // list host
} // list source } // list source
} // list group } // list group
container interfaces { container interfaces {
config false; config false;
description
description "Contains the interfaces associated with the IGMP snooping
"Contains the interfaces associated with the IGMP snooping instance.";
instance"; list interface {
key "name";
list interface { description
key "name"; "A list of interfaces associated with the IGMP snooping
instance.";
description leaf name {
"A list of interfaces associated with the IGMP snooping type if:interface-ref;
instance"; description
"The name of the interface.";
leaf name { }
type if:interface-ref; container statistics {
description description
"The name of interface"; "The interface statistics for IGMP snooping.";
leaf discontinuity-time {
} type yang:date-and-time;
description
container statistics { "The time on the most recent occasion at which any
description one or more of the statistic counters suffered a
"The interface statistics for IGMP snooping"; discontinuity. If no such discontinuities have
occurred since the last re-initialization of the
leaf discontinuity-time { local management subsystem, then this node contains
type yang:date-and-time; the time the local management subsystem
description re-initialized itself.";
"The time on the most recent occasion at which any one }
or more of the statistic counters suffered a container received {
discontinuity. If no such discontinuities have description
occurred since the last re-initialization of the local "Number of received snooped IGMP packets.";
management subsystem, then this node contains the time uses igmp-snooping-statistics;
the local management subsystem re-initialized }
itself."; container sent {
} description
container received { "Number of sent snooped IGMP packets.";
description uses igmp-snooping-statistics;
"Number of received snooped IGMP packets"; }
}
uses igmp-snooping-statistics; }
}
container sent {
description
"Number of sent snooped IGMP packets";
uses igmp-snooping-statistics;
}
}
}
} }
action clear-igmp-snooping-groups { action clear-igmp-snooping-groups {
if-feature action-clear-groups; if-feature "action-clear-groups";
description description
"Clear IGMP snooping cache tables."; "Clear IGMP snooping cache tables.";
input { input {
leaf group { leaf group {
type union { type union {
type enumeration { type enumeration {
enum 'all-groups' { enum all-groups {
description description
"All multicast group addresses."; "All multicast group addresses.";
} }
} }
type rt-types:ipv4-multicast-group-address; type rt-types:ipv4-multicast-group-address;
} }
mandatory true; mandatory true;
description description
"Multicast group IPv4 address. If value 'all-groups' is "Multicast group IPv4 address. If value
specified, all IGMP snooping group entries are cleared 'all-groups' is specified, all IGMP snooping
for specified source address."; group entries are cleared for the specified source
address.";
} }
leaf source { leaf source {
type rt-types:ipv4-multicast-source-address; type rt-types:ipv4-multicast-source-address;
mandatory true; mandatory true;
description description
"Multicast source IPv4 address. If value '*' is specified, "Multicast source IPv4 address. If value '*' is
all IGMP snooping source-group tables are cleared."; specified, all IGMP snooping source-group tables
are cleared.";
} }
} }
} // action clear-igmp-snooping-groups } // action clear-igmp-snooping-groups
} // igmp-snooping-instance } // igmp-snooping-instance
} // augment } // augment
augment "/rt:routing/rt:control-plane-protocols"+ augment "/rt:routing/rt:control-plane-protocols"
"/rt:control-plane-protocol" { + "/rt:control-plane-protocol" {
when 'derived-from-or-self(rt:type, "ims:mld-snooping")' { when 'derived-from-or-self(rt:type, "ims:mld-snooping")' {
description description
"This container is only valid for MLD snooping."; "This container is only valid for MLD snooping.";
} }
description description
"MLD snooping augmentation to control plane protocol "MLD snooping augmentation to control-plane protocol
configuration and state."; configuration and state.";
container mld-snooping-instance { container mld-snooping-instance {
if-feature mld-snooping; if-feature "mld-snooping";
description description
"MLD snooping instance to configure mld-snooping."; "MLD snooping instance to configure mld-snooping.";
leaf l2-service-type { leaf l2-service-type {
type l2-service-type; type l2-service-type;
default bridge; default "bridge";
description description
"The l2-service-type indicates BRIDGE or L2VPN."; "It indicates bridge or other services.";
} }
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
leaf mld-version { leaf mld-version {
type uint8 { type uint8 {
range "1..2"; range "1..2";
} }
default 2; default "2";
description "MLD version."; description
"MLD version.";
} }
leaf querier-source { leaf querier-source {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Use the MLD snooping querier to support MLD snooping where "The source address of MLD General Query message, which
PIM and MLD are not configured. The IPv6 address is used as is sent out by this switch.";
the source address in messages.";
} }
list static-l2-multicast-group { list static-l2-multicast-group {
if-feature static-l2-multicast-group; if-feature "static-l2-multicast-group";
key "group source-addr"; key "group source-addr";
description description
"A static multicast route, (*,G) or (S,G)."; "A static multicast route, (*,G) or (S,G).";
leaf group { leaf group {
type rt-types:ipv6-multicast-group-address; type rt-types:ipv6-multicast-group-address;
description description
"Multicast group IPv6 address"; "Multicast group IPv6 address.";
} }
leaf source-addr { leaf source-addr {
type rt-types:ipv6-multicast-source-address; type rt-types:ipv6-multicast-source-address;
description description
"Multicast source IPv6 address."; "Multicast source IPv6 address.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when 'derived-from-or-self(../../l2-service- when 'derived-from-or-self(../../l2-service-type,
type,"ims:bridge")'; "ims:bridge")';
type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding";
}
leaf-list l2vpn-outgoing-ac {
when 'derived-from-or-self(../../l2-service-
type,"ims:l2vpn")';
type if:interface-ref; type if:interface-ref;
description "Outgoing Attachment Circuit (AC) in L2VPN"; description
} "Outgoing interface in bridge forwarding.";
leaf-list l2vpn-outgoing-pw {
when 'derived-from-or-self(../../l2-service-
type,"ims:l2vpn")';
type pw:pseudowire-ref;
description "Outgoing Pseudo Wire (PW) in L2VPN";
} }
} // static-l2-multicast-group } // static-l2-multicast-group
uses instance-state-attributes-igmp-mld-snooping; uses instance-state-attributes-igmp-mld-snooping;
list group { list group {
key "address"; key "address";
config false; config false;
description "MLD snooping statistics information"; description
"MLD snooping statistics information.";
leaf address { leaf address {
type rt-types:ipv6-multicast-group-address; type rt-types:ipv6-multicast-group-address;
description description
"Multicast group IPv6 address"; "Multicast group IPv6 address.";
} }
uses instance-state-group-attributes-igmp-mld-snooping; uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Address of the last host which has sent report "Address of the last host that has sent report
to join the multicast group."; to join the multicast group.";
} }
list source { list source {
key "address"; key "address";
description "Source IPv6 address for multicast stream"; description
"Source IPv6 address for multicast stream.";
leaf address { leaf address {
type rt-types:ipv6-multicast-source-address; type rt-types:ipv6-multicast-source-address;
description "Source IPv6 address for multicast stream"; description
"Source IPv6 address for multicast stream.";
} }
uses instance-state-source-attributes-igmp-mld-snooping; uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Address of the last host which has sent report "Address of the last host that has sent report
to join the multicast group."; to join the multicast group.";
} }
list host { list host {
if-feature explicit-tracking; if-feature "explicit-tracking";
key "host-address"; key "address";
description description
"List of multicast membership hosts "List of multicast membership hosts
of the specific multicast source-group."; of the specific multicast source group.";
leaf address {
leaf host-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Multicast membership host address."; "Multicast membership host address.";
} }
leaf host-filter-mode { leaf filter-mode {
type filter-mode-type; type filter-mode-type;
mandatory true; mandatory true;
description description
"Filter mode for a multicast membership "Filter mode for a multicast membership
host may be either include or exclude."; host may be either include or exclude.";
} }
}// list host } // list host
} // list source } // list source
} // list group } // list group
container interfaces { container interfaces {
config false; config false;
description
description "Contains the interfaces associated with the MLD snooping
"Contains the interfaces associated with the MLD snooping instance.";
instance"; list interface {
list interface { key "name";
key "name"; description
"A list of interfaces associated with the MLD snooping
description instance.";
"A list of interfaces associated with the MLD snooping leaf name {
instance"; type if:interface-ref;
description
leaf name { "The name of the interface.";
type if:interface-ref; }
description container statistics {
"The name of interface"; description
"The interface statistics for MLD snooping.";
} leaf discontinuity-time {
type yang:date-and-time;
container statistics { description
description "The time on the most recent occasion at which
"The interface statistics for MLD snooping"; any one or more of the statistic counters suffered
a discontinuity. If no such discontinuities have
leaf discontinuity-time { occurred since the last re-initialization of the
type yang:date-and-time; local management subsystem, then this node contains
description the time the local management subsystem
"The time on the most recent occasion at which any one re-initialized itself.";
or more of the statistic counters suffered a }
discontinuity. If no such discontinuities have container received {
occurred since the last re-initialization of the local description
management subsystem, then this node contains the time "Number of received snooped MLD packets.";
the local management subsystem re-initialized uses mld-snooping-statistics;
itself."; }
} container sent {
container received { description
description "Number of sent snooped MLD packets.";
"Number of received snooped MLD packets"; uses mld-snooping-statistics;
}
uses mld-snooping-statistics; }
} }
container sent {
description
"Number of sent snooped MLD packets";
uses mld-snooping-statistics;
}
}
}
} }
action clear-mld-snooping-groups { action clear-mld-snooping-groups {
if-feature action-clear-groups; if-feature "action-clear-groups";
description description
"Clear MLD snooping cache tables."; "Clear MLD snooping cache tables.";
input { input {
leaf group { leaf group {
type union { type union {
type enumeration { type enumeration {
enum 'all-groups' { enum all-groups {
description description
"All multicast group addresses."; "All multicast group addresses.";
} }
} }
type rt-types:ipv6-multicast-group-address; type rt-types:ipv6-multicast-group-address;
} }
mandatory true; mandatory true;
description description
"Multicast group IPv6 address. If value 'all-groups' is "Multicast group IPv6 address. If value 'all-groups'
specified, all MLD snooping group entries are cleared is specified, all MLD snooping group entries are
for specified source address."; cleared for the specified source address.";
} }
leaf source { leaf source {
type rt-types:ipv6-multicast-source-address; type rt-types:ipv6-multicast-source-address;
mandatory true; mandatory true;
description description
"Multicast source IPv6 address. If value '*' is specified, "Multicast source IPv6 address. If value '*' is
all MLD snooping source-group tables are cleared."; specified, all MLD snooping source-group tables
are cleared.";
} }
} }
} // action clear-mld-snooping-groups } // action clear-mld-snooping-groups
}// mld-snooping-instance } // mld-snooping-instance
} // augment } // augment
augment "/dot1q:bridges/dot1q:bridge" { augment "/dot1q:bridges/dot1q:bridge" {
description description
"Use IGMP & MLD snooping instance in BRIDGE."; "Use IGMP or MLD snooping instance in bridge.";
leaf igmp-snooping-instance {
type igmp-mld-snooping-instance-ref;
description
"Configure IGMP snooping instance under bridge view";
}
leaf mld-snooping-instance {
type igmp-mld-snooping-instance-ref;
description
"Configure MLD snooping instance under bridge view";
}
}
augment "/dot1q:bridges/dot1q:bridge"+
"/dot1q:component/dot1q:bridge-vlan/dot1q:vlan" {
description
"Use IGMP & MLD snooping instance in certain VLAN of BRIDGE";
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
type igmp-mld-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure IGMP snooping instance under VLAN view"; "Configure IGMP snooping instance under bridge view.";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type igmp-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
"Use IGMP & MLD snooping instance in L2VPN."; "Use IGMP or MLD snooping instance in a certain VLAN
of bridge.";
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
type igmp-mld-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure IGMP snooping instance in L2VPN."; "Configure IGMP snooping instance under VLAN view.";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type igmp-mld-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure MLD snooping instance in L2VPN."; "Configure MLD snooping instance under VLAN view.";
} }
} }
} }
<CODE ENDS> ]]></sourcecode>
]]></artwork></figure> </section>
<section anchor="sect-5" numbered="true" toc="default">
</section> <name>Security Considerations</name>
<t>
<section title="Security Considerations" anchor="sect-5"><t>
The YANG module specified in this document defines a schema for data that The YANG module specified in this document defines a schema for data that
is designed to be accessed via network management protocols such as NETCONF is designed to be accessed via network management protocols such as NETCONF
<xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. The lowest NET CONF layer is the secure <xref target="RFC6241" format="default"/> or RESTCONF <xref target="RFC8040" format="default"/>. The lowest NETCONF layer is the secure
transport layer, and the mandatory-to-implement secure transport is Secure transport layer, and the mandatory-to-implement secure transport is Secure
Shell (SSH) <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and Shell (SSH) <xref target="RFC6242" format="default"/>. The lowest RESTCONF la
the yer is HTTPS, and the
mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>.</t> mandatory-to-implement secure transport is TLS <xref target="RFC8446" format=
"default"/>.</t>
<t> <t>
The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/ The Network Configuration Access Control Model (NACM) <xref target="RFC8341"
> provides format="default"/> provides
the means to restrict access for particular NETCONF or RESTCONF users to a the means to restrict access for particular NETCONF or RESTCONF users to a
preconfigured subset of all available NETCONF or RESTCONF protocol preconfigured subset of all available NETCONF or RESTCONF protocol
operations and content.</t> operations and content.</t>
<t>
<t>
There are a number of data nodes defined in this YANG module that are 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). writable/creatable/deletable (i.e., config true, which is the default).
These data nodes may be considered sensitive or vulnerable in some network These data nodes may be considered sensitive or vulnerable in some network
environments. Write operations (e.g., edit-config) to these data nodes environments. Write operations (e.g., edit-config) to these data nodes
without proper protection can have a negative effect on network without proper protection can have a negative effect on network
operations. These are the subtrees and data nodes and their operations.
sensitivity/vulnerability:</t>
<t>
Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/</t>
<t>ims:igmp-snooping-instance</t>
<t>ims:mld-snooping-instance</t>
<t>The subtrees under /dot1q:bridges/dot1q:bridge</t>
<t>ims:igmp-snooping-instance</t>
<t>ims:mld-snooping-instance</t>
<t>The subtrees under /dot1q:bridges/dot1q:bridge/dot1q:component These are the subtrees and data nodes and their
/dot1q:bridge-vlan/dot1q:vlan</t> sensitivity/vulnerability:</t>
<t>ims:igmp-snooping-instance</t> <t>
Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/</
t>
<ul empty="true">
<li>ims:igmp-snooping-instance</li>
<li>ims:mld-snooping-instance</li>
</ul>
<t>ims:mld-snooping-instance</t> <t>The subtrees under /dot1q:bridges/dot1q:bridge</t>
<ul empty="true">
<li>ims:igmp-snooping-instance</li>
<li>ims:mld-snooping-instance</li>
</ul>
<t> <t>The subtrees under /dot1q:bridges/dot1q:bridge/dot1q:component/dot1q:br
idge-vlan/dot1q:vlan</t>
<ul empty="true">
<li>ims:igmp-snooping-instance</li>
<li>ims:mld-snooping-instance</li>
</ul>
<t>
Unauthorized access to any data node of these subtrees can adversely affect Unauthorized access to any data node of these subtrees can adversely affect
the IGMP &amp; MLD Snooping subsystem of both the local device and the the IGMP and MLD snooping subsystem of both the local device and the
network. This may lead to network malfunctions, delivery of packets to network. This may lead to network malfunctions, delivery of packets to
inappropriate destinations, and other problems.</t> inappropriate destinations, and other problems.</t>
<t>
<t>
Some of the readable data nodes 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 important sensitive or vulnerable in some network environments. It is thus important
to control read access (e.g., via get, get-config, or notification) to 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 these data nodes. These are the subtrees and data nodes and their
sensitivity/vulnerability:</t> sensitivity/vulnerability:</t>
<t>
<t>
Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/</t> Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/</t>
<t> <ul empty="true">
ims:igmp-snooping-instance</t> <li> ims:igmp-snooping-instance</li>
<li>
<t> ims:mld-snooping-instance</li>
ims:mld-snooping-instance</t> </ul>
<t>
<t>
Unauthorized access to any data node of these subtrees can disclose the Unauthorized access to any data node of these subtrees can disclose the
operational state information of IGMP &amp; MLD Snooping on this device. The operational state information of IGMP and MLD snooping on this device. The
group/source/host information may expose multicast group memberships, and group/source/host information may expose multicast group memberships and,
transitively the associations between the user on the host and the contents transitively, the associations between the user on the host and the contents
from the source which could be privately sensitive. Some of the action from the source, which could be privately sensitive. Some of the action
operations in this YANG module may be considered sensitive or vulnerable in operations in this YANG module may be considered sensitive or vulnerable in
some network environments. It is thus important to control access to these some network environments. It is thus important to control access to these
operations. These are the operations and their sensitivity/vulnerability:</t> operations. These are the operations and their sensitivity/vulnerability:</t>
<t>
<t>
Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/</t> Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/</t>
<t> <ul empty="true">
ims:igmp-snooping-instance/ims:clear-igmp-snooping-groups</t> <li> ims:igmp-snooping-instance/ims:clear-igmp-snooping-groups</li>
<t> <li> ims:mld-snooping-instance/ims:clear-mld-snooping-groups</li>
ims:mld-snooping-instance/ims:clear-mld-snooping-groups</t> </ul>
<t> <t>
Some of the actions in this YANG module may be considered sensitive or Some of the actions in this YANG module may be considered sensitive or
vulnerable in some network environments. The IGMP &amp; MLD Snooping YANG vulnerable in some network environments. The IGMP and MLD snooping YANG
module supports the "clear-igmp-snooping-groups" and module supports the "clear-igmp-snooping-groups" and
"clear-mld-snooping-groups" actions. If unauthorized action is invoked, the "clear-mld-snooping-groups" actions. If unauthorized action is invoked, the
IGMP and MLD Snooping group tables will be cleared unexpectedly. Especially IGMP and MLD snooping group tables will be cleared unexpectedly. Especially
when using wildcard, all the multicast traffic will be flooded in the when using wildcard, all the multicast traffic will be flooded in the
broadcast domain. The devices that use this YANG module should heed the broadcast domain. The devices that use this YANG module should heed the
Security Considerations in <xref target="RFC4541"/>.</t> security considerations in <xref target="RFC4541" format="default"/>.</t>
</section>
</section> <section anchor="sect-6" numbered="true" toc="default">
<name>IANA Considerations</name>
<section title="IANA Considerations" anchor="sect-6"><t> <section anchor="sect-6.1" numbered="true" toc="default">
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the actual <name>XML Registry</name>
RFC number (and remove this note).</t> <t>
This document registers the following namespace URI in the "IETF XML
<section title="XML Registry" anchor="sect-6.1"><t> Registry" <xref target="RFC3688" format="default"/>:</t>
This document registers the following namespace URIs in the IETF XML</t> <dl spacing="compact">
<dt>URI:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping</dd>
<t> <dt>Registrant Contact:</dt><dd>The IETF.</dd>
registry <xref target="RFC3688"/>:</t> <dt>XML:</dt><dd>N/A; the requested URI is an XML namespace.</dd>
</dl>
<figure><artwork><![CDATA[ </section>
URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping <section anchor="sect-6.2" numbered="true" toc="default">
Registrant Contact: The IETF. <name>YANG Module Names Registry</name>
XML: N/A, the requested URI is an XML namespace. <t>
]]></artwork> This document registers the following YANG module in the "YANG Module Names"
</figure> registry <xref target="RFC7950"/>:</t>
</section> <dl spacing="compact" indent="14">
<dt>Name:</dt><dd> ietf-igmp-mld-snooping</dd>
<section title="YANG Module Names Registry" anchor="sect-6.2"> <dt>Namespace:</dt><dd> urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping</d
<t> d>
This document registers the following YANG modules in the YANG Module Names <dt>Prefix:</dt><dd> ims</dd>
registry [RFC7950]:</t> <dt>Reference:</dt><dd> RFC 9166</dd>
</dl>
<figure><artwork><![CDATA[ </section>
name: ietf-igmp-mld-snooping </section>
namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping </middle>
prefix: ims <back>
reference: RFC XXXX
]]></artwork>
</figure>
</section>
</section>
</middle>
<back>
<references title="Normative References">
<reference anchor="dot1Qcp" target="https://ieeexplore.ieee.org/servlet/o
pac?punumber=8467505"><front>
<title>Standard for Local and metropolitan area networks--Bridges and Bri
dged Networks--Amendment 30: YANG Data Model</title>
<author>
<organization>IEEE</organization>
</author>
<date month="September" year="2018"/>
</front>
<seriesInfo name="IEEE" value="Std 802.1Qcp-2018 (Revision of IEEE Std 80 <references>
2.1Q-2014)"/> <name>References</name>
</reference> <references>
&RFC1112; <name>Normative References</name>
&RFC2236;
&RFC2710;
&RFC3376;
&RFC3688;
&RFC3810;
&RFC4286;
&RFC4541;
&RFC5790;
&RFC6020;
&RFC6241;
&RFC6242;
&RFC6636;
&RFC6991;
&RFC7761;
&RFC7950;
&RFC8040;
&RFC8294;
&RFC8340;
&RFC8341;
&RFC8342;
&RFC8343;
&RFC8349;
&RFC8446;
&RFC8529;
&I-D.ietf-bess-l2vpn-yang;
</references>
<references title="Informative References">
&RFC3916;
&RFC7951;
&RFC8407;
&RFC8652;
</references>
<section title="Data Tree Example" anchor="sect-a"><section title="Bridge
service" anchor="sect-a.1"><t>
This section contains an example for bridge service in the JSON encoding
<xref target="RFC7951"/>, containing both configuration and state data.</t>
<figure><artwork><![CDATA[ <reference anchor="dot1Qcp" target="https://ieeexplore.ieee.org/servlet/
opac?punumber=8467505">
<front>
<title>Standard for Local and metropolitan area networks--Bridges an
d Bridged Networks--Amendment 30: YANG Data Model</title>
<author>
<organization>IEEE</organization>
</author>
<date month="September" year="2018"/>
</front>
<seriesInfo name="IEEE Std" value="802.1Qcp-2018"/>
<seriesInfo name="DOI" value="10.1109/IEEESTD.2018.8467507"/>
</reference>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.1112.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.2236.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.2710.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.3376.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.3688.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.3810.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.4286.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.4541.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.5790.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.6020.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.6241.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.6242.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.6636.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.6991.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.7761.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.7950.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8040.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8294.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8340.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8341.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8342.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8343.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8349.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8446.xml"/>
</references>
<references>
<name>Informative References</name>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.7951.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8407.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer
ence.RFC.8652.xml"/>
</references>
</references>
<section anchor="sect-a" numbered="true" toc="default">
<name>Data Tree Example</name>
<t>
This section contains an example of bridge service in the JSON encoding
<xref target="RFC7951" format="default"/>, containing both configuration and
state data.</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
+-----------+ +-----------+
+ Source + + Source +
+-----+-----+ +-----+-----+
| |
-----------------+---------------------------- -----------------+----------------------------
|eth1/1 |eth1/1
+---+---+ +---+---+
+ R1 + + R1 +
+-+---+-+ +-+---+-+
eth1/2 | \ eth1/3 eth1/2 | \ eth1/3
skipping to change at line 2030 skipping to change at line 1723
+ R2 + + R3 + + R2 + + R3 +
+---+---+ +--+---+ +---+---+ +--+---+
eth2/2 | | eth3/2 eth2/2 | | eth3/2
| | | |
---------------+----------+------------------- ---------------+----------+-------------------
| | | |
| | | |
+--------+--+ +---+--------+ +--------+--+ +---+--------+
+ Receiver1 + + Receiver2 + + Receiver1 + + Receiver2 +
+-----------+ +------------+ +-----------+ +------------+
]]></artwork>
The configuration data for R1 in the above figure could be as follows: <t>The configuration data for R1 in the above figure could be as follows:</t>
<sourcecode type=""><![CDATA[
{ {
"ietf-interfaces:interfaces":{ "ietf-interfaces:interfaces":{
"interface":[ "interface":[
{ {
"name":"eth1/1", "name":"eth1/1",
"type":"iana-if-type:ethernetCsmacd" "type":"iana-if-type:ethernetCsmacd"
} }
] ]
}, },
"ietf-routing:routing":{ "ietf-routing:routing":{
"control-plane-protocols":{ "control-plane-protocols":{
"control-plane-protocol":[ "control-plane-protocol":[
{ {
"type":"ietf-igmp-mld-snooping:igmp-snooping", "type":"ietf-igmp-mld-snooping:igmp-snooping",
"name":"bis1", "name":"bis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance":{ "ietf-igmp-mld-snooping:igmp-snooping-instance":{
"l2-service-type":"ietf-igmp-mld-snooping:bridge", "l2-service-type":"ietf-igmp-mld-snooping:bridge",
"enable":true "enabled":true
} }
} }
] ]
} }
}, },
"ieee802-dot1q-bridge:bridges":{ "ieee802-dot1q-bridge:bridges":{
"bridge":[ "bridge":[
{ {
"name":"isp1", "name":"isp1",
"address":"00-23-ef-a5-77-12", "address":"00-23-ef-a5-77-12",
skipping to change at line 2080 skipping to change at line 1775
"ietf-igmp-mld-snooping:igmp-snooping-instance":"bis1" "ietf-igmp-mld-snooping:igmp-snooping-instance":"bis1"
} }
] ]
} }
} }
] ]
} }
] ]
} }
} }
]]></sourcecode>
The corresponding operational state data for R1 could be as follows: <t>The corresponding operational state data for R1 could be as follows:</t>
<sourcecode type="json"><![CDATA[
{ {
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth1/1", "name": "eth1/1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2018-05-23T12:34:56-05:00" "discontinuity-time": "2018-05-23T12:34:56-05:00"
} }
skipping to change at line 2104 skipping to change at line 1800
] ]
}, },
"ietf-routing:routing": { "ietf-routing:routing": {
"control-plane-protocols": { "control-plane-protocols": {
"control-plane-protocol": [ "control-plane-protocol": [
{ {
"type": "ietf-igmp-mld-snooping:igmp-snooping", "type": "ietf-igmp-mld-snooping:igmp-snooping",
"name": "bis1", "name": "bis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": { "ietf-igmp-mld-snooping:igmp-snooping-instance": {
"l2-service-type": "ietf-igmp-mld-snooping:bridge", "l2-service-type": "ietf-igmp-mld-snooping:bridge",
"enable": true "enabled": true
} }
} }
] ]
} }
}, },
"ieee802-dot1q-bridge:bridges": { "ieee802-dot1q-bridge:bridges": {
"bridge": [ "bridge": [
{ {
"name": "isp1", "name": "isp1",
"address": "00-23-ef-a5-77-12", "address": "00-23-ef-a5-77-12",
skipping to change at line 2134 skipping to change at line 1830
"ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1" "ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1"
} }
] ]
} }
} }
] ]
} }
] ]
} }
} }
The following action is to clear all the entries whose group address is ]]></sourcecode>
225.1.1.1 for igmp-snooping-instance bis1. <t>The following action is to clear all the entries whose group address is
225.1.1.1 for igmp-snooping-instance bis1.</t>
POST /restconf/operations/ietf-routing:routing/control-plane-protocols/\ <sourcecode><![CDATA[
POST /restconf/operations/ietf-routing:routing/\
control-plane-protocols/\
control-plane-protocol=ietf-igmp-mld-snooping:igmp-snooping,bis1/\ control-plane-protocol=ietf-igmp-mld-snooping:igmp-snooping,bis1/\
ietf-igmp-mld-snooping:igmp-snooping-instance/\ ietf-igmp-mld-snooping:igmp-snooping-instance/\
clear-igmp-snooping-groups HTTP/1.1 clear-igmp-snooping-groups HTTP/1.1
Host: example.com Host: example.com
Content-Type: application/yang-data+json Content-Type: application/yang-data+json
{ {
"ietf-igmp-mld-snooping:input" : { "ietf-igmp-mld-snooping:input" : {
"group": "225.1.1.1", "group": "225.1.1.1",
"source": "*" "source": "*"
} }
} }
]]></sourcecode>
]]> </artwork></figure> </section>
</section> </back>
<section title="L2VPN service" anchor="sect-a.2">
<t>
This section contains an example for L2VPN service in the JSON encoding
[RFC7951], containing both configuration and state data.</t>
<figure><artwork><![CDATA[
+-----------+
+ Source +
+-----+-----+
|
-----------------+----------------------------
|eth1/1
+---+---+
+ R1 +
+-+---+-+
eth1/2 | \ eth1/3
| \
| \
| \
| \
eth2/1 | \ eth3/1
+---+---+ +-+---+
+ R2 +----+ R3 +
+---+---+ +-+---+
eth2/2 | | eth3/2
| |
---------------+----------+-------------------
| |
| |
+--------+--+ +---+--------+
+ Receiver1 + + Receiver2 +
+-----------+ +------------+
The configuration data for R1 in the above figure could be as follows:
{
"ietf-interfaces:interfaces":{
"interface":[
{
"name":"eth1/1",
"type":"iana-if-type:ethernetCsmacd"
}
]
},
"ietf-pseudowires:pseudowires": {
"pseudowire": [
{
"name": "pw2"
},
{
"name": "pw3"
}
]
},
"ietf-network-instance:network-instances": {
"network-instance": [
{
"name": "vpls1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1",
"ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type",
"ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling",
"ietf-l2vpn:endpoint": [
{
"name": "acs",
"ac": [
{
"name": "eth1/1"
}
]
},
{
"name": "pws",
"pw": [
{
"name": "pw2"
},
{
"name": "pw3"
}
]
}
]
}
]
},
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-igmp-mld-snooping:igmp-snooping",
"name": "vis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": {
"l2-service-type": "ietf-igmp-mld-snooping:l2vpn",
"enable": true
}
}
]
}
}
}
The corresponding operational state data for R1 could be as follows:
{
"ietf-interfaces:interfaces":{
"interface":[
{
"name":"eth1/1",
"type":"iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2018-05-23T12:34:56-05:00"
}
}
]
},
"ietf-pseudowires:pseudowires": {
"pseudowire": [
{
"name": "pw2"
},
{
"name": "pw3"
}
]
},
"ietf-network-instance:network-instances": {
"network-instance": [
{
"name": "vpls1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1",
"ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type",
"ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling",
"ietf-l2vpn:endpoint": [
{
"name": "acs",
"ac": [
{
"name": "eth1/1"
}
]
},
{
"name": "pws",
"pw": [
{
"name": "pw2"
},
{
"name": "pw3"
}
]
}
]
}
]
},
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-igmp-mld-snooping:igmp-snooping",
"name": "vis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": {
"l2-service-type": "ietf-igmp-mld-snooping:l2vpn",
"enable": true
}
}
]
}
}
}
]]> </artwork></figure>
</section>
</section>
</back>
</rfc> </rfc>
 End of changes. 305 change blocks. 
1486 lines changed or deleted 1036 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/