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