<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-rtgwg-yang-rip-11" indexInclude="true" ipr="trust200902" number="8695" prepTime="2020-02-21T13:57:10" scripts="Common,Latin" sortRefs="false" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-rtgwg-yang-rip-11" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8695" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="A YANG Data Model for RIP">A YANG Data Model for the Routing Information Protocol (RIP)</title>
    <seriesInfo name="RFC" value="8695" stream="IETF"/>
    <author fullname="Xufeng Liu" initials="X." surname="Liu">
      <organization showOnFrontPage="true">Volta Networks</organization>
      <address>
        <email>xufeng.liu.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Prateek Sarda" initials="P." surname="Sarda">
      <organization showOnFrontPage="true">Ericsson</organization>
      <address>
        <postal>
          <street>Fern Icon, Survey No 28 and 36/5, Doddanakundi Village</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560037</code>
          <country>India</country>
        </postal>
        <email>prateek.sarda@ericsson.com</email>
      </address>
    </author>
    <author fullname="Vikram Choudhary" initials="V." surname="Choudhary">
      <organization showOnFrontPage="true">Individual</organization>
      <address>
        <postal>
          <city>Bangalore</city>
          <code>560066</code>
          <country>India</country>
        </postal>
        <email>vikschw@gmail.com</email>
      </address>
    </author>
    <date month="02" year="2020"/>
    <keyword>YANG</keyword>
    <keyword>RIP</keyword>
    <keyword>RIPng</keyword>
    <keyword>data model</keyword>
    <keyword>ietf-rip</keyword>
    <keyword>network management</keyword>
    <keyword>routing</keyword>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">
   This document describes a data model for the management of the
   Routing Information Protocol (RIP).  Both RIP version 2 and RIPng are
   covered.  The data model includes definitions for configuration,
   operational state, and Remote Procedure Calls (RPCs).</t>
      <t pn="section-abstract-2">
   The YANG data model in this document conforms to the Network Management
   Datastore Architecture (NMDA).</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8695" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tree-diagrams">Tree Diagrams</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.1.2.3.1"><xref derivedContent="1.3" format="counter" sectionFormat="of" target="section-1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-prefixes-in-data-node-names">Prefixes in Data Node Names</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-design-of-the-data-model">Design of the Data Model</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scope-of-the-data-model">Scope of the Data Model</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-relation-to-the-core-routin">Relation to the Core Routing Framework</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-protocol-configuration">Protocol Configuration</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.4">
                <t keepWithNext="true" pn="section-toc.1-1.2.2.4.1"><xref derivedContent="2.4" format="counter" sectionFormat="of" target="section-2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-protocol-states">Protocol States</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.5">
                <t keepWithNext="true" pn="section-toc.1-1.2.2.5.1"><xref derivedContent="2.5" format="counter" sectionFormat="of" target="section-2.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rpc-operations">RPC Operations</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.6">
                <t keepWithNext="true" pn="section-toc.1-1.2.2.6.1"><xref derivedContent="2.6" format="counter" sectionFormat="of" target="section-2.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-notifications">Notifications</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.7">
                <t keepWithNext="true" pn="section-toc.1-1.2.2.7.1"><xref derivedContent="2.7" format="counter" sectionFormat="of" target="section-2.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-optional-features">Optional Features</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tree-structure">Tree Structure</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-yang-module">YANG Module</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-data-tree-example">Data Tree Example</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="sect-1" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">
   This document introduces a YANG <xref target="RFC7950" format="default" sectionFormat="of" derivedContent="RFC7950"/> data model for the Routing
   Information Protocol (RIP) <xref target="RFC2453" format="default" sectionFormat="of" derivedContent="RFC2453"/><xref target="RFC2080" format="default" sectionFormat="of" derivedContent="RFC2080"/>.  RIP was designed to
   work as an Interior Gateway Protocol (IGP) in moderate-size
   Autonomous Systems (AS).</t>
      <t pn="section-1-2">
   This YANG data model supports both RIP version 2 and RIPng.  RIP version 2
   (defined in <xref target="RFC2453" format="default" sectionFormat="of" derivedContent="RFC2453"/>) supports IPv4.  RIPng (defined in <xref target="RFC2080" format="default" sectionFormat="of" derivedContent="RFC2080"/>)
   supports IPv6.</t>
      <section anchor="sect-1.1" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-terminology">Terminology</name>
        <t pn="section-1.1-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
        <t pn="section-1.1-2">
   The following terms are defined in <xref target="RFC7950" format="default" sectionFormat="of" derivedContent="RFC7950"/> and are not redefined
   here:</t>
        <ul spacing="normal" bare="false" empty="false" pn="section-1.1-3">
          <li pn="section-1.1-3.1">augment</li>
          <li pn="section-1.1-3.2">data model</li>
          <li pn="section-1.1-3.3">data node</li>
        </ul>
      </section>
      <section anchor="sect-1.2" numbered="true" toc="include" removeInRFC="false" pn="section-1.2">
        <name slugifiedName="name-tree-diagrams">Tree Diagrams</name>
        <t pn="section-1.2-1">
   A simplified graphical representation of the data model is used in
   this document.  The meaning of the symbols in these diagrams is
   defined in <xref target="RFC8340" format="default" sectionFormat="of" derivedContent="RFC8340"/>.</t>
      </section>
      <section anchor="sect-1.3" numbered="true" toc="include" removeInRFC="false" pn="section-1.3">
        <name slugifiedName="name-prefixes-in-data-node-names">Prefixes in Data Node Names</name>
        <t pn="section-1.3-1">
   In this document, names of data nodes, actions, and other data model
   objects are often used without a prefix, as long as it is clear from
   the context in which YANG module each name is defined.  Otherwise,
   names are prefixed using the standard prefix associated with the
   corresponding YANG module, as shown in <xref target="tab-prefixes-and-corresponding-yang-modules" format="default" sectionFormat="of" derivedContent="Table 1"/>.</t>
        <table anchor="tab-prefixes-and-corresponding-yang-modules" align="center" pn="table-1">
          <name slugifiedName="name-prefixes-and-corresponding-">Prefixes and Corresponding YANG Modules</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Prefix</th>
              <th align="left" colspan="1" rowspan="1">YANG module</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">yang</td>
              <td align="left" colspan="1" rowspan="1">ietf-yang-types</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6991" format="default" sectionFormat="of" derivedContent="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">inet</td>
              <td align="left" colspan="1" rowspan="1">ietf-inet-types</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6991" format="default" sectionFormat="of" derivedContent="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">if</td>
              <td align="left" colspan="1" rowspan="1">ietf-interfaces</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8343" format="default" sectionFormat="of" derivedContent="RFC8343"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">ip</td>
              <td align="left" colspan="1" rowspan="1">ietf-ip</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8344" format="default" sectionFormat="of" derivedContent="RFC8344"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">rt</td>
              <td align="left" colspan="1" rowspan="1">ietf-routing</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8349" format="default" sectionFormat="of" derivedContent="RFC8349"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">bfd-types</td>
              <td align="left" colspan="1" rowspan="1">ietf-bfd-types</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="I-D.ietf-bfd-yang" format="default" sectionFormat="of" derivedContent="YANG-BFD"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">isis</td>
              <td align="left" colspan="1" rowspan="1">ietf-isis</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="I-D.ietf-isis-yang-isis-cfg" format="default" sectionFormat="of" derivedContent="YANG-ISIS"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">key-chain</td>
              <td align="left" colspan="1" rowspan="1">ietf-key-chain</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8177" format="default" sectionFormat="of" derivedContent="RFC8177"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">ospf</td>
              <td align="left" colspan="1" rowspan="1">ietf-ospf</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="I-D.ietf-ospf-yang" format="default" sectionFormat="of" derivedContent="YANG-OSPF"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="sect-2" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-design-of-the-data-model">Design of the Data Model</name>
      <section anchor="sect-2.1" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-scope-of-the-data-model">Scope of the Data Model</name>
        <t pn="section-2.1-1">
   The data model covers RIP version 2 <xref target="RFC2453" format="default" sectionFormat="of" derivedContent="RFC2453"/> and RIPng <xref target="RFC2080" format="default" sectionFormat="of" derivedContent="RFC2080"/>
   protocols.  The model is designed to be implemented on a device where
   RIP version 2 or RIPng is implemented, and can be used to:</t>
        <ul spacing="normal" bare="false" empty="false" pn="section-2.1-2">
          <li pn="section-2.1-2.1">Configure the RIP version 2 or RIPng protocol.</li>
          <li pn="section-2.1-2.2">Manage the protocol operational behaviors.</li>
          <li pn="section-2.1-2.3">Retrieve the protocol operational status.</li>
        </ul>
        <t pn="section-2.1-3">
   The capabilities described in <xref target="RFC1724" format="default" sectionFormat="of" derivedContent="RFC1724"/> are covered.</t>
      </section>
      <section anchor="sect-2.2" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-relation-to-the-core-routin">Relation to the Core Routing Framework</name>
        <t pn="section-2.2-1">
   This data model augments the core routing data model "ietf-routing"
   specified in <xref target="RFC8349" format="default" sectionFormat="of" derivedContent="RFC8349"/>.</t>
        <sourcecode type="yangtree" markers="false" pn="section-2.2-2">
  +--rw routing
     +--rw router-id?
     +--rw control-plane-protocols
     |  +--rw control-plane-protocol* [type name]
     |     +--rw type
     |     +--rw name
     |     +--rw rip     &lt;= Augmented by this Model
                 ...
