[Docs] [txt|pdf] [Tracker] [WG] [Email] [Diff1] [Diff2] [Nits]

Versions: (draft-liu-rtgwg-yang-rip) 00 01 02 03

Network Working Group                                             X. Liu
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

   This document describes a data model for the Routing Information
   Protocol (RIP).  Both RIP version 2 and RIPng are covered.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on July 20, 2017.

Copyright Notice

   Copyright (c) 2017 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.



Liu, et al.               Expires July 20, 2017                 [Page 1]


Internet-Draft                  YANG RIP                    January 2017


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Terminology . . . . . . . . . . . . . . . . . . . . . . .   2
     1.2.  Tree Diagrams . . . . . . . . . . . . . . . . . . . . . .   3
     1.3.  Prefixes in Data Node Names . . . . . . . . . . . . . . .   3
   2.  Design of the Data Model  . . . . . . . . . . . . . . . . . .   4
     2.1.  Scope of the Model  . . . . . . . . . . . . . . . . . . .   4
     2.2.  Relation with Core Routing Framework  . . . . . . . . . .   4
     2.3.  Protocol Configuration  . . . . . . . . . . . . . . . . .   5
     2.4.  Protocol States . . . . . . . . . . . . . . . . . . . . .   5
     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

   This document introduces a YANG [RFC7950] data model for the Routing
   Information Protocol (RIP) [RFC2453][RFC2080].  RIP was designed to
   work as an Interior Gateway Protocol (IGP) in moderate-size
   Autonomous Systems (AS).

   This YANG model supports both RIP version 2 and RIPng.  RIP version 2
   (defined in [RFC2453]) supports IPv4.  RIPng (defined in [RFC2080])
   supports IPv6.

1.1.  Terminology

   The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in BCP
   14, [RFC2119].

   The following terms are defined in [RFC7950] and are not redefined
   here:

   o  augment

   o  data model



Liu, et al.               Expires July 20, 2017                 [Page 2]


Internet-Draft                  YANG RIP                    January 2017


   o  data node

1.2.  Tree Diagrams

   A simplified graphical representation of the data model is used in
   this document.  The meaning of the symbols in these diagrams is as
   follows:

   o  Brackets "[" and "]" enclose list keys.

   o  Curly braces "{" and "}" contain names of optional features that
      make the corresponding node conditional.

   o  Abbreviations before data node names: "rw" means configuration
      (read-write), and "ro" means state data (read-only).

   o  Symbols after data node names: "?" means an optional node, "!"
      means a presence container, and "*" denotes a list and leaf-list.

   o  Parentheses enclose choice and case nodes, and case nodes are also
      marked with a colon (":").

   o  Ellipsis ("...") stands for contents of subtrees that are not
      shown.

1.3.  Prefixes in Data Node Names

   In this document, names of data nodes, actions, and other data model
   objects are often used without a prefix, as long as it is clear from
   the context in which YANG module each name is defined.  Otherwise,
   names are prefixed using the standard prefix associated with the
   corresponding YANG module, as shown in Table 1.

      +-----------+-----------------+---------------------------------+
      | Prefix    | YANG module     | Reference                       |
      +-----------+-----------------+---------------------------------+
      | 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




Liu, et al.               Expires July 20, 2017                 [Page 3]


Internet-Draft                  YANG RIP                    January 2017


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.








Liu, et al.               Expires July 20, 2017                 [Page 4]


Internet-Draft                  YANG RIP                    January 2017


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 <per instance configuration>
         +--rw interface* [interface]
            +--rw interface                  if:interface-ref
            +--rw <per interface configuration>
            +--rw neighbors {explicit-neighbors}?
            |  +--rw neighbor* [address]
            |     +--rw address    inet:ip-address
            |     +--rw <per neighbor configuration>


   The model allows to configure the following protocol entities:

   o  Protocol instance (RIP version 2 or RIPng)

   o  Interface

   o  Neighbor

2.4.  Protocol States

   The model structure for the protocol states is as shown below:






















Liu, et al.               Expires July 20, 2017                 [Page 5]


