draft-ietf-rtgwg-yang-rip-02.txt   draft-ietf-rtgwg-yang-rip-03.txt 
Network Working Group X. Liu
Internet-Draft P. Sarda
Intended status: Standards Track Ericsson
Expires: January 18, 2017 V. Choudhary
Huawei Technologies
July 18, 2016
A YANG Data Model for Routing Information Protocol (RIP) Network Working Group X. Liu
draft-ietf-rtgwg-yang-rip-02.txt Internet-Draft Jabil
Intended status: Standards Track P. Sarda
Expires: July 20, 2017 Ericsson
V. Choudhary
Huawei Technologies
January 16, 2017
A YANG Data Model for Routing Information Protocol (RIP)
draft-ietf-rtgwg-yang-rip-03
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.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF). Note that other groups may also distribute
other groups may also distribute working documents as Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
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 This Internet-Draft will expire on July 20, 2017.
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html
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) 2017 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
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 . . . . . . . . . . . . . . . . . . . . . . . . 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 1.3. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3
3. RIP YANG module................................................9 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 4
4. IANA Considerations...........................................36 2.1. Scope of the Model . . . . . . . . . . . . . . . . . . . 4
5. Security Considerations.......................................37 2.2. Relation with Core Routing Framework . . . . . . . . . . 4
6. References....................................................37 2.3. Protocol Configuration . . . . . . . . . . . . . . . . . 5
6.1. Normative References.....................................37 2.4. Protocol States . . . . . . . . . . . . . . . . . . . . . 5
6.2. Informative References...................................37 2.5. RPC Operations . . . . . . . . . . . . . . . . . . . . . 6
2.6. Notifications . . . . . . . . . . . . . . . . . . . . . . 6
2.7. Optional Features . . . . . . . . . . . . . . . . . . . . 7
3. Tree Structure . . . . . . . . . . . . . . . . . . . . . . . 7
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 12
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37
6. Security Considerations . . . . . . . . . . . . . . . . . . . 37
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.1. Normative References . . . . . . . . . . . . . . . . . . 38
7.2. Informative References . . . . . . . . . . . . . . . . . 40
Appendix A. Data Tree Example . . . . . . . . . . . . . . . . . 41
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 44
1. Introduction 1. Introduction
This document introduces a YANG [RFC6020] 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 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])
supports IPv6. supports IPv6.
1.1. Terminology 1.1. Terminology
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP "OPTIONAL" in this document are to be interpreted as described in BCP
14, [RFC2119]. 14, [RFC2119].
The following terms are defined in [RFC6020] and are not redefined The following terms are defined in [RFC7950] and are not redefined
here: here:
o augment o augment
o data model o data model
o data node o 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 as this document. The meaning of the symbols in these diagrams is as
follows: follows:
o Brackets "[" and "]" enclose list keys. o Brackets "[" and "]" enclose list keys.
o Curly braces "{" and "}" contain names of optional features o Curly braces "{" and "}" contain names of optional features that
that make the corresponding node conditional. make the corresponding node conditional.
o Abbreviations before data node names: "rw" means configuration o Abbreviations before data node names: "rw" means configuration
(read-write), and "ro" means state data (read-only). (read-write), and "ro" means state data (read-only).
o Symbols after data node names: "?" means an optional node, "!" o Symbols after data node names: "?" means an optional node, "!"
means a presence container, and "*" denotes a list and leaf- means a presence container, and "*" denotes a list and leaf-list.
list.
o Parentheses enclose choice and case nodes, and case nodes are o Parentheses enclose choice and case nodes, and case nodes are also
also marked with a colon (":"). marked with a colon (":").
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 1.3. Prefixes in Data Node Names
This document defines the YANG module "ietf-rip", which has the In this document, names of data nodes, actions, and other data model
following structure: objects are often used without a prefix, as long as it is clear from
the context in which YANG module each name is defined. Otherwise,
names are prefixed using the standard prefix associated with the
corresponding YANG module, as shown in Table 1.
module: ietf-rip +-----------+-----------------+---------------------------------+
augment /rt:routing/rt:control-plane-protocols/rt:control-plane- | Prefix | YANG module | Reference |
protocol: +-----------+-----------------+---------------------------------+
| yang | ietf-yang-types | [RFC6991] |
| inet | ietf-inet-types | [RFC6991] |
| if | ietf-interfaces | [RFC7223] |
| ip | ietf-ip | [RFC7277] |
| rt | ietf-routing | [RFC8022] |
| bfd | ietf-bfd | [I-D.ietf-bfd-yang] |
| isis | ietf-isis | [I-D.ietf-isis-yang-isis-cfg] |
| key-chain | ietf-key-chain | [I-D.ietf-rtgwg-yang-key-chain] |
| ospf | ietf-ospf | [I-D.ietf-ospf-yang] |
+-----------+-----------------+---------------------------------+
Table 1: Prefixes and Corresponding YANG Modules
2. Design of the Data Model
2.1. Scope of the Model
The model covers RIP version 2 [RFC2453] and RIPng [RFC2080]
protocols. The model is designed to be implemented on a device where
RIP version 2 or RIPng is implemented, and can be used to:
o Configure the RIP version 2 or RIPng protocol.
o Manage the protocol operational behaviors.
o Retrieve the protocol operational status.
2.2. Relation with Core Routing Framework
This model augments the core routing data model "ietf-routing"
specified in [RFC8022].
+--rw routing
+--rw router-id?
+--rw control-plane-protocols
| +--rw control-plane-protocol* [type name]
| +--rw type
| +--rw name
| +--rw rip <= Augmented by this Model
...
+--ro routing-state
+--ro router-id?
+--ro control-plane-protocols
| +--ro control-plane-protocol* [type name]
| +--ro type
| +--ro name
| +--ro rip <= Augmented by this Model
...
The "rip" container instantiates a RIP protocol entity that supports
RIP version 2 or RIPng. Depending on the implementation of "ietf-
routing", a RIP instance MAY belong to a logical router or network
instance.
2.3. Protocol Configuration
The model structure for the protocol configuration is as shown below:
augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol:
+--rw rip +--rw rip
+--rw originate-default-route! +--rw <per instance configuration>
| +--rw route-policy? route-policy-ref
+--rw default-metric? uint8
+--rw distance? uint8
+--rw triggered-update-threshold? uint8
+--rw maximum-paths? uint8
+--rw output-delay? uint8
+--rw distribute-list* [prefix-set-name direction]
| +--rw prefix-set-name prefix-set-ref
| +--rw direction enumeration
| +--rw if-name? if:interface-ref
+--rw redistribute
| +--rw bgp* [asn]
| | +--rw asn inet:as-number
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw cg-nat!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw connected!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ipsec!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw isis* [instance]
| | +--rw instance leafref
| | +--rw level? enumeration
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw nat!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ospfv2* [instance]
| | +--rw instance leafref
| | +--rw route-type? ospf:route-type
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ospfv3* [instance]
| | +--rw instance leafref
| | +--rw route-type? ospf:route-type
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ripv2* [instance]
| | +--rw instance leafref
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ripng* [instance]
| | +--rw instance leafref
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw static!
| +--rw metric? uint8
| +--rw route-policy? route-policy-ref
+--rw timers
| +--rw update-interval? uint16
| +--rw invalid-interval? uint16
| +--rw holddown-interval? uint16
| +--rw flush-interval? uint16
+--rw interface* [interface] +--rw interface* [interface]
+--rw interface if:interface-ref +--rw interface if:interface-ref
+--rw authentication +--rw <per interface configuration>
| +--rw (auth-type-selection)? +--rw neighbors {explicit-neighbors}?
| +--:(auth-key-chain)
| | +--rw key-chain? key-chain:key-chain-ref
| +--:(auth-key)
| +--rw key? string
| +--rw crypto-algorithm
| +--rw (algorithm)?
| +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}?
| | +--rw hmac-sha1-12? empty
| +--:(aes-cmac-prf-128) {aes-cmac-prf-128}?
| | +--rw aes-cmac-prf-128? empty
| +--:(md5)
| | +--rw md5? empty
| +--:(sha-1)
| | +--rw sha-1? empty
| +--:(hmac-sha-1)
| | +--rw hmac-sha-1? empty
| +--:(hmac-sha-256)
| | +--rw hmac-sha-256? empty
| +--:(hmac-sha-384)
| | +--rw hmac-sha-384? empty
| +--:(hmac-sha-512)
| | +--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 enabled? boolean
| +--rw local-multiplier? bfd-multiplier
| +--rw (interval-config-type)?
| +--:(tx-rx-intervals)
| | +--rw desired-min-tx-interval uint32
| | +--rw required-min-rx-interval uint32
| +--:(single-interval)
| +--rw min-interval uint32
+--rw cost? uint8
+--rw neighbors {neighbor-configuration}?
| +--rw neighbor* [address] | +--rw neighbor* [address]
| +--rw address inet:ip-address | +--rw address inet:ip-address
+--rw no-listen? empty | +--rw <per neighbor configuration>
+--rw no-supply? empty
+--rw originate-default-route! The model allows to configure the following protocol entities:
| +--rw route-policy? route-policy-ref
+--rw split-horizon? enumeration o Protocol instance (RIP version 2 or RIPng)
+--rw summary-address
| +--rw address? inet:ip-prefix o Interface
| +--rw metric? uint8
+--rw timers o Neighbor
+--rw update-interval? uint16
+--rw invalid-interval? uint16 2.4. Protocol States
+--rw holddown-interval? uint16
+--rw flush-interval? uint16 The model structure for the protocol states is as shown below:
augment /rt:routing-state/rt:control-plane-protocols/rt:control-
plane-protocol: augment /rt:routing-state/rt:control-plane-protocols/
rt:control-plane-protocol:
+--ro rip +--ro rip
+--ro originate-default-route! +--ro <per instance operational states>
| +--ro route-policy? route-policy-ref
+--ro default-metric? uint8
+--ro distance? uint8
+--ro triggered-update-threshold? uint8
+--ro maximum-paths? uint8
+--ro output-delay? uint8
+--ro distribute-list* [prefix-set-name direction]
| +--ro prefix-set-name prefix-set-ref
| +--ro direction enumeration
| +--ro if-name? if:interface-ref
+--ro next-triggered-update? uint32
+--ro num-of-routes? uint32
+--ro timers
| +--ro update-interval? uint16
| +--ro invalid-interval? uint16
| +--ro holddown-interval? uint16
| +--ro flush-interval? uint16
+--ro interface* [interface] +--ro interface* [interface]
| +--ro interface if:interface-ref | +--ro interface if:interface-ref
| +--ro oper-status? enumeration | +--ro <per instance operational states>
| +--ro cost? uint8
| +--ro listen? boolean
| +--ro next-full-update? uint32
| +--ro originate-default-route? boolean
| +--ro poison-reverse? boolean
| +--ro split-horizon? boolean
| +--ro supply? boolean
| +--ro valid-address? boolean
| +--ro timers
| | +--ro update-interval? uint16
| | +--ro invalid-interval? uint16
| | +--ro holddown-interval? uint16
| | +--ro flush-interval? uint16
| +--ro statistics {interface-statistics}? | +--ro statistics {interface-statistics}?
| +--ro discontinuity-time? yang:date-and-time | +--ro <per instance statistics>
| +--ro bad-packets-rcvd? yang:counter32
| +--ro bad-routes-rcvd? yang:counter32
| +--ro updates-sent? yang:counter32
+--ro ipv4 +--ro ipv4
| +--ro neighbors | +--ro neighbors
| | +--ro neighbor* [ipv4-address] | | +--ro neighbor* [ipv4-address]
| | +--ro ipv4-address inet:ipv4-address | | +--ro <per neighbor IPv4 operational states>
| | +--ro last-update? yang:date-and-time
| | +--ro bad-packets-rcvd? yang:counter32
| | +--ro bad-routes-rcvd? yang:counter32
| +--ro routes | +--ro routes
| +--ro route* [ipv4-prefix] | +--ro route* [ipv4-prefix]
| +--ro ipv4-prefix inet:ipv4-prefix | +--ro <IPv4 RIP route states>
| +--ro next-hop? inet:ipv4-
address
| +--ro interface? if:interface-ref
| +--ro redistributed? boolean
| +--ro route-type? enumeration
| +--ro metric? uint8
| +--ro expire-time? uint16
| +--ro deleted? boolean
| +--ro holddown? boolean
| +--ro need-triggered-update? boolean
| +--ro inactive? boolean
| +--ro flush-expire-before-holddown? boolean
+--ro ipv6 +--ro ipv6
| +--ro neighbors | +--ro neighbors
| | +--ro neighbor* [ipv6-address] | | +--ro neighbor* [ipv6-address]
| | +--ro ipv6-address inet:ipv6-address | | +--ro <per neighbor IPv6 operational states>
| | +--ro last-update? yang:date-and-time
| | +--ro bad-packets-rcvd? yang:counter32
| | +--ro bad-routes-rcvd? yang:counter32
| +--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 next-hop? inet:ipv6- | +--ro <IPv4 RIP route states>
address
| +--ro interface? if:interface-ref
| +--ro redistributed? boolean
| +--ro route-type? enumeration
| +--ro metric? uint8
| +--ro expire-time? uint16
| +--ro deleted? boolean
| +--ro holddown? boolean
| +--ro need-triggered-update? boolean
| +--ro inactive? boolean
| +--ro flush-expire-before-holddown? boolean
+--ro statistics {global-statistics}? +--ro statistics {global-statistics}?
+--ro discontinuity-time? yang:date-and-time +--ro <per instance statistics>
+--ro requests-rcvd? yang:counter32
+--ro requests-sent? yang:counter32
+--ro responses-rcvd? yang:counter32
+--ro responses-sent? yang:counter32
rpcs:
+---x clear-rip-route
+---w input
+---w rip-instance? Leafref
3. RIP YANG module The model allows to retrieve protocol states at the following levels:
<CODE BEGINS> file "ietf-rip@2016-07-08.yang" o Protocol instance (RIP version 2 or RIPng)
o Interface
o Neighbor
o Route
2.5. RPC Operations
This model defines one RPC "clear-rip-route" that can be used to
clear RIP routes from the routing table.
2.6. Notifications
This model does not define RIP specific notifications. To enable
notifications, the mechanism defined in [I-D.ietf-netconf-yang-push]
and [I-D.ietf-netconf-rfc5277bis] can be used. This mechanism
currently allows the user to:
o Subscribe notifications on a per client basis.
o Specify subtree filters or xpath filters so that only interested
contents will be sent.
o Specify either periodic or on-demand notifications.
2.7. Optional Features
This model defines several features are beyond the basic RIP
configuration and it is the responsibility of each vendor to decide
whether to support a given feature on a device.
3. Tree Structure
This document defines the YANG module "ietf-rip", which has the
following tree structure:
module: ietf-rip
augment /rt:routing/rt:control-plane-protocols/
rt:control-plane-protocol:
+--rw rip
+--rw originate-default-route!
| +--rw route-policy? route-policy-ref
+--rw default-metric? uint8
+--rw distance? uint8
+--rw triggered-update-threshold? uint8
+--rw maximum-paths? uint8
+--rw output-delay? uint8
+--rw distribute-list* [prefix-set-name direction]
| +--rw prefix-set-name prefix-set-ref
| +--rw direction enumeration
| +--rw if-name? if:interface-ref
+--rw redistribute
| +--rw bgp* [asn]
| | +--rw asn inet:as-number
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw cg-nat!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw connected!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ipsec!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw isis* [instance]
| | +--rw instance leafref
| | +--rw level? enumeration
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw nat!
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ospfv2* [instance]
| | +--rw instance leafref
| | +--rw route-type? ospf:route-type
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ospfv3* [instance]
| | +--rw instance leafref
| | +--rw route-type? ospf:route-type
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ripv2* [instance]
| | +--rw instance leafref
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw ripng* [instance]
| | +--rw instance leafref
| | +--rw metric? uint8
| | +--rw route-policy? route-policy-ref
| +--rw static!
| +--rw metric? uint8
| +--rw route-policy? route-policy-ref
+--rw timers
| +--rw update-interval? uint16
| +--rw invalid-interval? uint16
| +--rw holddown-interval? uint16
| +--rw flush-interval? uint16
+--rw interfaces
+--rw interface* [interface]
+--rw interface if:interface-ref
+--rw authentication
| +--rw (auth-type-selection)?
| +--:(auth-key-chain)
| | +--rw key-chain? key-chain:key-chain-ref
| +--:(auth-key)
| +--rw key? string
| +--rw crypto-algorithm
| +--rw (algorithm)?
| +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}?
| | +--rw hmac-sha1-12? empty
| +--:(aes-cmac-prf-128) {aes-cmac-prf-128}?
| | +--rw aes-cmac-prf-128? empty
| +--:(md5)
| | +--rw md5? empty
| +--:(sha-1)
| | +--rw sha-1? empty
| +--:(hmac-sha-1)
| | +--rw hmac-sha-1? empty
| +--:(hmac-sha-256)
| | +--rw hmac-sha-256? empty
| +--:(hmac-sha-384)
| | +--rw hmac-sha-384? empty
| +--:(hmac-sha-512)
| | +--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 enabled? boolean
| +--rw local-multiplier? bfd-multiplier
| +--rw (interval-config-type)?
| +--:(tx-rx-intervals)
| | +--rw desired-min-tx-interval uint32
| | +--rw required-min-rx-interval uint32
| +--:(single-interval)
| +--rw min-interval uint32
+--rw cost? uint8
+--rw neighbors {explicit-neighbors}?
| +--rw neighbor* [address]
| +--rw address inet:ip-address
+--rw no-listen? empty
+--rw originate-default-route!
| +--rw route-policy? route-policy-ref
+--rw passive? empty
+--rw split-horizon? enumeration
+--rw summary-address
| +--rw address? inet:ip-prefix
| +--rw metric? uint8
+--rw timers
+--rw update-interval? uint16
+--rw invalid-interval? uint16
+--rw holddown-interval? uint16
+--rw flush-interval? uint16
augment /rt:routing-state/rt:control-plane-protocols/
rt:control-plane-protocol:
+--ro rip
+--ro originate-default-route!
| +--ro route-policy? route-policy-ref
+--ro default-metric? uint8
+--ro distance? uint8
+--ro triggered-update-threshold? uint8
+--ro maximum-paths? uint8
+--ro output-delay? uint8
+--ro distribute-list* [prefix-set-name direction]
| +--ro prefix-set-name prefix-set-ref
| +--ro direction enumeration
| +--ro if-name? if:interface-ref
+--ro next-triggered-update? uint32
+--ro num-of-routes? uint32
+--ro timers
| +--ro update-interval? uint16
| +--ro invalid-interval? uint16
| +--ro holddown-interval? uint16
| +--ro flush-interval? uint16
+--ro interfaces
| +--ro interface* [interface]
| +--ro interface if:interface-ref
| +--ro oper-status? enumeration
| +--ro cost? uint8
| +--ro listen? boolean
| +--ro next-full-update? uint32
| +--ro originate-default-route? boolean
| +--ro passive? boolean
| +--ro poison-reverse? boolean
| +--ro split-horizon? boolean
| +--ro valid-address? boolean
| +--ro timers
| | +--ro update-interval? uint16
| | +--ro invalid-interval? uint16
| | +--ro holddown-interval? uint16
| | +--ro flush-interval? uint16
| +--ro statistics {interface-statistics}?
| +--ro discontinuity-time? yang:date-and-time
| +--ro bad-packets-rcvd? yang:counter32
| +--ro bad-routes-rcvd? yang:counter32
| +--ro updates-sent? yang:counter32
+--ro ipv4
| +--ro neighbors
| | +--ro neighbor* [ipv4-address]
| | +--ro ipv4-address inet:ipv4-address
| | +--ro last-update? yang:date-and-time
| | +--ro bad-packets-rcvd? yang:counter32
| | +--ro bad-routes-rcvd? yang:counter32
| +--ro routes
| +--ro route* [ipv4-prefix]
| +--ro ipv4-prefix inet:ipv4-prefix
| +--ro next-hop? inet:ipv4-address
| +--ro interface? if:interface-ref
| +--ro redistributed? boolean
| +--ro route-type? enumeration
| +--ro metric? uint8
| +--ro expire-time? uint16
| +--ro deleted? boolean
| +--ro holddown? boolean
| +--ro need-triggered-update? boolean
| +--ro inactive? boolean
| +--ro flush-expire-before-holddown? boolean
+--ro ipv6
| +--ro neighbors
| | +--ro neighbor* [ipv6-address]
| | +--ro ipv6-address inet:ipv6-address
| | +--ro last-update? yang:date-and-time
| | +--ro bad-packets-rcvd? yang:counter32
| | +--ro bad-routes-rcvd? yang:counter32
| +--ro routes
| +--ro route* [ipv6-prefix]
| +--ro ipv6-prefix inet:ipv6-prefix
| +--ro next-hop? inet:ipv6-address
| +--ro interface? if:interface-ref
| +--ro redistributed? boolean
| +--ro route-type? enumeration
| +--ro metric? uint8
| +--ro expire-time? uint16
| +--ro deleted? boolean
| +--ro holddown? boolean
| +--ro need-triggered-update? boolean
| +--ro inactive? boolean
| +--ro flush-expire-before-holddown? boolean
+--ro statistics {global-statistics}?
+--ro discontinuity-time? yang:date-and-time
+--ro requests-rcvd? yang:counter32
+--ro requests-sent? yang:counter32
+--ro responses-rcvd? yang:counter32
+--ro responses-sent? yang:counter32
rpcs:
+---x clear-rip-route
+---w input
+---w rip-instance? leafref
4. YANG Module
<CODE BEGINS> file "ietf-rip@2017-01-16.yang"
module ietf-rip { module ietf-rip {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-rip"; namespace "urn:ietf:params:xml:ns:yang:ietf-rip";
// 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";
} }
skipping to change at page 9, line 45 skipping to change at page 12, line 46
} }
import ietf-bfd { import ietf-bfd {
prefix "bfd"; prefix "bfd";
} }
import ietf-ospf { import ietf-ospf {
prefix "ospf"; prefix "ospf";
} }
organization "TBD"; import ietf-isis {
contact "TBD"; prefix "isis";
}
organization "IETF Routing Area Working Group (rtgwg)";
contact
"WG Web: <http://tools.ietf.org/wg/rgtwg/>
WG List: <mailto:rgtwg@ietf.org>
WG Chair: Jeff Tantsura
<mailto:jefftant.ietf@gmail.com>
WG Chair: Chris Bowers
<mailto:cbowers@juniper.net>
Editor: Xufeng Liu
<mailto:xufeng_liu@jabil.com>
Editor: Prateek Sarda
<mailto:prateek.sarda@ericsson.com>
Editor: Vikram Choudhary
<mailto:vikram.choudhary@huawei.com>";
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-07-08 { Copyright (c) 2016 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).";
revision 2017-01-16 {
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
*/ */
feature bfd { feature bfd {
description description
"This feature indicates that the system supports BFD."; "This feature indicates that the RIP implementation on the
system supports BFD (Bidirectional Forwarding Detection).";
} }
feature bfd-protocol-parms { feature bfd-protocol-parameters {
description description
"BFD protocol specific parameters support."; "BFD (Bidirectional Forwarding Detection) protocol specific
parameters support on a RIP interface.";
} }
feature global-statistics { feature explicit-neighbors {
description description
"This feature indicates that the system supports collecting "This feature indicates that the system supports explicit
global statistic data."; neighbor configuration on a RIP interface.";
} }
feature interface-statistics { feature global-statistics {
description description
"This feature indicates that the system supports collecting "This feature indicates that the system supports collecting
per-interface statistic data."; global statistic data related to RIP.";
} }
feature neighbor-configuration { feature interface-statistics {
description description
"This feature indicates that the system supports "This feature indicates that the system supports collecting
neighbor configuration."; per-interface statistic 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 list."; "A type for a reference to a prefix list.";
skipping to change at page 11, line 35 skipping to change at page 15, line 10
* 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 RIP routing protocol.";
} }
identity ripv2 { identity ripv2 {
base "rip:rip"; base "rip:rip";
description "RIPv2"; description "Identity for RIPv2 (RIP version 2).";
} }
identity ripng { identity ripng {
base "rip:rip"; base "rip:rip";
description "RIPng"; description "Identity for RIPng.";
} }
/* /*
* Groupings * Groupings
*/ */
grouping originate-default-route-container { grouping originate-default-route-container {
description description
"Container for setting of originating default route."; "Containing settings whether to originate the default route
in RIP routing instance.";
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 (RIPv2 or RIPng)
instance."; routing 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 route."; default route.";
} }
} }
} }
grouping redistribute-container { grouping redistribute-container {
description description
"Container of redistribute attributes."; "Container of redistribute attributes.";
container redistribute { container redistribute {
description description
"Redistributes routes learned from other routing protocols "Redistributes routes learned from other routing protocols
into the RIP routing instance."; into the RIP routing instance.";
list bgp { list bgp {
key "asn"; key "asn";
description description
"Redistributes routes from the specified BGP autonomous "Redistributes routes from the specified BGP (Border
system (AS) into the RIP routing instance."; Gateway Protocol) autonomous system (AS) into the RIP
routing instance.";
leaf asn { leaf asn {
type inet:as-number; type inet:as-number;
description description
"BFP 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 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.";
skipping to change at page 13, line 32 skipping to change at page 16, line 43
"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 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 "../../../../../rt:control-plane-protocol" must "derived-from-or-self("
+ "[rt:name = current()]/type = 'isis'" { + "../../../../../rt:control-plane-protocol"
+ "[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 "ISIS level 1 routes."; description "IS-IS level 1 routes.";
} }
enum 2 { enum 2 {
description "ISIS level 1 routes."; description "IS-IS level 1 routes.";
} }
enum 1-2 { enum 1-2 {
description "ISIS level 1-2 routes."; description "IS-IS level 1-2 routes.";
} }
} }
description description
"ISIS 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 "../../../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 OSPF routing "Redistributes routes from the specified OSPFv2 routing
instance into the RIP 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 "../../../../../rt:control-plane-protocol" must "derived-from-or-self("
+ "[rt:name = current()]/type = 'ospfv2'" { + "../../../../../rt:control-plane-protocol"
+ "[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
"OSPF instance ID. Redistributes routes from the "OSPFv2 instance ID. Redistributes routes from the
specified OSPF routing instance into the RIP 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 OSPF routes matching the "Redistributes only those OSPFv2 routes matching the
specified route type into the RIP routing instance."; specified route type into the RIPv2 routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ospfv3 { list ospfv3 {
when "../../../rt:type = 'rip:ripng'" { when "derived-from-or-self(../../../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 OSPFv3 routing
instance into the RIP 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 "../../../../../rt:control-plane-protocol" must "derived-from-or-self("
+ "[rt:name = current()]/type = 'ospfv3'" { + "../../../../../rt:control-plane-protocol"
+ "[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
"OSPF instance ID. Redistributes routes from the "OSPFv3 instance ID. Redistributes routes from the
specified OSPF routing instance into the RIP 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 OSPF routes matching the "Redistributes only those OSPFv3 routes matching the
specified route type into the RIP routing instance."; specified route type into the RIPng routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ripv2 { list ripv2 {
when "../../../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 another RIP routing instance "Redistributes routes from another RIPv2 routing instance
into the current RIP 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 "../../../../../rt:control-plane-protocol" must "derived-from-or-self("
+ "[rt:name = current()]/type = 'ripv2'" { + "../../../../../rt:control-plane-protocol"
+ "[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 RIP routing "Redistributes routes from the specified RIPv2 routing
instance into the RIP routing instance."; instance into the RIPv2 routing instance.";
} }
uses redistribute-route-policy-attributes; uses redistribute-route-policy-attributes;
} }
list ripng { list ripng {
when "../../../rt:type = 'rip:ripng'" { when "derived-from-or-self(../../../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:control-plane-protocol/rt:name"; path "../../../../../rt:control-plane-protocol/rt:name";
} }
must "../../../../../rt:control-plane-protocol" must "derived-from-or-self("
+ "[rt:name = current()]/type = 'ripng'" { + "../../../../../rt:control-plane-protocol"
+ "[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 {
skipping to change at page 18, line 26 skipping to change at page 21, line 7
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 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 RIP 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
skipping to change at page 20, line 9 skipping to change at page 22, line 24
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 RIP or RIPng for the "The administrative distance of the RIPv2 or RIPng for the
current RIP 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.
skipping to change at page 20, line 33 skipping to change at page 22, line 48
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 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
RIP 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 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 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 in-coming routes.";
} }
enum "out" { enum "out" {
skipping to change at page 23, line 32 skipping to change at page 25, line 25
"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:control-plane-protocols/" augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol" { + "rt:control-plane-protocol" {
when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" { 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 configuration data."; "RIP configuration 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;
list interface { container interfaces {
key "interface";
description description
"List of RIP interfaces."; "Containing a list of RIP interfaces.";
leaf interface { list interface {
type if:interface-ref; key "interface";
must "(../../../rt:type = 'rip:ripv2' and " description
+ "/if:interfaces/if:interface[name=current()]/" "List of RIP interfaces.";
+ "ip:ipv4) or " leaf interface {
+ "(../../../rt:type = 'rip:ripng' and " type if:interface-ref;
+ "/if:interfaces/if:interface[name=current()]/" must "(derived-from-or-self("
+ "ip:ipv6)" { + "../../../../rt:type, 'rip:ripv2') and "
error-message "Invalid interface type."; + "/if:interfaces/if:interface[if:name=current()]/"
+ "ip:ipv4) or "
+ "(derived-from-or-self("
+ "../../../../rt:type, 'rip:ripng') and "
+ "/if:interfaces/if:interface[if:name=current()]/"
+ "ip:ipv6)" {
error-message "Invalid interface type.";
description
"RIPv2 can be enabled on IPv4 interfae, and
RIPng can be enabled on IPv6 interface.";
}
description description
"RIPv2 can be enabled on IPv4 interfae, and "Enable RIP on this interface.";
RIPng can be enabled on IPv6 interface.";
} }
description
"Enable RIP on this interface.";
}
container authentication { container authentication {
when "../../../rt:type = 'rip:ripv2'" { when "derived-from-or-self("
description "Only applicable to RIPv2."; + "../../../../rt:type, 'rip:ripv2')" {
} description "Only applicable to RIPv2.";
description
"Enables authentication and specifies the authentication
scheme for the RIP interface";
choice auth-type-selection {
description
"Specify the authentication scheme.
The use of the key-chain reference here is:
1) Designed to align with other proposed protocol
models.
2) Not finalized, pending resolution of alignment with
the RFC published KeyTables information model.";
case auth-key-chain {
leaf key-chain {
type key-chain:key-chain-ref;
description
"key-chain name";
}
} }
case auth-key { description
leaf key { "Enables authentication and specifies the
type string; authentication scheme for the RIP interface";
description choice auth-type-selection {
"Key string in ASCII format."; description
"Specify the authentication scheme.
The use of the key-chain reference here is:
1) Designed to align with other proposed protocol
models.
2) Not finalized, pending resolution of alignment
with the RFC published KeyTables information
model.";
case auth-key-chain {
leaf key-chain {
type key-chain:key-chain-ref;
description
"key-chain name";
}
} }
container crypto-algorithm { case auth-key {
uses key-chain:crypto-algorithm-types; leaf key {
description type string;
"Cryptographic algorithm associated with key."; description
"Key string in ASCII format.";
}
container crypto-algorithm {
uses key-chain:crypto-algorithm-types;
description
"Cryptographic algorithm associated with key.";
}
} }
} }
} }
}
container bfd { container bfd {
if-feature bfd; if-feature bfd;
description "BFD operation."; description "BFD operation.";
leaf enabled { leaf enabled {
type boolean; type boolean;
description description
"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-parameters;
}
} }
}
leaf cost { leaf cost {
type uint8 { type uint8 {
range 1..16; range 1..16;
}
default 1;
description
"Interface cost.";
} }
default 1;
description container neighbors {
"Interface cost."; if-feature explicit-neighbors;
}
container neighbors {
if-feature neighbor-configuration;
description
"Specifies the RIP neighbors. Useful for a non-broadcast
multiple access (NBMA) network.";
list neighbor {
key "address";
description description
"Specify a RIP neighbor on a non-broadcast network."; "Specifies the RIP neighbors. Useful for a
leaf address { non-broadcast multiple access (NBMA) network.";
type inet:ip-address; list neighbor {
description "Neighbor IP address."; key "address";
description
"Specify a RIP neighbor on a non-broadcast network.";
leaf address {
type inet:ip-address;
description "Neighbor IP address.";
}
} }
} }
}
leaf no-listen { leaf no-listen {
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 RIPv2 or RIPng packets.";
} }
leaf no-supply { uses originate-default-route-container;
type empty;
description
"Disables sending of RIP or RIPng packets on the
specified interface.";
}
uses originate-default-route-container; leaf passive {
type empty;
description
"Disables sending of RIPv2 or RIPng packets on the
specified interface.";
}
leaf split-horizon { 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-reverse {
description
"Enables split-horizon processing with poison
reverse.";
}
} }
enum poison { default simple;
description description
"Enables split-horizon processing with poison "Enables RIPv2 or RIPng split-horizon processing on the
reverse."; specified interface.";
}
} }
default simple;
description
"Enables RIP or RIPng split-horizon processing on the
specified interface.";
}
container summary-address { container summary-address {
description
"Summarizes information about RIP or RIPng routes sent
over the specified interface in RIP or RIPng update
packets.";
leaf address {
type inet:ip-prefix;
description description
"IPv4 address, in the form A.B.C.D, and the prefix "Summarizes information about RIPv2 or RIPng routes
length, separated by the slash (/) character; sent over the specified interface in RIPv2 or RIPng
or IPv6 address, in the form A:B:C:D:E:F:G:H, and the update packets.";
prefix length, separated by the slash (/) character."; leaf address {
} type inet:ip-prefix;
leaf metric { description
type uint8 { "IPv4 address, in the form A.B.C.D, and the prefix
range 0..16; length, separated by the slash (/) character;
or IPv6 address, in the form A:B:C:D:E:F:G:H, and
the prefix length, separated by the slash (/)
character.";
}
leaf metric {
type uint8 {
range 0..16;
}
description
"Metric used for the route. If this attribute is not
used, the value set through the default-metric
attribute in RIPv2 or RIPng router configuration is
used for the route. ";
} }
description
"Metric used for the route. If this attribute is not
used, the value set through the default-metric
attribute in RIP or RIPng router configuration is
used for the route. ";
} }
}
uses timers-container; uses timers-container;
} // interface } // interface
} // interfaces
} // container rip } // container rip
} }
/* /*
* Operational state data nodes * Operational state data nodes
*/ */
augment "/rt:routing-state/rt:control-plane-protocols/" augment "/rt:routing-state/rt:control-plane-protocols/"
+ "rt:control-plane-protocol" { + "rt:control-plane-protocol" {
when "rt:type = 'rip:ripv2' or rt:type = 'rip:ripng'" { 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 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;
skipping to change at page 28, line 35 skipping to change at page 29, line 50
"Next triggered update."; "Next triggered update.";
} }
leaf num-of-routes { leaf num-of-routes {
type uint32; type uint32;
description description
"The number of routes."; "The number of routes.";
} }
uses timers-container; uses timers-container;
list interface { container interfaces {
key "interface";
description description
"List of RIP interfaces."; "Containing a list of RIP interfaces.";
leaf interface { list interface {
type if:interface-ref; key "interface";
description description
"Enable RIP on this interface."; "List of RIP interfaces.";
} leaf interface {
leaf oper-status { type if:interface-ref;
type enumeration { description
enum up { "Enable RIP on this interface.";
description }
"RIPv2 or RIPng is operational on this interface."; leaf oper-status {
type enumeration {
enum up {
description
"RIPv2 or RIPng is operational on this interface.";
}
enum down {
description
"RIPv2 or RIPng is not operational on this
interface.";
}
} }
enum down { description
description "Operational state.";
"RIPv2 or RIPng is not operational on this }
interface."; leaf cost {
type uint8 {
range 1..16;
} }
default 1;
description
"Interface cost.";
} }
description leaf listen {
"Operational state."; type boolean;
} description
leaf cost { "The interface is enabled to receive (listen to)
type uint8 { and process RIPv2 or RIPng packets.";
range 1..16;
} }
default 1; leaf next-full-update {
description type uint32;
"Interface cost."; description
} "Next full update time.";
leaf listen { }
type boolean; leaf originate-default-route {
description type boolean;
"The interface is enabled to receive (listen to) description
and process RIP or RIPng packets."; "'true' if originating default route is enabled.";
}
leaf next-full-update {
type uint32;
description
"Next full update time.";
}
leaf originate-default-route {
type boolean;
description
"'true' if originating default route is enabled.";
}
leaf poison-reverse {
type boolean;
description
"'true' if Split Horizon with Poisoned Reverse is
enabled.";
}
leaf split-horizon {
type boolean;
description
"'true' if Split Horizon processing is enabled.";
}
leaf supply {
type boolean;
description
"The interface is enabled to supply (send) RIP or RIPng
packets.";
}
leaf valid-address {
type boolean;
description
"The interface has a valid address.";
}
uses timers-container;
container statistics { }
if-feature interface-statistics; leaf passive {
description type boolean;
"Interface statistic counters.";
leaf discontinuity-time {
type yang:date-and-time;
description description
"The time on the most recent occasion at which any one "Sending RIP packets is disabled on the interface.";
or more of the statistic counters suffered a
discontinuity. If no such discontinuities have
occurred since the last re-initialization of the local
management subsystem, then this node contains the time
the local management subsystem re-initialized
itself.";
} }
leaf bad-packets-rcvd { leaf poison-reverse {
type yang:counter32; type boolean;
description description
"The number of RIP invalid packets received by "'true' if Split Horizon with Poisoned Reverse is
the RIP process which were subsequently discarded enabled.";
for any reason (e.g. a version 0 packet, or an
unknown command type).";
} }
leaf bad-routes-rcvd { leaf split-horizon {
type yang:counter32; type boolean;
description description
"The number of routes, in valid RIP packets, "'true' if Split Horizon processing is enabled.";
which were ignored for any reason (e.g. unknown
address family, or invalid metric).";
} }
leaf updates-sent { leaf valid-address {
type yang:counter32; type boolean;
description description
"The number of triggered RIP updates actually "The interface has a valid address.";
sent on this interface. This explicitly does
NOT include full updates sent containing new
information.";
} }
} uses timers-container;
} // interface
container statistics {
if-feature interface-statistics;
description
"Interface statistic counters.";
leaf discontinuity-time {
type yang:date-and-time;
description
"The time on the most recent occasion at which any
one or more of the statistic counters suffered a
discontinuity. If no such discontinuities have
occurred since the last re-initialization of the
local management subsystem, then this node contains
the time the local management subsystem
re-initialized itself.";
}
leaf bad-packets-rcvd {
type yang:counter32;
description
"The number of RIP invalid packets received by
the RIP process which were subsequently discarded
for any reason (e.g. a version 0 packet, or an
unknown command type).";
}
leaf bad-routes-rcvd {
type yang:counter32;
description
"The number of routes, in valid RIP packets,
which were ignored for any reason (e.g. unknown
address family, or invalid metric).";
}
leaf updates-sent {
type yang:counter32;
description
"The number of triggered RIP updates actually
sent on this interface. This explicitly does
NOT include full updates sent containing new
information.";
}
}
} // interface
} // interfaces
container ipv4 { container ipv4 {
when "../../rt:type = 'rip:ripv2'" { when "derived-from-or-self(../../rt:type, 'rip:ripv2')" {
description description
"IPv4 address family is supported by RIPv2."; "IPv4 address family is supported by RIPv2.";
} }
description description
"IPv4 address family information."; "IPv4 address family information.";
container neighbors { container neighbors {
description description
"IPv4 neighbor information."; "IPv4 neighbor information.";
list neighbor { list neighbor {
key "ipv4-address"; key "ipv4-address";
description description
"A RIPv2 RIP neighbor."; "A RIPv2 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
skipping to change at page 33, line 18 skipping to change at page 33, line 49
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
} // ipv4 } // ipv4
container ipv6 { container ipv6 {
when "../../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.";
} }
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 RIPv2 RIP 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
skipping to change at page 34, line 33 skipping to change at page 35, line 9
"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 (/) character. The range of values for the
prefix-length 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;
skipping to change at page 36, line 38 skipping to change at page 37, line 5
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 5. 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).
This document registers the following namespace URIs in the IETF XML This document registers the following namespace URIs in the IETF XML
registry [RFC3688]: registry [RFC3688]:
-------------------------------------------------------------------- --------------------------------------------------------------------
URI: urn:ietf:params:xml:ns:yang:ietf-rip
Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace.
--------------------------------------------------------------------
This document registers the following YANG modules in the YANG Module
Names registry [RFC7950]:
--------------------------------------------------------------------
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 XXXX reference: RFC XXXX
-------------------------------------------------------------------- --------------------------------------------------------------------
5. Security Considerations 6. Security Considerations
The configuration, state, and action data defined in this document The configuration, state, and action data defined in this document
are designed to be accessed via the NETCONF protocol [RFC6241]. The are designed to be accessed via a management protocol with a secure
data-model by itself does not create any security implications. The transport layer, such as NETCONF [RFC6241]. The NETCONF access
security considerations for the NETCONF protocol are applicable. The control model [RFC6536] provides the means to restrict access for
NETCONF protocol used for sending the data supports authentication particular NETCONF users to a preconfigured subset of all available
and encryption. NETCONF protocol operations and content.
6. References A number of configuration data nodes defined in this document are
writable/creatable/deletable (i.e., "config true" in YANG terms,
which is the default). These data nodes may be considered sensitive
or vulnerable in some network environments. Write operations to
these data nodes, such as "edit-config" in NETCONF, can have negative
effects on the network if the protocol operations are not properly
protected. The vulnerable "config true" parameters and subtrees are
the following:
6.1. Normative References /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/
rip:rip
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the Unauthorized access to any node of these can adversely affect the
Network Configuration Protocol (NETCONF)", RFC 6020, routing subsystem of both the local device and the network. This may
October 2010. lead to network malfunctions, delivery of packets to inappropriate
destinations, and other problems.
[RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, This data model also defines a RPC "clear-rip-route", which may
July 2013. affect the routing subsystem in the same way as described above.
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. Bierman, 7. References
"Network Configuration Protocol (NETCONF)", RFC 6241, June
2011.
[RFC2453] G. Malkin, "RIP Version 2", RFC2453, November 1998. 7.1. Normative References
[RFC2080] G. Malkin and R. Minnear, "RIPng for IPv6", RFC2080, [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
January 1997. Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC1724] G. Malkin and F. Baker, "RIP Version 2 MIB Extension", [RFC2453] Malkin, G., "RIP Version 2", STD 56, RFC 2453,
RFC1724, November 1994. DOI 10.17487/RFC2453, November 1998,
<http://www.rfc-editor.org/info/rfc2453>.
6.2. Informative References [RFC2080] Malkin, G. and R. Minnear, "RIPng for IPv6", RFC 2080,
DOI 10.17487/RFC2080, January 1997,
<http://www.rfc-editor.org/info/rfc2080>.
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
Data Model Documents", RFC 6087, January 2011. DOI 10.17487/RFC3688, January 2004,
<http://www.rfc-editor.org/info/rfc3688>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<http://www.rfc-editor.org/info/rfc6241>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013,
<http://www.rfc-editor.org/info/rfc6991>.
[RFC7223] Bjorklund, M., "A YANG Data Model for Interface
Management", RFC 7223, DOI 10.17487/RFC7223, May 2014,
<http://www.rfc-editor.org/info/rfc7223>.
[RFC7277] Bjorklund, M., "A YANG Data Model for IP Management",
RFC 7277, DOI 10.17487/RFC7277, June 2014,
<http://www.rfc-editor.org/info/rfc7277>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016,
<http://www.rfc-editor.org/info/rfc7950>.
[RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing
Management", RFC 8022, DOI 10.17487/RFC8022, November
2016, <http://www.rfc-editor.org/info/rfc8022>.
[I-D.ietf-rtgwg-routing-types]
Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
"Routing Area Common YANG Data Types", draft-ietf-rtgwg-
routing-types-00 (work in progress), December 2016.
[I-D.ietf-rtgwg-yang-key-chain]
Lindem, A., Qu, Y., Yeung, D., Chen, I., Zhang, Z., and Y.
Yang, "Routing Key Chain YANG Data Model", draft-ietf-
rtgwg-yang-key-chain-11 (work in progress), November 2016.
[I-D.ietf-ospf-yang]
Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem,
"Yang Data Model for OSPF Protocol", draft-ietf-ospf-
yang-06 (work in progress), October 2016.
[I-D.ietf-isis-yang-isis-cfg]
Litkowski, S., Yeung, D., Lindem, A., Zhang, Z., and L.
Lhotka, "YANG Data Model for IS-IS protocol", draft-ietf-
isis-yang-isis-cfg-14 (work in progress), November 2016.
[I-D.ietf-idr-bgp-model]
Shaikh, A., Shakir, R., Patel, K., Hares, S., D'Souza, K.,
Bansal, D., Clemm, A., Zhdankin, A., Jethanandani, M., and
X. Liu, "BGP Model for Service Provider Networks", draft-
ietf-idr-bgp-model-02 (work in progress), July 2016.
[I-D.ietf-bfd-yang]
Zheng, L., Rahman, R., Networks, J., Jethanandani, M., and
G. Mirsky, "Yang Data Model for Bidirectional Forwarding
Detection (BFD)", draft-ietf-bfd-yang-03 (work in
progress), July 2016.
[I-D.ietf-netconf-rfc5277bis]
Clemm, A., Prieto, A., Voit, E., Nilsen-Nygaard, E.,
Tripathy, A., Chisholm, S., and H. Trevino, "Subscribing
to Event Notifications", draft-ietf-netconf-rfc5277bis-01
(work in progress), October 2016.
[I-D.ietf-netconf-yang-push]
Clemm, A., Voit, E., Prieto, A., Tripathy, A., Nilsen-
Nygaard, E., Bierman, A., and B. Lengyel, "Subscribing to
YANG datastore push updates", draft-ietf-netconf-yang-
push-04 (work in progress), October 2016.
7.2. Informative References
[RFC1724] Malkin, G. and F. Baker, "RIP Version 2 MIB Extension",
RFC 1724, DOI 10.17487/RFC1724, November 1994,
<http://www.rfc-editor.org/info/rfc1724>.
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG
Data Model Documents", RFC 6087, DOI 10.17487/RFC6087,
January 2011, <http://www.rfc-editor.org/info/rfc6087>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012,
<http://www.rfc-editor.org/info/rfc6536>.
[RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG",
RFC 7951, DOI 10.17487/RFC7951, August 2016,
<http://www.rfc-editor.org/info/rfc7951>.
Appendix A. Data Tree Example
This section contains an example of an instance data tree in the JSON
encoding [RFC7951], containing both configuration and state data.
+-----------------+
| |
| Router 10.0.0.1 |
| |
+--------+--------+
|eth0
|10.1.1.1
|
|
|10.1.1.2
+--------+--------+
| |
| Another Router |
| |
+--------+--------+
The instance data tree for Router 10.0.0.1 in the above figure could
be as follows:
{
"ietf-interfaces:interfaces": {
"interface": [
{
"name": "eth1",
"type": "iana-if-type:ethernetCsmacd",
"description": "An interface with RIPv2 enabled.",
"ietf-ip:ipv4": {
"address": [
{
"ip": "10.1.1.1",
"prefix-length": 24
}
],
"forwarding": true
}
}
]
},
"ietf-interfaces:interfaces-state": {
"interface": [
{
"name": "eth1",
"type": "iana-if-type:ethernetCsmacd",
"phys-address": "00:0C:42:E5:B1:E9",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2016-10-24T17:11:27+02:00"
},
"ietf-ip:ipv4": {
"forwarding": true,
"mtu": 1500,
"address": [
{
"ip": "10.1.1.1",
"prefix-length": 24
}
]
}
}
]
},
"ietf-routing:routing": {
"router-id": "10.0.0.1",
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-rip:ripv2",
"name": "ripv2-1",
"description": "RIPv2 instance ripv2-1.",
"ietf-rip:rip": {
"redistribute": {
"connected": {
}
}
"interfaces": {
"interface": [
{
"interface": "eth1",
"split-horizon": "poison-reverse"
}
]
}
}
}
]
}
},
"ietf-routing:routing-state": {
"interfaces": {
"interface": [
"eth1"
]
},
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-rip:rip",
"name": "ripv2-1"
"ietf-rip:rip": {
"default-metric": 1,
"next-triggered-update": 5
"interfaces": {
"interface": [
{
"interface": "eth1",
"oper-status": "up",
"cost": 1,
"listen": true,
"passive": false,
"poison-reverse": true,
"split-horizon": true,
"valid-address": true
}
]
},
"ipv4" {
"neighbors": {
"neighbor": [
{
"address": "10.1.1.2"
}
]
}
"routes": {
"route": [
{
"ipv4-prefix": "10.1.1.1/24",
"interface": "eth1",
"redistributed": true,
"route-type": "connected",
"metric": 0,
"expire-time": 22
},
{
"ipv4-prefix": "10.1.2.1/24",
"next-hop": "10.1.1.2",
"interface": "eth1",
"redistributed": false,
"route-type": "rip",
"metric": 2,
"expire-time": 82
}
]
}
},
"statistics": {
"discontinuity-time": "2016-10-24T17:11:27+02:00",
"requests-rcvd": 523,
"requests-sent": 262,
"responses-rcvd": 261,
"responses-sent": 523
}
}
}
]
}
}
}
Authors' Addresses Authors' Addresses
Xufeng Liu Xufeng Liu
Ericsson / Kuatro Technologies Inc. Jabil
8281 Greensboro Drive, Suite 200 8281 Greensboro Drive, Suite 200
McLean, VA 22102 McLean VA 22102
USA USA
Email: xliu@kuatrotech.com EMail: Xufeng_Liu@jabil.com
Prateek Sarda Prateek Sarda
Ericsson India Global Services Pvt. Ltd. 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 Karnataka 560037
India India
Email: prateek.sarda@ericsson.com EMail: prateek.sarda@ericsson.com
Vikram Choudhary Vikram Choudhary
Huawei Technologies Huawei Technologies
Divyashree Techno Park, Whitefield Divyashree Techno Park, Whitefield
Bangalore, Karnataka 560037 Bangalore Karnataka 560037
India India
Email: vikram.choudhary@huawei.com EMail: vikram.choudhary@huawei.com
 End of changes. 163 change blocks. 
590 lines changed or deleted 1081 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/