</sourcecode>
        <t pn="section-2.2-3">
   The "rip" container instantiates a RIP entity that supports
   RIP version 2 or RIPng.  Depending on the implementation of "ietf-routing", a RIP instance <bcp14>MAY</bcp14> belong to a logical router or network
   instance.</t>
      </section>
      <section anchor="sect-2.3" numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-protocol-configuration">Protocol Configuration</name>
        <t pn="section-2.3-1">
   The data model structure for the protocol configuration is as shown below:</t>
        <sourcecode type="yangtree" markers="false" pn="section-2.3-2">
  augment /rt:routing/rt:control-plane-protocols/
  rt:control-plane-protocol:
    +--rw rip
       +--rw &lt;per instance configuration&gt;
       +--rw interface* [interface]
          +--rw interface                  if:interface-ref
          +--rw &lt;per interface configuration&gt;
          +--rw neighbors {explicit-neighbors}?
          |  +--rw neighbor* [address]
          |     +--rw address    inet:ip-address
          |     +--rw &lt;per neighbor configuration&gt;
</sourcecode>
        <t pn="section-2.3-3">The data model allows the configuration of the following protocol entities:</t>
        <ul spacing="normal" bare="false" empty="false" pn="section-2.3-4">
          <li pn="section-2.3-4.1">Protocol instance (RIP version 2 or RIPng)</li>
          <li pn="section-2.3-4.2">Interface</li>
          <li pn="section-2.3-4.3">Neighbor</li>
        </ul>
      </section>
      <section anchor="sect-2.4" numbered="true" toc="include" removeInRFC="false" pn="section-2.4">
        <name slugifiedName="name-protocol-states">Protocol States</name>
        <t pn="section-2.4-1">
   The data model structure for the protocol states is as shown below:</t>
        <sourcecode type="yangtree" markers="false" pn="section-2.4-2">
  augment /rt:routing/rt:control-plane-protocols/
  rt:control-plane-protocol:
    +--rw rip
       +--ro &lt;per instance operational states&gt;
       +--rw interface* [interface]
       |  +--rw interface                  if:interface-ref
       |  +--ro &lt;per instance operational states&gt;
       |  +--ro statistics {interface-statistics}?
       |     +--ro &lt;per instance statistics&gt;
       +--ro ipv4
       |  +--ro neighbors
       |  |  +--ro neighbor* [ipv4-address]
       |  |     +--ro &lt;per neighbor IPv4 operational states&gt;
       |  +--ro routes
       |     +--ro route* [ipv4-prefix]
       |        +--ro &lt;IPv4 RIP route states&gt;
       +--ro ipv6
       |  +--ro neighbors
       |  |  +--ro neighbor* [ipv6-address]
       |  |     +--ro &lt;per neighbor IPv6 operational states&gt;
       |  +--ro routes
       |     +--ro route* [ipv6-prefix]
       |        +--ro ipv6-prefix                    inet:ipv6-prefix
       |        +--ro &lt;IPv4 RIP route states&gt;
       +--ro statistics {global-statistics}?
          +--ro &lt;per instance statistics&gt;
</sourcecode>
        <t pn="section-2.4-3">
   This model conforms to the Network Management Datastore Architecture
   (NMDA) <xref target="RFC8342" format="default" sectionFormat="of" derivedContent="RFC8342"/>.  The operational state data is combined with the
   associated configuration data in the same hierarchy <xref target="RFC8407" format="default" sectionFormat="of" derivedContent="RFC8407"/>.  When
   protocol states are retrieved from the NMDA operational state
   datastore, the returned states cover all "config true" (rw) and
   "config false" (ro) nodes defined in the schema.</t>
        <t pn="section-2.4-4">The model allows the retrieval of protocol states at the following levels:</t>
        <ul spacing="normal" bare="false" empty="false" pn="section-2.4-5">
          <li pn="section-2.4-5.1">Protocol instance (RIP version 2 or RIPng)</li>
          <li pn="section-2.4-5.2">Interface</li>
          <li pn="section-2.4-5.3">Neighbor</li>
          <li pn="section-2.4-5.4">Route</li>
        </ul>
      </section>
      <section anchor="sect-2.5" numbered="true" toc="include" removeInRFC="false" pn="section-2.5">
        <name slugifiedName="name-rpc-operations">RPC Operations</name>
        <t pn="section-2.5-1">
   This model defines one RPC "clear-rip-route" that can be used to
   clear RIP routes from the routing table.</t>
      </section>
      <section anchor="sect-2.6" numbered="true" toc="include" removeInRFC="false" pn="section-2.6">
        <name slugifiedName="name-notifications">Notifications</name>
        <t pn="section-2.6-1"> 
   This model does not define RIP-specific notifications.  To enable
   notifications, the mechanisms defined in
   <xref target="RFC8639" format="default" sectionFormat="of" derivedContent="RFC8639"/> and
   <xref target="RFC8641" format="default" sectionFormat="of" derivedContent="RFC8641"/> can be used.  This mechanism currently
   allows the user to do the following: </t>
        <ul spacing="normal" bare="false" empty="false" pn="section-2.6-2">
          <li pn="section-2.6-2.1">Subscribe to notifications on a per-client basis.</li>
          <li pn="section-2.6-2.2">Specify subtree filters or XML Path Language (XPath) filters so that only interested
        contents will be sent.</li>
          <li pn="section-2.6-2.3">Specify either periodic or on-demand notifications.</li>
        </ul>
      </section>
      <section anchor="sect-2.7" numbered="true" toc="include" removeInRFC="false" pn="section-2.7">
        <name slugifiedName="name-optional-features">Optional Features</name>
        <t pn="section-2.7-1">
   This model defines several features that are beyond the basic RIP
   configuration, and it is the responsibility of each vendor to decide
   whether to support a given feature on a device.</t>
      </section>
    </section>
    <section anchor="sect-3" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-tree-structure">Tree Structure</name>
      <t pn="section-3-1">
   This document defines the YANG module "ietf-rip", which has the
   following tree structure:</t>
      <sourcecode type="yangtree" markers="false" pn="section-3-2">