Internet-Draft                  YANG RIP                    January 2017


   augment /rt:routing-state/rt:control-plane-protocols/
   rt:control-plane-protocol:
      +--ro rip
         +--ro <per instance operational states>
         +--ro interface* [interface]
         |  +--ro interface                  if:interface-ref
         |  +--ro <per instance operational states>
         |  +--ro statistics {interface-statistics}?
         |     +--ro <per instance statistics>
         +--ro ipv4
         |  +--ro neighbors
         |  |  +--ro neighbor* [ipv4-address]
         |  |     +--ro <per neighbor IPv4 operational states>
         |  +--ro routes
         |     +--ro route* [ipv4-prefix]
         |        +--ro <IPv4 RIP route states>
         +--ro ipv6
         |  +--ro neighbors
         |  |  +--ro neighbor* [ipv6-address]
         |  |     +--ro <per neighbor IPv6 operational states>
         |  +--ro routes
         |     +--ro route* [ipv6-prefix]
         |        +--ro ipv6-prefix                     inet:ipv6-prefix
         |        +--ro <IPv4 RIP route states>
         +--ro statistics {global-statistics}?
            +--ro <per instance statistics>


   The model allows to retrieve protocol states at the following levels:

   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]




Liu, et al.               Expires July 20, 2017                 [Page 6]


Internet-Draft                  YANG RIP                    January 2017


   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!



Liu, et al.               Expires July 20, 2017                 [Page 7]


Internet-Draft                  YANG RIP                    January 2017


        |  |  +--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}?



Liu, et al.               Expires July 20, 2017                 [Page 8]


Internet-Draft                  YANG RIP                    January 2017


              |              |  +--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:



Liu, et al.               Expires July 20, 2017                 [Page 9]


Internet-Draft                  YANG RIP                    January 2017


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



Liu, et al.               Expires July 20, 2017                [Page 10]


Internet-Draft                  YANG RIP                    January 2017


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






Liu, et al.               Expires July 20, 2017                [Page 11]


Internet-Draft                  YANG RIP                    January 2017


