rfc8695.original   rfc8695.txt 
Network Working Group X. Liu Internet Engineering Task Force (IETF) X. Liu
Internet-Draft Volta Networks Request for Comments: 8695 Volta Networks
Intended status: Standards Track P. Sarda Category: Standards Track P. Sarda
Expires: March 22, 2020 Ericsson ISSN: 2070-1721 Ericsson
V. Choudhary V. Choudhary
Individual Individual
September 19, 2019 January 2020
A YANG Data Model for Routing Information Protocol (RIP) A YANG Data Model for the Routing Information Protocol (RIP)
draft-ietf-rtgwg-yang-rip-11
Abstract Abstract
This document describes a data model for the management of the This document describes a data model for the management of the
Routing Information Protocol (RIP). Both RIP version 2 and RIPng are Routing Information Protocol (RIP). Both RIP version 2 and RIPng are
covered. The data model includes definitions for configuration, covered. The data model includes definitions for configuration,
operational state, and Remote Procedure Calls (RPCs). operational state, and Remote Procedure Calls (RPCs).
The YANG model in this document conforms to the Network Management The YANG data model in this document conforms to the Network
Datastore Architecture (NMDA). Management Datastore Architecture (NMDA).
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This is an Internet Standards Track document.
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 7841.
This Internet-Draft will expire on March 22, 2020. Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
https://www.rfc-editor.org/info/rfc8695.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Terminology
1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 1.2. Tree Diagrams
1.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3 1.3. Prefixes in Data Node Names
2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 2. Design of the Data Model
2.1. Scope of the Model . . . . . . . . . . . . . . . . . . . 3 2.1. Scope of the Data Model
2.2. Relation with Core Routing Framework . . . . . . . . . . 4 2.2. Relation to the Core Routing Framework
2.3. Protocol Configuration . . . . . . . . . . . . . . . . . 4 2.3. Protocol Configuration
2.4. Protocol States . . . . . . . . . . . . . . . . . . . . . 5 2.4. Protocol States
2.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 6 2.5. RPC Operations
2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 6 2.6. Notifications
2.7. Optional Features . . . . . . . . . . . . . . . . . . . . 6 2.7. Optional Features
3. Tree Structure . . . . . . . . . . . . . . . . . . . . . . . 6 3. Tree Structure
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 10 4. YANG Module
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 33 5. IANA Considerations
6. Security Considerations . . . . . . . . . . . . . . . . . . . 34 6. Security Considerations
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 7. References
7.1. Normative References . . . . . . . . . . . . . . . . . . 35 7.1. Normative References
7.2. Informative References . . . . . . . . . . . . . . . . . 37 7.2. Informative References
Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 38 Appendix A. Data Tree Example
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 42 Authors' Addresses
1. Introduction 1. Introduction
This document introduces a YANG [RFC7950] data model for the Routing This document introduces a YANG [RFC7950] data model for the Routing
Information Protocol (RIP) [RFC2453][RFC2080]. RIP was designed to Information Protocol (RIP) [RFC2453][RFC2080]. RIP was designed to
work as an Interior Gateway Protocol (IGP) in moderate-size work as an Interior Gateway Protocol (IGP) in moderate-size
Autonomous Systems (AS). Autonomous Systems (AS).
This YANG model supports both RIP version 2 and RIPng. RIP version 2 This YANG data model supports both RIP version 2 and RIPng. RIP
(defined in [RFC2453]) supports IPv4. RIPng (defined in [RFC2080]) version 2 (defined in [RFC2453]) supports IPv4. RIPng (defined in
supports IPv6. [RFC2080]) supports IPv6.
1.1. Terminology 1.1. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
document are to be interpreted as described in [RFC2119]. "OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
The following terms are defined in [RFC7950] and are not redefined The following terms are defined in [RFC7950] and are not redefined
here: here:
o augment * augment
o data model * data model
o data node * data node
1.2. Tree Diagrams 1.2. Tree Diagrams
A simplified graphical representation of the data model is used in A simplified graphical representation of the data model is used in
this document. The meaning of the symbols in these diagrams is this document. The meaning of the symbols in these diagrams is
defined in [RFC8340]. defined in [RFC8340].
1.3. Prefixes in Data Node Names 1.3. Prefixes in Data Node Names
In this document, names of data nodes, actions, and other data model In this document, names of data nodes, actions, and other data model
objects are often used without a prefix, as long as it is clear from 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, the context in which YANG module each name is defined. Otherwise,
names are prefixed using the standard prefix associated with the names are prefixed using the standard prefix associated with the
corresponding YANG module, as shown in Table 1. corresponding YANG module, as shown in Table 1.
+-----------+-----------------+-------------------------------+ +-----------+-----------------+-------------+
| Prefix | YANG module | Reference | | Prefix | YANG module | Reference |
+-----------+-----------------+-------------------------------+ +===========+=================+=============+
| yang | ietf-yang-types | [RFC6991] | | yang | ietf-yang-types | [RFC6991] |
| inet | ietf-inet-types | [RFC6991] | +-----------+-----------------+-------------+
| if | ietf-interfaces | [RFC8343] | | inet | ietf-inet-types | [RFC6991] |
| ip | ietf-ip | [RFC8344] | +-----------+-----------------+-------------+
| rt | ietf-routing | [RFC8349] | | if | ietf-interfaces | [RFC8343] |
| bfd-types | ietf-bfd-types | [I-D.ietf-bfd-yang] | +-----------+-----------------+-------------+
| isis | ietf-isis | [I-D.ietf-isis-yang-isis-cfg] | | ip | ietf-ip | [RFC8344] |
| key-chain | ietf-key-chain | [RFC8177] | +-----------+-----------------+-------------+
| ospf | ietf-ospf | [I-D.ietf-ospf-yang] | | rt | ietf-routing | [RFC8349] |
+-----------+-----------------+-------------------------------+ +-----------+-----------------+-------------+
| bfd-types | ietf-bfd-types | [YANG-BFD] |
+-----------+-----------------+-------------+
| isis | ietf-isis | [YANG-ISIS] |
+-----------+-----------------+-------------+
| key-chain | ietf-key-chain | [RFC8177] |
+-----------+-----------------+-------------+
| ospf | ietf-ospf | [YANG-OSPF] |
+-----------+-----------------+-------------+
Table 1: Prefixes and Corresponding YANG Modules Table 1: Prefixes and Corresponding YANG
Modules
2. Design of the Data Model 2. Design of the Data Model
2.1. Scope of the Model 2.1. Scope of the Data Model
The model covers RIP version 2 [RFC2453] and RIPng [RFC2080] The data model covers RIP version 2 [RFC2453] and RIPng [RFC2080]
protocols. The model is designed to be implemented on a device where protocols. The model is designed to be implemented on a device where
RIP version 2 or RIPng is implemented, and can be used to: RIP version 2 or RIPng is implemented, and can be used to:
o Configure the RIP version 2 or RIPng protocol. * Configure the RIP version 2 or RIPng protocol.
o Manage the protocol operational behaviors. * Manage the protocol operational behaviors.
o Retrieve the protocol operational status. * Retrieve the protocol operational status.
The capabilities describe in [RFC1724] are covered. The capabilities described in [RFC1724] are covered.
2.2. Relation with Core Routing Framework 2.2. Relation to the Core Routing Framework
This model augments the core routing data model "ietf-routing" This data model augments the core routing data model "ietf-routing"
specified in [RFC8349]. specified in [RFC8349].
+--rw routing +--rw routing
+--rw router-id? +--rw router-id?
+--rw control-plane-protocols +--rw control-plane-protocols
| +--rw control-plane-protocol* [type name] | +--rw control-plane-protocol* [type name]
| +--rw type | +--rw type
| +--rw name | +--rw name
| +--rw rip <= Augmented by this Model | +--rw rip <= Augmented by this Model
... ...
The "rip" container instantiates a RIP protocol entity that supports The "rip" container instantiates a RIP entity that supports RIP
RIP version 2 or RIPng. Depending on the implementation of "ietf- version 2 or RIPng. Depending on the implementation of "ietf-
routing", a RIP instance MAY belong to a logical router or network routing", a RIP instance MAY belong to a logical router or network
instance. instance.
2.3. Protocol Configuration 2.3. Protocol Configuration
The model structure for the protocol configuration is as shown below: The data model structure for the protocol configuration is as shown
below:
augment /rt:routing/rt:control-plane-protocols/ augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol: rt:control-plane-protocol:
+--rw rip +--rw rip
+--rw <per instance configuration> +--rw <per instance configuration>
+--rw interface* [interface] +--rw interface* [interface]
+--rw interface if:interface-ref +--rw interface if:interface-ref
+--rw <per interface configuration> +--rw <per interface configuration>
+--rw neighbors {explicit-neighbors}? +--rw neighbors {explicit-neighbors}?
| +--rw neighbor* [address] | +--rw neighbor* [address]
| +--rw address inet:ip-address | +--rw address inet:ip-address
| +--rw <per neighbor configuration> | +--rw <per neighbor configuration>
The model allows to configure the following protocol entities: The data model allows the configuration of the following protocol
entities:
o Protocol instance (RIP version 2 or RIPng) * Protocol instance (RIP version 2 or RIPng)
o Interface * Interface
o Neighbor
* Neighbor
2.4. Protocol States 2.4. Protocol States
The model structure for the protocol states is as shown below: The data model structure for the protocol states is as shown below:
augment /rt:routing/rt:control-plane-protocols/ augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol: rt:control-plane-protocol:
+--rw rip +--rw rip
+--ro <per instance operational states> +--ro <per instance operational states>
+--rw interface* [interface] +--rw interface* [interface]
| +--rw interface if:interface-ref | +--rw interface if:interface-ref
| +--ro <per instance operational states> | +--ro <per instance operational states>
| +--ro statistics {interface-statistics}? | +--ro statistics {interface-statistics}?
| +--ro <per instance statistics> | +--ro <per instance statistics>
+--ro ipv4 +--ro ipv4
| +--ro neighbors | +--ro neighbors
| | +--ro neighbor* [ipv4-address] | | +--ro neighbor* [ipv4-address]
| | +--ro <per neighbor IPv4 operational states> | | +--ro <per neighbor IPv4 operational states>
| +--ro routes | +--ro routes
| +--ro route* [ipv4-prefix] | +--ro route* [ipv4-prefix]
| +--ro <IPv4 RIP route states> | +--ro <IPv4 RIP route states>
+--ro ipv6 +--ro ipv6
| +--ro neighbors | +--ro neighbors
| | +--ro neighbor* [ipv6-address] | | +--ro neighbor* [ipv6-address]
| | +--ro <per neighbor IPv6 operational states> | | +--ro <per neighbor IPv6 operational states>
| +--ro routes | +--ro routes
| +--ro route* [ipv6-prefix] | +--ro route* [ipv6-prefix]
| +--ro ipv6-prefix inet:ipv6-prefix | +--ro ipv6-prefix inet:ipv6-prefix
| +--ro <IPv4 RIP route states> | +--ro <IPv4 RIP route states>
+--ro statistics {global-statistics}? +--ro statistics {global-statistics}?
+--ro <per instance statistics> +--ro <per instance statistics>
This model conforms to the Network Management Datastore Architecture This model conforms to the Network Management Datastore Architecture
(NMDA) [RFC8342]. The operational state data is combined with the (NMDA) [RFC8342]. The operational state data is combined with the
associated configuration data in the same hierarchy [RFC8407]. When associated configuration data in the same hierarchy [RFC8407]. When
protocol states are retrieved from the NMDA operational state protocol states are retrieved from the NMDA operational state
datastore, the returned states cover all "config true" (rw) and datastore, the returned states cover all "config true" (rw) and
"config false" (ro) nodes defined in the schema. "config false" (ro) nodes defined in the schema.
The model allows to retrieve protocol states at the following levels: The model allows the retrieval of protocol states at the following
levels:
o Protocol instance (RIP version 2 or RIPng) * Protocol instance (RIP version 2 or RIPng)
o Interface * Interface
o Neighbor * Neighbor
o Route
* Route
2.5. RPC Operations 2.5. RPC Operations
This model defines one RPC "clear-rip-route" that can be used to This model defines one RPC "clear-rip-route" that can be used to
clear RIP routes from the routing table. clear RIP routes from the routing table.
2.6. Notifications 2.6. Notifications
This model does not define RIP specific notifications. To enable This model does not define RIP-specific notifications. To enable
notifications, the mechanism defined in [I-D.ietf-netconf-subscribed- notifications, the mechanisms defined in [RFC8639] and [RFC8641] can
notifications] and [I-D.ietf-netconf-yang-push] can be used. This be used. This mechanism currently allows the user to do the
mechanism currently allows the user to: following:
o Subscribe notifications on a per client basis. * Subscribe to notifications on a per-client basis.
o Specify subtree filters or xpath filters so that only interested * Specify subtree filters or XML Path Language (XPath) filters so
contents will be sent. that only interested contents will be sent.
o Specify either periodic or on-demand notifications. * Specify either periodic or on-demand notifications.
2.7. Optional Features 2.7. Optional Features
This model defines several features are beyond the basic RIP This model defines several features that are beyond the basic RIP
configuration and it is the responsibility of each vendor to decide configuration, and it is the responsibility of each vendor to decide
whether to support a given feature on a device. whether to support a given feature on a device.
3. Tree Structure 3. Tree Structure
This document defines the YANG module "ietf-rip", which has the This document defines the YANG module "ietf-rip", which has the
following tree structure: following tree structure:
module: ietf-rip module: ietf-rip
augment /rt:routing/rt:control-plane-protocols augment /rt:routing/rt:control-plane-protocols
/rt:control-plane-protocol: /rt:control-plane-protocol:
skipping to change at page 10, line 23 skipping to change at line 461
+--ro responses-rcvd? yang:counter32 +--ro responses-rcvd? yang:counter32
+--ro responses-sent? yang:counter32 +--ro responses-sent? yang:counter32
rpcs: rpcs:
+---x clear-rip-route +---x clear-rip-route
+---w input +---w input
+---w rip-instance? leafref +---w rip-instance? leafref
4. YANG Module 4. YANG Module
<CODE BEGINS> file "ietf-rip@2018-02-03.yang" <CODE BEGINS> file "ietf-rip@2019-12-02.yang"
module ietf-rip { module ietf-rip {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-rip"; namespace "urn:ietf:params:xml:ns:yang:ietf-rip";
prefix rip; prefix rip;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix inet;
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix yang;
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix if;
} }
import ietf-ip { import ietf-ip {
prefix "ip"; prefix ip;
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix rt;
} }
import ietf-key-chain { import ietf-key-chain {
prefix "key-chain"; prefix key-chain;
} }
import ietf-bfd-types { import ietf-bfd-types {
prefix "bfd-types"; prefix bfd-types;
} }
import ietf-ospf { import ietf-ospf {
prefix "ospf"; prefix ospf;
} }
import ietf-isis { import ietf-isis {
prefix "isis"; prefix isis;
} }
organization "IETF Routing Area Working Group (rtgwg)"; organization
"IETF Routing Area Working Group (rtgwg)";
contact contact
"WG Web: <http://tools.ietf.org/wg/rgtwg/> "WG Web: <http://tools.ietf.org/wg/rgtwg/>
WG List: <mailto:rgtwg@ietf.org> WG List: <mailto:rgtwg@ietf.org>
Editor: Xufeng Liu Editor: Xufeng Liu
<mailto:xufeng_liu@jabil.com> <mailto:xufeng_liu@jabil.com>
Editor: Prateek Sarda Editor: Prateek Sarda
<mailto:prateek.sarda@ericsson.com> <mailto:prateek.sarda@ericsson.com>
skipping to change at page 11, line 45 skipping to change at line 523
Copyright (c) 2018 IETF Trust and the persons identified as Copyright (c) 2018 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the This version of this YANG module is part of RFC 8695; see the
RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2018-02-03 { revision 2019-12-02 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for Routing Information Protocol "RFC 8695: A YANG Data Model for Routing Information Protocol
(RIP). (RIP).
RFC 2453: RIP Version 2. RFC 2453: RIP Version 2.
RFC 2080: RIPng for IPv6. RFC 2080: RIPng for IPv6.
RFC 1724: RIP Version 2 MIB Extension."; RFC 1724: RIP Version 2 MIB Extension.";
} }
/* /*
* Features * Features
*/ */
feature bfd { feature bfd {
description description
"This feature indicates that the RIP implementation on the "This feature indicates that the RIP implementation on the
system supports BFD (Bidirectional Forwarding Detection)."; system supports BFD (Bidirectional Forwarding Detection).";
} }
feature explicit-neighbors { feature explicit-neighbors {
description description
"This feature indicates that the system supports explicit "This feature indicates that the system supports explicit
neighbor configuration on a RIP interface."; neighbor configuration on a RIP interface.";
skipping to change at page 12, line 29 skipping to change at line 556
feature explicit-neighbors { feature explicit-neighbors {
description description
"This feature indicates that the system supports explicit "This feature indicates that the system supports explicit
neighbor configuration on a RIP interface."; neighbor configuration on a RIP interface.";
} }
feature global-statistics { feature global-statistics {
description description
"This feature indicates that the system supports collecting "This feature indicates that the system supports collecting
global statistic data related to RIP."; global statistics data related to RIP.";
} }
feature interface-statistics { feature interface-statistics {
description description
"This feature indicates that the system supports collecting "This feature indicates that the system supports collecting
per-interface statistic data related to RIP."; per-interface statistics data related to RIP.";
} }
/* /*
* Typedefs * Typedefs
*/ */
typedef prefix-set-ref { typedef prefix-set-ref {
type string; type string;
description description
"A type for a reference to a prefix set. "A type for a reference to a prefix set.
The string value is the name identifier for uniquely The string value is the name identifier for uniquely
identifying the referenced prefix set, which contains a list identifying the referenced prefix set, which contains a list
of prefixes that a routing policy can applied. The definition of prefixes that a routing policy can applied. The definition
of such a prefix set is outside the scope of this document."; of such a prefix set is outside the scope of this document.";
} }
typedef route-policy-ref { typedef route-policy-ref {
type string; type string;
description description
"A type for a reference to a route policy. "A type for a reference to a route policy.
The string value is the name identifier for uniquely The string value is the name identifier for uniquely
identifying the referenced routing policy, which contains one identifying the referenced routing policy, which contains one
or more policy rules that can be used for a routing decision. or more policy rules that can be used for a routing decision.
The definition of such a routing policy is outside the scope The definition of such a routing policy is outside the scope
of this document."; of this document.";
} }
skipping to change at page 13, line 21 skipping to change at line 596
The definition of such a routing policy is outside the scope The definition of such a routing policy is outside the scope
of this document."; of this document.";
} }
/* /*
* Identities * Identities
*/ */
identity rip { identity rip {
base rt:routing-protocol; base rt:routing-protocol;
description "Identity for the RIP routing protocol."; description
"Identity for the Routing Information Protocol.";
} }
identity ripv2 { identity ripv2 {
base rip:rip; base rip:rip;
description "Identity for RIPv2 (RIP version 2)."; description
"Identity for RIPv2 (RIP version 2).";
} }
identity ripng { identity ripng {
base rip:rip; base rip:rip;
description "Identity for RIPng."; description
"Identity for RIPng.";
} }
/* /*
* Groupings * Groupings
*/ */
grouping originate-default-route-container { grouping originate-default-route-container {
description description
"Containing settings whether to originate the default route "Container for settings on whether to originate the default
in RIP routing instance."; route in RIP routing instance.";
container originate-default-route { container originate-default-route {
description description
"Injects the default route into the RIP (RIPv2 or RIPng) "Injects the default route into the RIP (RIPv2 or RIPng)
routing instance."; routing instance.";
leaf enabled { leaf enabled {
type boolean; type boolean;
default false; default "false";
description description
"'true' if originating default route is enabled."; "'true' if originating default route is enabled.";
} }
leaf route-policy { leaf route-policy {
type route-policy-ref; type route-policy-ref;
description description
"The conditions of the route policy are applied to the "The conditions of the route policy are applied to the
default route."; default route.";
} }
} }
skipping to change at page 14, line 35 skipping to change at line 660
Gateway Protocol) autonomous system (AS) into the RIP Gateway Protocol) autonomous system (AS) into the RIP
routing instance."; routing instance.";
leaf asn { leaf asn {
type inet:as-number; type inet:as-number;
description description
"BGP autonomous system (AS) number."; "BGP autonomous system (AS) number.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
container cg-nat { container cg-nat {
presence presence "Present if Carrier-Grade Network Address
"Present if Carrier Grade Network Address Translation Translation (CGNAT) routes are redistributed.";
(CGNAT) routes are redistributed.";
description description
"Carrier Grade Network Address Translation (CGNAT) "Carrier-Grade Network Address Translation (CGNAT)
routes."; routes.";
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
container connected { container connected {
presence presence "Present if directly attached network routes are
"Present if directly attached network routes are redistributed.";
redistributed.";
description description
"Redistributes directly attached networks into the RIP "Redistributes directly attached networks into the RIP
routing instance."; routing instance.";
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
container ipsec { container ipsec {
presence presence "Present if IP security routing instance routes
"Present if IP security routing instance routes are redistributed.";
are redistributed.";
description description
"Redistributes routes from the IP security routing "Redistributes routes from the IP security routing
instance into the RIP routing instance."; instance into the RIP routing instance.";
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list isis { list isis {
key "instance"; key "instance";
description description
"Redistributes IS-IS routes."; "Redistributes IS-IS routes.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:control-plane-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "derived-from-or-self(" must "derived-from-or-self("
+ "../../../../../rt:control-plane-protocol" + "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/rt:type, 'isis:isis')" { + "[rt:name = current()]/rt:type, 'isis:isis')" {
description description
"The type of the routing protocol must be 'isis'"; "The type of the routing protocol must be 'isis'.";
} }
description description
"Redistributes routes from the specified IS-IS routing "Redistributes routes from the specified IS-IS routing
instance into the RIP routing instance."; instance into the RIP routing instance.";
} }
leaf level { leaf level {
type enumeration { type enumeration {
enum 1 { enum 1 {
description "IS-IS level 1 routes."; description
"IS-IS level 1 routes.";
} }
enum 2 { enum 2 {
description "IS-IS level 2 routes."; description
"IS-IS level 2 routes.";
} }
enum 1-2 { enum 1-2 {
description "IS-IS level 1-2 routes."; description
"IS-IS level 1-2 routes.";
} }
} }
description description
"IS-IS level."; "IS-IS level.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
container nat { container nat {
presence presence "Present if Network Address Translation (NAT) routes
"Present if Network Address Translation (NAT) routes are redistributed.";
are redistributed.";
description description
"Redistributes Network Address Translation (NAT) "Redistributes Network Address Translation (NAT)
routes into the RIP routing instance."; routes into the RIP routing instance.";
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ospfv2 { list ospfv2 {
when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" { when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" {
description description
"Applicable to RIPv2."; "Applicable to RIPv2.";
} }
key "instance"; key "instance";
description description
"Redistributes routes from the specified OSPFv2 routing "Redistributes routes from the specified OSPFv2 routing
instance into the RIPv2 routing instance."; instance into the RIPv2 routing instance.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:control-plane-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "derived-from-or-self(" must "derived-from-or-self("
+ "../../../../../rt:control-plane-protocol" + "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/rt:type, 'ospf:ospfv2')" { + "[rt:name = current()]/rt:type, 'ospf:ospfv2')" {
description description
"The type of the routing protocol must be 'ospfv2'"; "The type of the routing protocol must be 'ospfv2'.";
} }
description description
"OSPFv2 instance ID. Redistributes routes from the "OSPFv2 instance ID. Redistributes routes from the
specified OSPFv2 routing instance into the RIPv2 routing specified OSPFv2 routing instance into the RIPv2 routing
instance. "; instance.";
} }
leaf route-type { leaf route-type {
type ospf:route-type; type ospf:route-type;
description description
"Redistributes only those OSPFv2 routes matching the "Redistributes only those OSPFv2 routes matching the
specified route type into the RIPv2 routing instance."; specified route type into the RIPv2 routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ospfv3 { list ospfv3 {
skipping to change at page 17, line 7 skipping to change at line 775
} }
key "instance"; key "instance";
description description
"Redistributes routes from the specified OSPFv3 routing "Redistributes routes from the specified OSPFv3 routing
instance into the RIPng routing instance."; instance into the RIPng routing instance.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:control-plane-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "derived-from-or-self(" must "derived-from-or-self("
+ "../../../../../rt:control-plane-protocol" + "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/rt:type, 'ospf:ospfv3')" { + "[rt:name = current()]/rt:type, 'ospf:ospfv3')" {
description description
"The type of the routing protocol must be 'ospfv3'"; "The type of the routing protocol must be 'ospfv3'.";
} }
description description
"OSPFv3 instance ID. Redistributes routes from the "OSPFv3 instance ID. Redistributes routes from the
specified OSPFv3 routing instance into the RIPng routing specified OSPFv3 routing instance into the RIPng routing
instance. "; instance.";
} }
leaf route-type { leaf route-type {
type ospf:route-type; type ospf:route-type;
description description
"Redistributes only those OSPFv3 routes matching the "Redistributes only those OSPFv3 routes matching the
specified route type into the RIPng routing instance."; specified route type into the RIPng routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ripv2 { list ripv2 {
skipping to change at page 17, line 39 skipping to change at line 807
} }
key "instance"; key "instance";
description description
"Redistributes routes from another RIPv2 routing instance "Redistributes routes from another RIPv2 routing instance
into the current RIPv2 routing instance."; into the current RIPv2 routing instance.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:control-plane-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "derived-from-or-self(" must "derived-from-or-self("
+ "../../../../../rt:control-plane-protocol" + "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/rt:type, 'rip:ripv2')" { + "[rt:name = current()]/rt:type, 'rip:ripv2')" {
description description
"The type of the routing protocol must be 'ripv2'"; "The type of the routing protocol must be 'ripv2'.";
} }
description description
"Redistributes routes from the specified RIPv2 routing "Redistributes routes from the specified RIPv2 routing
instance into the RIPv2 routing instance."; instance into the RIPv2 routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ripng { list ripng {
when "derived-from-or-self(../../../rt:type, 'rip:ripng')" { when "derived-from-or-self(../../../rt:type, 'rip:ripng')" {
description description
skipping to change at page 18, line 16 skipping to change at line 832
} }
key "instance"; key "instance";
description description
"Redistributes routes from another RIPng routing instance "Redistributes routes from another RIPng routing instance
into the current RIPng routing instance."; into the current RIPng routing instance.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:control-plane-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "derived-from-or-self(" must "derived-from-or-self("
+ "../../../../../rt:control-plane-protocol" + "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/rt:type, 'rip:ripng')" { + "[rt:name = current()]/rt:type, 'rip:ripng')" {
description description
"The type of the routing protocol must be 'ripng'"; "The type of the routing protocol must be 'ripng'.";
} }
description description
"Redistributes routes from the specified RIPng routing "Redistributes routes from the specified RIPng routing
instance into the RIPng routing instance."; instance into the RIPng routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
container static { container static {
presence "Present if redistributing static routes."; presence "Present if redistributing static routes.";
description description
"Redistributes static routes into the RIP routing "Redistributes static routes into the RIP routing
instance."; instance.";
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
} // redistribute }
} // redistribute-container // redistribute
}
// redistribute-container
grouping redistribute-route-policy-attributes { grouping redistribute-route-policy-attributes {
description description
"Attributes for redistributing a route policy."; "Attributes for redistributing a route policy.";
leaf metric { leaf metric {
type uint8 { type uint8 {
range 0..16; range "0..16";
} }
description description
"Metric used for the redistributed route. If a metric is "Metric used for the redistributed route. If a metric is
not specified, the metric configured with the not specified, the metric configured with the
default-metric attribute in RIP router configuration is default-metric attribute in RIP router configuration is
used. If the default-metric attribute has not been used. If the default-metric attribute has not been
configured, the default metric for redistributed routes configured, the default metric for redistributed routes
is 1."; is 1.";
} }
leaf route-policy { leaf route-policy {
type route-policy-ref; type route-policy-ref;
description description
"Applies the conditions of the specified route policy to "Applies the conditions of the specified route policy to
routes that are redistributed into the RIP routing routes that are redistributed into the RIP routing
instance."; instance.";
} }
} // redistribute-route-policy-attributes }
// redistribute-route-policy-attributes
grouping timers-container { grouping timers-container {
description description
"Container for settings of basic timers"; "Container for settings of basic timers";
container timers { container timers {
must "invalid-interval >= (update-interval * 3)" { must 'invalid-interval >= (update-interval * 3)' {
description description
"invalid-interval must be at least three times the value "invalid-interval must be at least three times the value
for the update-interval argument."; for the update-interval argument.";
} }
must "flush-interval > invalid-interval" { must 'flush-interval > invalid-interval' {
description description
"flush-interval must be larger than the value for the "flush-interval must be larger than the value for the
invalid-interval argument"; invalid-interval argument.";
} }
description description
"Timers for the specified RIPv2 or RIPng instance or "Timers for the specified RIPv2 or RIPng instance or
interface."; interface.";
leaf update-interval { leaf update-interval {
type uint16 { type uint16 {
range 1..32767; range "1..32767";
} }
units seconds; units "seconds";
default 30; default "30";
description description
"Interval at which RIPv2 or RIPng updates are sent."; "Interval at which RIPv2 or RIPng updates are sent.";
} }
leaf invalid-interval { leaf invalid-interval {
type uint16 { type uint16 {
range 1..32767; range "1..32767";
} }
units seconds; units "seconds";
default 180; default "180";
description description
"Interval before a route is declared invalid after no "Interval before a route is declared invalid after no
updates are received. This value is at least three times updates are received. This value is at least three times
the value for the update-interval argument."; the value for the update-interval argument.";
} }
leaf holddown-interval { leaf holddown-interval {
type uint16 { type uint16 {
range 1..32767; range "1..32767";
} }
units seconds; units "seconds";
default 180; default "180";
description description
"Interval before better routes are released."; "Interval before better routes are released.";
} }
leaf flush-interval { leaf flush-interval {
type uint16 { type uint16 {
range 1..32767; range "1..32767";
} }
units seconds; units "seconds";
default 240; default "240";
description description
"Interval before a route is flushed from the routing "Interval before a route is flushed from the routing
table. This value must be larger than the value for the table. This value must be larger than the value for the
invalid-interval argument."; invalid-interval argument.";
} }
} // timers }
// timers
} }
grouping global-attributes { grouping global-attributes {
description description
"Global configuration and state attributes."; "Global configuration and state attributes.";
uses originate-default-route-container; uses originate-default-route-container;
leaf default-metric { leaf default-metric {
type uint8 { type uint8 {
range 0..16; range "0..16";
} }
default 1; default "1";
description description
"Set the default metric."; "Set the default metric.";
} }
leaf distance { leaf distance {
type uint8 { type uint8 {
range 1..255; range "1..255";
} }
default 120; default "120";
description description
"The administrative distance of the RIPv2 or RIPng for the "The administrative distance of the RIPv2 or RIPng for the
current RIPv2 or RIPng instance."; current RIPv2 or RIPng instance.";
} }
leaf triggered-update-threshold { leaf triggered-update-threshold {
type uint8 { type uint8 {
range 1..30; range "1..30";
} }
units seconds; units "seconds";
default 5; default "5";
description description
"This attribute is used to suppress triggered updates. "This attribute is used to suppress triggered updates.
When the arrival of a regularly scheduled update matches the When the arrival of a regularly scheduled update matches the
number of seconds or is less than the number seconds number of seconds or is less than the number seconds
configured with this attribute, the triggered update is configured with this attribute, the triggered update is
suppressed."; suppressed.";
} }
leaf maximum-paths { leaf maximum-paths {
type uint8 { type uint8 {
range 1..16; range "1..16";
} }
default 8; default "8";
description description
"The number of multiple equal-cost RIPv2 or RIPng routes "The number of multiple equal-cost RIPv2 or RIPng routes
that can be used as the best paths for balancing the load that can be used as the best paths for balancing the load
of outgoing traffic packets."; of outgoing traffic packets.";
} }
leaf output-delay { leaf output-delay {
type uint8 { type uint8 {
range 1..50; range "1..50";
} }
units milliseconds; units "milliseconds";
description description
"A delay time between packets sent in multipacket "A delay time between packets sent in multipacket
RIPv2 or RIPng updates."; RIPv2 or RIPng updates.";
} }
} // global-attributes }
// global-attributes
grouping distribute-lists { grouping distribute-lists {
description description
"Grouping for distribute lists."; "Grouping for distribute lists.";
list distribute-list { list distribute-list {
key "prefix-set-name direction"; key "prefix-set-name direction";
description description
"List of distribute-lists, which are used to filter in-coming "List of distribute-lists, which are used to filter incoming
or out-going routing updates."; or outgoing routing updates.";
leaf prefix-set-name { leaf prefix-set-name {
type prefix-set-ref; type prefix-set-ref;
description description
"Reference to a prefix list to be applied to RIPv2 or "Reference to a prefix list to be applied to RIPv2 or
RIPng packets."; RIPng packets.";
} }
leaf direction { leaf direction {
type enumeration { type enumeration {
enum "in" { enum in {
description description
"Apply the distribute-list to in-coming routes."; "Apply the distribute-list to incoming routes.";
} }
enum "out" { enum out {
description description
"Apply the distribute-list to out-going routes."; "Apply the distribute-list to outgoing routes.";
} }
} }
description description
"Direction of the routing updates."; "Direction of the routing updates.";
} }
leaf if-name { leaf if-name {
type if:interface-ref; type if:interface-ref;
description description
"Reference to an interface to which the prefix list is "Reference to an interface to which the prefix list is
applied."; applied.";
} }
} }
} // distribute-lists }
// distribute-lists
grouping route-attributes { grouping route-attributes {
description description
"Grouping for route attributes."; "Grouping for route attributes.";
leaf redistributed { leaf redistributed {
type boolean; type boolean;
description description
"Redistributed routes"; "Redistributed routes.";
} }
leaf route-type { leaf route-type {
type enumeration { type enumeration {
enum connected { enum connected {
description "Connected route."; description
"Connected route.";
} }
enum external { enum external {
description "External route."; description
"External route.";
} }
enum external-backup { enum external-backup {
description "External backup route."; description
"External backup route.";
} }
enum rip { enum rip {
description "RIP route."; description
"RIP route.";
} }
} }
description description
"Route type."; "Route type.";
} }
leaf metric { leaf metric {
type uint8 { type uint8 {
range 0..16; range "0..16";
} }
description "Route metric."; description
"Route metric.";
} }
leaf expire-time { leaf expire-time {
type uint16; type uint16;
description "Expiration time."; description
"Expiration time.";
} }
leaf deleted { leaf deleted {
type boolean; type boolean;
description "Deleted route."; description
"Deleted route.";
} }
leaf holddown { leaf holddown {
type boolean; type boolean;
description "Holddown route."; description
"Holddown route.";
} }
leaf need-triggered-update { leaf need-triggered-update {
type boolean; type boolean;
description "The route needs triggered update."; description
"The route needs triggered update.";
} }
leaf inactive { leaf inactive {
type boolean; type boolean;
description "The route is inactive."; description
"The route is inactive.";
} }
leaf flush-expire-before-holddown { leaf flush-expire-before-holddown {
type boolean; type boolean;
description description
"The flush timer expired before holddown time."; "The flush timer expired before holddown time.";
} }
} // route-attribute }
// route-attribute
/* /*
* Configuration data and operational state data nodes * Configuration data and operational state data nodes
*/ */
augment "/rt:routing/rt:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol" { + "rt:control-plane-protocol" {
when "derived-from(rt:type, 'rip:rip')" { when "derived-from(rt:type, 'rip:rip')" {
description description
"This augment is only valid for a routing protocol instance "This augment is only valid for a routing protocol instance
of RIP (type 'ripv2' or 'ripng')."; of RIP (type 'ripv2' or 'ripng').";
} }
description "RIP augmentation."; description
"RIP augmentation.";
container rip { container rip {
description description
"RIP data."; "RIP data.";
uses global-attributes; uses global-attributes;
uses distribute-lists; uses distribute-lists;
uses redistribute-container; uses redistribute-container;
uses timers-container; uses timers-container;
container interfaces { container interfaces {
description description
"Containing a list of RIP interfaces."; "Containing a list of RIP interfaces.";
list interface { list interface {
key "interface"; key "interface";
description description
"List of RIP interfaces."; "List of RIP interfaces.";
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
must "(derived-from-or-self(" must "(derived-from-or-self("
skipping to change at page 24, line 23 skipping to change at line 1136
container interfaces { container interfaces {
description description
"Containing a list of RIP interfaces."; "Containing a list of RIP interfaces.";
list interface { list interface {
key "interface"; key "interface";
description description
"List of RIP interfaces."; "List of RIP interfaces.";
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
must "(derived-from-or-self(" must "(derived-from-or-self("
+ "../../../../rt:type, 'rip:ripv2') and " + "../../../../rt:type, 'rip:ripv2') and "
+ "/if:interfaces/if:interface[if:name=current()]/" + "/if:interfaces/if:interface[if:name=current()]/"
+ "ip:ipv4) or " + "ip:ipv4) or "
+ "(derived-from-or-self(" + "(derived-from-or-self("
+ "../../../../rt:type, 'rip:ripng') and " + "../../../../rt:type, 'rip:ripng') and "
+ "/if:interfaces/if:interface[if:name=current()]/" + "/if:interfaces/if:interface[if:name=current()]/"
+ "ip:ipv6)" { + "ip:ipv6)" {
error-message "Invalid interface type."; error-message "Invalid interface type.";
description description
"RIPv2 can be enabled on IPv4 interfae, and "RIPv2 can be enabled on IPv4 interface, and
RIPng can be enabled on IPv6 interface."; RIPng can be enabled on IPv6 interface.";
} }
description description
"Enable RIP on this interface."; "Enable RIP on this interface.";
} }
container authentication { container authentication {
when "derived-from-or-self(" when "derived-from-or-self("
+ "../../../../rt:type, 'rip:ripv2')" { + "../../../../rt:type, 'rip:ripv2')" {
description "Only applicable to RIPv2."; description
"Only applicable to RIPv2.";
} }
description description
"Enables authentication and specifies the "Enables authentication and specifies the
authentication scheme for the RIP interface"; authentication scheme for the RIP interface.";
choice auth-type-selection { choice auth-type-selection {
description description
"Specify the authentication scheme."; "Specify the authentication scheme.";
reference reference
"RFC8177: YANG Data Model for Key Chains."; "RFC8177: YANG Data Model for Key Chains.";
case auth-key-chain { case auth-key-chain {
leaf key-chain { leaf key-chain {
type key-chain:key-chain-ref; type key-chain:key-chain-ref;
description description
"key-chain name."; "key-chain name.";
} }
} }
case auth-key { case auth-key {
leaf key { leaf key {
type string; type string;
skipping to change at page 25, line 23 skipping to change at line 1183
leaf key { leaf key {
type string; type string;
description description
"Key string in ASCII format."; "Key string in ASCII format.";
} }
leaf crypto-algorithm { leaf crypto-algorithm {
type identityref { type identityref {
base key-chain:crypto-algorithm; base key-chain:crypto-algorithm;
} }
description description
"Cryptographic algorithm associated with key."; "Cryptographic algorithm associated with the
key.";
} }
} }
} }
} }
container bfd { container bfd {
if-feature bfd; if-feature "bfd";
description "BFD configuration."; description
"BFD configuration.";
uses bfd-types:client-cfg-parms; uses bfd-types:client-cfg-parms;
} }
leaf cost { leaf cost {
type uint8 { type uint8 {
range 1..16; range "1..16";
} }
default 1; default "1";
description description
"Interface cost."; "Interface cost.";
} }
container neighbors { container neighbors {
if-feature explicit-neighbors; if-feature "explicit-neighbors";
description description
"Specifies the RIP neighbors. Useful for a "Specifies the RIP neighbors. Useful for a
non-broadcast multiple access (NBMA) network."; non-broadcast multiple access (NBMA) network.";
list neighbor { list neighbor {
key "address"; key "address";
description description
"Specify a RIP neighbor on a non-broadcast network."; "Specify a RIP neighbor on a non-broadcast network.";
leaf address { leaf address {
type inet:ip-address; type inet:ip-address;
description "Neighbor IP address."; description
"Neighbor IP address.";
} }
} }
} }
leaf no-listen { leaf no-listen {
type empty; type empty;
description description
"Disables listening to and processing of RIPv2 or RIPng "Disables listening to, and processing of, RIPv2 or
packets on the specified interface."; RIPng packets on the specified interface.";
} }
uses originate-default-route-container; uses originate-default-route-container;
leaf passive { leaf passive {
type empty; type empty;
description description
"Disables sending of RIPv2 or RIPng packets on the "Disables sending of RIPv2 or RIPng packets on the
specified interface."; specified interface.";
} }
leaf split-horizon { leaf split-horizon {
type enumeration { type enumeration {
enum disabled { enum disabled {
description description
"Disables split-horizon processing."; "Disables split-horizon processing.";
} }
enum simple { enum simple {
description description
"Enables simple split-horizon processing."; "Enables simple split-horizon processing.";
} }
skipping to change at page 26, line 44 skipping to change at line 1248
enum simple { enum simple {
description description
"Enables simple split-horizon processing."; "Enables simple split-horizon processing.";
} }
enum poison-reverse { enum poison-reverse {
description description
"Enables split-horizon processing with poison "Enables split-horizon processing with poison
reverse."; reverse.";
} }
} }
default simple; default "simple";
description description
"Controls RIPv2 or RIPng split-horizon processing on "Controls RIPv2 or RIPng split-horizon processing on
the specified interface."; the specified interface.";
} }
container summary-address { container summary-address {
description description
"Summarizes information about RIPv2 or RIPng routes "Summarizes information about RIPv2 or RIPng routes
sent over the specified interface in RIPv2 or RIPng sent over the specified interface in RIPv2 or RIPng
update packets."; update packets.";
leaf address { leaf address {
type inet:ip-prefix; type inet:ip-prefix;
description description
"Specifies the IP address and the prefix length that "Specifies the IP address and the prefix length that
identify the routes to be summarized. The IP address identify the routes to be summarized. The IP
can be specified in either IPv4 or IPv6 format, as address can be specified in either IPv4 or IPv6
specified in RFC6991."; format, as specified in RFC6991.";
} }
leaf metric { leaf metric {
type uint8 { type uint8 {
range 0..16; range "0..16";
} }
description description
"Metric used for the route. If this attribute is not "Metric used for the route. If this attribute is not
used, the value set through the default-metric used, the value set through the default-metric
attribute in RIPv2 or RIPng router configuration is attribute in RIPv2 or RIPng router configuration is
used for the route. "; used for the route.";
} }
} }
uses timers-container; uses timers-container;
/* Operational state */ /* Operational state */
leaf oper-status { leaf oper-status {
type enumeration { type enumeration {
enum up { enum up {
description description
"RIPv2 or RIPng is operational on this interface."; "RIPv2 or RIPng is operational on this interface.";
} }
enum down { enum down {
description description
"RIPv2 or RIPng is not operational on this "RIPv2 or RIPng is not operational on this
skipping to change at page 28, line 9 skipping to change at line 1307
config false; config false;
description description
"Next full update time."; "Next full update time.";
} }
leaf valid-address { leaf valid-address {
type boolean; type boolean;
config false; config false;
description description
"The interface has a valid address."; "The interface has a valid address.";
} }
container statistics { container statistics {
if-feature interface-statistics; if-feature "interface-statistics";
config false; config false;
description description
"Interface statistic counters."; "Interface statistics counters.";
leaf discontinuity-time { leaf discontinuity-time {
type yang:date-and-time; type yang:date-and-time;
description description
"The time on the most recent occasion at which any "The time on the most recent occasion at which any
one or more of the statistic counters suffered a one or more of the statistics counters suffered a
discontinuity. If no such discontinuities have discontinuity. If no such discontinuities have
occurred since the last re-initialization of the occurred since the last re-initialization of the
local management subsystem, then this node contains local management subsystem, then this node contains
the time the local management subsystem the time the local management subsystem
re-initialized itself."; re-initialized itself.";
} }
leaf bad-packets-rcvd { leaf bad-packets-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of RIP invalid packets received by "The number of RIP invalid packets received by
the RIP process which were subsequently discarded the RIP process that were subsequently discarded
for any reason (e.g. a version 0 packet, or an for any reason (e.g., a version 0 packet, or an
unknown command type)."; unknown command type).";
} }
leaf bad-routes-rcvd { leaf bad-routes-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of routes, in valid RIP packets, "The number of routes, in valid RIP packets,
which were ignored for any reason (e.g. unknown which were ignored for any reason (e.g., unknown
address family, or invalid metric)."; address family, or invalid metric).";
} }
leaf updates-sent { leaf updates-sent {
type yang:counter32; type yang:counter32;
description description
"The number of triggered RIP updates actually "The number of triggered RIP updates actually
sent on this interface. This explicitly does sent on this interface. This explicitly does
NOT include full updates sent containing new NOT include full updates sent containing new
information."; information.";
} }
} }
} // interface }
} // interfaces // interface
}
// interfaces
/* Operational state */ /* Operational state */
leaf next-triggered-update { leaf next-triggered-update {
type uint32; type uint32;
config false; config false;
description description
"Next triggered update."; "Next triggered update.";
} }
leaf num-of-routes { leaf num-of-routes {
type uint32; type uint32;
config false; config false;
skipping to change at page 29, line 50 skipping to change at line 1396
leaf last-update { leaf last-update {
type yang:date-and-time; type yang:date-and-time;
description description
"The time when the most recent RIP update was "The time when the most recent RIP update was
received from this neighbor."; received from this neighbor.";
} }
leaf bad-packets-rcvd { leaf bad-packets-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of RIP invalid packets received from "The number of RIP invalid packets received from
this neighbor which were subsequently discarded this neighbor that were subsequently discarded
for any reason (e.g. a version 0 packet, or an for any reason (e.g., a version 0 packet, or an
unknown command type)."; unknown command type).";
} }
leaf bad-routes-rcvd { leaf bad-routes-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of routes received from this neighbor, "The number of routes received from this neighbor,
in valid RIP packets, which were ignored for any in valid RIP packets that were ignored for any
reason (e.g. unknown address family, or invalid reason (e.g., unknown address family, or invalid
metric)."; metric).";
} }
} // neighbor }
} // neighbors // neighbor
}
// neighbors
container routes { container routes {
description description
"IPv4 route information."; "IPv4 route information.";
list route { list route {
key "ipv4-prefix"; key "ipv4-prefix";
description description
"A RIPv2 IPv4 route."; "A RIPv2 IPv4 route.";
leaf ipv4-prefix { leaf ipv4-prefix {
type inet:ipv4-prefix; type inet:ipv4-prefix;
description description
"IPv4 address and prefix length, in the format "IPv4 address and prefix length, in the format
specified in RFC6991."; specified in RFC6991.";
} }
leaf next-hop { leaf next-hop {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Next hop IPv4 address."; "Next hop IPv4 address.";
skipping to change at page 30, line 41 skipping to change at line 1437
type inet:ipv4-address; type inet:ipv4-address;
description description
"Next hop IPv4 address."; "Next hop IPv4 address.";
} }
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
description description
"The interface that the route uses."; "The interface that the route uses.";
} }
uses route-attributes; uses route-attributes;
} // route }
} // routes // route
} // ipv4 }
// routes
}
// ipv4
container ipv6 { container ipv6 {
when "derived-from-or-self(../../rt:type, 'rip:ripng')" { when "derived-from-or-self(../../rt:type, 'rip:ripng')" {
description description
"IPv6 address family is supported by RIPng."; "IPv6 address family is supported by RIPng.";
} }
config false; config false;
description description
"IPv6 address family information."; "IPv6 address family information.";
container neighbors { container neighbors {
description description
"IPv6 neighbor information."; "IPv6 neighbor information.";
list neighbor { list neighbor {
key "ipv6-address"; key "ipv6-address";
description description
"A RIPng neighbor."; "A RIPng neighbor.";
leaf ipv6-address { leaf ipv6-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IP address that a RIP neighbor is using as its "IP address that a RIP neighbor is using as its
source address."; source address.";
} }
leaf last-update { leaf last-update {
type yang:date-and-time; type yang:date-and-time;
description description
"The time when the most recent RIP update was "The time when the most recent RIP update was
skipping to change at page 31, line 29 skipping to change at line 1475
leaf last-update { leaf last-update {
type yang:date-and-time; type yang:date-and-time;
description description
"The time when the most recent RIP update was "The time when the most recent RIP update was
received from this neighbor."; received from this neighbor.";
} }
leaf bad-packets-rcvd { leaf bad-packets-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of RIP invalid packets received from "The number of RIP invalid packets received from
this neighbor which were subsequently discarded this neighbor that were subsequently discarded
for any reason (e.g. a version 0 packet, or an for any reason (e.g., a version 0 packet, or an
unknown command type)."; unknown command type).";
} }
leaf bad-routes-rcvd { leaf bad-routes-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of routes received from this neighbor, "The number of routes received from this neighbor,
in valid RIP packets, which were ignored for any in valid RIP packets that were ignored for any
reason (e.g. unknown address family, or invalid reason (e.g., unknown address family, or invalid
metric)."; metric).";
} }
} // neighbor }
} // neighbors // neighbor
}
// neighbors
container routes { container routes {
description description
"IPv6 route information."; "IPv6 route information.";
list route { list route {
key "ipv6-prefix"; key "ipv6-prefix";
description description
"A RIPng IPv6 route."; "A RIPng IPv6 route.";
leaf ipv6-prefix { leaf ipv6-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"IPv6 address and prefix length, in the format "IPv6 address and prefix length, in the format
specified in RFC6991."; specified in RFC6991.";
} }
leaf next-hop { leaf next-hop {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Next hop IPv6 address."; "Next hop IPv6 address.";
skipping to change at page 32, line 19 skipping to change at line 1515
type inet:ipv6-address; type inet:ipv6-address;
description description
"Next hop IPv6 address."; "Next hop IPv6 address.";
} }
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
description description
"The interface that the route uses."; "The interface that the route uses.";
} }
uses route-attributes; uses route-attributes;
} // route }
} // routes // route
} // ipv6 }
// routes
}
// ipv6
container statistics { container statistics {
if-feature global-statistics; if-feature "global-statistics";
config false; config false;
description description
"Global statistic counters."; "Global statistics counters.";
leaf discontinuity-time { leaf discontinuity-time {
type yang:date-and-time; type yang:date-and-time;
description description
"The time on the most recent occasion at which any one "The time on the most recent occasion at which any one
or more of the statistic counters suffered a or more of the statistics counters suffered a
discontinuity. If no such discontinuities have occurred discontinuity. If no such discontinuities have occurred
since the last re-initialization of the local since the last re-initialization of the local
management subsystem, then this node contains the time management subsystem, then this node contains the time
the local management subsystem re-initialized itself."; the local management subsystem re-initialized itself.";
} }
leaf requests-rcvd { leaf requests-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of requests received by RIP."; "The number of requests received by RIP.";
} }
leaf requests-sent { leaf requests-sent {
skipping to change at page 33, line 4 skipping to change at line 1551
} }
leaf requests-sent { leaf requests-sent {
type yang:counter32; type yang:counter32;
description description
"The number of requests sent by RIP."; "The number of requests sent by RIP.";
} }
leaf responses-rcvd { leaf responses-rcvd {
type yang:counter32; type yang:counter32;
description description
"The number of responses received by RIP."; "The number of responses received by RIP.";
} }
leaf responses-sent { leaf responses-sent {
type yang:counter32; type yang:counter32;
description description
"The number of responses sent by RIP."; "The number of responses sent by RIP.";
} }
} // statistics }
} // container rip // statistics
}
// container rip
} }
/* /*
* RPCs * RPCs
*/ */
rpc clear-rip-route { rpc clear-rip-route {
description description
"Clears RIP routes from the IP routing table and routes "Clears RIP routes from the IP routing table and routes
redistributed into the RIP protocol for the specified RIP redistributed into RIP for the specified RIP instance
instance or for all RIP instances in the current context."; or for all RIP instances in the current context.";
input { input {
leaf rip-instance { leaf rip-instance {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name"; + "rt:control-plane-protocol/rt:name";
} }
description description
"Instance name identifying a specific RIP instance. "Instance name identifying a specific RIP instance.
This leaf is optional for the rpc. This leaf is optional for the RPC.
If it is specified, the rpc will clear all routes in the If it is specified, the RPC will clear all routes in the
specified RIP instance; specified RIP instance;
if it is not specified, the rpc will clear all routes in if it is not specified, the RPC will clear all routes in
all RIP instances."; all RIP instances.";
} }
} }
} // rcp clear-rip-route }
// rcp clear-rip-route
} }
<CODE ENDS> <CODE ENDS>
5. IANA Considerations 5. IANA Considerations
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the This document registers the following namespace URIs in the "IETF XML
actual RFC number (and remove this note). Registry" [RFC3688]:
This document registers the following namespace URIs in the IETF XML
registry [RFC3688]:
-------------------------------------------------------------------- URI: urn:ietf:params:xml:ns:yang:ietf-rip
URI: urn:ietf:params:xml:ns:yang:ietf-rip Registrant Contact: The IESG.
Registrant Contact: The IESG. XML: N/A; the requested URI is an XML namespace.
XML: N/A, the requested URI is an XML namespace.
--------------------------------------------------------------------
This document registers the following YANG modules in the YANG Module This document registers the following YANG modules in the "YANG
Names registry [RFC7950]: Module Names" registry [RFC6020]:
-------------------------------------------------------------------- Name: ietf-rip
name: ietf-rip Namespace: urn:ietf:params:xml:ns:yang:ietf-rip
namespace: urn:ietf:params:xml:ns:yang:ietf-rip Prefix: rip
prefix: rip Reference: RFC 8695
reference: RFC XXXX
--------------------------------------------------------------------
6. Security Considerations 6. Security Considerations
The YANG module specified in this document defines a schema for data The YANG module specified in this document defines a schema for data
that is designed to be accessed via network management protocols such that is designed to be accessed via network management protocols such
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
is the secure transport layer, and the mandatory-to-implement secure is the secure transport layer, and the mandatory-to-implement secure
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
is HTTPS, and the mandatory-to-implement secure transport is TLS is HTTPS, and the mandatory-to-implement secure transport is TLS
[RFC8446]. [RFC8446].
The NETCONF access control model [RFC8341] provides the means to The NETCONF Access Control Model (NACM) [RFC8341] provides the means
restrict access for particular NETCONF or RESTCONF users to a to restrict access for particular NETCONF or RESTCONF users to a
preconfigured subset of all available NETCONF or RESTCONF protocol preconfigured subset of all available NETCONF or RESTCONF protocol
operations and content. operations and content.
There are a number of data nodes defined in this YANG module that are There are a number of data nodes defined in this YANG module that are
writable/creatable/deletable (i.e., config true, which is the writable/creatable/deletable (i.e., config true, which is the
default). These data nodes may be considered sensitive or vulnerable default). These data nodes may be considered sensitive or vulnerable
in some network environments. Write operations (e.g., edit-config) in some network environments. Write operations (e.g., edit-config)
to these data nodes without proper protection can have a negative to these data nodes without proper protection can have a negative
effect on network operations. These are the subtrees and data nodes effect on network operations. These are the subtrees and data nodes
and their sensitivity/vulnerability: and their sensitivity/vulnerability:
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/
rip:rip rip:rip
Unauthorized access to any data node of these subtrees can adversely Unauthorized access to any data node of these subtrees can adversely
affect the routing subsystem of both the local device and the affect the routing subsystem of both the local device and the
network. This may lead to network malfunctions, delivery of packets network. This may lead to network malfunctions, delivery of packets
to inappropriate destinations, and other problems. to inappropriate destinations, and other problems.
Some of the readable data nodes in this YANG module may be considered Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data notification) to these data nodes. These are the subtrees and data
nodes and their sensitivity/vulnerability: nodes and their sensitivity/vulnerability:
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/
rip:rip rip:rip
Unauthorized access to any data node of these subtrees can disclose Unauthorized access to any data node of these subtrees can disclose
the operational state information of RIP on this device. the operational state information of RIP on this device.
Some of the RPC operations in this YANG module may be considered Some of the RPC operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. These are the important to control access to these operations. These are the
operations and their sensitivity/vulnerability: operations and their sensitivity/vulnerability:
RPC clear-rip-route: RPC clear-rip-route:
skipping to change at page 36, line 5 skipping to change at line 1690
<https://www.rfc-editor.org/info/rfc2453>. <https://www.rfc-editor.org/info/rfc2453>.
[RFC2080] Malkin, G. and R. Minnear, "RIPng for IPv6", RFC 2080, [RFC2080] Malkin, G. and R. Minnear, "RIPng for IPv6", RFC 2080,
DOI 10.17487/RFC2080, January 1997, DOI 10.17487/RFC2080, January 1997,
<https://www.rfc-editor.org/info/rfc2080>. <https://www.rfc-editor.org/info/rfc2080>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<https://www.rfc-editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010,
<https://www.rfc-editor.org/info/rfc6020>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<https://www.rfc-editor.org/info/rfc6241>. <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>. <https://www.rfc-editor.org/info/rfc6242>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
skipping to change at page 36, line 26 skipping to change at line 1716
<https://www.rfc-editor.org/info/rfc6991>. <https://www.rfc-editor.org/info/rfc6991>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<https://www.rfc-editor.org/info/rfc8040>. <https://www.rfc-editor.org/info/rfc8040>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J. [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J.
Zhang, "YANG Data Model for Key Chains", RFC 8177, Zhang, "YANG Data Model for Key Chains", RFC 8177,
DOI 10.17487/RFC8177, June 2017, DOI 10.17487/RFC8177, June 2017,
<https://www.rfc-editor.org/info/rfc8177>. <https://www.rfc-editor.org/info/rfc8177>.
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
Access Control Model", STD 91, RFC 8341, Access Control Model", STD 91, RFC 8341,
DOI 10.17487/RFC8341, March 2018, DOI 10.17487/RFC8341, March 2018,
<https://www.rfc-editor.org/info/rfc8341>. <https://www.rfc-editor.org/info/rfc8341>.
skipping to change at page 37, line 24 skipping to change at line 1767
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
<https://www.rfc-editor.org/info/rfc8340>. <https://www.rfc-editor.org/info/rfc8340>.
[RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of
Documents Containing YANG Data Models", BCP 216, RFC 8407, Documents Containing YANG Data Models", BCP 216, RFC 8407,
DOI 10.17487/RFC8407, October 2018, DOI 10.17487/RFC8407, October 2018,
<https://www.rfc-editor.org/info/rfc8407>. <https://www.rfc-editor.org/info/rfc8407>.
[I-D.ietf-netconf-subscribed-notifications] [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard,
Voit, E., Clemm, A., Prieto, A., Nilsen-Nygaard, E., and E., and A. Tripathy, "Subscription to YANG Notifications",
A. Tripathy, "Subscription to YANG Event Notifications", RFC 8639, DOI 10.17487/RFC8639, September 2019,
draft-ietf-netconf-subscribed-notifications-26 (work in <https://www.rfc-editor.org/info/rfc8639>.
progress), May 2019.
[I-D.ietf-netconf-yang-push] [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications
Clemm, A. and E. Voit, "Subscription to YANG Datastores", for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641,
draft-ietf-netconf-yang-push-25 (work in progress), May September 2019, <https://www.rfc-editor.org/info/rfc8641>.
2019.
[I-D.ietf-bfd-yang] [YANG-BFD] Rahman, R., Zheng, L., Jethanandani, M., Pallagatti, S.,
Rahman, R., Zheng, L., Jethanandani, M., Networks, J., and and G. Mirsky, "YANG Data Model for Bidirectional
G. Mirsky, "YANG Data Model for Bidirectional Forwarding Forwarding Detection (BFD)", Work in Progress, Internet-
Detection (BFD)", draft-ietf-bfd-yang-17 (work in Draft, draft-ietf-bfd-yang-17, 2 August 2018,
progress), August 2018. <https://tools.ietf.org/html/draft-ietf-bfd-yang-17>.
[I-D.ietf-isis-yang-isis-cfg] [YANG-ISIS]
Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L. Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L.
Lhotka, "YANG Data Model for IS-IS Protocol", draft-ietf- Lhotka, "YANG Data Model for IS-IS Protocol", Work in
isis-yang-isis-cfg-35 (work in progress), March 2019. Progress, Internet-Draft, draft-ietf-isis-yang-isis-cfg-
42, 15 October 2019, <https://tools.ietf.org/html/draft-
ietf-isis-yang-isis-cfg-42>.
[I-D.ietf-ospf-yang] [YANG-OSPF]
Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem,
"YANG Data Model for OSPF Protocol", draft-ietf-ospf- "YANG Data Model for OSPF Protocol", Work in Progress,
yang-28 (work in progress), August 2019. Internet-Draft, draft-ietf-ospf-yang-29, 17 October 2019,
<https://tools.ietf.org/html/draft-ietf-ospf-yang-29>.
Appendix A. Data Tree Example Appendix A. Data Tree Example
This section contains an example of an instance data tree in the JSON This section contains an example of an instance data tree in the JSON
encoding [RFC7951], containing both configuration and state data. encoding [RFC7951], containing both configuration and state data.
+---------------------+ +---------------------+
| | | |
| Router 203.0.113.1 | | Router 203.0.113.1 |
| | | |
skipping to change at page 38, line 26 skipping to change at line 1816
|2001:db8:0:1::1/64 |2001:db8:0:1::1/64
| |
| |
|2001:db8:0:1::2/64 |2001:db8:0:1::2/64
+----------+----------+ +----------+----------+
| | | | | |
| Another Router +---------| 2001:db8:0:2::/64 | Another Router +---------| 2001:db8:0:2::/64
| | | | | |
+---------------------+ +---------------------+
The configuration instance data tree for Router 203.0.113.1 in the Figure 1: RIPng Example
above figure could be as follows:
The configuration instance data tree for Router 203.0.113.1 in
Figure 1 could be as follows:
{ {
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth1", "name": "eth1",
"description": "An interface with RIPng enabled.", "description": "An interface with RIPng enabled.",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"ietf-ip:ipv6": { "ietf-ip:ipv6": {
"address": [ "address": [
skipping to change at page 39, line 11 skipping to change at line 1852
"control-plane-protocols": { "control-plane-protocols": {
"control-plane-protocol": [ "control-plane-protocol": [
{ {
"type": "ietf-rip:ripng", "type": "ietf-rip:ripng",
"name": "ripng-1", "name": "ripng-1",
"description": "RIPng instance ripng-1.", "description": "RIPng instance ripng-1.",
"ietf-rip:rip": { "ietf-rip:rip": {
"redistribute": { "redistribute": {
"connected": { "connected": {
} }
} },
"interfaces": { "interfaces": {
"interface": [ "interface": [
{ {
"interface": "eth1", "interface": "eth1",
"split-horizon": "poison-reverse" "split-horizon": "poison-reverse"
} }
] ]
} }
} }
} }
] ]
} }
} }
} }
The cooresponding operational state data for Router 203.0.113.1 could The corresponding operational state data for Router 203.0.113.1 could
be as follows: be as follows:
{ {
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth1", "name": "eth1",
"description": "An interface with RIPng enabled.", "description": "An interface with RIPng enabled.",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"phys-address": "00:00:5e:00:53:01", "phys-address": "00:00:5e:00:53:01",
skipping to change at page 40, line 45 skipping to change at line 1934
] ]
}, },
"control-plane-protocols": { "control-plane-protocols": {
"control-plane-protocol": [ "control-plane-protocol": [
{ {
"type": "ietf-rip:ripng", "type": "ietf-rip:ripng",
"name": "ripng-1", "name": "ripng-1",
"description": "RIPng instance ripng-1.", "description": "RIPng instance ripng-1.",
"ietf-rip:rip": { "ietf-rip:rip": {
"default-metric": 1, "default-metric": 1,
"next-triggered-update": 5 "next-triggered-update": 5,
"interfaces": { "interfaces": {
"interface": [ "interface": [
{ {
"interface": "eth1", "interface": "eth1",
"oper-status": "up", "oper-status": "up",
"cost": 1, "cost": 1,
"split-horizon": "poison-reverse", "split-horizon": "poison-reverse",
"valid-address": true "valid-address": true
} }
] ]
}, },
"ipv6" { "ipv6": {
"neighbors": { "neighbors": {
"neighbor": [ "neighbor": [
{ {
"address": "fe80::200:5eff:fe00:5302", "ipv6-address": "fe80::200:5eff:fe00:5302",
"last-update": "2017-01-02T10:34:55+02:00" "last-update": "2017-01-02T10:34:55+02:00"
} }
] ]
} },
"routes": { "routes": {
"route": [ "route": [
{ {
"ipv6-prefix": "2001:db8:0:1::/64", "ipv6-prefix": "2001:db8:0:1::/64",
"interface": "eth1", "interface": "eth1",
"redistributed": true, "redistributed": true,
"route-type": "connected", "route-type": "connected",
"metric": 1, "metric": 1,
"expire-time": 22 "expire-time": 22
}, },
skipping to change at page 42, line 17 skipping to change at line 2001
Authors' Addresses Authors' Addresses
Xufeng Liu Xufeng Liu
Volta Networks Volta Networks
Email: xufeng.liu.ietf@gmail.com Email: xufeng.liu.ietf@gmail.com
Prateek Sarda Prateek Sarda
Ericsson Ericsson
Fern Icon, Survey No 28 and 36/5, Doddanakundi Village Fern Icon, Survey No 28 and 36/5, Doddanakundi Village
Bangalore Karnataka 560037 Bangalore 560037
Karnataka
India India
Email: prateek.sarda@ericsson.com Email: prateek.sarda@ericsson.com
Vikram Choudhary Vikram Choudhary
Individual Individual
Bangalore 560066 Bangalore 560066
India India
Email: vikschw@gmail.com Email: vikschw@gmail.com
 End of changes. 235 change blocks. 
414 lines changed or deleted 440 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/