module: ietf-rip
  augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol:
    +--rw rip
       +--rw originate-default-route
       |  +--rw enabled?        boolean
       |  +--rw route-policy?   route-policy-ref
       +--rw default-metric?               uint8
       +--rw distance?                     uint8
       +--rw triggered-update-threshold?   uint8
       +--rw maximum-paths?                uint8
       +--rw output-delay?                 uint8
       +--rw distribute-list* [prefix-set-name direction]
       |  +--rw prefix-set-name    prefix-set-ref
       |  +--rw direction          enumeration
       |  +--rw if-name?           if:interface-ref
       +--rw redistribute
       |  +--rw bgp* [asn]
       |  |  +--rw asn             inet:as-number
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw cg-nat!
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw connected!
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw ipsec!
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw isis* [instance]
       |  |  +--rw instance
       |  |  |       -&gt; ../../../../../rt:control-plane-protocol/name
       |  |  +--rw level?          enumeration
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw nat!
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw ospfv2* [instance]
       |  |  +--rw instance
       |  |  |       -&gt; ../../../../../rt:control-plane-protocol/name
       |  |  +--rw route-type?     ospf:route-type
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw ospfv3* [instance]
       |  |  +--rw instance
       |  |  |       -&gt; ../../../../../rt:control-plane-protocol/name
       |  |  +--rw route-type?     ospf:route-type
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw ripv2* [instance]
       |  |  +--rw instance
       |  |  |       -&gt; ../../../../../rt:control-plane-protocol/name
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw ripng* [instance]
       |  |  +--rw instance
       |  |  |       -&gt; ../../../../../rt:control-plane-protocol/name
       |  |  +--rw metric?         uint8
       |  |  +--rw route-policy?   route-policy-ref
       |  +--rw static!
       |     +--rw metric?         uint8
       |     +--rw route-policy?   route-policy-ref
       +--rw timers
       |  +--rw update-interval?     uint16
       |  +--rw invalid-interval?    uint16
       |  +--rw holddown-interval?   uint16
       |  +--rw flush-interval?      uint16
       +--rw interfaces
       |  +--rw interface* [interface]
       |     +--rw interface                  if:interface-ref
       |     +--rw authentication
       |     |  +--rw (auth-type-selection)?
       |     |     +--:(auth-key-chain)
       |     |     |  +--rw key-chain?
 key-chain:key-chain-ref
       |     |     +--:(auth-key)
       |     |        +--rw key?                string
       |     |        +--rw crypto-algorithm?   identityref
       |     +--rw bfd {bfd}?
       |     |  +--rw enable?                     boolean
       |     |  +--rw local-multiplier?           multiplier
       |     |  +--rw (interval-config-type)?
       |     |     +--:(tx-rx-intervals)
       |     |     |  +--rw desired-min-tx-interval?    uint32
       |     |     |  +--rw required-min-rx-interval?   uint32
       |     |     +--:(single-interval)
       |     |        +--rw min-interval?               uint32
       |     +--rw cost?                      uint8
       |     +--rw neighbors {explicit-neighbors}?
       |     |  +--rw neighbor* [address]
       |     |     +--rw address    inet:ip-address
       |     +--rw no-listen?                 empty
       |     +--rw originate-default-route
       |     |  +--rw enabled?        boolean
       |     |  +--rw route-policy?   route-policy-ref
       |     +--rw passive?                   empty
       |     +--rw split-horizon?             enumeration
       |     +--rw summary-address
       |     |  +--rw address?   inet:ip-prefix
       |     |  +--rw metric?    uint8
       |     +--rw timers
       |     |  +--rw update-interval?     uint16
       |     |  +--rw invalid-interval?    uint16
       |     |  +--rw holddown-interval?   uint16
       |     |  +--rw flush-interval?      uint16
       |     +--ro oper-status?               enumeration
       |     +--ro next-full-update?          uint32
       |     +--ro valid-address?             boolean
       |     +--ro statistics {interface-statistics}?
       |        +--ro discontinuity-time?   yang:date-and-time
       |        +--ro bad-packets-rcvd?     yang:counter32
       |        +--ro bad-routes-rcvd?      yang:counter32
       |        +--ro updates-sent?         yang:counter32
       +--ro next-triggered-update?        uint32
       +--ro num-of-routes?                uint32
       +--ro ipv4
       |  +--ro neighbors
       |  |  +--ro neighbor* [ipv4-address]
       |  |     +--ro ipv4-address        inet:ipv4-address
       |  |     +--ro last-update?        yang:date-and-time
       |  |     +--ro bad-packets-rcvd?   yang:counter32
       |  |     +--ro bad-routes-rcvd?    yang:counter32
       |  +--ro routes
       |     +--ro route* [ipv4-prefix]
       |        +--ro ipv4-prefix
 inet:ipv4-prefix
       |        +--ro next-hop?
 inet:ipv4-address
       |        +--ro interface?
 if:interface-ref
       |        +--ro redistributed?                  boolean
       |        +--ro route-type?                     enumeration
       |        +--ro metric?                         uint8
       |        +--ro expire-time?                    uint16
       |        +--ro deleted?                        boolean
       |        +--ro holddown?                       boolean
       |        +--ro need-triggered-update?          boolean
       |        +--ro inactive?                       boolean
       |        +--ro flush-expire-before-holddown?   boolean
       +--ro ipv6
       |  +--ro neighbors
       |  |  +--ro neighbor* [ipv6-address]
       |  |     +--ro ipv6-address        inet:ipv6-address
       |  |     +--ro last-update?        yang:date-and-time
       |  |     +--ro bad-packets-rcvd?   yang:counter32
       |  |     +--ro bad-routes-rcvd?    yang:counter32
       |  +--ro routes
       |     +--ro route* [ipv6-prefix]
       |        +--ro ipv6-prefix
 inet:ipv6-prefix
       |        +--ro next-hop?
 inet:ipv6-address
       |        +--ro interface?
 if:interface-ref
       |        +--ro redistributed?                  boolean
       |        +--ro route-type?                     enumeration
       |        +--ro metric?                         uint8
       |        +--ro expire-time?                    uint16
       |        +--ro deleted?                        boolean
       |        +--ro holddown?                       boolean
       |        +--ro need-triggered-update?          boolean
       |        +--ro inactive?                       boolean
       |        +--ro flush-expire-before-holddown?   boolean
       +--ro statistics {global-statistics}?
          +--ro discontinuity-time?   yang:date-and-time
          +--ro requests-rcvd?        yang:counter32
          +--ro requests-sent?        yang:counter32
          +--ro responses-rcvd?       yang:counter32
          +--ro responses-sent?       yang:counter32

  rpcs:
    +---x clear-rip-route
       +---w input
          +---w rip-instance?   leafref
</sourcecode>
    </section>
    <section anchor="sect-4" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-yang-module">YANG Module</name>
      <sourcecode name="ietf-rip@2020-02-20.yang" type="yang" markers="true" pn="section-4-1">
module ietf-rip {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-rip";
  prefix rip;

  import ietf-inet-types {
    prefix inet;
  }
  import ietf-yang-types {
    prefix yang;
  }
  import ietf-interfaces {
    prefix if;
  }
  import ietf-ip {
    prefix ip;
  }
  import ietf-routing {
    prefix rt;
  }
  import ietf-key-chain {
    prefix key-chain;
  }
  import ietf-bfd-types {
    prefix bfd-types;
  }
  import ietf-ospf {
    prefix ospf;
  }
  import ietf-isis {
    prefix isis;
  }

  organization
    "IETF Routing Area Working Group (rtgwg)";
  contact
    "WG Web:   &lt;https://datatracker.ietf.org/wg/rtgwg/&gt;
     WG List:  &lt;mailto:rgtwg@ietf.org&gt;

     Editor:   Xufeng Liu
               &lt;mailto:xufeng.liu.ietf@gmail.com&gt;

     Editor:   Prateek Sarda
               &lt;mailto:prateek.sarda@ericsson.com&gt;

     Editor:   Vikram Choudhary
               &lt;mailto:vikschw@gmail.com&gt;";
  description
    "This YANG module defines a model for managing Routing
     Information Protocol (RIP), including RIP version 2 and RIPng.

     Copyright (c) 2020 IETF Trust and the persons identified as
     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 Simplified 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 8695; see the
     RFC itself for full legal notices.";

  revision 2020-02-20 {
    description
      "Initial revision.";
    reference
      "RFC 8695: A YANG Data Model for Routing Information Protocol
       (RIP).
       RFC 2453: RIP Version 2.
       RFC 2080: RIPng for IPv6.
       RFC 1724: RIP Version 2 MIB Extension.";
  }

  /*
   * Features
   */

  feature bfd {
    description
      "This feature indicates that the RIP implementation on the
       system supports BFD (Bidirectional Forwarding Detection).";
  }

  feature explicit-neighbors {
    description
      "This feature indicates that the system supports explicit
       neighbor configuration on a RIP interface.";
  }

  feature global-statistics {
    description
      "This feature indicates that the system supports collecting
       global statistics data related to RIP.";
  }

  feature interface-statistics {
    description
      "This feature indicates that the system supports collecting
       per-interface statistics data related to RIP.";
  }

  /*
   * Typedefs
   */

  typedef prefix-set-ref {
    type string;
    description
      "A type for a reference to a prefix set.
       The string value is the name identifier for uniquely
       identifying the referenced prefix set, which contains a list
       of prefixes that a routing policy can applied.  The definition
       of such a prefix set is outside the scope of this document.";
  }

  typedef route-policy-ref {
    type string;
    description
      "A type for a reference to a route policy.
       The string value is the name identifier for uniquely
       identifying the referenced routing policy, which contains one
       or more policy rules that can be used for a routing decision.
       The definition of such a routing policy is outside the scope
       of this document.";
  }

  /*
   * Identities
   */

  identity rip {
    base rt:routing-protocol;
    description
      "Identity for the Routing Information Protocol.";
  }

  identity ripv2 {
    base rip:rip;
    description
      "Identity for RIPv2 (RIP version 2).";
  }

  identity ripng {
    base rip:rip;
    description
      "Identity for RIPng.";
  }

  /*
   * Groupings
   */

  grouping originate-default-route-container {
    description
      "Container for settings on whether to originate the default
       route in RIP routing instance.";
    container originate-default-route {
      description
        "Injects the default route into the RIP (RIPv2 or RIPng)
         routing instance.";
      leaf enabled {
        type boolean;
        default "false";
        description
          "'true' if originating default route is enabled.";
      }
      leaf route-policy {
        type route-policy-ref;
        description
          "The conditions of the route policy are applied to the
           default route.";
      }
    }
  }