4.  YANG Module


   <CODE BEGINS> file "ietf-rip@2017-01-16.yang"
   module ietf-rip {
     yang-version 1.1;
     namespace "urn:ietf:params:xml:ns:yang:ietf-rip";

     prefix rip;

     import ietf-inet-types {
       prefix "inet";
     }

     import ietf-yang-types {
       prefix "yang";
     }

     import ietf-interfaces {
       prefix "if";
     }

     import ietf-ip {
       prefix "ip";
     }

     import ietf-routing {
       prefix "rt";
     }

     import ietf-key-chain {
       prefix "key-chain";
     }

     import ietf-bfd {
       prefix "bfd";
     }

     import ietf-ospf {
       prefix "ospf";
     }

     import ietf-isis {
       prefix "isis";
     }

     organization "IETF Routing Area Working Group (rtgwg)";




Liu, et al.               Expires July 20, 2017                [Page 12]


Internet-Draft                  YANG RIP                    January 2017


     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
       "This YANG module defines a model for managing Routing
        Information Protocol (RIP), including RIP version 2 and RIPng.

        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
         "Initial revision.";
       reference
         "RFC 2453: RIP Version 2.
          RFC 2080: RIPng for IPv6.
          RFC 1724: RIP Version 2 MIB Extension.";
     }

     /*
      * Features
      */
     feature bfd {
       description
         "This feature indicates that the RIP implementation on the



Liu, et al.               Expires July 20, 2017                [Page 13]


Internet-Draft                  YANG RIP                    January 2017


          system supports BFD (Bidirectional Forwarding Detection).";
     }

     feature bfd-protocol-parameters {
       description
         "BFD (Bidirectional Forwarding Detection) protocol specific
          parameters support on a RIP interface.";
     }

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

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

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

     /*
      * Typedefs
      */

     typedef prefix-set-ref {
       type string;
       description
         "A type for a reference to a prefix list.";
     }

     typedef route-policy-ref {
       type string;
       description
         "A type for a reference to a route policy.";
     }

     /*
      * Identities
      */

     identity rip {



Liu, et al.               Expires July 20, 2017                [Page 14]


Internet-Draft                  YANG RIP                    January 2017


       base "rt:routing-protocol";
       description "Identity for the RIP routing protocol.";
     }

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

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

     /*
      * Groupings
      */

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

     grouping redistribute-container {
       description
         "Container of redistribute attributes.";

       container redistribute {
         description
           "Redistributes routes learned from other routing protocols
            into the RIP routing instance.";
         list bgp {
           key "asn";
           description
             "Redistributes routes from the specified BGP (Border



Liu, et al.               Expires July 20, 2017                [Page 15]


Internet-Draft                  YANG RIP                    January 2017


              Gateway Protocol) autonomous system (AS) into the RIP
              routing instance.";
           leaf asn {
             type inet:as-number;
             description
               "BGP autonomous system (AS) number.";
           }
           uses redistribute-route-policy-attributes;
         }
         container cg-nat {
           presence
             "Present if Carrier Grade Network Address Translation
              (CGNAT) routes are redistributed.";
           description
             "Carrier Grade Network Address Translation (CGNAT)
              routes.";
           uses redistribute-route-policy-attributes;
         }
         container connected {
           presence
             "Present if directly attached network routes are
              redistributed.";
           description
             "Redistributes directly attached networks into the RIP
              routing instance.";
           uses redistribute-route-policy-attributes;
         }
         container ipsec {
           presence
             "Present if IP security routing instance routes
              are redistributed.";
           description
             "Redistributes routes from the IP security routing
              instance into the RIP routing instance.";
           uses redistribute-route-policy-attributes;
         }
         list isis {
           key "instance";
           description
             "Redistributes IS-IS routes.";
           leaf instance {
             type leafref {
               path "../../../../../rt:control-plane-protocol/rt:name";
             }
             must "derived-from-or-self("
               + "../../../../../rt:control-plane-protocol"
               + "[rt:name = current()]/rt:type, 'isis:isis')" {
               description



Liu, et al.               Expires July 20, 2017                [Page 16]


Internet-Draft                  YANG RIP                    January 2017


                 "The type of the routing protocol must be 'isis'";
             }
             description
               "Redistributes routes from the specified IS-IS routing
                instance into the RIP routing instance.";
           }
           leaf level {
             type enumeration {
               enum 1 {
                 description "IS-IS level 1 routes.";
               }
               enum 2 {
                 description "IS-IS level 1 routes.";
               }
               enum 1-2 {
                 description "IS-IS level 1-2 routes.";
               }
             }
             description
               "IS-IS level.";
           }
           uses redistribute-route-policy-attributes;
         }
         container nat {
           presence
             "Present if Network Address Translation (NAT) routes
              are redistributed.";
           description
             "Redistributes Network Address Translation (NAT)
              routes into the RIP routing instance.";
           uses redistribute-route-policy-attributes;
         }
         list ospfv2 {
           when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" {
             description
               "Applicable to RIPv2.";
           }
           key "instance";
           description
             "Redistributes routes from the specified OSPFv2 routing
              instance into the RIPv2 routing instance.";
           leaf instance {
             type leafref {
               path "../../../../../rt:control-plane-protocol/rt:name";
             }
             must "derived-from-or-self("
               + "../../../../../rt:control-plane-protocol"
               + "[rt:name = current()]/rt:type, 'ospf:ospfv2')" {



Liu, et al.               Expires July 20, 2017                [Page 17]


Internet-Draft                  YANG RIP                    January 2017


               description
                 "The type of the routing protocol must be 'ospfv2'";
             }
             description
               "OSPFv2 instance ID. Redistributes routes from the
                specified OSPFv2 routing instance into the RIPv2 routing
                instance. ";
           }
           leaf route-type {
             type ospf:route-type;
             description
               "Redistributes only those OSPFv2 routes matching the
                specified route type into the RIPv2 routing instance.";
           }
           uses redistribute-route-policy-attributes;
         }
         list ospfv3 {
           when "derived-from-or-self(../../../rt:type, 'rip:ripng')" {
             description
               "Applicable to RIPng.";
           }
           key "instance";
           description
             "Redistributes routes from the specified OSPFv3 routing
              instance into the RIPng routing instance.";
           leaf instance {
             type leafref {
               path "../../../../../rt:control-plane-protocol/rt:name";
             }
             must "derived-from-or-self("
               + "../../../../../rt:control-plane-protocol"
               + "[rt:name = current()]/rt:type, 'ospf:ospfv3')" {
               description
                 "The type of the routing protocol must be 'ospfv3'";
             }
             description
               "OSPFv3 instance ID. Redistributes routes from the
                specified OSPFv3 routing instance into the RIPng routing
                instance. ";
           }
           leaf route-type {
             type ospf:route-type;
             description
               "Redistributes only those OSPFv3 routes matching the
                specified route type into the RIPng routing instance.";
           }
           uses redistribute-route-policy-attributes;
         }



