draft-ietf-rtgwg-yang-rip-01.txt   draft-ietf-rtgwg-yang-rip-02.txt 
Network Working Group X. Liu Network Working Group X. Liu
Internet-Draft P. Sarda Internet-Draft P. Sarda
Intended status: Standards Track Ericsson Intended status: Standards Track Ericsson
Expires: August 2, 2016 V. Choudhary Expires: January 18, 2017 V. Choudhary
Huawei Technologies Huawei Technologies
February 2, 2016 July 18, 2016
A YANG Data Model for Routing Information Protocol (RIP) A YANG Data Model for Routing Information Protocol (RIP)
draft-ietf-rtgwg-yang-rip-01.txt draft-ietf-rtgwg-yang-rip-02.txt
Abstract Abstract
This document describes a data model for the Routing Information This document describes a data model for the Routing Information
Protocol (RIP). Both RIP version 2 and RIPng are covered. Protocol (RIP). Both RIP version 2 and RIPng are covered.
Status of this Memo Status of this Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
skipping to change at page 1, line 38 skipping to change at page 1, line 38
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html http://www.ietf.org/shadow.html
This Internet-Draft will expire on January 1, 2015. This Internet-Draft will expire on January 18, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 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
(http://trustee.ietf.org/license-info) in effect on the date of (http://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
skipping to change at page 2, line 18 skipping to change at page 2, line 18
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...................................................2
1.1. Terminology...............................................2 1.1. Terminology...............................................2
1.2. Tree Diagrams.............................................3 1.2. Tree Diagrams.............................................3
2. RIP YANG model overview........................................3 2. RIP YANG model overview........................................3
3. RIP YANG module................................................8 3. RIP YANG module................................................9
4. IANA Considerations...........................................37 4. IANA Considerations...........................................36
5. Security Considerations.......................................37 5. Security Considerations.......................................37
6. References....................................................37 6. References....................................................37
6.1. Normative References.....................................37 6.1. Normative References.....................................37
6.2. Informative References...................................38 6.2. Informative References...................................37
1. Introduction 1. Introduction
This document introduces a YANG [RFC6020] data model for the Routing This document introduces a YANG [RFC6020] 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 model supports both RIP version 2 and RIPng. RIP version 2
(defined in [RFC2453]) supports IPv4. RIPng (defined in [RFC2080]) (defined in [RFC2453]) supports IPv4. RIPng (defined in [RFC2080])
skipping to change at page 3, line 36 skipping to change at page 3, line 36
o Ellipsis ("...") stands for contents of subtrees that are not o Ellipsis ("...") stands for contents of subtrees that are not
shown. shown.
2. RIP YANG model overview 2. RIP YANG model overview
This document defines the YANG module "ietf-rip", which has the This document defines the YANG module "ietf-rip", which has the
following structure: following structure:
module: ietf-rip module: ietf-rip
augment /rt:routing/rt:routing-instance/rt:routing-protocols/ augment /rt:routing/rt:control-plane-protocols/rt:control-plane-
rt:routing-protocol: protocol:
+--rw rip +--rw rip
+--rw originate-default-route! +--rw originate-default-route!
| +--rw route-policy? route-policy-ref | +--rw route-policy? route-policy-ref
+--rw default-metric? uint8 +--rw default-metric? uint8
+--rw distance? uint8 +--rw distance? uint8
+--rw triggered-update-threshold? uint8 +--rw triggered-update-threshold? uint8
+--rw maximum-paths? uint8 +--rw maximum-paths? uint8
+--rw output-delay? uint8 +--rw output-delay? uint8
+--rw distribute-list* [prefix-set-name direction] +--rw distribute-list* [prefix-set-name direction]
| +--rw prefix-set-name prefix-set-ref | +--rw prefix-set-name prefix-set-ref
skipping to change at page 5, line 23 skipping to change at page 5, line 23
+--rw interface if:interface-ref +--rw interface if:interface-ref
+--rw authentication +--rw authentication
| +--rw (auth-type-selection)? | +--rw (auth-type-selection)?
| +--:(auth-key-chain) | +--:(auth-key-chain)
| | +--rw key-chain? key-chain:key-chain-ref | | +--rw key-chain? key-chain:key-chain-ref
| +--:(auth-key) | +--:(auth-key)
| +--rw key? string | +--rw key? string
| +--rw crypto-algorithm | +--rw crypto-algorithm
| +--rw (algorithm)? | +--rw (algorithm)?
| +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}? | +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}?
| | +--rw hmac-sha1-12? empty | | +--rw hmac-sha1-12? empty
| +--:(aes-cmac-prf-128) {aes-cmac-prf-128}?
| | +--rw aes-cmac-prf-128? empty
| +--:(md5) | +--:(md5)
| | +--rw md5? empty | | +--rw md5? empty
| +--:(sha-1) | +--:(sha-1)
| | +--rw sha-1? empty | | +--rw sha-1? empty
| +--:(hmac-sha-1) | +--:(hmac-sha-1)
| | +--rw hmac-sha-1? empty | | +--rw hmac-sha-1? empty
| +--:(hmac-sha-256) | +--:(hmac-sha-256)
| | +--rw hmac-sha-256? empty | | +--rw hmac-sha-256? empty
| +--:(hmac-sha-384) | +--:(hmac-sha-384)
| | +--rw hmac-sha-384? empty | | +--rw hmac-sha-384? empty
| +--:(hmac-sha-512) | +--:(hmac-sha-512)
| +--rw hmac-sha-512? empty | | +--rw hmac-sha-512? empty
| +--:(clear-text) {clear-text}?
| | +--rw clear-text? empty
| +--:(replay-protection-only) {replay-
protection-only}?
| +--rw replay-protection-only? empty
+--rw bfd {bfd}? +--rw bfd {bfd}?
| +--rw enabled? boolean | +--rw enabled? boolean
| +--rw local-multiplier? multiplier | +--rw local-multiplier? bfd-multiplier
| +--rw (interval-config-type)? | +--rw (interval-config-type)?
| +--:(tx-rx-intervals) | +--:(tx-rx-intervals)
| | +--rw desired-min-tx-interval uint32 | | +--rw desired-min-tx-interval uint32
| | +--rw required-min-rx-interval uint32 | | +--rw required-min-rx-interval uint32
| +--:(single-interval) | +--:(single-interval)
| +--rw min-interval uint32 | +--rw min-interval uint32
+--rw cost? uint8 +--rw cost? uint8
+--rw neighbors {neighbor-configuration}? +--rw neighbors {neighbor-configuration}?
| +--rw neighbor* [address] | +--rw neighbor* [address]
| +--rw address inet:ip-address | +--rw address inet:ip-address
skipping to change at page 6, line 21 skipping to change at page 6, line 28
| +--rw route-policy? route-policy-ref | +--rw route-policy? route-policy-ref
+--rw split-horizon? enumeration +--rw split-horizon? enumeration
+--rw summary-address +--rw summary-address
| +--rw address? inet:ip-prefix | +--rw address? inet:ip-prefix
| +--rw metric? uint8 | +--rw metric? uint8
+--rw timers +--rw timers
+--rw update-interval? uint16 +--rw update-interval? uint16
+--rw invalid-interval? uint16 +--rw invalid-interval? uint16
+--rw holddown-interval? uint16 +--rw holddown-interval? uint16
+--rw flush-interval? uint16 +--rw flush-interval? uint16
augment /rt:routing-state/rt:routing-instance/rt:routing-protocols/ augment /rt:routing-state/rt:control-plane-protocols/rt:control-
rt:routing-protocol: plane-protocol:
+--ro rip +--ro rip
+--ro originate-default-route! +--ro originate-default-route!
| +--ro route-policy? route-policy-ref | +--ro route-policy? route-policy-ref
+--ro default-metric? uint8 +--ro default-metric? uint8
+--ro distance? uint8 +--ro distance? uint8
+--ro triggered-update-threshold? uint8 +--ro triggered-update-threshold? uint8
+--ro maximum-paths? uint8 +--ro maximum-paths? uint8
+--ro output-delay? uint8 +--ro output-delay? uint8
+--ro distribute-list* [prefix-set-name direction] +--ro distribute-list* [prefix-set-name direction]
| +--ro prefix-set-name prefix-set-ref | +--ro prefix-set-name prefix-set-ref
skipping to change at page 8, line 34 skipping to change at page 8, line 41
| +--ro flush-expire-before-holddown? boolean | +--ro flush-expire-before-holddown? boolean
+--ro statistics {global-statistics}? +--ro statistics {global-statistics}?
+--ro discontinuity-time? yang:date-and-time +--ro discontinuity-time? yang:date-and-time
+--ro requests-rcvd? yang:counter32 +--ro requests-rcvd? yang:counter32
+--ro requests-sent? yang:counter32 +--ro requests-sent? yang:counter32
+--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 routing-instance? rt:routing-instance-ref +---w rip-instance? Leafref
+---w rip-instance? Leafref
3. RIP YANG module 3. RIP YANG module
<CODE BEGINS> file "ietf-rip@2016-01-28.yang" <CODE BEGINS> file "ietf-rip@2016-07-08.yang"
module ietf-rip { module ietf-rip {
namespace "urn:ietf:params:xml:ns:yang:ietf-rip"; namespace "urn:ietf:params:xml:ns:yang:ietf-rip";
// replace with IANA namespace when assigned // replace with IANA namespace when assigned
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";
skipping to change at page 9, line 32 skipping to change at page 9, line 41
} }
import ietf-key-chain { import ietf-key-chain {
prefix "key-chain"; prefix "key-chain";
} }
import ietf-bfd { import ietf-bfd {
prefix "bfd"; prefix "bfd";
} }
import routing-policy {
prefix "policy";
}
import ietf-ospf { import ietf-ospf {
prefix "ospf"; prefix "ospf";
} }
organization "TBD"; organization "TBD";
contact "TBD"; contact "TBD";
description description
"This YANG module defines a model for managing Routing "This YANG module defines a model for managing Routing
Information Protocol (RIP), including RIP version 2 and RIPng."; Information Protocol (RIP), including RIP version 2 and RIPng.";
revision 2016-01-28 { revision 2016-07-08 {
description description
"Initial revision."; "Initial revision.";
reference reference
"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
skipping to change at page 10, line 30 skipping to change at page 10, line 34
} }
feature bfd-protocol-parms { feature bfd-protocol-parms {
description description
"BFD protocol specific parameters support."; "BFD protocol specific parameters support.";
} }
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."; global statistic data.";
} }
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."; per-interface statistic data.";
} }
feature neighbor-configuration { feature neighbor-configuration {
description description
"This feature indicates that the system supports "This feature indicates that the system supports
neighbor configuration."; neighbor configuration.";
} }
/* /*
* Typedefs * Typedefs
*/ */
typedef prefix-set-ref { typedef prefix-set-ref {
type leafref { type string;
path "/policy:routing-policy/policy:defined-sets/"
+ "policy:prefix-sets/policy:prefix-set/"
+ "policy:prefix-set-name";
}
description description
"A type for a reference to a prefix list."; "A type for a reference to a prefix list.";
} }
typedef route-policy-ref { typedef route-policy-ref {
type leafref { type string;
path "/policy:routing-policy/policy:policy-definitions/"
+ "policy:policy-definition/policy:name";
}
description description
"A type for a reference to a route policy."; "A type for a reference to a route policy.";
} }
/* /*
* Identities * Identities
*/ */
identity rip { identity rip {
base "rt:routing-protocol"; base "rt:routing-protocol";
skipping to change at page 12, line 15 skipping to change at page 12, line 13
* Groupings * Groupings
*/ */
grouping originate-default-route-container { grouping originate-default-route-container {
description description
"Container for setting of originating default route."; "Container for setting of originating default route.";
container originate-default-route { container originate-default-route {
presence "Present if originating default route is enabled."; presence "Present if originating default route is enabled.";
description description
"Injects the default route into the RIP or RIPng "Injects the default route into the RIP or RIPng
instance."; instance.";
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 default route.";
route.";
} }
} }
} }
grouping redistribute-container { grouping redistribute-container {
description description
"Container of redistribute attributes."; "Container of redistribute attributes.";
container redistribute { container redistribute {
description description
skipping to change at page 13, line 9 skipping to change at page 13, line 5
leaf asn { leaf asn {
type inet:as-number; type inet:as-number;
description description
"BFP autonomous system (AS) number."; "BFP 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 Translation "Present if Carrier Grade Network Address 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 ISIS routes."; "Redistributes ISIS routes.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:routing-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "../../../../../rt:routing-protocol" must "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/type = 'isis'" { + "[rt:name = current()]/type = '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 "ISIS level 1 routes."; description "ISIS level 1 routes.";
} }
enum 2 { enum 2 {
description "ISIS level 1 routes."; description "ISIS level 1 routes.";
} }
enum 1-2 { enum 1-2 {
skipping to change at page 14, line 30 skipping to change at page 14, line 26
} }
} }
description description
"ISIS level."; "ISIS 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 "../../../rt:type = 'rip:ripv2'" { when "../../../rt:type = 'rip:ripv2'" {
description description
"Applicable to RIPv2."; "Applicable to RIPv2.";
} }
key "instance"; key "instance";
description description
"Redistributes routes from the specified OSPF routing "Redistributes routes from the specified OSPF routing
instance into the RIP routing instance."; instance into the RIP routing instance.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:routing-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "../../../../../rt:routing-protocol" must "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/type = 'ospfv2'" { + "[rt:name = current()]/type = 'ospfv2'" {
description description
"The type of the routing protocol must be 'ospfv2'"; "The type of the routing protocol must be 'ospfv2'";
} }
description description
"OSPF instance ID. Redistributes routes from the "OSPF instance ID. Redistributes routes from the
specified OSPF routing instance into the RIP routing specified OSPF routing instance into the RIP routing
instance. "; instance. ";
} }
leaf route-type { leaf route-type {
type ospf:route-type; type ospf:route-type;
description description
"Redistributes only those OSPF routes matching the "Redistributes only those OSPF routes matching the
specified route type into the RIP routing instance."; specified route type into the RIP routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ospfv3 { list ospfv3 {
when "../../../rt:type = 'rip:ripng'" { when "../../../rt:type = 'rip:ripng'" {
description description
"Applicable to RIPng."; "Applicable to RIPng.";
} }
key "instance"; key "instance";
description description
"Redistributes routes from the specified OSPF routing "Redistributes routes from the specified OSPF routing
instance into the RIP routing instance."; instance into the RIP routing instance.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:routing-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "../../../../../rt:routing-protocol" must "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/type = 'ospfv3'" { + "[rt:name = current()]/type = 'ospfv3'" {
description description
"The type of the routing protocol must be 'ospfv3'"; "The type of the routing protocol must be 'ospfv3'";
} }
description description
"OSPF instance ID. Redistributes routes from the "OSPF instance ID. Redistributes routes from the
specified OSPF routing instance into the RIP routing specified OSPF routing instance into the RIP routing
instance. "; instance. ";
} }
leaf route-type { leaf route-type {
type ospf:route-type; type ospf:route-type;
description description
"Redistributes only those OSPF routes matching the "Redistributes only those OSPF routes matching the
specified route type into the RIP routing instance."; specified route type into the RIP routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ripv2 { list ripv2 {
when "../../../rt:type = 'rip:ripv2'" { when "../../../rt:type = 'rip:ripv2'" {
description description
"Applicable to RIPv2."; "Applicable to RIPv2.";
} }
key "instance"; key "instance";
description description
"Redistributes routes from another RIP routing instance "Redistributes routes from another RIP routing instance
into the current RIP routing instance."; into the current RIP routing instance.";
leaf instance { leaf instance {
type leafref { type leafref {
path "../../../../../rt:routing-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "../../../../../rt:routing-protocol" must "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/type = 'ripv2'" { + "[rt:name = current()]/type = '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 RIP routing "Redistributes routes from the specified RIP routing
instance into the RIP routing instance."; instance into the RIP routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ripng { list ripng {
when "../../../rt:type = 'rip:ripng'" { when "../../../rt:type = 'rip:ripng'" {
description description
"Applicable to RIPng."; "Applicable to RIPng.";
} }
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:routing-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "../../../../../rt:routing-protocol" must "../../../../../rt:control-plane-protocol"
+ "[rt:name = current()]/type = 'ripng'" { + "[rt:name = current()]/type = '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
} // redistribute-container } // 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 0."; is 0.";
} }
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 RIP or RIPng instance or "Timers for the specified RIP 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 RIP or RIPng updates are sent."; "Interval at which RIP 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 {
skipping to change at page 20, line 14 skipping to change at page 20, line 10
"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 RIP or RIPng for the "The administrative distance of the RIP or RIPng for the
current RIP or RIPng instance."; current RIP 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 RIP or RIPng routes "The number of multiple equal-cost RIP 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
RIP or RIPng updates."; RIP 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 in-coming
or out-going routing updates."; or out-going 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 RIP or "Reference to a prefix list to be applied to RIP 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 in-coming routes.";
} }
enum "out" { enum "out" {
description description
skipping to change at page 22, line 6 skipping to change at page 21, line 43
} }
} }
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";
skipping to change at page 23, line 34 skipping to change at page 23, line 30
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 nodes * Configuration data nodes
*/ */
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:routing-protocol" { + "rt:control-plane-protocol" {
when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" { when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" {
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 configuration data."; "RIP configuration data.";
uses global-attributes; uses global-attributes;
uses distribute-lists; uses distribute-lists;
uses redistribute-container; uses redistribute-container;
skipping to change at page 24, line 26 skipping to change at page 24, line 22
type if:interface-ref; type if:interface-ref;
must "(../../../rt:type = 'rip:ripv2' and " must "(../../../rt:type = 'rip:ripv2' and "
+ "/if:interfaces/if:interface[name=current()]/" + "/if:interfaces/if:interface[name=current()]/"
+ "ip:ipv4) or " + "ip:ipv4) or "
+ "(../../../rt:type = 'rip:ripng' and " + "(../../../rt:type = 'rip:ripng' and "
+ "/if:interfaces/if:interface[name=current()]/" + "/if:interfaces/if:interface[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 interfae, 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 "../../../rt:type = 'rip:ripv2'" { when "../../../rt:type = 'rip:ripv2'" {
description "Only applicable to RIPv2."; description "Only applicable to RIPv2.";
} }
description description
"Enables authentication and specifies the authentication "Enables authentication and specifies the authentication
scheme for the RIP interface"; scheme for the RIP interface";
choice auth-type-selection { choice auth-type-selection {
description description
"Specify the authentication scheme. "Specify the authentication scheme.
The use of the key-chain reference here is: The use of the key-chain reference here is:
1) Designed to align with other proposed protocol 1) Designed to align with other proposed protocol
models. models.
2) Not finalized, pending resolution of alignment with
2) Not finalized, pending resolution of alignment with the RFC published KeyTables information model.";
the RFC published KeyTables information model.";
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 26, line 4 skipping to change at page 25, line 40
"True if BFD is enabled for the interface."; "True if BFD is enabled for the interface.";
} }
uses bfd:bfd-grouping-base-cfg-parms { uses bfd:bfd-grouping-base-cfg-parms {
if-feature bfd-protocol-parms; if-feature bfd-protocol-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 neighbor-configuration; if-feature neighbor-configuration;
description description
"Specifies the RIP neighbors. Useful for a non-broadcast "Specifies the RIP neighbors. Useful for a non-broadcast
multiple access (NBMA) network."; 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.";
} }
} }
} }
skipping to change at page 26, line 38 skipping to change at page 26, line 31
type empty; type empty;
description description
"Disable the specified interface to receive (listen to) "Disable the specified interface to receive (listen to)
and process RIP or RIPng packets."; and process RIP or RIPng packets.";
} }
leaf no-supply { leaf no-supply {
type empty; type empty;
description description
"Disables sending of RIP or RIPng packets on the "Disables sending of RIP or RIPng packets on the
specified interface."; specified interface.";
} }
uses originate-default-route-container; uses originate-default-route-container;
leaf split-horizon { leaf split-horizon {
type enumeration { type enumeration {
enum simple { enum simple {
description description
"Enables simple split-horizon processing."; "Enables simple split-horizon processing.";
} }
enum poison { enum poison {
description description
"Enables split-horizon processing with poison "Enables split-horizon processing with poison
reverse."; reverse.";
} }
} }
default simple; default simple;
description description
"Enables RIP or RIPng split-horizon processing on the "Enables RIP or RIPng split-horizon processing on the
specified interface."; specified interface.";
} }
container summary-address { container summary-address {
description description
"Summarizes information about RIP or RIPng routes sent "Summarizes information about RIP or RIPng routes sent
over the specified interface in RIP or RIPng update over the specified interface in RIP or RIPng update
packets."; packets.";
leaf address { leaf address {
type inet:ip-prefix; type inet:ip-prefix;
description description
"IPv4 address, in the form A.B.C.D, and the prefix "IPv4 address, in the form A.B.C.D, and the prefix
length, separated by the slash (/) character; length, separated by the slash (/) character;
or IPv6 address, in the form A:B:C:D:E:F:G:H, and the or IPv6 address, in the form A:B:C:D:E:F:G:H, and the
prefix length, separated by the slash (/) character."; prefix length, separated by the slash (/) character.";
} }
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 RIP or RIPng router configuration is attribute in RIP or RIPng router configuration is
used for the route. "; used for the route. ";
} }
} }
uses timers-container; uses timers-container;
} // interface } // interface
} // container rip } // container rip
} }
/* /*
* Operational state data nodes * Operational state data nodes
*/ */
augment "/rt:routing-state/rt:routing-instance/" augment "/rt:routing-state/rt:control-plane-protocols/"
+ "rt:routing-protocols/rt:routing-protocol" { + "rt:control-plane-protocol" {
when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" { when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" {
description description
"This augment is only valid for a routing protocol instance "This augment is only valid for a routing protocol instance
of type 'ripv2' or 'ripng'."; of type 'ripv2' or 'ripng'.";
} }
description description
"RIP state."; "RIP state.";
container rip { container rip {
description "RIP operational state."; description "RIP operational state.";
uses global-attributes; uses global-attributes;
uses distribute-lists; uses distribute-lists;
leaf next-triggered-update { leaf next-triggered-update {
skipping to change at page 29, line 17 skipping to change at page 29, line 12
} }
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
interface."; interface.";
} }
} }
description description
"Operational state."; "Operational state.";
} }
leaf cost { leaf cost {
type uint8 { type uint8 {
range 1..16; range 1..16;
} }
default 1; default 1;
description description
"Interface cost."; "Interface cost.";
} }
leaf listen { leaf listen {
type boolean; type boolean;
description description
"The interface is enabled to receive (listen to) "The interface is enabled to receive (listen to)
and process RIP or RIPng packets."; and process RIP or RIPng packets.";
} }
leaf next-full-update { leaf next-full-update {
type uint32; type uint32;
description description
"Next full update time."; "Next full update time.";
} }
leaf originate-default-route { leaf originate-default-route {
type boolean; type boolean;
description description
"'true' if originating default route is enabled."; "'true' if originating default route is enabled.";
skipping to change at page 30, line 21 skipping to change at page 30, line 16
} }
leaf split-horizon { leaf split-horizon {
type boolean; type boolean;
description description
"'true' if Split Horizon processing is enabled."; "'true' if Split Horizon processing is enabled.";
} }
leaf supply { leaf supply {
type boolean; type boolean;
description description
"The interface is enabled to supply (send) RIP or RIPng "The interface is enabled to supply (send) RIP or RIPng
packets."; packets.";
} }
leaf valid-address { leaf valid-address {
type boolean; type boolean;
description description
"The interface has a valid address."; "The interface has a valid address.";
} }
uses timers-container; uses timers-container;
container statistics { container statistics {
if-feature interface-statistics; if-feature interface-statistics;
description description
"Interface statistic counters."; "Interface statistic 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 statistic counters suffered a
discontinuity. If no such discontinuities have occurred discontinuity. If no such discontinuities have
since the last re-initialization of the local occurred 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 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 which 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 } // interface
container ipv4 { container ipv4 {
when "../../rt:type = 'rip:ripv2'" { when "../../rt:type = 'rip:ripv2'" {
description description
"IPv4 address family is supported by RIPv2."; "IPv4 address family is supported by RIPv2.";
} }
description description
skipping to change at page 32, line 7 skipping to change at page 31, line 44
"IPv4 neighbor information."; "IPv4 neighbor information.";
list neighbor { list neighbor {
key "ipv4-address"; key "ipv4-address";
description description
"A RIPv2 RIP neighbor."; "A RIPv2 RIP neighbor.";
leaf ipv4-address { leaf ipv4-address {
type inet:ipv4-address; type inet:ipv4-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
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 which 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, which were ignored for any
reason (e.g. unknown address family, or invalid reason (e.g. unknown address family, or invalid
metric)."; metric).";
} }
} // neighbor } // neighbor
} // neighbors } // 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
"IP address (in the form A.B.C.D) and prefix length, "IP address (in the form A.B.C.D) and prefix length,
separated by the slash (/) character. The range of separated by the slash (/) character. The range of
values for the prefix-length is 0 to 32."; values for the prefix-length is 0 to 32.";
} }
leaf next-hop { leaf next-hop {
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.";
skipping to change at page 33, line 40 skipping to change at page 33, line 36
"IPv6 neighbor information."; "IPv6 neighbor information.";
list neighbor { list neighbor {
key "ipv6-address"; key "ipv6-address";
description description
"A RIPv2 RIP neighbor."; "A RIPv2 RIP 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
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 which 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, which were ignored for any
reason (e.g. unknown address family, or invalid reason (e.g. unknown address family, or invalid
metric)."; metric).";
} }
} // neighbor } // neighbor
} // neighbors } // 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
"IP address (in the canonical format defined in "IP address (in the canonical format defined in
RFC5952)and prefix length, separated by the slash (/) RFC5952)and prefix length, separated by the slash
character. The range of values for the prefix-length (/) character. The range of values for the
is 0 to 128."; prefix-length is 0 to 128.";
} }
leaf next-hop { leaf next-hop {
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 } // route
} // routes } // routes
} // ipv6 } // ipv6
skipping to change at page 35, line 24 skipping to change at page 35, line 19
} // ipv6 } // ipv6
container statistics { container statistics {
if-feature global-statistics; if-feature global-statistics;
description description
"Global statistic counters."; "Global statistic 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 statistic 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 {
type yang:counter32; type yang:counter32;
description description
"The number of requests sent by RIP."; "The number of requests sent by RIP.";
skipping to change at page 36, line 19 skipping to change at page 36, line 16
} // rip } // rip
} // augment } // augment
/* /*
* 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 the RIP protocol for the specified RIP
instance or for all RIP instances in the current context."; instance or for all RIP instances in the current context.";
input { input {
leaf routing-instance {
type rt:routing-instance-ref;
description
"Routing instance name identifying a specific routing
instance.
This leaf is optional for the rpc.
If it is specified, the rpc will clear routes in the
specified routing instance;
if it is not specified, the rpc will clear all routes in
all routing instances.";
}
leaf rip-instance { leaf rip-instance {
type leafref { type leafref {
path "/rt:routing/rt:routing-instance" path "/rt:routing/rt:control-plane-protocols/"
+ "[rt:name=current()/../routing-instance]/" + "rt:control-plane-protocol/rt:name";
+ "rt:routing-protocols/rt:routing-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>
4. IANA Considerations 4. IANA Considerations
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number (and remove this note). actual RFC number (and remove this note).
 End of changes. 117 change blocks. 
195 lines changed or deleted 176 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/