| 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. | ||||