rfc9398xml2.original.xml | rfc9398.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!ENTITY RFC3376 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <!-- [CS] updated by Chris 01/19/23 --> | |||
C.3376.xml"> | ||||
<!ENTITY RFC3688 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <!DOCTYPE rfc [ | |||
C.3688.xml"> | <!ENTITY nbsp " "> | |||
<!ENTITY RFC3810 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <!ENTITY zwsp "​"> | |||
C.3810.xml"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY RFC4605 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <!ENTITY wj "⁠"> | |||
C.4605.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 RFC6991 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.6991.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 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 RFC8652 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8652.xml"> | ||||
<!ENTITY RFC9128 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.9128.xml"> | ||||
<!ENTITY RFC7761 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7761.xml"> | ||||
<!ENTITY RFC7951 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7951.xml"> | ||||
<!ENTITY RFC8340 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8340.xml"> | ||||
<!ENTITY RFC8407 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8407.xml"> | ||||
]> | ]> | |||
<rfc submissionType="IETF" docName="draft-ietf-pim-igmp-mld-proxy-yang-10" categ | ||||
ory="std" ipr="trust200902"> | ||||
<!-- Generated by id2xml 1.5.0 on 2023-01-18T23:48:39Z --> | ||||
<?rfc strict="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="no"?> | ||||
<?rfc text-list-symbols="**o+-"?> | ||||
<?rfc toc="yes"?> | ||||
<front> | ||||
<title>A YANG Data Model for IGMP/MLD Proxy</title> | ||||
<author initials="H." surname="Zhao" fullname="Hongji Zhao"> | ||||
<organization abbrev="Ericsson">Ericsson (China) Communications Company L | ||||
td.</organization> | ||||
<address><postal> | ||||
<street>Ericsson Tower</street> | ||||
<street>No. 5 Lize East Street</street> | ||||
<city>ChaoYANG District Beijing</city> | ||||
<code>100102</code> | ||||
<country>China</country> | ||||
</postal> | ||||
<email>hongji.zhao@ericsson.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="X." surname="Liu" fullname="Xufeng Liu"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category=" | |||
<organization>IBM Corporation</organization> | std" consensus="true" docName="draft-ietf-pim-igmp-mld-proxy-yang-10" number="93 | |||
<address><postal> | 98" ipr="trust200902" obsoletes="" updates="" xml:lang="en" symRefs="true" sortR | |||
<street>2300 Dulles Station Blvd.</street> | efs="true" tocInclude="true" version="3"> | |||
<city>Herndon</city> | ||||
<region>VA</region> | ||||
<code>20171</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>Xufeng.liu.ietf@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="Y." surname="Liu" fullname="Yisong Liu"> | <!-- xml2rfc v2v3 conversion 3.15.3 --> | |||
<organization>China Mobile</organization> | <!-- Generated by id2xml 1.5.0 on 2023-01-18T23:48:39Z --> | |||
<address><postal> | <front> | |||
<street></street> | <title abbrev="IGMP/MLD Proxy YANG Module">A YANG Data Model for Internet Gr | |||
<city></city> | oup Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Proxy Devi | |||
<region></region> | ces</title> | |||
<code></code> | ||||
<country>China</country> | ||||
</postal> | ||||
<email>liuyisong@chinamobile.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="M." surname="Panchanathan" fullname="Mani Panchanathan" | <seriesInfo name="RFC" value="9398"/> | |||
> | <author initials="H." surname="Zhao" fullname="Hongji Zhao"> | |||
<organization>Cisco Systems</organization> | <organization abbrev="Ericsson">Ericsson (China) Communications Company Lt | |||
<address><postal> | d.</organization> | |||
<street></street> | <address> | |||
<postal> | ||||
<street>Ericsson Tower, No. 5 Lize East Street</street> | ||||
<city>Beijing</city> | ||||
<code>100102</code> | ||||
<country>China</country> | ||||
</postal> | ||||
<email>hongji.zhao@ericsson.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="X." surname="Liu" fullname="Xufeng Liu"> | ||||
<organization>Alef Edge</organization> | ||||
<address> | ||||
<postal> | ||||
<street></street> | ||||
<city></city> | <city></city> | |||
<region></region> | <region></region> | |||
<code></code> | <code></code> | |||
<country>India</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>mapancha@cisco.com</email> | <email>xufeng.liu.ietf@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="Y." surname="Liu" fullname="Yisong Liu"> | ||||
<author initials="M." surname="Sivakumar" fullname="Mahesh Sivakumar"> | <organization>China Mobile</organization> | |||
<organization abbrev="Juniper">Juniper Networks</organization> | <address> | |||
<address><postal> | <postal> | |||
<street>1133 Innovation Way</street> | <street/> | |||
<city>Sunnyvale</city> | <city/> | |||
<region>California</region> | <region/> | |||
<country>USA</country> | <code/> | |||
</postal> | <country>China</country> | |||
<email>sivakumar.mahesh@gmail.com</email> | </postal> | |||
</address> | <email>liuyisong@chinamobile.com</email> | |||
</author> | </address> | |||
<date year="2023" month="January"/> | </author> | |||
<area>rtg</area> | <author initials="M." surname="Panchanathan" fullname="Mani Panchanathan"> | |||
<workgroup>pim</workgroup> | <organization>Cisco Systems, Inc.</organization> | |||
<address> | ||||
<!-- [rfced] Please insert any keywords (beyond those that appear in the title) | <postal> | |||
for use on https://www.rfc-editor.org/search. --> | <street>3625 Cisco Way</street> | |||
<city>San Jose</city> | ||||
<region>CA</region> | ||||
<code/> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>mapancha@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="M." surname="Sivakumar" fullname="Mahesh Sivakumar"> | ||||
<organization abbrev="Juniper">Juniper Networks</organization> | ||||
<address> | ||||
<postal> | ||||
<street>1133 Innovation Way</street> | ||||
<city>Sunnyvale</city> | ||||
<region>CA</region> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>sivakumar.mahesh@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<date year="2023" month="May"/> | ||||
<area>rtg</area> | ||||
<workgroup>pim</workgroup> | ||||
<keyword>example</keyword> | <keyword>IGMP Proxy</keyword> | |||
<keyword>MLD Proxy</keyword> | ||||
<keyword>YANG</keyword> | ||||
<abstract> | <abstract> | |||
<t>This document defines a YANG data model that can be used to configure | <t>This document defines a YANG data model that can be used to configure | |||
and manage Internet Group Management Protocol (IGMP) or Multicast | and manage Internet Group Management Protocol (IGMP) or Multicast | |||
Listener Discovery (MLD) proxy devices. The YANG module in this document | Listener Discovery (MLD) Proxy devices. The YANG module in this document | |||
conforms to Network Management Datastore Architecture (NMDA).</t> | conforms to the Network Management Datastore Architecture (NMDA).</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | ||||
<middle> | <section anchor="sect-1" numbered="true" toc="default"> | |||
<section title="Introduction" anchor="sect-1"><t> | <name>Introduction</name> | |||
This document defines a YANG <xref target="RFC7950"/> data model for the mana | <t> | |||
gement of | This document defines a YANG data model <xref target="RFC7950" format="defaul | |||
t"/> for the management of | ||||
Internet Group Management Protocol (IGMP) or Multicast Listener Discovery | Internet Group Management Protocol (IGMP) or Multicast Listener Discovery | |||
(MLD) Proxy <xref target="RFC4605"/> devices. The YANG module in this documen | (MLD) Proxy devices <xref target="RFC4605" format="default"/>. The YANG modul | |||
t conforms to | e in this document conforms to | |||
the Network Management Datastore Architecture defined in <xref target="RFC834 | the Network Management Datastore Architecture as defined in <xref target="RFC | |||
2"/>.</t> | 8342" format="default"/>.</t> | |||
<section anchor="sect-1.1" numbered="true" toc="default"> | ||||
<section title="Terminology" anchor="sect-1.1"><t> | <name>Terminology</name> | |||
The terminology for describing YANG data models is found in <xref target="RFC | <t> | |||
6020"/> and | The terminology for describing YANG data models is found in <xref target="RFC | |||
<xref target="RFC7950"/>, including: | 6020" format="default"/> and | |||
<xref target="RFC7950" format="default"/>, including: | ||||
<list style="symbols"> | ||||
<t>augment</t> | ||||
<t>data model</t> | ||||
<t>data node</t> | ||||
<t>identity</t> | ||||
<t>module</t> | ||||
</list></t> | ||||
<t>The following abbreviations are used in this document and defined model: | ||||
<list> | ||||
<t>IGMP: Internet Group Management Protocol <xref target="RFC3376"/>.</t> | ||||
<t>MLD: Multicast Listener Discovery <xref target="RFC3810"/>.</t> | ||||
<t>PIM: Protocol Independent Multicast <xref target="RFC7761"/>.</t> | ||||
</list></t> | ||||
</section> | ||||
<section title="Tree Diagrams" anchor="sect-1.2"><t> | ||||
Tree diagrams used in this document follow the notation defined in <xref targ | ||||
et="RFC8340"/>.</t> | ||||
</section> | </t> | |||
<ul spacing="normal"> | ||||
<li>augment</li> | ||||
<li>data model</li> | ||||
<li>data node</li> | ||||
<li>identity</li> | ||||
<li>module</li> | ||||
</ul> | ||||
<t>The following abbreviations are used in this document and in the defi | ||||
ned YANG data model: | ||||
<section title="Prefixes in Data Node Names" anchor="sect-1.3"><t> | </t> | |||
In this document, names of data nodes, and other data model objects are | <dl spacing="normal"> | |||
often used without a prefix, as long as it is clear from the context in | <dt>IGMP:</dt><dd>Internet Group Management Protocol <xref target="RFC | |||
which YANG module each name is defined. Otherwise, names are prefixed using | 3376" format="default"/>.</dd> | |||
<dt>MLD:</dt><dd>Multicast Listener Discovery <xref target="RFC3810" f | ||||
ormat="default"/>.</dd> | ||||
<dt>PIM:</dt><dd>Protocol Independent Multicast <xref target="RFC7761" | ||||
format="default"/>.</dd> | ||||
</dl> | ||||
</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 <xref targ | ||||
et="RFC8340" format="default"/>.</t> | ||||
</section> | ||||
<section anchor="sect-1.3" numbered="true" toc="default"> | ||||
<name>Prefixes in Data Node Names</name> | ||||
<t> | ||||
In this document, names of data nodes and other data model objects are | ||||
often used without a prefix, as long as the context clearly indicates | ||||
the YANG module in which each name is defined. Otherwise, names are prefixed | ||||
using | ||||
the standard prefix associated with the corresponding YANG module, as shown | the standard prefix associated with the corresponding YANG module, as shown | |||
in Table 1.</t> | in <xref target="tab-1"/>.</t> | |||
<table anchor="tab-1"> | ||||
<!-- Please review id2xml Warning: Unexpected title: expected 'Figure ...', | <name>Prefixes and Corresponding YANG Modules</name> | |||
found 'Table 1: Prefixes and Corresponding YANG Modules'. This looks | <thead> | |||
like a figure that has been entered as a texttable. The generated XML | <tr> | |||
will need adjustment. --> | <th>Prefix</th> | |||
<th>YANG Module</th> | ||||
<figure title="Prefixes and Corresponding YANG Modules" | <th>Reference</th> | |||
anchor="fig1"><artwork><![CDATA[ | </tr> | |||
+----------+-----------------------+--------------------------------+ | </thead> | |||
| Prefix | YANG module | Reference | | <tbody> | |||
+==========+=======================+================================+ | <tr> | |||
| inet | ietf-inet-types | [RFC6991] | | <td>inet</td> | |||
+----------+-----------------------+--------------------------------+ | <td>ietf-inet-types</td> | |||
| if | ietf-interfaces | [RFC8343] | | <td><xref target="RFC6991"/></td> | |||
+----------+-----------------------+--------------------------------+ | </tr> | |||
| rt | ietf-routing | [RFC8349] | | <tr> | |||
+----------+-----------------------+--------------------------------+ | <td>if</td> | |||
| rt-types | ietf-routing-types | [RFC8294] | | <td>ietf-interfaces</td> | |||
+----------+-----------------------+--------------------------------+ | <td><xref target="RFC8343"/></td> | |||
| pim-base | ietf-pim-base | [RFC9128] | | </tr> | |||
+----------+-----------------------+--------------------------------+ | <tr> | |||
]]></artwork> | <td>rt</td> | |||
</figure> | <td>ietf-routing</td> | |||
</section> | <td><xref target="RFC8349"/></td> | |||
</tr> | ||||
</section> | <tr> | |||
<td>rt-types</td> | ||||
<section title="Design of Data Model" anchor="sect-2"><t> | <td>ietf-routing-types</td> | |||
The model covers Internet Group Management Protocol (IGMP) / Multicast | <td><xref target="RFC8294"/></td> | |||
Listener Discovery (MLD) - Based Multicast Forwarding ("IGMP/MLD Proxying") | </tr> | |||
<xref target="RFC4605"/>. The goal of this document is to define a data model | <tr> | |||
that | <td>pim-base</td> | |||
provides a common user interface to IGMP/MLD Proxy.</t> | <td>ietf-pim-base</td> | |||
<td><xref target="RFC9128"/></td> | ||||
<section title="Overview" anchor="sect-2.1"><t> | </tr> | |||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
<section anchor="sect-2" numbered="true" toc="default"> | ||||
<name>Design of Data Model</name> | ||||
<t> | ||||
The model covers forwarding based on IGMP and MLD proxying <xref target="RFC4 | ||||
605" format="default"/>. One goal of this document is to define a data model tha | ||||
t | ||||
provides a common user interface for IGMP/MLD Proxy devices.</t> | ||||
<section anchor="sect-2.1" numbered="true" toc="default"> | ||||
<name>Overview</name> | ||||
<t> | ||||
The model defined in this document has all the common building blocks for | The model defined in this document has all the common building blocks for | |||
the IGMP/MLD Proxy devices. It can be used to configure IGMP/MLD Proxy. The | IGMP/MLD Proxy devices and can be used to configure those devices. The | |||
operational state data and statistics can also be retrieved by it.</t> | operational state data and statistics can also be retrieved via this model.</ | |||
t> | ||||
</section> | </section> | |||
<section anchor="sect-2.2" numbered="true" toc="default"> | ||||
<section title="Optional Features" anchor="sect-2.2"><t> | <name>Optional Features</name> | |||
<t> | ||||
This model is designed to represent the basic capability subsets of | This model is designed to represent the basic capability subsets of | |||
IGMP/MLD Proxy. The main design goals of this document are that the basic | IGMP/MLD Proxies. The main design goals of this document are that (1) the bas | |||
capabilities described in the model are supported by any major now-existing | ic | |||
implementation, and that the configuration of all implementations meeting | capabilities described in the model will be supported by any major | |||
the specifications is easy to express through some combination of the | implementations that exist at the time of this writing and (2) the configurat | |||
ion of all implementations meeting | ||||
the specifications will be 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> | ||||
This model declares two features representing capabilities that not all | This model declares two features representing capabilities that not all | |||
deployed devices support. One feature is igmp-proxy, and the other feature | deployed devices support. One feature is called "igmp-proxy", and the other f | |||
is mld-proxy. Either or both features could be implemented, which could | eature | |||
is called "mld-proxy". Either or both features could be implemented; this wou | ||||
ld | ||||
provide more choices for vendors.</t> | provide more choices for vendors.</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 Proxies only support IPv4, while MLD Proxies only support IPv6. The data | |||
IGMP Proxy only supports IPv4, while MLD Proxy only supports IPv6. The data | ||||
model defined in this document can be used for both IPv4 and IPv6 address | model defined in this document can be used for both IPv4 and IPv6 address | |||
families.</t> | families.</t> | |||
<t> | ||||
This document defines IGMP Proxies and MLD Proxies in separate schema branche | ||||
s | ||||
in the structure. The benefits of this technique are as follows: | ||||
<t> | </t> | |||
This document defines IGMP Proxy and MLD Proxy as separate schema branches | <ul spacing="normal"> | |||
in the structure. The benefits are: | <li>The model can support IGMP Proxies (IPv4), MLD Proxies (IPv6), or | |||
both, | ||||
<list style="symbols"> | ||||
<t>The model can support IGMP Proxy (IPv4), MLD Proxy (IPv6), or both | ||||
optionally and independently. Such flexibility cannot be achieved cleanly | optionally and independently. Such flexibility cannot be achieved cleanly | |||
with a combined branch.</t> | with a combined branch.</li> | |||
<li>The structure is consistent with other YANG data models such as th | ||||
<t>The structure is consistent with other YANG data models such as <xref | e model defined in <xref target="RFC8652" format="default"/>, which uses separat | |||
target="RFC8652"/>, which uses separate branches for IPv4 and IPv6.</t> | e branches for IPv4 and IPv6.</li> | |||
<li>Having separate branches for IGMP Proxies and MLD Proxies allows m | ||||
<t>Having separate branches for IGMP Proxy and MLD Proxy allows minor | inor | |||
differences in their behavior to be modelled more simply and cleanly. The | differences in their behavior to be modeled more simply and cleanly. The | |||
two branches can better support different features and node types.</t> | two branches can better support different features and node types.</li> | |||
</ul> | ||||
</list></t> | </section> | |||
</section> | ||||
</section> | <section anchor="sect-3" numbered="true" toc="default"> | |||
<name>Module Structure</name> | ||||
</section> | <t>This model augments the core routing data model specified in <xref targ | |||
et="RFC8349"/>.</t> | ||||
<section title="Module Structure" anchor="sect-3"><t>This model augments | <sourcecode name="" type="yangtree"><![CDATA[ | |||
the core routing data model specified in [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-proxy <= Augmented by this Model | | +--rw igmp-proxy <= Augmented by this model | |||
... | ... | |||
| +--rw mld-proxy <= Augmented by this Model | | +--rw mld-proxy <= Augmented by this model | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t> | |||
<t> | The "igmp-proxy" container instantiates an IGMP Proxy. The "mld-proxy" | |||
The "igmp-proxy" container instantiates IGMP Proxy. The "mld-proxy" | container instantiates an MLD Proxy.</t> | |||
container instantiates MLD Proxy.</t> | <section anchor="sect-3.1" numbered="true" toc="default"> | |||
<name>IGMP Proxy Configuration and Operational State</name> | ||||
<section title="IGMP Proxy Configuration and Operational State" anchor="s | <t> | |||
ect-3.1"><t> | ||||
The YANG module augments | The YANG module 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-proxy container.</t> | igmp-proxy container.</t> | |||
<t> | ||||
<t> | All attributes related to IGMP Proxies are defined in the igmp-proxy | |||
All the IGMP Proxy related attributes are defined in the igmp-proxy | ||||
container. The read-write attributes represent configurable data. The | container. The read-write attributes represent configurable data. The | |||
read-only attributes represent state data.</t> | read-only attributes represent state data.</t> | |||
<t> | ||||
<t> | The igmp-version parameter represents the IGMP protocol version; the default | |||
The igmp-version represents the version of IGMP protocol, and the default | value is 2. If the value of the "enabled" parameter is "true", it means that | |||
value is 2. If the value of enabled is true, it means IGMP Proxy is | the IGMP Proxy is | |||
enabled.</t> | enabled.</t> | |||
<t> | ||||
<t> | The interface list under igmp-proxy contains upstream interfaces for an IGMP | |||
The interface list under igmp-proxy contains upstream interfaces for IGMP | Proxy. A constraint is provided to make sure that the upstream interface for | |||
proxy. There is also a constraint to make sure the upstream interface for | the IGMP Proxy is not configured to use PIM.</t> | |||
IGMP proxy is not configured to use PIM.</t> | <t> | |||
To configure a downstream interface for an IGMP Proxy, the ability to enable | ||||
<t> | IGMP on that interface is needed. This is defined in | |||
To configure a downstream interface for IGMP proxy, it is needed to enable | "<xref target="RFC8652" format="title"/>" <xref target="RFC8652" format="defa | |||
IGMP on that interface. This is defined in the YANG Data Model for Internet | ult"/>.</t> | |||
Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) | <sourcecode name="" type="yangtree"><![CDATA[ | |||
<xref target="RFC8652"/>.</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-proxy! {igmp-proxy}? | +--rw igmp-proxy! {igmp-proxy}? | |||
+--rw interfaces | +--rw interfaces | |||
+--rw interface* [name] | +--rw interface* [name] | |||
+--rw name if:interface-ref | +--rw name if:interface-ref | |||
+--rw igmp-version? uint8 | +--rw igmp-version? uint8 | |||
+--rw enabled? boolean | +--rw enabled? boolean | |||
+--rw sender-source-address? inet:ipv4-address-no-zone | +--rw sender-source-address? inet:ipv4-address-no-zone | |||
+--ro group* [group-address] | +--ro group* [group-address] | |||
+--ro group-address | +--ro group-address | |||
| rt-types:ipv4-multicast-group-address | | rt-types:ipv4-multicast-group-address | |||
+--ro up-time? uint32 | +--ro up-time? uint32 | |||
+--ro filter-mode enumeration | +--ro filter-mode enumeration | |||
+--ro source* [source-address] | +--ro source* [source-address] | |||
+--ro source-address | +--ro source-address | |||
| inet:ipv4-address-no-zone | | inet:ipv4-address-no-zone | |||
+--ro up-time? uint32 | +--ro up-time? uint32 | |||
+--ro downstream-interface* [name] | +--ro downstream-interface* [name] | |||
+--ro name if:interface-ref | +--ro name if:interface-ref | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </section> | |||
</section> | <section anchor="sect-3.2" numbered="true" toc="default"> | |||
<name>MLD Proxy Configuration and Operational State</name> | ||||
<section title="MLD Proxy Configuration and Operational State" anchor="se | <t> | |||
ct-3.2"><t> | ||||
The YANG module augments | The YANG module 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-proxy container.</t> | mld-proxy container.</t> | |||
<t> | ||||
<t> | All attributes related to MLD Proxies are defined in the mld-proxy | |||
All the MLD Proxy related attributes are defined in the mld-proxy | ||||
container. The read-write attributes represent configurable data. The | container. The read-write attributes represent configurable data. The | |||
read-only attributes represent state data.</t> | read-only attributes represent state data.</t> | |||
<t> | ||||
<t> | The mld-version parameter represents the MLD protocol version; the default va | |||
The mld-version represents the version of MLD protocol, and default value | lue | |||
is 2. If the value of enabled is true, it means MLD Proxy is enabled.</t> | is 2. If the value of the "enabled" parameter is "true", it means that the ML | |||
D Proxy is enabled.</t> | ||||
<t> | <t> | |||
The interface list under mld-proxy contains upstream interfaces for MLD | The interface list under mld-proxy contains upstream interfaces for an MLD | |||
proxy. There is also a constraint to make sure the upstream interface for | Proxy. A constraint is provided to make sure that the upstream interface for | |||
MLD proxy is not configured to use PIM.</t> | the MLD Proxy is not configured to use PIM.</t> | |||
<t> | ||||
<t> | To configure a downstream interface for an MLD Proxy, enable MLD on that | |||
To configure a downstream interface for MLD proxy, enable MLD on that | interface. This is defined in "<xref target="RFC8652" format="title"/>" <xref | |||
interface. This is defined in the YANG Data Model for Internet Group | target="RFC8652" format="default"/>.</t> | |||
Management Protocol (IGMP) and Multicast Listener Discovery (MLD) | <sourcecode name="" type="yangtree"><![CDATA[ | |||
<xref target="RFC8652"/>.</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-proxy! {mld-proxy}? | +--rw mld-proxy! {mld-proxy}? | |||
+--rw interfaces | +--rw interfaces | |||
+--rw interface* [name] | +--rw interface* [name] | |||
+--rw name if:interface-ref | +--rw name if:interface-ref | |||
+--rw mld-version? uint8 | +--rw mld-version? uint8 | |||
+--rw enabled? boolean | +--rw enabled? boolean | |||
+--rw sender-source-address? inet:ipv6-address-no-zone | +--rw sender-source-address? inet:ipv6-address-no-zone | |||
+--ro group* [group-address] | +--ro group* [group-address] | |||
+--ro group-address | +--ro group-address | |||
| rt-types:ipv6-multicast-group-address | | rt-types:ipv6-multicast-group-address | |||
+--ro up-time? uint32 | +--ro up-time? uint32 | |||
+--ro filter-mode enumeration | +--ro filter-mode enumeration | |||
+--ro source* [source-address] | +--ro source* [source-address] | |||
+--ro source-address | +--ro source-address | |||
| inet:ipv6-address-no-zone | | inet:ipv6-address-no-zone | |||
+--ro up-time? uint32 | +--ro up-time? uint32 | |||
+--ro downstream-interface* [name] | +--ro downstream-interface* [name] | |||
+--ro name if:interface-ref | +--ro name if:interface-ref | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </section> | |||
</section> | </section> | |||
<section anchor="sect-4" numbered="true" toc="default"> | ||||
</section> | <name>IGMP/MLD Proxy YANG Module</name> | |||
<t> | ||||
<section title="IGMP/MLD Proxy YANG Module" anchor="sect-4"><t> | This module references <xref target="RFC4605" format="default"/>, <xref targe | |||
This module references <xref target="RFC4605"/>, <xref target="RFC6991"/>, <x | t="RFC6991" format="default"/>, <xref target="RFC8294" format="default"/>, <xref | |||
ref target="RFC8294"/>, <xref target="RFC8343"/>, | target="RFC8343" format="default"/>, | |||
<xref target="RFC8349"/> and <xref target="RFC9128"/>.</t> | <xref target="RFC8349" format="default"/>, and <xref target="RFC9128" form | |||
at="default"/>.</t> | ||||
<figure><artwork><![CDATA[ | <sourcecode name="ietf-igmp-mld-proxy@2023-04-25.yang" type="yang" markers | |||
<CODE BEGINS> file ietf-igmp-mld-proxy@2022-12-07.yang | ="true"><![CDATA[ | |||
module ietf-igmp-mld-proxy { | module ietf-igmp-mld-proxy { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy"; | namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy"; | |||
// replace with IANA namespace when assigned | ||||
prefix igmp-mld-proxy; | prefix igmp-mld-proxy; | |||
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-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-pim-base { | import ietf-pim-base { | |||
prefix pim-base; | prefix pim-base; | |||
reference | reference | |||
"RFC 9128: A YANG Data Model for Protocol Independent Multicast | "RFC 9128: YANG Data Model for Protocol Independent Multicast | |||
(PIM)"; | (PIM)"; | |||
} | } | |||
organization | organization | |||
"IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
contact | ||||
"WG Web: <https://datatracker.ietf.org/wg/pim/> | ||||
WG List: <mailto:pim@ietf.org> | ||||
contact | Editors: Hongji Zhao | |||
"WG Web: <https://datatracker.ietf.org/wg/pim/about/> | <mailto:hongji.zhao@ericsson.com> | |||
WG List: <mailto:pim@ietf.org> | ||||
Editors: Hongji Zhao | Xufeng Liu | |||
<mailto:hongji.zhao@ericsson.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
Xufeng Liu | Yisong Liu | |||
<mailto:xufeng.liu.ietf@gmail.com> | <mailto:liuyisong@chinamobile.com> | |||
Yisong Liu | Mani Panchanathan | |||
<mailto:liuyisong@chinamobile.com> | <mailto:mapancha@cisco.com> | |||
Mani Panchanathan | Mahesh Sivakumar | |||
<mailto:mapancha@cisco.com> | <mailto:sivakumar.mahesh@gmail.com>"; | |||
description | ||||
"This module defines a collection of YANG definitions common for | ||||
all Internet Group Management Protocol (IGMP) and Multicast | ||||
Listener Discovery (MLD) Proxy devices. | ||||
Mahesh Sivakumar | Copyright (c) 2023 IETF Trust and the persons identified as | |||
<mailto:sivakumar.mahesh@gmail.com> | authors of the code. All rights reserved. | |||
"; | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | ||||
the license terms contained in, the Revised BSD License set | ||||
forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
Relating to IETF Documents | ||||
(https://trustee.ietf.org/license-info). | ||||
description | This version of this YANG module is part of RFC 9398; see the | |||
"The module defines a collection of YANG definitions common for | RFC itself for full legal notices."; | |||
all Internet Group Management Protocol (IGMP) and Multicast | ||||
Listener Discovery (MLD) Proxy devices. | ||||
Copyright (c) 2022 IETF Trust and the persons identified as | revision 2023-04-25 { | |||
authors of the code. All rights reserved. | description | |||
"Initial revision."; | ||||
reference | ||||
"RFC 9398: A YANG Data Model for Internet Group Management | ||||
Protocol (IGMP) and Multicast Listener Discovery (MLD) | ||||
Proxy Devices"; | ||||
} | ||||
Redistribution and use in source and binary forms, with or | /* | |||
without modification, is permitted pursuant to, and subject to | * Features | |||
the license terms contained in, the Revised BSD License set | */ | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
Relating to IETF Documents (http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see the | feature igmp-proxy { | |||
RFC itself for full legal notices."; | description | |||
"Support for the IGMP Proxy protocol."; | ||||
reference | ||||
"RFC 4605: Internet Group Management Protocol (IGMP) / | ||||
Multicast Listener Discovery (MLD)-Based Multicast Forwarding | ||||
('IGMP/MLD Proxying')"; | ||||
} | ||||
revision 2022-12-07 { | feature mld-proxy { | |||
description | description | |||
"Initial revision."; | "Support for the MLD Proxy protocol."; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for IGMP and MLD Proxy"; | "RFC 4605: Internet Group Management Protocol (IGMP) / | |||
} | Multicast Listener Discovery (MLD)-Based Multicast Forwarding | |||
('IGMP/MLD Proxying')"; | ||||
} | ||||
/* | /* | |||
* Features | * Identities | |||
*/ | */ | |||
feature igmp-proxy { | identity igmp-proxy { | |||
description | base rt:control-plane-protocol; | |||
"Support IGMP Proxy protocol."; | description | |||
reference | "IGMP Proxy protocol."; | |||
"RFC 4605"; | } | |||
} | ||||
feature mld-proxy { | identity mld-proxy { | |||
description | base rt:control-plane-protocol; | |||
"Support MLD Proxy protocol."; | description | |||
reference | "MLD Proxy protocol."; | |||
"RFC 4605"; | } | |||
} | ||||
/* | /* | |||
* Identities | * Groupings | |||
*/ | */ | |||
identity igmp-proxy { | grouping per-interface-config-attributes { | |||
base rt:control-plane-protocol; | description | |||
description | "'config' attributes as listed under an interface entry."; | |||
"IGMP Proxy protocol"; | leaf enabled { | |||
} | type boolean; | |||
default "true"; | ||||
description | ||||
"Set the value to 'true' to enable the IGMP/MLD Proxy."; | ||||
} | ||||
} // per-interface-config-attributes | ||||
identity mld-proxy { | grouping state-group-attributes { | |||
base rt:control-plane-protocol; | description | |||
description | "State group attributes."; | |||
"MLD Proxy protocol"; | leaf up-time { | |||
} | type uint32; | |||
units "seconds"; | ||||
description | ||||
"The elapsed time for (S,G) or (*,G)."; | ||||
} | ||||
leaf filter-mode { | ||||
type enumeration { | ||||
enum include { | ||||
description | ||||
"In 'include' mode, reception of packets sent | ||||
to the specified multicast address is requested | ||||
only from those IP source addresses listed in the | ||||
'source' list parameter."; | ||||
} | ||||
enum exclude { | ||||
description | ||||
"In 'exclude' mode, reception of packets sent | ||||
to the given multicast address is requested | ||||
from all IP source addresses except those | ||||
listed in the 'source' list parameter."; | ||||
} | ||||
} | ||||
mandatory true; | ||||
description | ||||
"Filter mode for a multicast group. | ||||
May be either 'include' or 'exclude'."; | ||||
} | ||||
} // state-group-attributes | ||||
/* | /* augments */ | |||
* Groupings | ||||
*/ | ||||
grouping per-interface-config-attributes { | augment "/rt:routing/rt:control-plane-protocols" | |||
description "Config attributes under interface view"; | + "/rt:control-plane-protocol" { | |||
leaf enabled { | when "derived-from-or-self(rt:type, " | |||
type boolean; | + "'igmp-mld-proxy:igmp-proxy')" { | |||
default true; | description | |||
description | "This augmentation is only valid for IGMP Proxies."; | |||
"Set the value to true to enable IGMP/MLD proxy"; | } | |||
} | ||||
} // per-interface-config-attributes | ||||
grouping state-group-attributes { | ||||
description | ||||
"State group attributes"; | ||||
leaf up-time { | ||||
type uint32; | ||||
units seconds; | ||||
description | description | |||
"The elapsed time for (S,G) or (*,G)."; | "IGMP Proxy augmentation to routing control plane protocol | |||
} | configuration and state."; | |||
leaf filter-mode { | container igmp-proxy { | |||
type enumeration { | if-feature "igmp-proxy"; | |||
enum "include" { | presence "IGMP Proxy configuration."; | |||
description | description | |||
"In include mode, reception of packets sent | "IGMP Proxy instance configuration."; | |||
to the specified multicast address is requested | container interfaces { | |||
only from those IP source addresses listed in the | ||||
source-list parameter"; | ||||
} | ||||
enum "exclude" { | ||||
description | description | |||
"In exclude mode, reception of packets sent | "Contains a list of upstream interfaces."; | |||
to the given multicast address is requested | list interface { | |||
from all IP source addresses except those | key "name"; | |||
listed in the source-list parameter."; | description | |||
} | "List of upstream interfaces."; | |||
leaf name { | ||||
type if:interface-ref; | ||||
must 'not( current() = /rt:routing' | ||||
+ '/rt:control-plane-protocols/pim-base:pim' | ||||
+ '/pim-base:interfaces/pim-base:interface' | ||||
+ '/pim-base:name )' { | ||||
description | ||||
"The upstream interface for the IGMP Proxy | ||||
must not be configured to use PIM."; | ||||
} | ||||
description | ||||
"The upstream interface name."; | ||||
} | ||||
leaf igmp-version { | ||||
type uint8 { | ||||
range "1..3"; | ||||
} | ||||
default "2"; | ||||
description | ||||
"IGMP version."; | ||||
} | ||||
uses per-interface-config-attributes; | ||||
leaf sender-source-address { | ||||
type inet:ipv4-address-no-zone; | ||||
description | ||||
"The sender source address of an | ||||
IGMP membership report message or leave message."; | ||||
} | ||||
list group { | ||||
key "group-address"; | ||||
config false; | ||||
description | ||||
"List of the multicast groups in the membership | ||||
database built on this upstream interface."; | ||||
leaf group-address { | ||||
type rt-types:ipv4-multicast-group-address; | ||||
description | ||||
"Multicast group address."; | ||||
} | ||||
uses state-group-attributes; | ||||
list source { | ||||
key "source-address"; | ||||
description | ||||
"Multicast source information | ||||
for the multicast group."; | ||||
leaf source-address { | ||||
type inet:ipv4-address-no-zone; | ||||
description | ||||
"Multicast source address."; | ||||
} | ||||
leaf up-time { | ||||
type uint32; | ||||
units "seconds"; | ||||
description | ||||
"The elapsed time for (S,G) or (*,G)."; | ||||
} | ||||
list downstream-interface { | ||||
key "name"; | ||||
description | ||||
"List of downstream interfaces."; | ||||
leaf name { | ||||
type if:interface-ref; | ||||
description | ||||
"Downstream interfaces | ||||
for each upstream interface."; | ||||
} | ||||
} | ||||
} // list source | ||||
} // list group | ||||
} // interface | ||||
} // interfaces | ||||
} | } | |||
mandatory true; | ||||
description | ||||
"Filter mode for a multicast group, | ||||
may be either include or exclude."; | ||||
} | } | |||
} // state-group-attributes | ||||
/* augments */ | ||||
augment "/rt:routing/rt:control-plane-protocols"+ | augment "/rt:routing/rt:control-plane-protocols" | |||
"/rt:control-plane-protocol" { | + "/rt:control-plane-protocol" { | |||
when | when "derived-from-or-self(rt:type, " | |||
"derived-from-or-self(rt:type, 'igmp-mld-proxy:igmp-proxy')" { | + "'igmp-mld-proxy:mld-proxy')" { | |||
description | description | |||
"This augmentation is only valid for IGMP Proxy."; | "This augmentation is only valid for MLD Proxies."; | |||
} | } | |||
description | description | |||
"IGMP Proxy augmentation to routing control plane protocol | "MLD Proxy augmentation to routing control plane protocol | |||
configuration and state."; | configuration and state."; | |||
container igmp-proxy { | container mld-proxy { | |||
if-feature "igmp-proxy"; | if-feature "mld-proxy"; | |||
presence "IGMP Proxy configuration."; | presence "MLD Proxy configuration."; | |||
description "IGMP Proxy instance configuration."; | description | |||
container interfaces { | "MLD Proxy instance configuration."; | |||
description | container interfaces { | |||
"Containing a list of upstream interfaces."; | description | |||
list interface { | "Contains a list of upstream interfaces."; | |||
key "name"; | list interface { | |||
description | key "name"; | |||
"List of upstream interfaces."; | description | |||
leaf name { | "List of upstream interfaces."; | |||
type if:interface-ref; | leaf name { | |||
must "not( current() = /rt:routing"+ | type if:interface-ref; | |||
"/rt:control-plane-protocols/pim-base:pim"+ | must 'not( current() = /rt:routing' | |||
"/pim-base:interfaces/pim-base:interface"+ | + '/rt:control-plane-protocols/pim-base:pim' | |||
"/pim-base:name )" { | + '/pim-base:interfaces/pim-base:interface' | |||
description | + '/pim-base:name )' { | |||
"The upstream interface for IGMP proxy | description | |||
must not be configured to use PIM."; | "The upstream interface for the MLD Proxy | |||
} | must not be configured to use PIM."; | |||
description "The upstream interface name."; | } | |||
} | description | |||
leaf igmp-version { | "The upstream interface name."; | |||
type uint8 { | } | |||
range "1..3"; | leaf mld-version { | |||
} | type uint8 { | |||
default 2; | range "1..2"; | |||
description "IGMP version."; | } | |||
} | default "2"; | |||
uses per-interface-config-attributes; | description | |||
leaf sender-source-address { | "MLD version."; | |||
type inet:ipv4-address-no-zone; | } | |||
description | uses per-interface-config-attributes; | |||
"The sender source address of | leaf sender-source-address { | |||
IGMP membership report message or leave message."; | type inet:ipv6-address-no-zone; | |||
} | description | |||
list group { | "The sender source address of an | |||
key "group-address"; | MLD membership report message or leave message."; | |||
config false; | } | |||
description | list group { | |||
"Multicast group membership information | key "group-address"; | |||
that joined on the interface."; | config false; | |||
leaf group-address { | description | |||
type rt-types:ipv4-multicast-group-address; | "List of the multicast groups in the membership | |||
description | database built on this upstream interface."; | |||
"Multicast group address."; | leaf group-address { | |||
} | type rt-types:ipv6-multicast-group-address; | |||
uses state-group-attributes; | description | |||
list source { | "Multicast group address."; | |||
key "source-address"; | } | |||
description | uses state-group-attributes; | |||
"List of multicast source information | list source { | |||
of the multicast group."; | key "source-address"; | |||
leaf source-address { | description | |||
type inet:ipv4-address-no-zone; | "Multicast source information | |||
description | for the multicast group."; | |||
"Multicast source address"; | leaf source-address { | |||
} | type inet:ipv6-address-no-zone; | |||
leaf up-time { | description | |||
type uint32; | "Multicast source address."; | |||
units seconds; | } | |||
description | leaf up-time { | |||
"The elapsed time for (S,G) or (*,G)."; | type uint32; | |||
} | units "seconds"; | |||
list downstream-interface { | description | |||
key "name"; | "The elapsed time for (S,G) or (*,G)."; | |||
description "The downstream interfaces list."; | } | |||
leaf name { | list downstream-interface { | |||
type if:interface-ref; | key "name"; | |||
description | description | |||
"Downstream interfaces | "List of downstream interfaces."; | |||
for each upstream-interface"; | leaf name { | |||
} | type if:interface-ref; | |||
} | description | |||
} // list source | "Downstream interfaces | |||
} // list group | for each upstream interface."; | |||
} // interface | ||||
} // interfaces | ||||
} | ||||
} | ||||
augment "/rt:routing/rt:control-plane-protocols"+ | ||||
"/rt:control-plane-protocol" { | ||||
when | ||||
"derived-from-or-self(rt:type, 'igmp-mld-proxy:mld-proxy')" { | ||||
description | ||||
"This augmentation is only valid for MLD Proxy."; | ||||
} | ||||
description | ||||
"MLD Proxy augmentation to routing control plane protocol | ||||
configuration and state."; | ||||
container mld-proxy { | ||||
if-feature "mld-proxy"; | ||||
presence "MLD Proxy configuration."; | ||||
description "MLD Proxy instance configuration."; | ||||
container interfaces { | ||||
description | ||||
"Containing a list of upstream interfaces."; | ||||
list interface { | ||||
key "name"; | ||||
description | ||||
"List of upstream interfaces."; | ||||
leaf name { | ||||
type if:interface-ref; | ||||
must "not( current() = /rt:routing"+ | ||||
"/rt:control-plane-protocols/pim-base:pim"+ | ||||
"/pim-base:interfaces/pim-base:interface"+ | ||||
"/pim-base:name )" { | ||||
description | ||||
"The upstream interface for MLD proxy | ||||
must not be configured to use PIM."; | ||||
} | ||||
description "The upstream interface name."; | ||||
} | ||||
leaf mld-version { | ||||
type uint8 { | ||||
range "1..2"; | ||||
} | ||||
default 2; | ||||
description "MLD version."; | ||||
} | ||||
uses per-interface-config-attributes; | ||||
leaf sender-source-address { | ||||
type inet:ipv6-address-no-zone; | ||||
description | ||||
"The sender source address of | ||||
MLD membership report message or leave message."; | ||||
} | ||||
list group { | ||||
key "group-address"; | ||||
config false; | ||||
description | ||||
"Multicast group membership information | ||||
that joined on the interface."; | ||||
leaf group-address { | ||||
type rt-types:ipv6-multicast-group-address; | ||||
description | ||||
"Multicast group address."; | ||||
} | ||||
uses state-group-attributes; | ||||
list source { | ||||
key "source-address"; | ||||
description | ||||
"List of multicast source information | ||||
of the multicast group."; | ||||
leaf source-address { | ||||
type inet:ipv6-address-no-zone; | ||||
description | ||||
"Multicast source address"; | ||||
} | ||||
leaf up-time { | ||||
type uint32; | ||||
units seconds; | ||||
description | ||||
"The elapsed time for (S,G) or (*,G)."; | ||||
} | ||||
list downstream-interface { | ||||
key "name"; | ||||
description "The downstream interfaces list."; | ||||
leaf name { | ||||
type if:interface-ref; | ||||
description | ||||
"Downstream interfaces | ||||
for each upstream-interface"; | ||||
} | } | |||
} | } | |||
} // list source | } // list source | |||
} // list group | } // list group | |||
} // interface | } // interface | |||
} // interfaces | } // interfaces | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | ]]></sourcecode> | |||
]]></artwork> | </section> | |||
</figure> | <section anchor="sect-5" numbered="true" toc="default"> | |||
</section> | <name>Security Considerations</name> | |||
<t>The YANG module specified in this document defines a schema for data | ||||
<section title="Security Considerations" anchor="sect-5"><t> | that is designed to be accessed via network management protocols such | |||
The YANG module specified in this document defines a schema for data | as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. | |||
that is designed to be accessed via network management protocols such | The lowest NETCONF layer is the secure transport layer, and the | |||
as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. The | mandatory-to-implement secure transport is Secure Shell (SSH) | |||
lowest NETCONF layer | <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the | |||
is the secure transport layer, and the mandatory-to-implement secure | mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>.</t> | |||
transport is Secure Shell (SSH) <xref target="RFC6242"/>. The lowest RESTCONF | <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/ | |||
layer | > | |||
is HTTPS, and the mandatory-to-implement secure transport is TLS | provides the means to restrict access for particular NETCONF or RESTCONF users | |||
<xref target="RFC8446"/>.</t> | to a preconfigured subset of all available NETCONF or RESTCONF protocol | |||
operations and content.</t> | ||||
<t> | <t>There are a number of data nodes defined in this YANG module that are | |||
The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/ | writable/creatable/deletable (i.e., config true, which is the default). These | |||
> | data nodes may be considered sensitive or vulnerable in some network | |||
provides the means to restrict access for particular NETCONF or | environments. Write operations (e.g., edit-config) to these data nodes without | |||
RESTCONF users to a preconfigured subset of all available NETCONF or | proper protection can have a negative effect on network operations. These are | |||
RESTCONF protocol operations and content.</t> | the subtrees and data nodes and their sensitivity/vulnerability:</t> | |||
<t>Under | ||||
<t> | ||||
There are a number of data nodes defined in this YANG module that are | ||||
writable/creatable/deletable (i.e., config true, which is the default). | ||||
These data nodes may be considered sensitive or vulnerable in some | ||||
network environments. Write operations (e.g., edit-config) to these | ||||
data nodes without proper protection can have a negative effect on | ||||
network operations. These are the subtrees and data nodes and their | ||||
sensitivity/vulnerability:</t> | ||||
<t>Under | ||||
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
igmp-mld-proxy:igmp-proxy,</t> | igmp-mld-proxy:igmp-proxy:</t> | |||
<dl newline="true"> | ||||
<t>igmp-mld-proxy:interfaces | <dt>igmp-mld-proxy:interfaces</dt> | |||
<list> | <dd>This subtree specifies the interface list for an IGMP Proxy. Modifyi | |||
<t>This subtree specifies the interface list for IGMP Proxy. Modifying | ng | |||
the configuration may cause IGMP Proxy interface to be deleted or | the configuration may cause the IGMP Proxy interface to be deleted or | |||
changed.</t> | changed.</dd> | |||
</list></t> | <dt>igmp-mld-proxy:interfaces/interface</dt> | |||
<dd>This subtree specifies the configuration for the IGMP Proxy | ||||
<t>igmp-mld-proxy:interfaces/interface | ||||
<list> | ||||
<t>This subtree specifies the configuration for the IGMP Proxy | ||||
attributes at the interface level. Modifying the configuration may | attributes at the interface level. Modifying the configuration may | |||
cause IGMP Proxy to be deleted or changed on a specific interface.</t> | cause the IGMP Proxy to be deleted or changed on a specific interface.</dd | |||
</list></t> | > | |||
</dl> | ||||
<t>Under | <t>Under | |||
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
igmp-mld-proxy:mld-proxy,</t> | igmp-mld-proxy:mld-proxy:</t> | |||
<dl newline="true"> | ||||
<t>igmp-mld-proxy:interfaces | <dt>igmp-mld-proxy:interfaces</dt> | |||
<list> | <dd>This subtree specifies the interface list for an MLD Proxy. Modifyin | |||
<t>This subtree specifies the interface list for MLD Proxy. Modifying | g | |||
the configuration may cause MLD Proxy interface to be deleted or | the configuration may cause the MLD Proxy interface to be deleted or | |||
changed.</t> | changed.</dd> | |||
</list></t> | <dt>igmp-mld-proxy:interfaces/interface</dt> | |||
<dd>This subtree specifies the configuration for the MLD Proxy | ||||
<t>igmp-mld-proxy:interfaces/interface | ||||
<list> | ||||
<t>This subtree specifies the configuration for the MLD Proxy | ||||
attributes at the interface level. Modifying the configuration may | attributes at the interface level. Modifying the configuration may | |||
cause MLD Proxy to be deleted or changed on a specific | cause the MLD Proxy to be deleted or changed on a specific | |||
interface.</t> | interface.</dd> | |||
</list></t> | </dl> | |||
<t> | ||||
<t> | Unauthorized access to any data nodes in these subtrees can adversely | |||
Unauthorized access to any data node of these subtrees can adversely | affect the IGMP/MLD Proxy subsystem of both the local device and the | |||
affect the IGMP / MLD Proxy 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>Some of the readable data nodes in this YANG module may be considered | ||||
<t> | sensitive or vulnerable in some network environments. It is thus important to | |||
Some of the readable data nodes in this YANG module may be considered | control read access (e.g., via get, get-config, or notification) to these data | |||
sensitive or vulnerable in some network environments. It is thus | nodes. These are the subtrees and data nodes and their | |||
important to control read access (e.g., via get, get-config, or | sensitivity/vulnerability:</t> | |||
notification) to these data nodes. These are the subtrees and data | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
nodes and their sensitivity/vulnerability:</t> | ||||
<figure><artwork><![CDATA[ | ||||
Under | Under | |||
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
igmp-mld-proxy:igmp-proxy | igmp-mld-proxy:igmp-proxy | |||
igmp-mld-proxy:mld-proxy | igmp-mld-proxy:mld-proxy | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t> | |||
<t> | Unauthorized access to any data nodes in these subtrees can disclose | |||
Unauthorized access to any data node of these subtrees can disclose the | operational state information about the IGMP/MLD Proxy on this device. | |||
operational state information of IGMP / MLD Proxy on this device. The | Group information or source information may expose multicast group membership | |||
group/source information may expose multicast group memberships.</t> | s.</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 | <name>IETF XML Registry</name> | |||
actual RFC number (and remove this note).</t> | <t> | |||
This document registers the following namespace URIs 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 | <dl spacing="compact"> | |||
registry <xref target="RFC3688"/>:</t> | <dt>URI:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy</dd> | |||
<dt>Registrant Contact:</dt><dd>The IESG.</dd> | ||||
<figure><artwork><![CDATA[ | <dt>XML:</dt><dd>N/A; the requested URI is an XML namespace.</dd> | |||
URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy | </dl> | |||
Registrant Contact: The IESG. | </section> | |||
XML: N/A, the requested URI is an XML namespace. | <section anchor="sect-6.2" numbered="true" toc="default"> | |||
]]></artwork> | <name>YANG Module Names Registry</name> | |||
</figure> | <t>This document registers the following YANG module in the "YANG Module | |||
</section> | Names" registry <xref target="RFC6020"/>:</t> | |||
<dl spacing="compact"> | ||||
<section title="YANG Module Names Registry" anchor="sect-6.2"> | <dt>Name:</dt><dd>ietf-igmp-mld-proxy</dd> | |||
<t>This document registers the following YANG modules in the YANG Module | <dt>Namespace:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy</dd> | |||
Names registry [RFC7950]:</t> | <dt>Prefix:</dt><dd>igmp-mld-proxy</dd> | |||
<dt>Reference:</dt><dd>RFC 9398</dd> | ||||
<figure><artwork><![CDATA[ | </dl> | |||
name: ietf-igmp-mld-proxy | </section> | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-proxy | </section> | |||
prefix: igmp-mld-proxy | </middle> | |||
reference: RFC XXXX | <back> | |||
]]></artwork> | <references> | |||
</figure> | <name>References</name> | |||
</section> | <references> | |||
<name>Normative References</name> | ||||
</section> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3 | |||
376.xml"/> | ||||
</middle> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3 | |||
688.xml"/> | ||||
<back> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3 | |||
<references title="Normative References"> | 810.xml"/> | |||
&RFC3376; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
&RFC3688; | 605.xml"/> | |||
&RFC3810; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | |||
&RFC4605; | 020.xml"/> | |||
&RFC6020; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | |||
&RFC6241; | 241.xml"/> | |||
&RFC6242; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | |||
&RFC6991; | 242.xml"/> | |||
&RFC7950; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | |||
&RFC8040; | 991.xml"/> | |||
&RFC8294; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | |||
&RFC8341; | 950.xml"/> | |||
&RFC8342; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
&RFC8343; | 040.xml"/> | |||
&RFC8349; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
&RFC8446; | 294.xml"/> | |||
&RFC8652; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
&RFC9128; | 341.xml"/> | |||
</references> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
<references title="Informative References"> | 342.xml"/> | |||
&RFC7761; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
&RFC7951; | 343.xml"/> | |||
&RFC8340; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
&RFC8407; | 349.xml"/> | |||
</references> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
<section title="Data Tree Example" anchor="sect-appendix"><t> | 446.xml"/> | |||
This section contains an example for IGMP Proxy in the JSON encoding | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
<xref target="RFC7951"/>, containing both configuration and state data. In th | 652.xml"/> | |||
e example | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | |||
128.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
761.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
951.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
340.xml"/> | ||||
</references> | ||||
</references> | ||||
<section anchor="sect-appendix" numbered="true" toc="default"> | ||||
<name>Data Tree Example</name> | ||||
<t> | ||||
This section contains an example for the IGMP Proxy, shown in JSON encoding | ||||
<xref target="RFC7951" format="default"/> and containing both configuration a | ||||
nd state data. In the example, the | ||||
IGMP Proxy is enabled on interface eth1/1.</t> | IGMP Proxy is enabled on interface eth1/1.</t> | |||
<t> | ||||
<t> | The ability to enable IGMP on eth1/2 and eth1/3 is also needed. The configura | |||
It is also needed to enable IGMP on eth1/2 and eth1/3. The configuration | tion | |||
details are omitted here because this document is focused on IGMP/MLD | details are omitted here because this document is focused on IGMP/MLD | |||
Proxy.</t> | Proxies.</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
+-----------+ | +-----------+ | |||
+ Source + | + Source + | |||
+-----+-----+ | +-----+-----+ | |||
| | | | |||
-----------------+---------------------------- | -----------------+---------------------------- | |||
|eth1/1 | |eth1/1 | |||
+---+----+ | +---+----+ | |||
+ R1 + | + R1 + | |||
+-+----+-+ | +-+----+-+ | |||
eth1/2 | \ eth1/3 | eth1/2 | \ eth1/3 | |||
| \ | | \ | |||
| \ | | \ | |||
| \ | | \ | |||
---------------+---------+-------------------- | ||||
| \ | | \ | |||
| \ | | \ | |||
+--------+--+ +---+--------+ | +---------+--+ +---+--------+ | |||
+ Receiver1 + + Receiver2 + | + Receiver 1 + + Receiver 2 + | |||
+-----------+ +------------+ | +------------+ +------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure> | <t>The configuration data for R1 in the above figure could be as follows:< | |||
/t> | ||||
<t>The configuration data for R1 in the above figure could be as follows:</t> | <sourcecode name="" type="json"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
{ | { | |||
"ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
"interface": [ | "interface": [ | |||
{ | { | |||
"name": "eth1/1", | "name": "eth1/1", | |||
"type": "iana-if-type:ipForward", | "type": "iana-if-type:ipForward", | |||
"ietf-ip:ipv4": { | "ietf-ip:ipv4": { | |||
"address": [ | "address": [ | |||
{ | { | |||
"ip": "203.0.113.1", | "ip": "203.0.113.1", | |||
skipping to change at line 946 ¶ | skipping to change at line 901 ¶ | |||
"enabled": true | "enabled": true | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t>The corresponding operational state data for R1 could be as follows:</t | |||
> | ||||
<t>The corresponding operational state data for R1 could be as follows:</t> | <sourcecode name="" type="json"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
{ | { | |||
"ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
"interface": [ | "interface": [ | |||
{ | { | |||
"name": "eth1/1", | "name": "eth1/1", | |||
"type": "iana-if-type:ipForward", | "type": "iana-if-type:ipForward", | |||
"admin-status": "up", | "admin-status": "up", | |||
"oper-status": "up", | "oper-status": "up", | |||
"if-index": 25678136, | "if-index": 25678136, | |||
"statistics": { | "statistics": { | |||
skipping to change at line 1016 ¶ | skipping to change at line 968 ¶ | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </section> | |||
</section> | </back> | |||
</rfc> | ||||
</back> | ||||
</rfc> | ||||
End of changes. 74 change blocks. | ||||
816 lines changed or deleted | 800 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |