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 " "> | |||
C.1112.xml"> | <!ENTITY zwsp "​"> | |||
<!ENTITY RFC2236 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <!ENTITY nbhy "‑"> | |||
C.2236.xml"> | <!ENTITY wj "⁠"> | |||
<!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 & 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 & 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 & 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 & 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 & 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/ |