  grouping redistribute-container {
    description
      "Container of redistribute attributes.";
    container redistribute {
      description
        "Redistributes routes learned from other routing protocols
         into the RIP routing instance.";
      list bgp {
        key "asn";
        description
          "Redistributes routes from the specified BGP (Border
           Gateway Protocol) autonomous system (AS) into the RIP
           routing instance.";
        leaf asn {
          type inet:as-number;
          description
            "BGP autonomous system (AS) number.";
        }
        uses redistribute-route-policy-attributes;
      }
      container cg-nat {
        presence "Present if Carrier-Grade Network Address
                  Translation (CGNAT) routes are redistributed.";
        description
          "Carrier-Grade Network Address Translation (CGNAT)
           routes.";
        uses redistribute-route-policy-attributes;
      }
      container connected {
        presence "Present if directly attached network routes are
                  redistributed.";
        description
          "Redistributes directly attached networks into the RIP
           routing instance.";
        uses redistribute-route-policy-attributes;
      }
      container ipsec {
        presence "Present if IP security routing instance routes
                  are redistributed.";
        description
          "Redistributes routes from the IP security routing
           instance into the RIP routing instance.";
        uses redistribute-route-policy-attributes;
      }
      list isis {
        key "instance";
        description
          "Redistributes IS-IS routes.";
        leaf instance {
          type leafref {
            path "../../../../../rt:control-plane-protocol/rt:name";
          }
          must "derived-from-or-self("
             + "../../../../../rt:control-plane-protocol"
             + "[rt:name = current()]/rt:type, 'isis:isis')" {
            description
              "The type of the routing protocol must be 'isis'.";
          }
          description
            "Redistributes routes from the specified IS-IS routing
             instance into the RIP routing instance.";
        }
        leaf level {
          type enumeration {
            enum 1 {
              description
                "IS-IS level 1 routes.";
            }
            enum 2 {
              description
                "IS-IS level 2 routes.";
            }
            enum 1-2 {
              description
                "IS-IS level 1-2 routes.";
            }
          }
          description
            "IS-IS level.";
        }
        uses redistribute-route-policy-attributes;
      }
      container nat {
        presence "Present if Network Address Translation (NAT) routes
                  are redistributed.";
        description
          "Redistributes Network Address Translation (NAT)
           routes into the RIP routing instance.";
        uses redistribute-route-policy-attributes;
      }
      list ospfv2 {
        when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" {
          description
            "Applicable to RIPv2.";
        }
        key "instance";
        description
          "Redistributes routes from the specified OSPFv2 routing
           instance into the RIPv2 routing instance.";
        leaf instance {
          type leafref {
            path "../../../../../rt:control-plane-protocol/rt:name";
          }
          must "derived-from-or-self("
             + "../../../../../rt:control-plane-protocol"
             + "[rt:name = current()]/rt:type, 'ospf:ospfv2')" {
            description
              "The type of the routing protocol must be 'ospfv2'.";
          }
          description
            "OSPFv2 instance ID. Redistributes routes from the
             specified OSPFv2 routing instance into the RIPv2 routing
             instance.";
        }
        leaf route-type {
          type ospf:route-type;
          description
            "Redistributes only those OSPFv2 routes matching the
             specified route type into the RIPv2 routing instance.";
        }
        uses redistribute-route-policy-attributes;
      }
      list ospfv3 {
        when "derived-from-or-self(../../../rt:type, 'rip:ripng')" {
          description
            "Applicable to RIPng.";
        }
        key "instance";
        description
          "Redistributes routes from the specified OSPFv3 routing
           instance into the RIPng routing instance.";
        leaf instance {
          type leafref {
            path "../../../../../rt:control-plane-protocol/rt:name";
          }
          must "derived-from-or-self("
             + "../../../../../rt:control-plane-protocol"
             + "[rt:name = current()]/rt:type, 'ospf:ospfv3')" {
            description
              "The type of the routing protocol must be 'ospfv3'.";
          }
          description
            "OSPFv3 instance ID. Redistributes routes from the
             specified OSPFv3 routing instance into the RIPng routing
             instance.";
        }
        leaf route-type {
          type ospf:route-type;
          description
            "Redistributes only those OSPFv3 routes matching the
             specified route type into the RIPng routing instance.";
        }
        uses redistribute-route-policy-attributes;
      }
      list ripv2 {
        when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" {
          description
            "Applicable to RIPv2.";
        }
        key "instance";
        description
          "Redistributes routes from another RIPv2 routing instance
           into the current RIPv2 routing instance.";
        leaf instance {
          type leafref {
            path "../../../../../rt:control-plane-protocol/rt:name";
          }
          must "derived-from-or-self("
             + "../../../../../rt:control-plane-protocol"
             + "[rt:name = current()]/rt:type, 'rip:ripv2')" {
            description
              "The type of the routing protocol must be 'ripv2'.";
          }
          description
            "Redistributes routes from the specified RIPv2 routing
             instance into the RIPv2 routing instance.";
        }
        uses redistribute-route-policy-attributes;
      }
      list ripng {
        when "derived-from-or-self(../../../rt:type, 'rip:ripng')" {
          description
            "Applicable to RIPng.";
        }
        key "instance";
        description
          "Redistributes routes from another RIPng routing instance
           into the current RIPng routing instance.";
        leaf instance {
          type leafref {
            path "../../../../../rt:control-plane-protocol/rt:name";
          }
          must "derived-from-or-self("
             + "../../../../../rt:control-plane-protocol"
             + "[rt:name = current()]/rt:type, 'rip:ripng')" {
            description
              "The type of the routing protocol must be 'ripng'.";
          }
          description
            "Redistributes routes from the specified RIPng routing
             instance into the RIPng routing instance.";
        }
        uses redistribute-route-policy-attributes;
      }
      container static {
        presence "Present if redistributing static routes.";
        description
          "Redistributes static routes into the RIP routing
           instance.";
        uses redistribute-route-policy-attributes;
      }
    }
    // redistribute
  }
  // redistribute-container

  grouping redistribute-route-policy-attributes {
    description
      "Attributes for redistributing a route policy.";
    leaf metric {
      type uint8 {
        range "0..16";
      }
      description
        "Metric used for the redistributed route. If a metric is
         not specified, the metric configured with the
         default-metric attribute in RIP router configuration is
         used.  If the default-metric attribute has not been
         configured, the default metric for redistributed routes
         is 1.";
    }
    leaf route-policy {
      type route-policy-ref;
      description
        "Applies the conditions of the specified route policy to
         routes that are redistributed into the RIP routing
         instance.";
    }
  }
  // redistribute-route-policy-attributes

  grouping timers-container {
    description
      "Container for settings of basic timers";
    container timers {
      must 'invalid-interval &gt;= (update-interval * 3)' {
        description
          "invalid-interval must be at least three times the value
           for the update-interval argument.";
      }
      must 'flush-interval &gt; invalid-interval' {
        description
          "flush-interval must be larger than the value for the
           invalid-interval argument.";
      }
      description
        "Timers for the specified RIPv2 or RIPng instance or
         interface.";
      leaf update-interval {
        type uint16 {
          range "1..32767";
        }
        units "seconds";
        default "30";
        description
          "Interval at which RIPv2 or RIPng updates are sent.";
      }
      leaf invalid-interval {
        type uint16 {
          range "1..32767";
        }
        units "seconds";
        default "180";
        description
          "Interval before a route is declared invalid after no
           updates are received.  This value is at least three times
           the value for the update-interval argument.";
      }
      leaf holddown-interval {
        type uint16 {
          range "1..32767";
        }
        units "seconds";
        default "180";
        description
          "Interval before better routes are released.";
      }
      leaf flush-interval {
        type uint16 {
          range "1..32767";
        }
        units "seconds";
        default "240";
        description
          "Interval before a route is flushed from the routing
           table. This value must be larger than the value for the
           invalid-interval argument.";
      }
    }
    // timers
  }
  // timers-container

  grouping global-attributes {
    description
      "Global configuration and state attributes.";
    uses originate-default-route-container;
    leaf default-metric {
      type uint8 {
        range "0..16";
      }
      default "1";
      description
        "Set the default metric.";
    }
    leaf distance {
      type uint8 {
        range "1..255";
      }
      default "120";
      description
        "The administrative distance of the RIPv2 or RIPng for the
         current RIPv2 or RIPng instance.";
    }
    leaf triggered-update-threshold {
      type uint8 {
        range "1..30";
      }
      units "seconds";
      default "5";
      description
        "This attribute is used to suppress triggered updates.
         When the arrival of a regularly scheduled update matches the
         number of seconds or is less than the number seconds
         configured with this attribute, the triggered update is
         suppressed.";
    }
    leaf maximum-paths {
      type uint8 {
        range "1..16";
      }
      default "8";
      description
        "The number of multiple equal-cost RIPv2 or RIPng routes
         that can be used as the best paths for balancing the load
         of outgoing traffic packets.";
    }
    leaf output-delay {
      type uint8 {
        range "1..50";
      }
      units "milliseconds";
      description
        "A delay time between packets sent in multipacket
         RIPv2 or RIPng updates.";
    }
  }
  // global-attributes

  grouping distribute-lists {
    description
      "Grouping for distribute lists.";
    list distribute-list {
      key "prefix-set-name direction";
      description
        "List of distribute-lists, which are used to filter incoming
         or outgoing routing updates.";
      leaf prefix-set-name {
        type prefix-set-ref;
        description
          "Reference to a prefix list to be applied to RIPv2 or
           RIPng packets.";
      }
      leaf direction {
        type enumeration {
          enum in {
            description
              "Apply the distribute-list to incoming routes.";
          }
          enum out {
            description
              "Apply the distribute-list to outgoing routes.";
          }
        }
        description
          "Direction of the routing updates.";
      }
      leaf if-name {
        type if:interface-ref;
        description
          "Reference to an interface to which the prefix list is
           applied.";
      }
    }
    // distribute-list
  }
  // distribute-lists

  grouping route-attributes {
    description
      "Grouping for route attributes.";
    leaf redistributed {
      type boolean;
      description
        "Redistributed routes.";
    }
    leaf route-type {
      type enumeration {
        enum connected {
          description
            "Connected route.";
        }
        enum external {
          description
            "External route.";
        }
        enum external-backup {
          description
            "External backup route.";
        }
        enum rip {
          description
            "RIP route.";
        }
      }
      description
        "Route type.";
    }
    leaf metric {
      type uint8 {
        range "0..16";
      }
      description
        "Route metric.";
    }
    leaf expire-time {
      type uint16;
      description
        "Expiration time.";
    }
    leaf deleted {
      type boolean;
      description
        "Deleted route.";
    }
    leaf holddown {
      type boolean;
      description
        "Holddown route.";
    }
    leaf need-triggered-update {
      type boolean;
      description
        "The route needs triggered update.";
    }
    leaf inactive {
      type boolean;
      description
        "The route is inactive.";
    }
    leaf flush-expire-before-holddown {
      type boolean;
      description
        "The flush timer expired before holddown time.";
    }
  }
  // route-attributes

  /*
   * Configuration data and operational state data nodes
   */

  augment "/rt:routing/rt:control-plane-protocols/"
        + "rt:control-plane-protocol" {
    when "derived-from(rt:type, 'rip:rip')" {
      description
        "This augment is only valid for a routing protocol instance
         of RIP (type 'ripv2' or 'ripng').";
    }
    description
      "RIP augmentation.";
    container rip {
      description
        "RIP data.";
      uses global-attributes;
      uses distribute-lists;
      uses redistribute-container;
      uses timers-container;
      container interfaces {
        description
          "Containing a list of RIP interfaces.";
        list interface {
          key "interface";
          description
            "List of RIP interfaces.";
          leaf interface {
            type if:interface-ref;
            must "(derived-from-or-self("
               + "../../../../rt:type, 'rip:ripv2') and "
               + "/if:interfaces/if:interface[if:name=current()]/"
               + "ip:ipv4) or "
               + "(derived-from-or-self("
               + "../../../../rt:type, 'rip:ripng') and "
               + "/if:interfaces/if:interface[if:name=current()]/"
               + "ip:ipv6)" {
              error-message "Invalid interface type.";
              description
                "RIPv2 can be enabled on IPv4 interface, and
                 RIPng can be enabled on IPv6 interface.";
            }
            description
              "Enable RIP on this interface.";
          }
          container authentication {
            when "derived-from-or-self("
               + "../../../../rt:type, 'rip:ripv2')" {
              description
                "Only applicable to RIPv2.";
            }
            description
              "Enables authentication and specifies the
               authentication scheme for the RIP interface.";
            choice auth-type-selection {
              description
                "Specify the authentication scheme.";
              reference
                "RFC8177: YANG Data Model for Key Chains.";
              case auth-key-chain {
                leaf key-chain {
                  type key-chain:key-chain-ref;
                  description
                    "key-chain name.";
                }
              }
              case auth-key {
                leaf key {
                  type string;
                  description
                    "Key string in ASCII format.";
                }
                leaf crypto-algorithm {
                  type identityref {
                    base key-chain:crypto-algorithm;
                  }
                  description
                    "Cryptographic algorithm associated with the
                     key.";
                }
              }
            }
          }
          container bfd {
            if-feature "bfd";
            description
              "BFD configuration.";
            uses bfd-types:client-cfg-parms;
          }
          leaf cost {
            type uint8 {
              range "1..16";
            }
            default "1";
            description
              "Interface cost.";
          }
          container neighbors {
            if-feature "explicit-neighbors";
            description
              "Specifies the RIP neighbors.  Useful for a
               non-broadcast multiple access (NBMA) network.";
            list neighbor {
              key "address";
              description
                "Specify a RIP neighbor on a non-broadcast network.";
              leaf address {
                type inet:ip-address;
                description
                  "Neighbor IP address.";
              }
            }
          }
          leaf no-listen {
            type empty;
            description
              "Disables listening to, and processing of, RIPv2 or
               RIPng packets on the specified interface.";
          }
          uses originate-default-route-container;
          leaf passive {
            type empty;
            description
              "Disables sending of RIPv2 or RIPng packets on the
               specified interface.";
          }
          leaf split-horizon {
            type enumeration {
              enum disabled {
                description
                  "Disables split-horizon processing.";
              }
              enum simple {
                description
                  "Enables simple split-horizon processing.";
              }
              enum poison-reverse {
                description
                  "Enables split-horizon processing with poison
                   reverse.";
              }
            }
            default "simple";
            description
              "Controls RIPv2 or RIPng split-horizon processing on
               the specified interface.";
          }
          container summary-address {
            description
              "Summarizes information about RIPv2 or RIPng routes
               sent over the specified interface in RIPv2 or RIPng
               update packets.";
            leaf address {
              type inet:ip-prefix;
              description
                "Specifies the IP address and the prefix length that
                 identify the routes to be summarized.  The IP
                 address can be specified in either IPv4 or IPv6
                 format, as specified in RFC6991.";
            }
            leaf metric {
              type uint8 {
                range "0..16";
              }
              description
                "Metric used for the route.  If this attribute is not
                 used, the value set through the default-metric
                 attribute in RIPv2 or RIPng router configuration is
                 used for the route.";
            }
          }
          uses timers-container;

          /* Operational state */
          leaf oper-status {
            type enumeration {
              enum up {
                description
                  "RIPv2 or RIPng is operational on this interface.";
              }
              enum down {
                description
                  "RIPv2 or RIPng is not operational on this
                   interface.";
              }
            }
            config false;
            description
              "Operational state.";
          }
          leaf next-full-update {
            type uint32;
            config false;
            description
              "Next full update time.";
          }
          leaf valid-address {
            type boolean;
            config false;
            description
              "The interface has a valid address.";
          }
          container statistics {
            if-feature "interface-statistics";
            config false;
            description
              "Interface statistics counters.";
            leaf discontinuity-time {
              type yang:date-and-time;
              description
                "The time on the most recent occasion at which any
                 one or more of the statistics counters suffered a
                 discontinuity.  If no such discontinuities have
                 occurred since the last re-initialization of the
                 local management subsystem, then this node contains
                 the time the local management subsystem
                 re-initialized itself.";
            }
            leaf bad-packets-rcvd {
              type yang:counter32;
              description
                "The number of RIP invalid packets received by
                 the RIP process that were subsequently discarded
                 for any reason (e.g., a version 0 packet, or an
                 unknown command type).";
            }
            leaf bad-routes-rcvd {
              type yang:counter32;
              description
                "The number of routes, in valid RIP packets,
                 which were ignored for any reason (e.g., unknown
                 address family, or invalid metric).";
            }
            leaf updates-sent {
              type yang:counter32;
              description
                "The number of triggered RIP updates actually
                 sent on this interface.  This explicitly does
                 NOT include full updates sent containing new
                 information.";
            }
          }
        }
        // interface
      }
      // interfaces

      /* Operational state */
      leaf next-triggered-update {
        type uint32;
        config false;
        description
          "Next triggered update.";
      }
      leaf num-of-routes {
        type uint32;
        config false;
        description
          "The number of routes.";
      }
      container ipv4 {
        when "derived-from-or-self(../../rt:type, 'rip:ripv2')" {
          description
            "IPv4 address family is supported by RIPv2.";
        }
        config false;
        description
          "IPv4 address family information.";
        container neighbors {
          description
            "IPv4 neighbor information.";
          list neighbor {
            key "ipv4-address";
            description
              "A RIPv2 neighbor.";
            leaf ipv4-address {
              type inet:ipv4-address;
              description
                "IP address that a RIP neighbor is using as its
                 source address.";
            }
            leaf last-update {
              type yang:date-and-time;
              description
                "The time when the most recent RIP update was
                 received from this neighbor.";
            }
            leaf bad-packets-rcvd {
              type yang:counter32;
              description
                "The number of RIP invalid packets received from
                 this neighbor that were subsequently discarded
                 for any reason (e.g., a version 0 packet, or an
                 unknown command type).";
            }
            leaf bad-routes-rcvd {
              type yang:counter32;
              description
                "The number of routes received from this neighbor,
                 in valid RIP packets that were ignored for any
                 reason (e.g., unknown address family, or invalid
                 metric).";
            }
          }
          // neighbor
        }
        // neighbors

        container routes {
          description
            "IPv4 route information.";
          list route {
            key "ipv4-prefix";
            description
              "A RIPv2 IPv4 route.";
            leaf ipv4-prefix {
              type inet:ipv4-prefix;
              description
                "IPv4 address and prefix length, in the format
                 specified in RFC6991.";
            }
            leaf next-hop {
              type inet:ipv4-address;
              description
                "Next hop IPv4 address.";
            }
            leaf interface {
              type if:interface-ref;
              description
                "The interface that the route uses.";
            }
            uses route-attributes;
          }
          // route
        }
        // routes
      }
      // ipv4

      container ipv6 {
        when "derived-from-or-self(../../rt:type, 'rip:ripng')" {
          description
            "IPv6 address family is supported by RIPng.";
        }
        config false;
        description
          "IPv6 address family information.";
        container neighbors {
          description
            "IPv6 neighbor information.";
          list neighbor {
            key "ipv6-address";
            description
              "A RIPng neighbor.";
            leaf ipv6-address {
              type inet:ipv6-address;
              description
                "IP address that a RIP neighbor is using as its
                 source address.";
            }
            leaf last-update {
              type yang:date-and-time;
              description
                "The time when the most recent RIP update was
                 received from this neighbor.";
            }
            leaf bad-packets-rcvd {
              type yang:counter32;
              description
                "The number of RIP invalid packets received from
                 this neighbor that were subsequently discarded
                 for any reason (e.g., a version 0 packet, or an
                 unknown command type).";
            }
            leaf bad-routes-rcvd {
              type yang:counter32;
              description
                "The number of routes received from this neighbor,
                 in valid RIP packets that were ignored for any
                 reason (e.g., unknown address family, or invalid
                 metric).";
            }
          }
          // neighbor
        }
        // neighbors

        container routes {
          description
            "IPv6 route information.";
          list route {
            key "ipv6-prefix";
            description
              "A RIPng IPv6 route.";
            leaf ipv6-prefix {
              type inet:ipv6-prefix;
              description
                "IPv6 address and prefix length, in the format
                 specified in RFC6991.";
            }
            leaf next-hop {
              type inet:ipv6-address;
              description
                "Next hop IPv6 address.";
            }
            leaf interface {
              type if:interface-ref;
              description
                "The interface that the route uses.";
            }
            uses route-attributes;
          }
          // route
        }
        // routes
      }
      // ipv6

      container statistics {
        if-feature "global-statistics";
        config false;
        description
          "Global statistics counters.";
        leaf discontinuity-time {
          type yang:date-and-time;
          description
            "The time on the most recent occasion at which any one
             or more of the statistics counters suffered a
             discontinuity.  If no such discontinuities have occurred
             since the last re-initialization of the local
             management subsystem, then this node contains the time
             the local management subsystem re-initialized itself.";
        }
        leaf requests-rcvd {
          type yang:counter32;
          description
            "The number of requests received by RIP.";
        }
        leaf requests-sent {
          type yang:counter32;
          description
            "The number of requests sent by RIP.";
        }
        leaf responses-rcvd {
          type yang:counter32;
          description
            "The number of responses received by RIP.";
        }
        leaf responses-sent {
          type yang:counter32;
          description
            "The number of responses sent by RIP.";
        }
      }
      // statistics
    }
    // rip
  }

  /*
   * RPCs
   */

  rpc clear-rip-route {
    description
      "Clears RIP routes from the IP routing table and routes
       redistributed into RIP for the specified RIP instance
       or for all RIP instances in the current context.";
    input {
      leaf rip-instance {
        type leafref {
          path "/rt:routing/rt:control-plane-protocols/"
             + "rt:control-plane-protocol/rt:name";
        }
        description
          "Instance name identifying a specific RIP instance.
           This leaf is optional for the RPC.
           If it is specified, the RPC will clear all routes in the
           specified RIP instance;
           if it is not specified, the RPC will clear all routes in
           all RIP instances.";
      }
    }
  }
  // clear-rip-route

}
</sourcecode>
    </section>
    <section anchor="sect-5" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t pn="section-5-1">
   This document registers the following namespace URIs in the "IETF XML
   Registry" <xref target="RFC3688" format="default" sectionFormat="of" derivedContent="RFC3688"/>:</t>
      <dl newline="false" spacing="compact" pn="section-5-2">
        <dt pn="section-5-2.1">URI:</dt>
        <dd pn="section-5-2.2">urn:ietf:params:xml:ns:yang:ietf-rip</dd>
        <dt pn="section-5-2.3">Registrant Contact:</dt>
        <dd pn="section-5-2.4">The IESG.</dd>
        <dt pn="section-5-2.5">XML:</dt>
        <dd pn="section-5-2.6">N/A; the requested URI is an XML namespace.</dd>
      </dl>
      <t pn="section-5-3">
   This document registers the following YANG modules in the "YANG Module
   Names" registry <xref target="RFC6020" format="default" sectionFormat="of" derivedContent="RFC6020"/>:</t>
      <dl newline="false" spacing="compact" pn="section-5-4">
        <dt pn="section-5-4.1">Name:</dt>
        <dd pn="section-5-4.2">ietf-rip</dd>
        <dt pn="section-5-4.3">Namespace:</dt>
        <dd pn="section-5-4.4">urn:ietf:params:xml:ns:yang:ietf-rip</dd>
        <dt pn="section-5-4.5">Prefix:</dt>
        <dd pn="section-5-4.6">rip</dd>
        <dt pn="section-5-4.7">Reference:</dt>
        <dd pn="section-5-4.8">RFC 8695</dd>
      </dl>
    </section>
    <section anchor="sect-6" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t pn="section-6-1">
   The YANG module specified in this document defines a schema for data
   that is designed to be accessed via network management protocols such
   as NETCONF <xref target="RFC6241" format="default" sectionFormat="of" derivedContent="RFC6241"/> or RESTCONF <xref target="RFC8040" format="default" sectionFormat="of" derivedContent="RFC8040"/>.  The lowest NETCONF layer
   is the secure transport layer, and the mandatory-to-implement secure
   transport is Secure Shell (SSH) <xref target="RFC6242" format="default" sectionFormat="of" derivedContent="RFC6242"/>.  The lowest RESTCONF layer
   is HTTPS, and the mandatory-to-implement secure transport is TLS
   <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>.</t>
      <t pn="section-6-2">
   The NETCONF Access Control Model (NACM) <xref target="RFC8341" format="default" sectionFormat="of" derivedContent="RFC8341"/> provides the means to
   restrict access for particular NETCONF or RESTCONF users to a
   preconfigured subset of all available NETCONF or RESTCONF protocol
   operations and content.</t>
      <t pn="section-6-3">
   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>
      <artwork align="left" pn="section-6-4">
   /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/
   rip:rip