Liu, et al.               Expires July 20, 2017                [Page 18]


Internet-Draft                  YANG RIP                    January 2017


         list ripv2 {
           when "derived-from-or-self(../../../rt:type, 'rip:ripv2')" {
             description
               "Applicable to RIPv2.";
           }
           key "instance";
           description
             "Redistributes routes from another RIPv2 routing instance
              into the current RIPv2 routing instance.";
           leaf instance {
             type leafref {
               path "../../../../../rt:control-plane-protocol/rt:name";
             }
             must "derived-from-or-self("
               + "../../../../../rt:control-plane-protocol"
               + "[rt:name = current()]/rt:type, 'rip:ripv2')" {
               description
                 "The type of the routing protocol must be 'ripv2'";
             }
             description
               "Redistributes routes from the specified RIPv2 routing
                instance into the RIPv2 routing instance.";
           }
           uses redistribute-route-policy-attributes;
         }
         list ripng {
           when "derived-from-or-self(../../../rt:type, 'rip:ripng')" {
             description
               "Applicable to RIPng.";
           }
           key "instance";
           description
             "Redistributes routes from another RIPng routing instance
              into the current RIPng routing instance.";
           leaf instance {
             type leafref {
               path "../../../../../rt:control-plane-protocol/rt:name";
             }
             must "derived-from-or-self("
               + "../../../../../rt:control-plane-protocol"
               + "[rt:name = current()]/rt:type, 'rip:ripng')" {
               description
                 "The type of the routing protocol must be 'ripng'";
             }
             description
               "Redistributes routes from the specified RIPng routing
                instance into the RIPng routing instance.";
           }



Liu, et al.               Expires July 20, 2017                [Page 19]


Internet-Draft                  YANG RIP                    January 2017


           uses redistribute-route-policy-attributes;
         }
         container static {
           presence "Present if redistributing static routes.";
           description
             "Redistributes static routes into the RIP routing
              instance.";
           uses redistribute-route-policy-attributes;
         }
       } // redistribute
     } // redistribute-container

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

     grouping timers-container {
       description
         "Container for settings of basic timers";
       container timers {
         must "invalid-interval >= (update-interval * 3)" {
           description
             "invalid-interval must be at least three times the value
              for the update-interval argument.";
         }
         must "flush-interval > invalid-interval" {
           description
             "flush-interval must be larger than the value for the



Liu, et al.               Expires July 20, 2017                [Page 20]


Internet-Draft                  YANG RIP                    January 2017


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




Liu, et al.               Expires July 20, 2017                [Page 21]


Internet-Draft                  YANG RIP                    January 2017


     grouping global-attributes {
       description
         "Global configuration and state attributes.";
       uses originate-default-route-container;

       leaf default-metric {
         type uint8 {
           range 0..16;
         }
         default 0;
         description
           "Set the default metric.";
       }

       leaf distance {
         type uint8 {
           range 1..255;
         }
         default 120;
         description
           "The administrative distance of the RIPv2 or RIPng for the
            current RIPv2 or RIPng instance.";
       }

       leaf triggered-update-threshold {
         type uint8 {
           range 1..30;
         }
         units seconds;
         default 5;
         description
           "This attribute is used to suppress triggered updates.
            When the arrival of a regularly scheduled update matches the
            number of seconds or is less than the number seconds
            configured with this attribute, the triggered update is
            suppressed.";
       }

       leaf maximum-paths {
         type uint8 {
           range 1..16;
         }
         default 8;
         description
           "The number of multiple equal-cost RIPv2 or RIPng routes
            that can be used as the best paths for balancing the load
            of outgoing traffic packets.";
       }



Liu, et al.               Expires July 20, 2017                [Page 22]


Internet-Draft                  YANG RIP                    January 2017


       leaf output-delay {
         type uint8 {
           range 1..50;
         }
         units milliseconds;
         description
           "A delay time between packets sent in multipacket
            RIPv2 or RIPng updates.";
       }
     } // global-attributes

     grouping distribute-lists {
       description
         "Grouping for distribute lists.";
       list distribute-list {
         key "prefix-set-name direction";
         description
           "List of distribute-lists, which are used to filter in-coming
            or out-going routing updates.";

         leaf prefix-set-name {
           type prefix-set-ref;
           description
             "Reference to a prefix list to be applied to RIPv2 or
              RIPng packets.";
         }

         leaf direction {
           type enumeration {
             enum "in" {
               description
                 "Apply the distribute-list to in-coming routes.";
             }
             enum "out" {
               description
                 "Apply the distribute-list to out-going routes.";
             }
           }
           description
             "Direction of the routing updates.";
         }

         leaf if-name {
           type if:interface-ref;
           description
             "Reference to an interface to which the prefix list is
              applied.";
         }



Liu, et al.               Expires July 20, 2017                [Page 23]


Internet-Draft                  YANG RIP                    January 2017


       }
     } // distribute-lists

     grouping route-attributes {
       description
         "Grouping for route attributes.";
       leaf redistributed {
         type boolean;
         description
           "Redistributed routes";
       }

       leaf route-type {
         type enumeration {
           enum connected {
             description "Connected route.";
           }
           enum external {
             description "External route.";
           }
           enum external-backup {
             description "External backup route.";
           }
           enum rip {
             description "RIP route.";
           }
         }
         description
           "Route type.";
       }
       leaf metric {
         type uint8 {
           range 0..16;
         }
         description "Route metric.";
       }
       leaf expire-time {
         type uint16;
         description "Expiration time.";
       }
       leaf deleted {
         type boolean;
         description "Deleted route.";
       }
       leaf holddown {
         type boolean;
         description "Holddown route.";
       }



Liu, et al.               Expires July 20, 2017                [Page 24]


Internet-Draft                  YANG RIP                    January 2017


       leaf need-triggered-update {
         type boolean;
         description "The route needs triggered update.";
       }
       leaf inactive {
         type boolean;
         description "The route is inactive.";
       }
       leaf flush-expire-before-holddown {
         type boolean;
         description
           "The flush timer expired before holddown time.";
       }
     } // route-attribute

     /*
      * Configuration data nodes
      */

     augment "/rt:routing/rt:control-plane-protocols/"
       + "rt:control-plane-protocol" {
       when "derived-from(rt:type, 'rip:rip')" {
         description
           "This augment is only valid for a routing protocol instance
            of RIP (type 'ripv2' or 'ripng').";
       }
       description "RIP augmentation.";

       container rip {
         description
           "RIP configuration data.";

         uses global-attributes;
         uses distribute-lists;
         uses redistribute-container;
         uses timers-container;

         container interfaces {
           description
             "Containing a list of RIP interfaces.";
           list interface {
             key "interface";
             description
               "List of RIP interfaces.";
             leaf interface {
               type if:interface-ref;
               must "(derived-from-or-self("
                 + "../../../../rt:type, 'rip:ripv2') and "



Liu, et al.               Expires July 20, 2017                [Page 25]


Internet-Draft                  YANG RIP                    January 2017


                 + "/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
                 "Enable RIP on this interface.";
             }

             container authentication {
               when "derived-from-or-self("
                 + "../../../../rt:type, 'rip:ripv2')" {
                 description "Only applicable to RIPv2.";
               }
               description
                 "Enables authentication and specifies the
                  authentication scheme for the RIP interface";
               choice auth-type-selection {
                 description
                   "Specify the authentication scheme.
                    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 {
                   leaf key {
                     type string;
                     description
                       "Key string in ASCII format.";
                   }
                   container crypto-algorithm {
                     uses key-chain:crypto-algorithm-types;
                     description



Liu, et al.               Expires July 20, 2017                [Page 26]


Internet-Draft                  YANG RIP                    January 2017


                       "Cryptographic algorithm associated with key.";
                   }
                 }
               }
             }

             container bfd {
               if-feature bfd;
               description "BFD operation.";
               leaf enabled {
                 type boolean;
                 description
                   "True if BFD is enabled for the interface.";
               }
               uses bfd:bfd-grouping-base-cfg-parms {
                 if-feature bfd-protocol-parameters;
               }
             }

             leaf cost {
               type uint8 {
                 range  1..16;
               }
               default 1;
               description
                 "Interface cost.";
             }

             container neighbors {
               if-feature explicit-neighbors;
               description
                 "Specifies the RIP neighbors. Useful for a
                  non-broadcast multiple access (NBMA) network.";
               list neighbor {
                 key "address";
                 description
                   "Specify a RIP neighbor on a non-broadcast network.";
                 leaf address {
                   type inet:ip-address;
                   description "Neighbor IP address.";
                 }
               }
             }

             leaf no-listen {
               type empty;
               description
                 "Disable the specified interface to receive (listen to)



Liu, et al.               Expires July 20, 2017                [Page 27]


Internet-Draft                  YANG RIP                    January 2017


                  and process RIPv2 or RIPng packets.";
             }

             uses originate-default-route-container;

             leaf passive {
               type empty;
               description
                 "Disables sending of RIPv2 or RIPng packets on the
                  specified interface.";
             }

             leaf split-horizon {
               type enumeration {
                 enum simple {
                   description
                   "Enables simple split-horizon processing.";
                 }
                 enum poison-reverse {
                   description
                     "Enables split-horizon processing with poison
                      reverse.";
                 }
               }
               default simple;
               description
                 "Enables RIPv2 or RIPng split-horizon processing on the
                  specified interface.";
             }

             container summary-address {
               description
                 "Summarizes information about RIPv2 or RIPng routes
                  sent over the specified interface in RIPv2 or RIPng
                  update packets.";
               leaf address {
                 type inet:ip-prefix;
                 description
                   "IPv4 address, in the form A.B.C.D, and the prefix
                    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;
                 }



Liu, et al.               Expires July 20, 2017                [Page 28]


Internet-Draft                  YANG RIP                    January 2017


                 description
                   "Metric used for the route. If this attribute is not
                    used, the value set through the default-metric
                    attribute in RIPv2 or RIPng router configuration is
                    used for the route. ";
               }
             }

            uses timers-container;
           } // interface
         } // interfaces
       } // container rip
     }

     /*
      * Operational state data nodes
      */

     augment "/rt:routing-state/rt:control-plane-protocols/"
       + "rt:control-plane-protocol" {
       when "derived-from(rt:type, 'rip:rip')" {
         description
           "This augment is only valid for a routing protocol instance
            of type 'ripv2' or 'ripng'.";
       }
       description
         "RIP state.";
       container rip {
         description "RIP operational state.";

         uses global-attributes;
         uses distribute-lists;

         leaf next-triggered-update {
           type uint32;
           description
             "Next triggered update.";
         }
         leaf num-of-routes {
           type uint32;
           description
             "The number of routes.";
         }

         uses timers-container;

         container interfaces {
           description



Liu, et al.               Expires July 20, 2017                [Page 29]


Internet-Draft                  YANG RIP                    January 2017


             "Containing a list of RIP interfaces.";
           list interface {
             key "interface";
             description
               "List of RIP interfaces.";
             leaf interface {
               type if:interface-ref;
               description
                 "Enable RIP 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.";
                 }
               }
               description
                 "Operational state.";
             }
             leaf cost {
               type uint8 {
                 range  1..16;
               }
               default 1;
               description
                 "Interface cost.";
             }
             leaf listen {
               type boolean;
               description
                 "The interface is enabled to receive (listen to)
                  and process RIPv2 or RIPng packets.";
             }
             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.";



Liu, et al.               Expires July 20, 2017                [Page 30]


Internet-Draft                  YANG RIP                    January 2017


             }
             leaf passive {
               type boolean;
               description
                 "Sending RIP packets is disabled on the interface.";
             }
             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 valid-address {
               type boolean;
               description
                 "The interface has a valid address.";
             }
             uses timers-container;

             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 {



Liu, et al.               Expires July 20, 2017                [Page 31]


Internet-Draft                  YANG RIP                    January 2017


                 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 {
           when "derived-from-or-self(../../rt:type, 'rip:ripv2')" {
             description
               "IPv4 address family is supported by RIPv2.";
           }
           description
             "IPv4 address family information.";
           container neighbors {
             description
               "IPv4 neighbor information.";
             list neighbor {
               key "ipv4-address";
               description
                 "A RIPv2 neighbor.";

               leaf ipv4-address {
                 type inet:ipv4-address;
                 description
                   "IP address that a RIP neighbor is using as its
                    source address.";
               }
               leaf last-update {
                 type yang:date-and-time;
                 description
                   "The time when the most recent RIP update was
                    received from this neighbor.";
               }
               leaf bad-packets-rcvd {
                 type yang:counter32;
                 description



Liu, et al.               Expires July 20, 2017                [Page 32]


Internet-Draft                  YANG RIP                    January 2017


                   "The number of RIP invalid packets received from
                    this neighbor 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 received from this neighbor,
                    in valid RIP packets, which were ignored for any
                    reason (e.g. unknown address family, or invalid
                    metric).";
               }
             } // neighbor
           } // neighbors
           container routes {
             description
               "IPv4 route information.";
             list route {
               key "ipv4-prefix";
               description
                 "A RIPv2 IPv4 route.";

               leaf ipv4-prefix {
                 type inet:ipv4-prefix;
                 description
                   "IP address (in the form A.B.C.D) and prefix length,
                    separated by the slash (/) character. The range of
                    values for the prefix-length is 0 to 32.";
               }
               leaf next-hop {
                 type inet:ipv4-address;
                 description
                   "Next hop IPv4 address.";
               }
               leaf interface {
                 type if:interface-ref;
                 description
                   "The interface that the route uses.";
               }
               uses route-attributes;
             } // route
           } // routes
         } // ipv4
         container ipv6 {
           when "derived-from-or-self(../../rt:type, 'rip:ripng')" {
             description
               "IPv6 address family is supported by RIPng.";



Liu, et al.               Expires July 20, 2017                [Page 33]


Internet-Draft                  YANG RIP                    January 2017


           }
           description
             "IPv6 address family information.";
           container neighbors {
             description
               "IPv6 neighbor information.";
             list neighbor {
               key "ipv6-address";
               description
                 "A RIPng neighbor.";

               leaf ipv6-address {
                 type inet:ipv6-address;
                 description
                   "IP address that a RIP neighbor is using as its
                    source address.";
               }
               leaf last-update {
                 type yang:date-and-time;
                 description
                   "The time when the most recent RIP update was
                    received from this neighbor.";
               }
               leaf bad-packets-rcvd {
                 type yang:counter32;
                 description
                   "The number of RIP invalid packets received from
                    this neighbor 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 received from this neighbor,
                    in valid RIP packets, which were ignored for any
                    reason (e.g. unknown address family, or invalid
                    metric).";
               }
             } // neighbor
           } // neighbors
           container routes {
             description
               "IPv6 route information.";
             list route {
               key "ipv6-prefix";
               description
                 "A RIPng IPv6 route.";



Liu, et al.               Expires July 20, 2017                [Page 34]


Internet-Draft                  YANG RIP                    January 2017


               leaf ipv6-prefix {
                 type inet:ipv6-prefix;
                 description
                   "IP address (in the canonical format defined in
                    RFC5952) and prefix length, separated by the slash
                    (/) character. The range of values for the
                    prefix-length is 0 to 128.";
               }
               leaf next-hop {
                 type inet:ipv6-address;
                 description
                   "Next hop IPv6 address.";
               }
               leaf interface {
                 type if:interface-ref;
                 description
                   "The interface that the route uses.";
               }
               uses route-attributes;
             } // route
           } // routes
         } // ipv6

         container statistics {
           if-feature global-statistics;
           description
             "Global 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 requests-rcvd {
             type yang:counter32;
             description
               "The number of requests received by RIP.";
           }
           leaf requests-sent {
             type yang:counter32;
             description
               "The number of requests sent by RIP.";
           }
           leaf responses-rcvd {



Liu, et al.               Expires July 20, 2017                [Page 35]


Internet-Draft                  YANG RIP                    January 2017


             type yang:counter32;
             description
               "The number of responses received by RIP.";
           }
           leaf responses-sent {
             type yang:counter32;
             description
               "The number of responses sent by RIP.";
           }
         }
       } // rip
     } // augment

     /*
      * RPCs
      */

     rpc clear-rip-route {
       description
         "Clears RIP routes from the IP routing table and routes
          redistributed into the RIP protocol for the specified RIP
          instance or for all RIP instances in the current context.";

       input {
         leaf rip-instance {
           type leafref {
             path "/rt:routing/rt:control-plane-protocols/"
               + "rt:control-plane-protocol/rt:name";
           }
           description
             "Instance name identifying a specific RIP instance.
              This leaf is optional for the rpc.
              If it is specified, the rpc will clear all routes in the
              specified RIP instance;
              if it is not specified, the rpc will clear all routes in
              all RIP instances.";
         }
       }
     } // rcp clear-rip-route
   }
   <CODE ENDS>