</artwork>
      <t pn="section-6-5">
   Unauthorized access to any data node of these subtrees can adversely
   affect the routing subsystem of both the local device and the
   network.  This may lead to network malfunctions, delivery of packets
   to inappropriate destinations, and other problems.</t>
      <t pn="section-6-6">
   Some of the readable data nodes in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control read access (e.g., via get, get-config, or
   notification) to these data nodes.  These are the subtrees and data
   nodes and their sensitivity/vulnerability:</t>
      <artwork align="left" pn="section-6-7">
   /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/
   rip:rip
</artwork>
      <t pn="section-6-8">
   Unauthorized access to any data node of these subtrees can disclose
   the operational state information of RIP on this device.</t>
      <t pn="section-6-9">
   Some of the RPC operations in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control access to these operations.  These are the
   operations and their sensitivity/vulnerability:</t>
      <t pn="section-6-10">
   RPC clear-rip-route:</t>
      <t pn="section-6-11">
   Unauthorized access to the RPC above can adversely affect the routing
   subsystem of both the local device and the network.  This may lead to
   network malfunctions, delivery of packets to inappropriate
   destinations, and other problems.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-bfd-yang" to="YANG-BFD"/>
    <displayreference target="I-D.ietf-isis-yang-isis-cfg" to="YANG-ISIS"/>
    <displayreference target="I-D.ietf-ospf-yang" to="YANG-OSPF"/>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC1724" target="https://www.rfc-editor.org/info/rfc1724" quoteTitle="true" derivedAnchor="RFC1724">
          <front>
            <title>RIP Version 2 MIB Extension</title>
            <author initials="G." surname="Malkin" fullname="G. Malkin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="F." surname="Baker" fullname="F. Baker">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1994" month="November"/>
            <abstract>
              <t>This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in TCP/IP-based internets.  In particular, it defines objects for managing RIP Version 2.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1724"/>
          <seriesInfo name="DOI" value="10.17487/RFC1724"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC2453" target="https://www.rfc-editor.org/info/rfc2453" quoteTitle="true" derivedAnchor="RFC2453">
          <front>
            <title>RIP Version 2</title>
            <author initials="G." surname="Malkin" fullname="G. Malkin">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1998" month="November"/>
            <abstract>
              <t>This document specifies an extension of the Routing Information Protocol (RIP) to expand the amount of useful information carried in RIP messages and to add a measure of security.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="56"/>
          <seriesInfo name="RFC" value="2453"/>
          <seriesInfo name="DOI" value="10.17487/RFC2453"/>
        </reference>
        <reference anchor="RFC2080" target="https://www.rfc-editor.org/info/rfc2080" quoteTitle="true" derivedAnchor="RFC2080">
          <front>
            <title>RIPng for IPv6</title>
            <author initials="G." surname="Malkin" fullname="G. Malkin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Minnear" fullname="R. Minnear">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="January"/>
            <abstract>
              <t>This document specifies a routing protocol for an IPv6 internet.  It is based on protocols and algorithms currently in wide use in the IPv4 Internet [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2080"/>
          <seriesInfo name="DOI" value="10.17487/RFC2080"/>
        </reference>
        <reference anchor="RFC3688" target="https://www.rfc-editor.org/info/rfc3688" quoteTitle="true" derivedAnchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author initials="M." surname="Mealling" fullname="M. Mealling">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2004" month="January"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020" target="https://www.rfc-editor.org/info/rfc6020" quoteTitle="true" derivedAnchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2010" month="October"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6241" target="https://www.rfc-editor.org/info/rfc6241" quoteTitle="true" derivedAnchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author initials="R." surname="Enns" fullname="R. Enns" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Schoenwaelder" fullname="J. Schoenwaelder" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Bierman" fullname="A. Bierman" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="June"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6242" target="https://www.rfc-editor.org/info/rfc6242" quoteTitle="true" derivedAnchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author initials="M." surname="Wasserman" fullname="M. Wasserman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="June"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem.  This document obsoletes RFC 4742.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC6991" target="https://www.rfc-editor.org/info/rfc6991" quoteTitle="true" derivedAnchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author initials="J." surname="Schoenwaelder" fullname="J. Schoenwaelder" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="July"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7950" quoteTitle="true" derivedAnchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols.  This document describes the syntax and semantics of version 1.1 of the YANG language.  YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification.  There are a small number of backward incompatibilities from YANG version 1.  This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC8040" target="https://www.rfc-editor.org/info/rfc8040" quoteTitle="true" derivedAnchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author initials="A." surname="Bierman" fullname="A. Bierman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Watsen" fullname="K. Watsen">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="January"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8177" target="https://www.rfc-editor.org/info/rfc8177" quoteTitle="true" derivedAnchor="RFC8177">
          <front>
            <title>YANG Data Model for Key Chains</title>
            <author initials="A." surname="Lindem" fullname="A. Lindem" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Qu" fullname="Y. Qu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Yeung" fullname="D. Yeung">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="I." surname="Chen" fullname="I. Chen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Zhang" fullname="J. Zhang">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t>This document describes the key chain YANG data model.  Key chains are commonly used for routing protocol authentication and other applications requiring symmetric keys.  A key chain is a list containing one or more elements containing a Key ID, key string, send/accept lifetimes, and the associated authentication or encryption algorithm.  By properly overlapping the send and accept lifetimes of multiple key chain elements, key strings and algorithms may be gracefully updated.  By representing them in a YANG data model, key distribution can be automated.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8177"/>
          <seriesInfo name="DOI" value="10.17487/RFC8177"/>
        </reference>
        <reference anchor="RFC8341" target="https://www.rfc-editor.org/info/rfc8341" quoteTitle="true" derivedAnchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author initials="A." surname="Bierman" fullname="A. Bierman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342" target="https://www.rfc-editor.org/info/rfc8342" quoteTitle="true" derivedAnchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Schoenwaelder" fullname="J. Schoenwaelder">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Shafer" fullname="P. Shafer">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Watsen" fullname="K. Watsen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Wilton" fullname="R. Wilton">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model.  This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8343" target="https://www.rfc-editor.org/info/rfc8343" quoteTitle="true" derivedAnchor="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces.  It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </reference>
        <reference anchor="RFC8344" target="https://www.rfc-editor.org/info/rfc8344" quoteTitle="true" derivedAnchor="RFC8344">
          <front>
            <title>A YANG Data Model for IP Management</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t>This document defines a YANG data model for management of IP implementations.  The data model includes configuration and system state.</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7277.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8344"/>
          <seriesInfo name="DOI" value="10.17487/RFC8344"/>
        </reference>
        <reference anchor="RFC8349" target="https://www.rfc-editor.org/info/rfc8349" quoteTitle="true" derivedAnchor="RFC8349">
          <front>
            <title>A YANG Data Model for Routing Management (NMDA Version)</title>
            <author initials="L." surname="Lhotka" fullname="L. Lhotka">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Lindem" fullname="A. Lindem">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Qu" fullname="Y. Qu">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t>This document specifies three YANG modules and one submodule. Together, they form the core routing data model that serves as a framework for configuring and managing a routing subsystem.  It is expected that these modules will be augmented by additional YANG modules defining data models for control-plane protocols, route filters, and other functions.  The core routing data model provides common building blocks for such extensions -- routes, Routing Information Bases (RIBs), and control-plane protocols.</t>
              <t>The YANG modules in this document conform to the Network Management Datastore Architecture (NMDA).  This document obsoletes RFC 8022.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8349"/>
          <seriesInfo name="DOI" value="10.17487/RFC8349"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
      </references>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC7951" target="https://www.rfc-editor.org/info/rfc7951" quoteTitle="true" derivedAnchor="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author initials="L." surname="Lhotka" fullname="L. Lhotka">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="RFC8340" target="https://www.rfc-editor.org/info/rfc8340" quoteTitle="true" derivedAnchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Berger" fullname="L. Berger" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8407" target="https://www.rfc-editor.org/info/rfc8407" quoteTitle="true" derivedAnchor="RFC8407">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author initials="A." surname="Bierman" fullname="A. Bierman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="October"/>
            <abstract>
              <t>This memo provides guidelines for authors and reviewers of specifications containing YANG modules.  Recommendations and procedures are defined, which are intended to increase interoperability and usability of Network Configuration Protocol (NETCONF) and RESTCONF protocol implementations that utilize YANG modules.  This document obsoletes RFC 6087.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="216"/>
          <seriesInfo name="RFC" value="8407"/>
          <seriesInfo name="DOI" value="10.17487/RFC8407"/>
        </reference>
        <reference anchor="RFC8639" target="https://www.rfc-editor.org/info/rfc8639" quoteTitle="true" derivedAnchor="RFC8639">
          <front>
            <title>Subscription to YANG Notifications</title>
            <author initials="E." surname="Voit" fullname="E. Voit">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Clemm" fullname="A. Clemm">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Gonzalez Prieto" fullname="A. Gonzalez Prieto">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Nilsen-Nygaard" fullname="E. Nilsen-Nygaard">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Tripathy" fullname="A. Tripathy">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="September"/>
            <abstract>
              <t>This document defines a YANG data model and associated mechanisms enabling subscriber-specific subscriptions to a publisher's event streams.  Applying these elements allows a subscriber to request and receive a continuous, customized feed of publisher-generated information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8639"/>
          <seriesInfo name="DOI" value="10.17487/RFC8639"/>
        </reference>
        <reference anchor="RFC8641" target="https://www.rfc-editor.org/info/rfc8641" quoteTitle="true" derivedAnchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author initials="A." surname="Clemm" fullname="A. Clemm">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Voit" fullname="E. Voit">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="September"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore.  Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="I-D.ietf-bfd-yang" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-bfd-yang-17" derivedAnchor="YANG-BFD">
          <front>
            <title>YANG Data Model for Bidirectional Forwarding Detection (BFD)</title>
            <author initials="R" surname="Rahman" fullname="Reshad Rahman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L" surname="Zheng" fullname="Lianshu Zheng">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Jethanandani" fullname="Mahesh Jethanandani">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Pallagatti" fullname="Santosh Pallagatti">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G" surname="Mirsky" fullname="Gregory Mirsky">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="August" day="2" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model that can be used to configure and manage Bidirectional Forwarding Detection (BFD).  The YANG modules in this document conform to the Network Management Datastore Architecture (NMDA).</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-bfd-yang-17"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-bfd-yang-17.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-isis-yang-isis-cfg" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-isis-yang-isis-cfg-42" derivedAnchor="YANG-ISIS">
          <front>
            <title>YANG Data Model for IS-IS Protocol</title>
            <author initials="S" surname="Litkowski" fullname="Stephane Litkowski">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D" surname="Yeung" fullname="Derek Yeung">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A" surname="Lindem" fullname="Acee Lindem">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Z" surname="Zhang" fullname="Zhaohui Zhang">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L" surname="Lhotka" fullname="Ladislav Lhotka">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="October" day="15" year="2019"/>
            <abstract>
              <t>This document defines a YANG data model that can be used to configure and manage the IS-IS protocol on network elements.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-isis-yang-isis-cfg-42"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-isis-yang-isis-cfg-42.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-ospf-yang" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-ospf-yang-29" derivedAnchor="YANG-OSPF">
          <front>
            <title>YANG Data Model for OSPF Protocol</title>
            <author initials="D" surname="Yeung" fullname="Derek Yeung">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y" surname="Qu" fullname="Yingzhen Qu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Z" surname="Zhang" fullname="Zhaohui Zhang">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="I" surname="Chen" fullname="Ing-Wher Chen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A" surname="Lindem" fullname="Acee Lindem">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="October" day="17" year="2019"/>
            <abstract>
              <t>This document defines a YANG data model that can be used to configure and manage OSPF.  The model is based on YANG 1.1 as defined in RFC 7950 and conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ospf-yang-29"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-ospf-yang-29.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="sect-a" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-data-tree-example">Data Tree Example</name>
      <t pn="section-appendix.a-1">
   This section contains an example of an instance data tree in the JSON
   encoding <xref target="RFC7951" format="default" sectionFormat="of" derivedContent="RFC7951"/>, containing both configuration and state data.</t>
      <figure anchor="router-example" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-ripng-example">RIPng Example</name>
        <artwork name="" type="" align="left" alt="" pn="section-appendix.a-2.1">
                  +---------------------+
                  |                     |
                  | Router 203.0.113.1  |
                  |                     |
                  +----------+----------+
                             |eth1
                             |2001:db8:0:1::1/64
                             |
                             |
                             |2001:db8:0:1::2/64
                  +----------+----------+
                  |                     |         |
                  |   Another Router    +---------| 2001:db8:0:2::/64
                  |                     |         |
                  +---------------------+
</artwork>
      </figure>
      <t pn="section-appendix.a-3">
   The configuration instance data tree for Router 203.0.113.1 in 
   <xref target="router-example" format="default" sectionFormat="of" derivedContent="Figure 1"/> could be as follows:</t>
      <sourcecode type="yang" markers="false" pn="section-appendix.a-4">
{
  "ietf-interfaces:interfaces": {
    "interface": [
      {
        "name": "eth1",
        "description": "An interface with RIPng enabled.",
        "type": "iana-if-type:ethernetCsmacd",
        "ietf-ip:ipv6": {
          "address": [
            {
              "ip": "2001:db8:0:1::1",
              "prefix-length": 64
            }
          ],
          "forwarding": true
        }
      }
    ]
  },
  "ietf-routing:routing": {
    "router-id": "203.0.113.1",
    "control-plane-protocols": {
      "control-plane-protocol": [
        {
          "type": "ietf-rip:ripng",
          "name": "ripng-1",
          "description": "RIPng instance ripng-1.",
          "ietf-rip:rip": {
            "redistribute": {
              "connected": {
              }
            },
            "interfaces": {
              "interface": [
                {
                  "interface": "eth1",
                  "split-horizon": "poison-reverse"
                }
              ]
            }
          }
        }
      ]
    }
  }
}
</sourcecode>
      <t pn="section-appendix.a-5">The corresponding operational state data for Router 203.0.113.1 could
be as follows:</t>
      <sourcecode type="yang" markers="false" pn="section-appendix.a-6">
{
  "ietf-interfaces:interfaces": {
    "interface": [
      {
        "name": "eth1",
        "description": "An interface with RIPng enabled.",
        "type": "iana-if-type:ethernetCsmacd",
        "phys-address": "00:00:5e:00:53:01",
        "oper-status": "up",
        "statistics": {
          "discontinuity-time": "2016-10-24T17:11:27+02:00"
        },
        "ietf-ip:ipv6": {
          "forwarding": true,
          "mtu": 1500,
          "address": [
            {
              "ip": "2001:db8:0:1::1",
              "prefix-length": 64,
              "origin": "static",
              "status": "preferred"
            },
            {
              "ip": "fe80::200:5eff:fe00:5301",
              "prefix-length": 64,
              "origin": "link-layer",
              "status": "preferred"
            }
          ],
          "neighbor": [
            {
              "ip": "2001:db8:0:1::2",
              "link-layer-address": "00:00:5e:00:53:02",
              "origin": "dynamic",
              "is-router": [null],
              "state": "reachable"
            },
            {
              "ip": "fe80::200:5eff:fe00:5302",
              "link-layer-address": "00:00:5e:00:53:02",
              "origin": "dynamic",
              "is-router": [null],
              "state": "reachable"
            }
          ]
        }
      }
    ]
  },
  "ietf-routing:routing": {
    "router-id": "203.0.113.1",
    "interfaces": {
      "interface": [
        "eth1"
      ]
    },
    "control-plane-protocols": {
      "control-plane-protocol": [
        {
          "type": "ietf-rip:ripng",
          "name": "ripng-1",
          "description": "RIPng instance ripng-1.",
          "ietf-rip:rip": {
            "default-metric": 1,
            "next-triggered-update": 5,
            "interfaces": {
              "interface": [
                {
                  "interface": "eth1",
                  "oper-status": "up",
                  "cost": 1,
                  "split-horizon": "poison-reverse",
                  "valid-address": true
                }
              ]
            },
            "ipv6": {
              "neighbors": {
                "neighbor": [
                  {
                    "ipv6-address": "fe80::200:5eff:fe00:5302",
                    "last-update": "2017-01-02T10:34:55+02:00"
                  }
                ]
              },
              "routes": {
                "route": [
                  {
                    "ipv6-prefix": "2001:db8:0:1::/64",
                    "interface": "eth1",
                    "redistributed": true,
                    "route-type": "connected",
                    "metric": 1,
                    "expire-time": 22
                  },
                  {
                    "ipv6-prefix": "2001:db8:0:2::/64",
                    "next-hop": "fe80::200:5eff:fe00:5302",
                    "interface": "eth1",
                    "redistributed": false,
                    "route-type": "rip",
                    "metric": 2,
                    "expire-time": 82
                  }
                ]
              }
            },
            "statistics": {
              "discontinuity-time": "2016-10-24T17:11:27+02:00",
              "requests-rcvd": 523,
              "requests-sent": 262,
              "responses-rcvd": 261,
              "responses-sent": 523
            }
          }
        }
      ]
    }
  }
}
</sourcecode>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Xufeng Liu" initials="X." surname="Liu">
        <organization showOnFrontPage="true">Volta Networks</organization>
        <address>
          <email>xufeng.liu.ietf@gmail.com</email>
        </address>
      </author>
      <author fullname="Prateek Sarda" initials="P." surname="Sarda">
        <organization showOnFrontPage="true">Ericsson</organization>
        <address>
          <postal>
            <street>Fern Icon, Survey No 28 and 36/5, Doddanakundi Village</street>
            <city>Bangalore</city>
            <region>Karnataka</region>
            <code>560037</code>
            <country>India</country>
          </postal>
          <email>prateek.sarda@ericsson.com</email>
        </address>
      </author>
      <author fullname="Vikram Choudhary" initials="V." surname="Choudhary">
        <organization showOnFrontPage="true">Individual</organization>
        <address>
          <postal>
            <city>Bangalore</city>
            <code>560066</code>
            <country>India</country>
          </postal>
          <email>vikschw@gmail.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