Liu, et al.               Expires July 20, 2017                [Page 36]


Internet-Draft                  YANG RIP                    January 2017


5.  IANA Considerations

   RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
   actual RFC number (and remove this note).

   This document registers the following namespace URIs in the IETF XML
   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
   namespace:    urn:ietf:params:xml:ns:yang:ietf-rip
   prefix:       rip
   reference:    RFC XXXX
   --------------------------------------------------------------------

6.  Security Considerations

   The configuration, state, and action data defined in this document
   are designed to be accessed via a management protocol with a secure
   transport layer, such as NETCONF [RFC6241].  The NETCONF access
   control model [RFC6536] provides the means to restrict access for
   particular NETCONF users to a preconfigured subset of all available
   NETCONF protocol operations and content.

   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:

   /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/
   rip:rip

   Unauthorized access to any node of these can adversely affect the
   routing subsystem of both the local device and the network.  This may




Liu, et al.               Expires July 20, 2017                [Page 37]


Internet-Draft                  YANG RIP                    January 2017


   lead to network malfunctions, delivery of packets to inappropriate
   destinations, and other problems.

   This data model also defines a RPC "clear-rip-route", which may
   affect the routing subsystem in the same way as described above.

7.  References

7.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <http://www.rfc-editor.org/info/rfc2119>.

   [RFC2453]  Malkin, G., "RIP Version 2", STD 56, RFC 2453,
              DOI 10.17487/RFC2453, November 1998,
              <http://www.rfc-editor.org/info/rfc2453>.

   [RFC2080]  Malkin, G. and R. Minnear, "RIPng for IPv6", RFC 2080,
              DOI 10.17487/RFC2080, January 1997,
              <http://www.rfc-editor.org/info/rfc2080>.

   [RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
              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>.




Liu, et al.               Expires July 20, 2017                [Page 38]


Internet-Draft                  YANG RIP                    January 2017


   [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.




Liu, et al.               Expires July 20, 2017                [Page 39]


Internet-Draft                  YANG RIP                    January 2017


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

































Liu, et al.               Expires July 20, 2017                [Page 40]


Internet-Draft                  YANG RIP                    January 2017


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",



Liu, et al.               Expires July 20, 2017                [Page 41]


Internet-Draft                  YANG RIP                    January 2017


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



Liu, et al.               Expires July 20, 2017                [Page 42]


Internet-Draft                  YANG RIP                    January 2017


         ]
       },
       "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",



Liu, et al.               Expires July 20, 2017                [Page 43]


Internet-Draft                  YANG RIP                    January 2017


                       "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

   Xufeng Liu
   Jabil
   8281 Greensboro Drive, Suite 200
   McLean  VA 22102
   USA

   EMail: Xufeng_Liu@jabil.com


   Prateek Sarda
   Ericsson
   Fern Icon, Survey No 28 and 36/5, Doddanakundi Village
   Bangalore  Karnataka 560037
   India

   EMail: prateek.sarda@ericsson.com


   Vikram Choudhary
   Huawei Technologies
   Divyashree Techno Park, Whitefield
   Bangalore  Karnataka 560037
   India

   EMail: vikram.choudhary@huawei.com



Liu, et al.               Expires July 20, 2017                [Page 44]


Html markup produced by rfcmarkup 1.121, available from https://tools.ietf.org/tools/rfcmarkup/