IS-IS Working Group                                         S. Litkowski
Internet-Draft                                                    Orange
Intended status: Standards Track                                D. Yeung
Expires: April 29, May 7, 2017                                         Arrcus, Inc
                                                               A. Lindem
                                                           Cisco Systems
                                                                J. Zhang
                                                        Juniper Networks
                                                               L. Lhotka
                                                                  CZ.NIC
                                                        October 26,
                                                       November 03, 2016

                   YANG Data Model for IS-IS protocol
                    draft-ietf-isis-yang-isis-cfg-13
                    draft-ietf-isis-yang-isis-cfg-14

Abstract

   This document defines a YANG data model that can be used to configure
   and manage IS-IS protocol on network elements.  It also defines an
   extension module for IS-IS segment routing configuration and
   operation.

Requirements Language

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

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 April 29, May 7, 2017.

Copyright Notice

   Copyright (c) 2016 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.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.1.  Tree diagram  . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Design of the Data Model  . . . . . . . . . . . . . . . . . .   4   3
     2.1.  IS-IS Configuration . . . . . . . . . . . . . . . . . . .  10
     2.2.  Multitopology Parameters  . . . . . . . . . . . . . . . .  10
     2.3.  Per-Level Parameters  . . . . . . . . . . . . . . . . . .  11  10
     2.4.  Per-Interface Parameters  . . . . . . . . . . . . . . . .  12
     2.5.  Authentication Parameters . . . . . . . . . . . . . . . .  16
     2.6.  IGP/LDP synchronization . . . . . . . . . . . . . . . . .  16
     2.7.  ISO parameters  . . . . . . . . . . . . . . . . . . . . .  16
     2.8.  IP FRR  . . . . . . . . . . . . . . . . . . . . . . . . .  17  16
     2.9.  Operational State . . . . . . . . . . . . . . . . . . . .  17
   3.  RPC Operations  . . . . . . . . . . . . . . . . . . . . . . .  18  17
   4.  Notifications . . . . . . . . . . . . . . . . . . . . . . . .  18
   5.  Segment Routing . . . . . . . . . . . . . . . . . . . . . . .  22
     5.1.  Segment Routing activation  . . . . . . . . . . . . . . .  25
     5.2.  Advertising mapping server policy . . . . . . . . . . . .  25
     5.3.  IP Fast reroute . . . . . . . . . . . . . . . . . . . . .  25
   6.  Interaction with Other YANG Modules . . . . . . . . . . . . .  25
   7.  22
   6.  IS-IS YANG Module . . . . . . . . . . . . . . . . . . . . . .  26
   8.  IS-IS Segment Routing YANG Module . . . . . . . . . . . . . . 100
   9.  22
   7.  Security Considerations . . . . . . . . . . . . . . . . . . . 115
   10.  97
   8.  Contributors  . . . . . . . . . . . . . . . . . . . . . . . . 116
   11.  98
   9.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . 116
   12.  98
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 116
   13.  98
   11. Change log for ietf-isis-sr ietf-isis YANG module  . . . . . . . . . . . 117
     13.1.  From version -12 to version -13  . . . . . . . . . . . . 117
     13.2.  From version -09 to version -11  . . . . . . . . . . . . 117
     13.3.  From version -08 to version -09  . . . . . . . . . . . . 117
     13.4.  99
     11.1.  From version -07 -13 to version -08  . . . . -14  . . . . . . . . 117
   14. Change log for ietf-isis YANG module  . . . . . . . . . . . . 117
     14.1.  99
     11.2.  From version -12 to version -13  . . . . . . . . . . . . 117
     14.2.  99
     11.3.  From version -09 to version -12  . . . . . . . . . . . . 117
     14.3.  99
     11.4.  From version -08 to version -09  . . . . . . . . . . . . 117
     14.4.  99
     11.5.  From version -07 to version -08  . . . . . . . . . . . . 118
     14.5.  99
     11.6.  From version -05 to version -07  . . . . . . . . . . . . 118
     14.6. 100
     11.7.  From version -03 to version -05  . . . . . . . . . . . . 118
     14.7. 100
     11.8.  From version -02 to version -03  . . . . . . . . . . . . 118
     14.8. 100
     11.9.  From version -01 to version -02  . . . . . . . . . . . . 119
     14.9. 100
     11.10. From version -00 to version -01  . . . . . . . . . . . . 119
   15. 101

   12. Normative References  . . . . . . . . . . . . . . . . . . . . 120 101
   Appendix A.  Example of IS-IS configuration in XML  . . . . . . . 121 103
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . . 123 105

1.  Introduction

   This document defines a YANG data model for IS-IS routing protocol.

   The data model covers configuration of an IS-IS routing protocol
   instance as well as operational states.

1.1.  Tree diagram

   A simplified graphical representation of the data model is presented
   in Section 2.

   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" state data (read-only).

   o  Symbols after data node names: "?" means an optional node and "*"
      denotes a "list" or "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.

2.  Design of the Data Model

   The IS-IS YANG module is divided in two main "isis" containers that
   are augmenting the "control-plane-protocol" lists in ietf-routing
   module with specific IS-IS parameters.

   One container contains the writable parameters, while the other
   contains the operational states.

   The figure below describes the overall structure of the isis YANG
   module:

module: ietf-isis
augment /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route:
   +--ro metric?       uint32
   +--ro tag*          uint64
   +--ro route-type?   enumeration
augment /if:interfaces/if:interface:
   +--rw clns-mtu?   uint16
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol
:
   +--rw isis
      +--rw enable?                   boolean {admin-control}?
      +--rw level-type?               level
      +--rw system-id?                system-id
      +--rw maximum-area-addresses?   uint8 {maximum-area-addresses}?
      +--rw area-address*             area-address
      +--rw mpls
      |  +--rw ipv4-router-id?   inet:ipv4-address {ipv4-router-id}?
      |  +--rw ipv6-router-id?   inet:ipv6-address {ipv6-router-id}?
      |  +--rw igp-ldp-sync {igp-ldp-sync}?
      +--rw reference-bandwidth?      uint32 {reference-bandwidth}?
      +--rw lsp-mtu?                  uint16
      +--rw lsp-lifetime?             uint16
      +--rw lsp-refresh?              uint16 {lsp-refresh}?
      +--rw graceful-restart {graceful-restart}?
      |  +--rw enable?   boolean
      +--rw nsr {nsr}?
      |  +--rw enable?   boolean
      +--rw node-tags {node-tag}?
      |  +--rw node-tag* [tag]
      |        ...
      +--rw authentication
      |  +--rw (authentication-type)?
      |  |     ...
      |  +--rw level-1
      |  |     ...
      |  +--rw level-2
      |        ...
      +--rw metric-type
      |  +--rw value?     enumeration
      |  +--rw level-1
      |  |     ...
      |  +--rw level-2
      |        ...
      +--rw default-metric
      |  +--rw value?     wide-metric
      |  +--rw level-1
      |  |     ...
      |  +--rw level-2
      |        ...
      +--rw afs {nlpid-control}?
      |  +--rw af* [af]
      |        ...
      +--rw preference
      |  +--rw (granularity)?
      |        ...
      +--rw overload
      |  +--rw status?   boolean
      +--rw overload-max-metric {overload-max-metric}?
      |  +--rw timeout?   uint16
      +--rw fast-reroute {fast-reroute}?
      |  +--rw lfa {lfa}?
      +--rw topologies {multi-topology}?
      |  +--rw topology* [name]
      |        ...
      +--rw interfaces
         +--rw interface* [name]
               ...
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol:
   +--ro isis
      +--ro enable?                   boolean {admin-control}?
      +--ro level-type?               level
      +--ro system-id?                system-id
      +--ro maximum-area-addresses?   uint8 {maximum-area-addresses}?
      +--ro area-address*             area-address
      +--ro mpls
      |  +--ro ipv4-router-id?   inet:ipv4-address {ipv4-router-id}?
      |  +--ro ipv6-router-id?   inet:ipv6-address {ipv6-router-id}?
      |  +--ro igp-ldp-sync {igp-ldp-sync}?
      +--ro reference-bandwidth?      uint32 {reference-bandwidth}?
      +--ro lsp-mtu?                  uint16
      +--ro lsp-lifetime?             uint16
      +--ro lsp-refresh?              uint16 {lsp-refresh}?
      +--ro graceful-restart {graceful-restart}?
      |  +--ro enable?   boolean
      +--ro nsr {nsr}?
      |  +--ro enable?   boolean
      +--ro node-tags {node-tag}?
      |  +--ro node-tag* [tag]
      |        ...
      +--ro authentication
      |  +--ro (authentication-type)?
      |  |     ...
      |  +--ro level-1
      |  |     ...
      |  +--ro level-2
      |        ...
      +--ro metric-type
      |  +--ro value?     enumeration
      |  +--ro level-1
      |  |     ...
      |  +--ro level-2
      |        ...
      +--ro default-metric
      |  +--ro value?     wide-metric
      |  +--ro level-1
      |  |     ...
      |  +--ro level-2
      |        ...
      +--ro afs {nlpid-control}?
      |  +--ro af* [af]
      |        ...
      +--ro preference
      |  +--ro (granularity)?
      |        ...
      +--ro overload
      |  +--ro status?   boolean
      +--ro overload-max-metric {overload-max-metric}?
      |  +--ro timeout?   uint16
      +--ro fast-reroute {fast-reroute}?
      |  +--ro lfa {lfa}?
      |  +--ro protected-routes
      |  |     ...
      |  +--ro nonprotected-routes
      |  |     ...
      |  +--ro protection-statistics* [frr-protection-method]
      |        ...
      +--ro topologies* [name]
      |  +--ro name          leafref
      |  +--ro fast-route {fast-reroute}?
      |        ...
      +--ro system-counters
      |  +--ro level* [level]
      |        ...
      +--ro interfaces
      |  +--ro interface* [interface]
      |        ...
      +--ro spf-log
      |  +--ro event* [id]
      |        ...
      +--ro lsp-log
      |  +--ro event* [id]
      |        ...
      +--ro database
      |  +--ro level-db* [level]
      |        ...
      +--ro hostnames
         +--ro hostname* [system-id]
               ...
rpcs:
   +---x clear-adjacency
   |  +--ro input
   |     +--ro routing-protocol-instance-name    instance-state-ref
   |     +--ro level?                            level
   |     +--ro interface?                        string
   +---x clear-database
      +--ro input
         +--ro routing-protocol-instance-name    instance-state-ref
         +--ro level?                            level
notifications:
   +---n database-overload
   |  +--ro instance-name?    string
   |  +--ro instance-level?   level
   |  +--ro overload?         enumeration
   +---n lsp-too-large
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro pdu-size?              uint32
   |  +--ro lsp-id?                lsp-id
   +---n corrupted-lsp-detected
   |  +--ro instance-name?    string
   |  +--ro instance-level?   level
   |  +--ro lsp-id?           lsp-id
   +---n attempt-to-exceed-max-sequence
   |  +--ro instance-name?    string
   |  +--ro instance-level?   level
   |  +--ro lsp-id?           lsp-id
   +---n id-len-mismatch
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro pdu-field-len?         uint8
   |  +--ro raw-pdu?               binary
   +---n max-area-addresses-mismatch
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro max-area-addresses?    uint8
   |  +--ro raw-pdu?               binary
   +---n own-lsp-purge
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro lsp-id?                lsp-id
   +---n sequence-number-skipped
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro lsp-id?                lsp-id
   +---n authentication-type-failure
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro raw-pdu?               binary
   +---n authentication-failure
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro raw-pdu?               binary
   +---n version-skew
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro protocol-version?      uint8
   |  +--ro raw-pdu?               binary
   +---n area-mismatch
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro raw-pdu?               binary
   +---n rejected-adjacency
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro raw-pdu?               binary
   |  +--ro reason?                string
   +---n protocols-supported-mismatch
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro raw-pdu?               binary
   |  +--ro protocols*             uint8
   +---n lsp-error-detected
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro lsp-id?                lsp-id
   |  +--ro raw-pdu?               binary
   |  +--ro error-offset?          uint32
   |  +--ro tlv-type?              uint8
   +---n adjacency-change
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro neighbor?              string
   |  +--ro neighbor-system-id?    system-id
   |  +--ro level?                 level
   |  +--ro state?                 enumeration
   |  +--ro reason?                string
   +---n lsp-received
   |  +--ro instance-name?         string
   |  +--ro instance-level?        level
   |  +--ro interface-name?        string
   |  +--ro interface-level?       level
   |  +--ro extended-circuit-id?   extended-circuit-id
   |  +--ro lsp-id?                lsp-id
   |  +--ro sequence?              uint32
   |  +--ro received-timestamp?    yang:timestamp
   |  +--ro neighbor-system-id?    system-id
   +---n lsp-generation
      +--ro instance-name?    string
      +--ro instance-level?   level
      +--ro lsp-id?           lsp-id
      +--ro sequence?         uint32
      +--ro send-timestamp?   yang:timestamp

2.1.  IS-IS Configuration

   The IS-IS configuration container is divided in:

   o  Global parameters.

   o  Per interface configuration (see Section 2.4).

   Additional modules may be created this to support any additional
   parameters.  These modules should augment the ietf-isis module.

   The model implements features, so some of the configuration statement
   becomes optional.  As an example, the ability to control the
   administrative state of a particular IS-IS instance is optional.  By
   advertising the feature "admin-control", a device communicates to the
   client that it supports the ability to shutdown a particular IS-IS
   instance.

   The global configuration contains usual IS-IS parameters such as lsp-
   mtu, lsp-lifetime, lsp-refresh, default-metric ...

2.2.  Multitopology Parameters

   The model supports multitopology (MT) IS-IS as defined in [RFC5120].

   The "topologies" container is used to enable support of MT
   extensions.

   The "name" used in the topology list should refer to an existing RIB
   of the device.

   Some specific parameters could be defined on a per topology basis
   both at global level and at interface level: for example, an
   interface metric can be defined per topology.

   Multiple address families (like IPv4 or IPv6) can also be activated
   within the default topology.  This can be achieved using the "afs"
   container (requiring "nlpid-control" feature to be advertised).

2.3.  Per-Level Parameters

   Some parameters support a per level configuration.  In this case, the
   parameter is modeled as a container with three configuration
   locations:

   o  top level container: corresponds to level-1-2, so the
      configuration applies to both levels.

   o  level-1 container: corresponds to level-1 specific parameters.

   o  level-2 container: corresponds to level-2 specific parameters.

               +--rw priority
               |  +--rw value?     uint8
               |  +--rw level-1
               |  |  +--rw value?   uint8
               |  +--rw level-2
               |     +--rw value?   uint8

   Example:

           <priority>
               <value>250</value>
               <level-1>
                   <value>100</value>
               </level-1>
               <level-2>
                   <value>200</value>
               </level-2>
           </priority>

   An implementation SHOULD prefer a level specific parameter over a
   level-all parameter.  As example, if the priority is 100 for the
   level-1, 200 for the level-2 and 250 for the top level configuration,
   the implementation should use 100 for the level-1 and 200 for the
   level-2.

   Some parameters like "overload bit" and "route preference" are not
   modeled to support a per level configuration.  If an implementation
   supports per level configuration for such parameter, this
   implementation SHOULD augment the current model by adding both
   level-1 and level-2 containers and SHOULD reuse existing
   configuration groupings.

   Example of augmentation:

   augment "/rt:routing/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:overload" {
       when "rt:type = 'isis:isis'" {
         description
         "This augment IS-IS routing protocol when used";
       }
       description
        "This augments IS-IS overload configuration
         with per level configuration.";

       container level-1 {
           uses isis:overload-global-cfg;
           description
            "Level 1 configuration.";
       }
       container level-2 {
           uses isis:overload-global-cfg;
           description
            "Level 2 configuration.";
       }

   }

   If an implementation does not support per level configuration for a
   parameter modeled with per level configuration, the implementation
   SHOULD advertise a deviation to announce the non support of the
   level-1 and level-2 containers.

   Finally, if an implementation supports per level configuration but
   does not support the level-1-2 configuration, it SHOULD also
   advertise a deviation.

2.4.  Per-Interface Parameters

   The per-interface section of the IS-IS instance describes the
   interface specific parameters.

   The interface is a reference to an interface defined in the "ietf-
   interfaces" YANG model.

   Each interface has some interface-specific parameters that may have a
   different per level value as described in previous section.  An
   interface-specific parameter always override an IS-IS global
   parameter.

   Some parameters like hello-padding are defined as containers to allow
   easy extension by vendor specific modules.

        +--rw interfaces
           +--rw interface* [name]
              +--rw name                       if:interface-ref
              +--rw level-type?                level
              +--rw lsp-pacing-interval?       uint16
              +--rw lsp-retransmit-interval?   uint16
              +--rw passive?                   boolean
              +--rw csnp-interval?             uint16
              +--rw hello-padding
              |  +--rw enable?   boolean
              +--rw mesh-group-enable?         mesh-group-state
              +--rw mesh-group?                uint8
              +--rw interface-type?            interface-type
              +--rw enable?                    boolean {admin-control}?
              +--rw tag*                       uint32 {prefix-tag}?
              +--rw tag64*                     uint64 {prefix-tag64}?
              +--rw node-flag?                 boolean {node-flag}?
              +--rw hello-authentication
              |  +--rw (authentication-type)?
              |  |  +--:(key-chain) {key-chain}?
              |  |  |  +--rw key-chain?      key-chain:key-chain-ref
              |  |  +--:(password)
              |  |     +--rw key?            string
              |  |     +--rw (algorithm)?
              |  |        +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}?
              |  |        |  +--rw hmac-sha1-12?   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
              |  +--rw level-1
              |  |  +--rw (authentication-type)?
              |  |     +--:(key-chain) {key-chain}?
              |  |     |  +--rw key-chain?      key-chain:key-chain-ref
              |  |     +--:(password)
              |  |        +--rw key?            string
              |  |        +--rw (algorithm)?
              |  |           +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}?
              |  |           |  +--rw hmac-sha1-12?   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
              |  +--rw level-2
              |     +--rw (authentication-type)?
              |        +--:(key-chain) {key-chain}?
              |        |  +--rw key-chain?      key-chain:key-chain-ref
              |        +--:(password)
              |           +--rw key?            string
              |           +--rw (algorithm)?
              |              +--:(hmac-sha-1-12) {crypto-hmac-sha-1-12}?
              |              |  +--rw hmac-sha1-12?   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
              +--rw hello-interval
              |  +--rw value?     uint16
              |  +--rw level-1
              |  |  +--rw value?   uint16
              |  +--rw level-2
              |     +--rw value?   uint16
              +--rw hello-multiplier
              |  +--rw value?     uint16
              |  +--rw level-1
              |  |  +--rw value?   uint16
              |  +--rw level-2
              |     +--rw value?   uint16
              +--rw priority
              |  +--rw value?     uint8
              |  +--rw level-1
              |  |  +--rw value?   uint8
              |  +--rw level-2
              |     +--rw value?   uint8
              +--rw metric
              |  +--rw value?     wide-metric
              |  +--rw level-1
              |  |  +--rw value?   wide-metric
              |  +--rw level-2
              |     +--rw value?   wide-metric
              +--rw bfd {bfd}?
              |  +--rw enable?   boolean
              +--rw afs {nlpid-control}?
              |  +--rw af* [af]
              |     +--rw af    identityref
              +--rw mpls
              |  +--rw igp-ldp-sync {igp-ldp-sync}?
              |     +--rw enable?   boolean
              +--rw fast-reroute {fast-reroute}?
              |  +--rw lfa {lfa}?
              |     +--rw candidate-disabled?   boolean
              |     +--rw enable?               boolean
              |     +--rw remote-lfa {remote-lfa}?
              |     |  +--rw enable?   boolean
              |     +--rw level-1
              |     |  +--rw candidate-disabled?   boolean
              |     |  +--rw enable?               boolean
              |     |  +--rw remote-lfa {remote-lfa}?
              |     |     +--rw enable?   boolean
              |     +--rw level-2
              |        +--rw candidate-disabled?   boolean
              |        +--rw enable?               boolean
              |        +--rw remote-lfa {remote-lfa}?
              |           +--rw enable?   boolean
              +--rw topologies {multi-topology}?
                 +--rw topology* [name]
                    +--rw name            leafref
                    +--rw fast-reroute {fast-reroute}?
                    |  +--rw lfa {lfa}?
                    |     +--rw candidate-disabled?   boolean
                    |     +--rw enable?               boolean
                    |     +--rw remote-lfa {remote-lfa}?
                    |     |  +--rw enable?   boolean
                    |     +--rw level-1
                    |     |  +--rw candidate-disabled?   boolean
                    |     |  +--rw enable?               boolean
                    |     |  +--rw remote-lfa {remote-lfa}?
                    |     |     +--rw enable?   boolean
                    |     +--rw level-2
                    |        +--rw candidate-disabled?   boolean
                    |        +--rw enable?               boolean
                    |        +--rw remote-lfa {remote-lfa}?
                    |           +--rw enable?   boolean
                    +--rw metric
                       +--rw value?     wide-metric
                       +--rw level-1
                       |  +--rw value?   wide-metric
                       +--rw level-2
                          +--rw value?   wide-metric

2.5.  Authentication Parameters

   The module enables authentication configuration through the IETF key-
   chain module ([I-D.ietf-rtgwg-yang-key-chain]).  The IS-IS module
   imports the "ietf-key-chain" module and reuses some groupings to
   allow global and per interface configuration of authentication.  If a
   global authentication is configured, an implementation SHOULD
   authenticate PSNP, CSNP and LSPs with the authentication parameters
   supplied.  The authentication of hello PDUs can be activated on a per
   interface basis.

2.6.  IGP/LDP synchronization

   [RFC5443] defines a mechanism where IGP needs to be synchronized with
   LDP.  An "igp-ldp-sync" feature has been defined in the model to
   support this mechanism.  The "mpls/igp-ldp-sync" container under
   "interface" allows activation of the mechanism on a per interface
   basis.  The "mpls/igp-ldp-sync" container in the global configuration
   is empty on purpose and is not required for the activation.  The goal
   of this empty container is to allow easy augmentation with additional
   parameters like timers for example.

2.7.  ISO parameters

   As IS-IS protocol is based on ISO protocol suite, some ISO parameters
   may be required.

   This module augments interface configuration model to support ISO
   configuration parameters.

   The clns-mtu can be defined under the interface.

2.8.  IP FRR

   This YANG model supports LFA ([RFC5286]) and remote LFA ([RFC7490])
   as IP FRR techniques.  The "fast-reroute" container may be augmented
   by other models to support other IPFRR flavors (MRT, TILFA ...).

   The current version of the model supports activation of LFA and
   remote LFA at interface only.  The global "lfa" container is present
   but kept empty to allow augmentation with vendor specific properties
   like policies.

   Remote LFA is considered as a child of LFA.  Remote LFA cannot be
   enabled if LFA is not enabled.

   The "candidate-disabled" allows to mark an interface to not be used
   as a backup.

2.9.  Operational State

   A "isis" container provides operational states for IS-IS.  This
   container is divided in multiple components:

   o  system-counters : provides statistical informations about the
      global system.

   o  interface : provides configuration state information for each
      interface.

   o  adjacencies: provides state information about current IS-IS
      adjacencies.

   o  spf-log: provides information about SPF events on the node.

   o  lsp-log: provides information about LSP events on the node
      (reception of an LSP or modification of local LSP).

   o  database: provides details on current LSDB.

   o  hostnames: provides information about system-id to hostname
      mappings.

   o  fast-reroute: provides information about IP FRR.

3.  RPC Operations

   The "ietf-isis" module defines two RPC operations:

   o  clear-isis-database: reset the content of a particular IS-IS
      database and restart database synchronization with the neighbors.

   o  clear-isis-adjacency: restart a particular set of IS-IS
      adjacencies.

   rpcs:
      +---x clear-adjacency
      |  +--ro input
      |     +--ro routing-protocol-instance-name    instance-state-ref
      |     +--ro level?                            level
      |     +--ro interface?                        string
      +---x clear-database
         +--ro input
            +--ro routing-protocol-instance-name    instance-state-ref
            +--ro level?                            level

4.  Notifications

   The "ietf-isis" module introduces some notifications :

      database-overload : raised when overload condition is changed.

      lsp-too-large : raised when the system tries to propagate a too
      large PDU.

      corrupted-lsp-detected : raised when the system find that an LSP
      that was stored in memory has become corrupted.

      attempt-to-exceed-max-sequence : This notification is sent when
      the system wraps the 32-bit sequence counter of an LSP.

      id-len-mismatch : This notification is sent when we receive a PDU
      with a different value for the System ID length.

      max-area-addresses-mismatch : This notification is sent when we
      receive a PDU with a different value for the Maximum Area
      Addresses.

      own-lsp-purge : This notification is sent when the system receives
      a PDU with its own system ID and zero age.

      sequence-number-skipped : This notification is sent when the
      system receives a PDU with its own system ID and different
      contents.  The system has to reissue the LSP with a higher
      sequence number.

      authentication-type-failure : This notification is sent when the
      system receives a PDU with the wrong authentication type field.

      authentication-failure : This notification is sent when the system
      receives a PDU with the wrong authentication information.

      version-skew : This notification is sent when the system receives
      a PDU with a different protocol version number.

      area-mismatch : This notification is sent when the system receives
      a Hello PDU from an IS that does not share any area address.

      rejected-adjacency : This notification is sent when the system
      receives a Hello PDU from an IS but does not establish an
      adjacency for some reason.

      protocols-supported-mismatch : This notification is sent when the
      system receives a non pseudonode LSP that has no matching protocol
      supported.

      lsp-error-detected : This notification is sent when the system
      receives a LSP with a parse error.

      adjacency-change : This notification is sent when an IS-IS
      adjacency moves to Up state or to Down state.

      lsp-received : This notification is sent when a LSP is received.

      lsp-generation : This notification is sent when a LSP is
      regenerated.

   notifications:
      +---n database-overload
      |  +--ro instance-name?    string
      |  +--ro instance-level?   level
      |  +--ro overload?         enumeration
      +---n lsp-too-large
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro pdu-size?              uint32
      |  +--ro lsp-id?                lsp-id
      +---n corrupted-lsp-detected
      |  +--ro instance-name?    string
      |  +--ro instance-level?   level
      |  +--ro lsp-id?           lsp-id
      +---n attempt-to-exceed-max-sequence
      |  +--ro instance-name?    string
      |  +--ro instance-level?   level
      |  +--ro lsp-id?           lsp-id
      +---n id-len-mismatch
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro pdu-field-len?         uint8
      |  +--ro raw-pdu?               binary
      +---n max-area-addresses-mismatch
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro max-area-addresses?    uint8
      |  +--ro raw-pdu?               binary
      +---n own-lsp-purge
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro lsp-id?                lsp-id
      +---n sequence-number-skipped
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro lsp-id?                lsp-id
      +---n authentication-type-failure
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro raw-pdu?               binary
      +---n authentication-failure
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro raw-pdu?               binary
      +---n version-skew
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro protocol-version?      uint8
      |  +--ro raw-pdu?               binary
      +---n area-mismatch
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro raw-pdu?               binary
      +---n rejected-adjacency
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro raw-pdu?               binary
      |  +--ro reason?                string
      +---n protocols-supported-mismatch
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro raw-pdu?               binary
      |  +--ro protocols*             uint8
      +---n lsp-error-detected
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro lsp-id?                lsp-id
      |  +--ro raw-pdu?               binary
      |  +--ro error-offset?          uint32
      |  +--ro tlv-type?              uint8
      +---n adjacency-change
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro neighbor?              string
      |  +--ro neighbor-system-id?    system-id
      |  +--ro level?                 level
      |  +--ro state?                 enumeration
      |  +--ro reason?                string
      +---n lsp-received
      |  +--ro instance-name?         string
      |  +--ro instance-level?        level
      |  +--ro interface-name?        string
      |  +--ro interface-level?       level
      |  +--ro extended-circuit-id?   extended-circuit-id
      |  +--ro lsp-id?                lsp-id
      |  +--ro sequence?              uint32
      |  +--ro received-timestamp?    yang:timestamp
      |  +--ro neighbor-system-id?    system-id
      +---n lsp-generation
         +--ro instance-name?    string
         +--ro instance-level?   level
         +--ro lsp-id?           lsp-id
         +--ro sequence?         uint32
         +--ro send-timestamp?   yang:timestamp

5.  Segment Routing

   The IS-IS SR  Interaction with Other YANG Modules

   The "isis" configuration container augments the "/rt:routing/
   rt:control-plane-protocols/control-plane-protocol" container of the
   ietf-routing [I-D.ietf-netmod-routing-cfg] module is augmenting by defining IS-IS module for both
   configuration and operational states.
   specific parameters.

   The IS-IS SR YANG module requires the base segment routing "isis" module
   ([I-D.ietf-spring-sr-yang]) to be supported as there is a strong
   relationship between those modules.

   The figure below describe the overall structure of the isis-sr YANG
   module:

module: ietf-isis-sr
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol
/isis:isis:
   +--rw segment-routing
   |  +--rw enabled?    boolean
   |  +--rw bindings
   |     +--rw advertise
   |     |  +--rw policies*   string
   |     +--rw receive?     boolean
   +--rw protocol-srgb {sr:protocol-srgb}?
      +--rw srgb* [lower-bound upper-bound]
         +--rw lower-bound    uint32
         +--rw upper-bound    uint32

augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol
/isis:isis/isis:interfaces/isis:interface:
   +--rw segment-routing
      +--rw adjacency-sid
         +--rw advertise-adj-group-sid* [group-id]
         |  +--rw group-id    uint32
         +--rw advertise-protection?      enumeration
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol
/isis:isis/isis:interfaces/isis:interface/isis:fast-reroute:
   +--rw ti-lfa {ti-lfa}?
      +--rw enable?   boolean
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol
/isis:isis/isis:interfaces/isis:interface/isis:fast-reroute/isis:lfa/isi
s:remote-lfa:
   +--rw use-segment-routing-path?   boolean {remote-lfa-sr}?
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis:
   +--ro segment-routing
   |  +--ro enabled?    boolean
   |  +--ro bindings
   |     +--ro advertise
   |     |  +--ro policies*   string
   |     +--ro receive?     boolean
   +--ro protocol-srgb {sr:protocol-srgb}?
      +--ro srgb* [lower-bound upper-bound]
         +--ro lower-bound    uint32
         +--ro upper-bound    uint32
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:interfaces/isis:interface:
   +--ro segment-routing
      +--ro adjacency-sid
         +--ro advertise-adj-group-sid* [group-id]
         |  +--ro group-id    uint32
         +--ro advertise-protection?      enumeration
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:interfaces/isis:interface/isis:adjacencies/isis:ad
jacency:
   +--ro adjacency-sid* [value]
      +--ro af?                     identityref
      +--ro value                   uint32
      +--ro weight?                 uint8
      +--ro protection-requested?   boolean
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:database/isis:level-db/isis:lsp/isis:extended-is-n
eighbor/isis:neighbor:
   +--ro sid-list* [value]
      +--ro flags?         bits
      +--ro weight?        uint8
      +--ro neighbor-id?   isis:system-id
      +--ro value          uint32
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:database/isis:level-db/isis:lsp/isis:mt-is-neighbo
r/isis:neighbor:
   +--ro sid-list* [value]
      +--ro flags?         bits
      +--ro weight?        uint8
      +--ro neighbor-id?   isis:system-id
      +--ro value          uint32
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:database/isis:level-db/isis:lsp/isis:extended-ipv4
-reachability/isis:prefixes:
   +--ro sid-list* [value]
      +--ro flags?       bits
      +--ro algorithm?   uint8
      +--ro value        uint32
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:database/isis:level-db/isis:lsp/isis:mt-extended-i
pv4-reachability/isis:prefixes:
   +--ro sid-list* [value]
      +--ro flags?       bits
      +--ro algorithm?   uint8
      +--ro value        uint32
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:database/isis:level-db/isis:lsp/isis:ipv6-reachabi
lity/isis:prefixes:
   +--ro sid-list* [value]
      +--ro flags?       bits
      +--ro algorithm?   uint8
      +--ro value        uint32
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:database/isis:level-db/isis:lsp/isis:mt-ipv6-reach
ability/isis:prefixes:
   +--ro sid-list* [value]
      +--ro flags?       bits
      +--ro algorithm?   uint8
      +--ro value        uint32
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-pr
otocol/isis:isis/isis:database/isis:level-db/isis:lsp:
   +--ro segment-routing-bindings* [fec range]
      +--ro fec        string
      +--ro range      uint16
      +--ro flags?     bits
      +--ro weight?    uint8
      +--ro binding
         +--ro prefix-sid
         |  +--ro sid-list* [value]
         |     +--ro flags?       bits
         |     +--ro algorithm?   uint8
         |     +--ro value        uint32
         +--ro ero-metric?                           uint32
         +--ro ero
         |  +--ro address-family?   identityref
         |  +--ro loose?            boolean
         |  +--ro address?          string
         +--ro backup-ero
         |  +--ro address-family?   identityref
         |  +--ro loose?            boolean
         |  +--ro address?          string
         +--ro unnumbered-interface-id-ero
         |  +--ro router-id?      string
         |  +--ro interface-id?   uint32
         +--ro backup-unnumbered-interface-id-ero
            +--ro router-id?      string
            +--ro interface-id?   uint32

5.1.  Segment Routing activation

   Activation of segment-routing IS-IS is done by setting the "enable"
   leaf to true.  This triggers advertisement of segment-routing
   extensions based on the configuration parameters that have been setup
   using the base segment routing module.

5.2.  Advertising mapping server policy

   The base segment routing module defines mapping server policies.  By
   default, IS-IS will not advertise nor receive any mapping server
   entry.  The IS-IS segment-routing module allows to advertise one or
   multiple mapping server policies through the "bindings/advertise/
   policies" leaf-list.  The "bindings/receive" leaf allows to enable
   the reception of mapping server entries.

5.3.  IP Fast reroute

   IS-IS SR model augments the fast-reroute container under interface.
   It brings the ability to activate TI-LFA (topology independent LFA)
   and also enhances remote LFA to use segment-routing tunneling instead
   of LDP.

6.  Interaction with Other YANG Modules

   The "isis" configuration container augments the "/rt:routing/
   rt:control-plane-protocols/control-plane-protocol" container of the
   ietf-routing [I-D.ietf-netmod-routing-cfg] module by defining IS-IS
   specific parameters.

   The "isis" module augments "/if:interfaces/if:interface" with ISO
   specific parameters.

   The "isis" operational state container augments the "/rt:routing-
   state/rt:control-plane-protocols/control-plane-protocol" container of
   the ietf-routing module by defining IS-IS specific operational
   states.

   Some IS-IS specific routes attributes are added to route objects of
   the ietf-routing module by augmenting "/rt:routing-
   state/rt:ribs/rt:rib/rt:routes/rt:route".

   The modules defined in this document use some groupings from ietf-
   keychain [I-D.ietf-rtgwg-yang-key-chain] and ietf-segment routing
   [I-D.ietf-spring-sr-yang].

7.  IS-IS YANG Module

  <CODE BEGINS> file "ietf-isis@2016-10-26.yang"

  module ietf-isis {
    namespace "urn:ietf:params:xml:ns:yang:ietf-isis";

    prefix isis;

    import ietf-routing {
              prefix "rt";
    }

    import ietf-inet-types {
      prefix inet;
    }

    import ietf-yang-types {
      prefix yang;
    }

    import ietf-interfaces {
      prefix "if";
    }

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

    organization
     "IETF ISIS Working Group";

    contact
      "WG List:  &lt;mailto:isis-wg@ietf.org&gt;

      Editor:    Stephane Litkowski
            &lt;mailto:stephane.litkowski@orange.com&gt;

          Derek Yeung
            &lt;mailto:derek@arrcus.com&gt;
          Acee Lindem
            &lt;mailto:acee@cisco.com&gt;
          Jeffrey Zhang
            &lt;mailto:zzhang@juniper.net&gt;
          Ladislav Lhotka
            &lt;mailto:llhotka@nic.cz&gt;
          Yi Yang
            &lt;mailto:yiya@cisco.com&gt;

          Dean Bogdanovic
            &lt;mailto:deanb@juniper.net&gt;
          Kiran Agrahara Sreenivasa
            &lt;mailto:kkoushik@brocade.com&gt;
          Yingzhen Qu
            &lt;mailto:yiqu@cisco.com&gt;
          Jeff Tantsura
            &lt;mailto:jeff.tantsura@ericsson.com&gt;

      ";

    description
      "The YANG module defines a generic configuration model for
      ISIS common across all of the vendor implementations.";

    revision 2016-10-26 {
      description
       "Initial revision.";
       reference "draft-ietf-isis-yang-isis-cfg-13";
   }

   /* Identities */

    identity isis {
      base rt:routing-protocol;
      description "Identity for the ISIS routing protocol.";
    }

    identity isis-adjacency-change {
      description "Identity for the ISIS routing protocol
        adjacency state.";
    }

    identity clear-isis-database {
      description "Identity for the ISIS routing protocol
        database reset action.";
    }

    identity clear-isis-adjacency {
      description "Identity for the ISIS routing protocol
        adjacency reset action.";
    }

    /* Feature definitions */

    feature bfd {
      description
       "Support of BFD for IS-IS links.";
    }
    feature key-chain {
    description
     "Support of keychain for authentication.";
    }
    feature segment-routing {
      description
       "Support of segment-routing.";
    }
    feature node-flag {
      description
       "Support of node-flag advertisement
       as prefix attribute";
    }
    feature node-tag {
      description
        "Support of node tag.";
    }
    feature igp-ldp-sync {
      description
        "Support of RFC5443.";
    }
    feature fast-reroute {
      description
        "Support of IPFRR.";
    }
    feature nsr {
      description
       "Support of
          Non Stop Routing.";
    }
    feature  lfa {
      description
        "Support of Loop Free Alternates.";
    }
    feature remote-lfa {
      description
        "Support of remote Loop Free Alternates.";
    }

    feature overload-max-metric {
      description
        "Support of overload by setting
         all links to max metric.";
    }
    feature prefix-tag {
      description
        "Add 32bit tag to prefixes";
    }
    feature prefix-tag64 {
      description
        "Add 64bit tag to prefixes";
    }
    feature reference-bandwidth {
      description
        "Use a reference bandwidth to compute metric.";
    }
    feature ipv4-router-id {
      description
       "Support of IPv4 router ID configuration under ISIS.";
    }

    feature ipv6-router-id {
      description
       "Support of IPv6 router ID configuration under ISIS.";
    }

    feature multi-topology {
      description
       "Multitopology routing support.";
    }
    feature nlpid-control {
      description
       "This feature controls the advertisement
        of support NLPID within ISIS configuration.";
    }
    feature graceful-restart {
      description
        "Graceful restart support as per RFC5306.";
    }

    feature lsp-refresh {
      description
        "Configuration of LSP refresh interval.";
    }

    feature maximum-area-addresses {
      description
        "Support of maximum-area-addresses config.";
    }

    feature admin-control {
      description
       "Control administrative state of ISIS.";

    }

    /* Type definitions */

    typedef instance-state-ref {
      type leafref {
        path "/rt:routing-state/"
        +"rt:control-plane-protocols/rt:control-plane-protocol/rt:name";
      }
      description
         "This type is used for leaves that reference state data of
          an ISIS protocol instance.";
    }

    typedef admin-state {
      type enumeration {
        enum "up" {
          description
           "Up state";
        }
        enum "down" {
          description
           "Down state";
        }
      }
      description
       "Administrative state of a component.";
    }
    typedef oper-state {
      type enumeration {
        enum "up" {
          description
           "Up state";
        }
        enum "down" {
          description
           "Down state";
        }
      }
      description
       "Operational state of a component.";
    }
    typedef circuit-id {
      type uint8;
      description
       "This type defines the circuit ID
       associated with an interface.";

    }

    typedef extended-circuit-id {
      type uint32;
      description
       "This type defines the extended circuit ID
       associated with an interface.";
    }

    typedef interface-type {
      type enumeration {
        enum broadcast {
          description "Broadcast interface type.
          Would result in DIS election.";
        }
        enum point-to-point {
          description
           "Point to point interface type.";
        }
      }
      description
       "This type defines the type of adjacency
       to be established on the interface.
       This is affecting the type of hello
       message that would be used.";

    }

    typedef level {
      type enumeration {
        enum "level-1" {
          description
           "This enum describes L1 only capability.";
        }
        enum "level-2" {
          description
           "This enum describes L2 only capability.";
        }
        enum "level-all" {
          description
           "This enum describes both levels capability.";
        }
      }
      default "level-all";
      description
       "This type defines ISIS level of an object.";

    }
    typedef level-number {
      type uint8 {
        range "1 .. 2";
      }
      description
       "This type defines a current ISIS level.";
    }

    typedef lsp-id {
      type string {
        pattern
         '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]'
               +'{4}\.[0-9][0-9]-[0-9][0-9]';
      }
      description
       "This type defines ISIS LSP ID using pattern,
        system id looks like : 0143.0438.AeF0.02-01";
    }

    typedef area-address {
      type string {
        pattern '[0-9A-Fa-f]{2}\.([0-9A-Fa-f]{4}\.){0,3}';
      }
      description
       "This type defines the area address.";
    }

    typedef snpa {
      type string {
        length "0 .. 20";
      }
      description
       "This type defines Subnetwork Point of Attachement format.";

    }

    typedef system-id {
      type string {
        pattern
         '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}';
      }
      description
       "This type defines ISIS system id using pattern,
        system id looks like : 0143.0438.AeF0";
    }

    typedef wide-metric {
      type uint32 {
        range "0 .. 16777215";
      }
      description
       "This type defines wide style format
        of ISIS metric.";
    }

    typedef std-metric {
      type uint8 {
        range "0 .. 63";
      }
      description
       "This type defines old style format
        of ISIS metric.";
    }

    typedef mesh-group-state {
      type enumeration {
        enum "meshInactive" {
          description
           "Interface is not part of a mesh group.";
        }
        enum "meshSet" {
          description
           "Interface is part of a mesh group.";
        }
        enum "meshBlocked" {
          description
           "LSPs must not be flooded over that interface.";
        }
      }
      description
       "This type describes meshgroup state of an interface";
    }

    /* Grouping definitions */

   grouping admin-control {

      leaf enable {
          if-feature admin-control;
          type boolean;
          default true;
          description
               "Control the administrative
               state.";
      }

      description
       "Grouping for admin control.";
    }

   grouping adjacency-state {
             container adjacencies {
                list adjacency {
                  leaf neighbor-systype {
                    type level;
                    description
                     "Type of neighboring system";

                  }
                  leaf neighbor-sysid {
                    type system-id;
                    description
                     "The system-id of the neighbor";

                  }
                  leaf neighbor-extended-circuit-id {
                    type extended-circuit-id;
                    description
                     "Circuit ID of the neighbor";
                  }
                  leaf neighbor-snpa {
                    type snpa;
                    description
                     "SNPA of the neighbor";
                  }
                  leaf usage {
                    type level;
                    description
                    "How is the adjacency used ?
                    On a p2p link this might be level 1 and 2,
                    but on a LAN, the usage will be level 1
                    between peers at L1 or level 2 between
                    peers at L2.";
                  }
                  leaf hold-timer {
                    type uint16;
                    description
                     "The holding time in seconds for this
                      adjacency. This value is based on
                      received hello PDUs and the elapsed
                      time since receipt.";
                  }
                  leaf neighbor-priority {
                    type uint8 {
                      range "0 .. 127";
                    }
                    description
                     "Priority of the neighboring IS for becoming
                      the DIS.";
                  }
                  leaf lastuptime {
                    type yang:timestamp;
                    description
                     "When the adjacency most recently entered
                      state 'up', measured in hundredths of a
                      second since the last reinitialization of
                      the network management subsystem.
                      The value is 0 if the adjacency has never
                      been in state 'up'.";

                  }
                  leaf state {
                    type enumeration {
                      enum "Up" {
                        description
                         "This state describes that
                          adjacency is established.";
                      }
                      enum "Down" {
                        description
                         "This state describes that
                          adjacency is NOT established.";
                      }
                      enum "Init" {
                        description
                         "This state describes that
                          adjacency is establishing.";
                      }
                      enum "Failed" {
                        description
                         "This state describes that
                          adjacency is failed.";
                      }
                    }
                    description
                     "This leaf describes the state of the
                     interface.";
                  }

                  description
                   "List of operational adjacencies.";
                }
                description
                 "This container lists the adjacencies of
                 the local node.";
              }
              description
               "Adjacency state";
   }

    grouping fast-reroute-global-state {
            container protected-routes {
              list af-stats {
                key "af prefix alternate";

                leaf af {
                  type identityref {
                    base rt:address-family;
                  }
                  description
                   "Address-family";
                }
                leaf prefix {
                  type string;
                  description
                   "Protected prefix.";
                }
                leaf alternate {
                  type string;
                  description
                   "Alternate nexthop for the prefix.";
                }
                leaf alternate-type {
                  type enumeration {
                    enum equalcost {
                      description
                       "ECMP alternate.";
                    }
                    enum lfa {
                      description
                       "LFA alternate.";
                    }
                    enum remote-lfa {
                      description
                       "Remote LFA alternate.";
                    }
                    enum tunnel {
                      description
                       "Tunnel based alternate
                       (like RSVP-TE or GRE).";
                    }
                    enum ti-lfa {
                      description
                       "TI LFA alternate.";
                    }
                    enum mrt {
                      description
                       "MRT alternate.";
                    }
                    enum other {
                      description
                       "Unknown alternate type.";
                    }
                  }
                  description
                   "Type of alternate.";
                }
                leaf best {
                  type boolean;
                  description
                   "describes if the alternate is the best one.";
                }
                leaf non-best-reason {
                  type string;
                  description
                   "Information field to describe why the alternate
                   is not best.";
                }
                leaf protection-available {
                  type bits {
                    bit nodeprotect {
                      position 0;
                      description
                      "Node protection available.";
                    }
                    bit linkprotect {
                      position 1;
                      description
                      "Link protection available.";
                    }
                    bit srlgprotect {
                      position 2;
                      description
                      "SRLG protection available.";
                    }
                    bit downstreamprotect {
                      position 3;
                      description
                      "Downstream protection available.";
                    }
                    bit other {
                      position 4;
                      description
                      "Other protection available.";
                    }
                  }
                  description
                  "Describes protection provided by the alternate.";
                }
                leaf alternate-metric1 {
                  type uint32;
                  description
                   "Metric from PLR to destination
                    through the alternate path.";
                }
                leaf alternate-metric2 {
                  type uint32;
                  description
                   "Metric from PLR to the alternate node";
                }
                leaf alternate-metric3 {
                  type uint32;
                  description
                   "Metric from alternate node to the destination";
                }

                description
                 "Per AF statistics.";
              }
              description
               "List of prefixes that are protected.";
            }

            container nonprotected-routes {
               list af-stats {
                key "af prefix";

                leaf af {
                  type identityref {
                    base rt:address-family;
                  }
                  description
                   "Address-family";
                }
                leaf prefix {
                  type string;
                  description
                   "Protected prefix.";
                }
                description
                 "Per AF statistics.";
              }
              description
               "List of prefixes that are not protected.";
            }

            list protection-statistics {
              key frr-protection-method;

              leaf frr-protection-method {
                type string;
                description
                 "Protection method used.";
              }
              list af-stats {
                key af;

                leaf af {
                  type identityref {
                    base rt:address-family;
                  }
                  description
                   "Address-family";
                }
                leaf total-routes {
                  type uint32;
                  description
                   "Total prefixes.";
                }
                leaf unprotected-routes {
                  type uint32;
                  description
                    "Total of prefixes who are
                    not protected.";
                }
                leaf protected-routes {
                  type uint32;
                  description
                    "Total of prefixes who are
                    protected.";
                }
                leaf linkprotected-routes {
                  type uint32;
                  description
                    "Total of prefixes who are
                    link protected.";
                }
                leaf nodeprotected-routes {
                  type uint32;
                  description
                    "Total of prefixes who are
                    node protected.";
                }
                description
                 "Per AF statistics.";
              }

              description
               "Global protection statistics.";
            }
            description
             "IPFRR states.";
    }

    grouping notification-instance-hdr {
      description
       "This group describes common instance specific
        data for notifications.";
      leaf instance-name {
        type string;
        description
         "Describes the name of the ISIS instance.";
      }
      leaf instance-level {
        type level;
        description
         "Describes the ISIS level of the instance.";
      }
    }

    grouping notification-interface-hdr {
      description
       "This group describes common interface specific
        data for notifications.";

      leaf interface-name {
        type string;
        description
         "Describes the name of the ISIS interface.";
      }
      leaf interface-level {
        type level;
        description
         "Describes the ISIS level of the interface.";
      }
      leaf extended-circuit-id {
        type extended-circuit-id;
        description
         "Describes the extended circuit-id of the interface.";
      }
    }

    grouping route-content {
      description
       "This group add isis-specific route properties.";
      leaf metric {
        type uint32;
        description
         "This leaf describes ISIS metric of a route.";
      }
      leaf-list tag {
        type uint64;
        description
         "This leaf describes list of tags associated
          with the route. The leaf describes both
          32bits and 64bits tags.";
      }
      leaf route-type {
        type enumeration {
          enum l2-up-internal {
            description "Level 2 internal route
             and not leaked to a lower level";
          }
          enum l1-up-internal {
            description "Level 1 internal route
             and not leaked to a lower level";
          }
          enum l2-up-external {
            description "Level 2 external route
             and not leaked to a lower level";
          }
          enum l1-up-external {
            description "Level 1 external route
             and not leaked to a lower level";
          }
          enum l2-down-internal {
            description "Level 2 internal route
             and leaked to a lower level";
          }
          enum l1-down-internal {
            description "Level 1 internal route
             and leaked to a lower level";
          }
          enum l2-down-external {
            description "Level 2 external route
             and leaked to a lower level";
          }
          enum l1-down-external {
            description "Level 1 external route
             and leaked to a lower level";
          }
        }
        description
         "This leaf describes the type of ISIS route.";
      }
    }

    grouping fast-reroute-global-cfg {
      description
       "This group defines global
       configuration of IPFRR.";

          container lfa {
            if-feature lfa;
            description
              "This container may be
              augmented with global parameters
              for LFA.
              Creating the container has no effect on
              LFA activation.";
          }

    }

    grouping fast-reroute-if-cfg {
      description
       "This group defines interface
       configuration of IPFRR.";

        container lfa {
          if-feature lfa;
          uses lfa-if-cfg;
          container level-1 {
              uses lfa-if-cfg;
              description
               "LFA level 21 config";
          } augments "/if:interfaces/if:interface" with ISO
   specific parameters.

   The "isis" operational state container level-2 {
              uses lfa-if-cfg;
              description
               "LFA level 2 config";
          }
          description
              "LFA config";
        }

    }

    grouping prefix-reachability-attributes {
      description
       "This group defines extended reachability attributes of an
        IPv4 or IPv6 prefix.";

      leaf external-prefix-flag {
          type boolean;
          description
           "External prefix flag.";
      }
      leaf readvertisement-flag {
          type boolean;
          description
           "Readvertisement flag.";
      }
      leaf node-flag {
          type boolean;
          description
           "Node flag.";
      }
    }

    grouping prefix-ipv4-source-router-id {
      description
       "This group defines augments the IPv4 source router ID "/rt:routing-
   state/rt:control-plane-protocols/control-plane-protocol" container of
       a prefix advertisement.";

      leaf ipv4-source-router-id {
          type inet:ipv4-address;
          description
           "IPv4 Source router ID address.";
      }

    }
    grouping prefix-ipv6-source-router-id {
      description
       "This group defines
   the IPv6 source router ID of
       a prefix advertisement.";

      leaf ipv6-source-router-id {
          type inet:ipv6-address;
          description
           "IPv6 Source router ID address.";
      }

    }

    grouping prefix-attributes-extension {
      description
       "Prefix extended attributes.";

      uses prefix-reachability-attributes;
      uses prefix-ipv4-source-router-id;
      uses prefix-ipv6-source-router-id;
    }

    grouping prefix-ipv4-std {
      description
       "This group defines ietf-routing module by defining IS-IS specific operational
   states.

   Some IS-IS specific routes attributes are added to route objects of an
        IPv4 standard prefix.";
      leaf up-down {
        type boolean;
        description
         "This leaf expresses the value of up/down bit.";
      }
      leaf i-e {
        type boolean;
        description
         "This leaf expresses
   the value of I/E bit.";
      }
      leaf ip-prefix ietf-routing module by augmenting "/rt:routing-
   state/rt:ribs/rt:rib/rt:routes/rt:route".

   The modules defined in this document use some groupings from ietf-
   keychain [I-D.ietf-rtgwg-yang-key-chain].

6.  IS-IS YANG Module

  <CODE BEGINS> file "ietf-isis@2016-11-03.yang"

  module ietf-isis {
        type inet:ipv4-address;
        description
         "This leaf describes the IPv4 prefix";
      }
      leaf prefix-len
    namespace "urn:ietf:params:xml:ns:yang:ietf-isis";

    prefix isis;

    import ietf-routing {
        type uint8;
        description
         "This leaf describes the IPv4
              prefix len in bits"; "rt";

    }
      leaf default-metric

    import ietf-inet-types {
        type std-metric;
        description
         "This leaf describes the ISIS default metric value";
      prefix inet;
    }
      container delay-metric

    import ietf-yang-types {
        leaf metric
      prefix yang;
    }

    import ietf-interfaces {
          type std-metric;
          description
           "This leaf describes the ISIS delay metric value";
      prefix "if";
    }
        leaf supported

    import ietf-key-chain {
          type boolean;
          default "false";
          description
           "This leaf describes if the metric is supported.";
    prefix "key-chain";
    }

    organization
     "IETF ISIS Working Group";

    contact
      "WG List:  &lt;mailto:isis-wg@ietf.org&gt;

      Editor:    Stephane Litkowski
            &lt;mailto:stephane.litkowski@orange.com&gt;

          Derek Yeung
            &lt;mailto:derek@arrcus.com&gt;
          Acee Lindem
            &lt;mailto:acee@cisco.com&gt;
          Jeffrey Zhang
            &lt;mailto:zzhang@juniper.net&gt;
          Ladislav Lhotka
            &lt;mailto:llhotka@nic.cz&gt;
          Yi Yang
            &lt;mailto:yiya@cisco.com&gt;
          Dean Bogdanovic
            &lt;mailto:deanb@juniper.net&gt;
          Kiran Agrahara Sreenivasa
            &lt;mailto:kkoushik@brocade.com&gt;
          Yingzhen Qu
            &lt;mailto:yiqu@cisco.com&gt;
          Jeff Tantsura
            &lt;mailto:jefftant.ietf@gmail.com&gt;

      ";

    description
         "This container
      "The YANG module defines the a generic configuration model for
      ISIS delay metric.";
      }
      container expense-metric common across all of the vendor implementations.";

    revision 2016-11-03 {
        leaf metric
      description
       "Initial revision.";
       reference "RFC XXXX";
   }

   /* Identities */

    identity isis {
          type std-metric;
      base rt:routing-protocol;
      description
           "This leaf describes "Identity for the ISIS expense metric value"; routing protocol.";
    }
        leaf supported

    identity isis-adjacency-change {
          type boolean;
          default "false";
      description
           "This leaf describes if "Identity for the metric is supported."; ISIS routing protocol
        adjacency state.";
    }

    identity clear-isis-database {
      description
         "This container defines "Identity for the ISIS expense metric."; routing protocol
        database reset action.";
    }
      container error-metric {
        leaf metric

    identity clear-isis-adjacency {
          type std-metric;
      description
           "This leaf describes "Identity for the ISIS error metric value"; routing protocol
        adjacency reset action.";
    }
        leaf supported

    /* Feature definitions */

    feature bfd {
          type boolean;
          default "false";
      description
           "This leaf describes if the metric is supported.";
       "Support of BFD for IS-IS links.";
    }
    feature key-chain {
    description
     "Support of keychain for authentication.";
    }
    feature segment-routing {
      description
         "This container defines the ISIS error metric.";
       "Support of segment-routing.";
    }
    feature node-flag {
      description
       "Support of node-flag advertisement
       as prefix attribute";
    }

    grouping prefix-ipv4-extended
    feature node-tag {
      description
       "This group defines attributes
        "Support of an
        IPv4 extended prefix.";
      leaf up-down node tag.";
    }
    feature igp-ldp-sync {
        type boolean;
      description
         "This leaf expresses the value
        "Support of up/down bit."; RFC5443.";
    }
      leaf ip-prefix
    feature fast-reroute {
        type inet:ipv4-address;
      description
         "This leaf describes the IPv4 prefix";
        "Support of IPFRR.";
    }
      leaf prefix-len
    feature nsr {
        type uint8;
      description
         "This leaf describes the IPv4 prefix len in bits";
       "Support of
          Non Stop Routing.";
    }

      leaf metric
    feature  lfa {
        type wide-metric;
      description
         "This leaf describes the ISIS metric value";
        "Support of Loop Free Alternates.";
    }
      leaf-list tag
    feature remote-lfa {
        type uint32;
      description
         "This leaf describes a list
        "Support of tags associated with
         the prefix."; remote Loop Free Alternates.";
    }
      leaf-list tag64

    feature overload-max-metric {
        type uint64;
      description
         "This leaf describes a list
        "Support of 64-bit tags associated with
         the prefix."; overload by setting
         all links to max metric.";
    }
      uses prefix-attributes-extension;
    feature prefix-tag {
      description
        "Add 32bit tag to prefixes";
    }

    grouping prefix-ipv6-extended
    feature prefix-tag64 {
      description
       "This group defines attributes of an
        IPv6 prefix.";
      leaf up-down
        "Add 64bit tag to prefixes";
    }
    feature reference-bandwidth {
        type boolean;
      description
         "This leaf expresses the value
        "Use a reference bandwidth to compute metric.";
    }
    feature ipv4-router-id {
      description
       "Support of up/down bit."; IPv4 router ID configuration under ISIS.";
    }
      leaf ip-prefix

    feature ipv6-router-id {
        type inet:ipv6-address;
      description
         "This leaf describes the
       "Support of IPv6 prefix"; router ID configuration under ISIS.";
    }
      leaf prefix-len

    feature multi-topology {
        type uint8;
      description
         "This leaf describes the IPv4 prefix len in bits";
       "Multitopology routing support.";
    }

      leaf metric
    feature nlpid-control {
        type wide-metric;
      description
       "This leaf describes feature controls the advertisement
        of support NLPID within ISIS metric value"; configuration.";
    }
      leaf-list tag
    feature graceful-restart {
        type uint32;
      description
         "This leaf describes a list of tags associated with
         the prefix.";
        "Graceful restart support as per RFC5306.";
    }
      leaf-list tag64

    feature lsp-refresh {
        type uint64;
      description
         "This leaf describes a list
        "Configuration of 64-bit tags associated with
         the prefix.";
      }

      uses prefix-attributes-extension; LSP refresh interval.";
    }

    grouping neighbor-extended

    feature maximum-area-addresses {
      description
       "This group defines attributes
        "Support of an
        ISIS extended neighbor.";
      leaf neighbor-id maximum-area-addresses config.";
    }

    feature admin-control {
        type system-id;
      description
         "This leaf describes the system-id
       "Control administrative state of the neighbor."; ISIS.";
    }
      leaf metric

    /* Type definitions */

    typedef instance-state-ref {
      type wide-metric;
        description
         "This leaf describes the ISIS metric value";
      }

    }

    grouping neighbor leafref {
        path "/rt:routing-state/"
        +"rt:control-plane-protocols/rt:control-plane-protocol/rt:name";
      }
      description
         "This group defines attributes type is used for leaves that reference state data of
          an ISIS standard neighbor.";
      leaf neighbor-id protocol instance.";
    }

    typedef admin-state {
      type system-id; enumeration {
        enum "up" {
          description
         "This leaf describes the system-id of the neighbor.";
           "Up state";
        }
      leaf i-e
        enum "down" {
        type boolean;
          description
         "This leaf expresses the value
           "Down state";
        }
      }
      description
       "Administrative state of I/E bit."; a component.";
    }
      leaf default-metric
    typedef oper-state {
      type std-metric; enumeration {
        enum "up" {
          description
         "This leaf describes the ISIS default metric value";
           "Up state";
        }
      container delay-metric {
        leaf metric
        enum "down" {
          type std-metric;
          description
           "This leaf describes the ISIS delay metric value";
           "Down state";
        }
        leaf supported
      }
      description
       "Operational state of a component.";
    }
    typedef circuit-id {
      type boolean;
          default "false"; uint8;
      description
       "This leaf describes if type defines the metric is supported."; circuit ID
       associated with an interface.";
    }

    typedef extended-circuit-id {
      type uint32;
      description
       "This container type defines the ISIS delay metric."; extended circuit ID
       associated with an interface.";
    }
      container expense-metric {
        leaf metric

    typedef interface-type {
      type std-metric; enumeration {
        enum broadcast {
          description
           "This leaf describes the ISIS delay expense value"; "Broadcast interface type.
          Would result in DIS election.";
        }
        leaf supported
        enum point-to-point {
          type boolean;
          default "false";
          description
           "This leaf describes if the metric is supported.";
           "Point to point interface type.";
        }
      }
      description
       "This container type defines the ISIS expense metric."; type of adjacency
       to be established on the interface.
       This is affecting the type of hello
       message that would be used.";

    }
      container error-metric {
        leaf metric

    typedef level {
      type std-metric; enumeration {
        enum "level-1" {
          description
           "This leaf enum describes the ISIS error metric value"; L1 only capability.";
        }
        leaf supported
        enum "level-2" {
          type boolean;
          default "false";
          description
           "This leaf enum describes if the metric is supported."; L2 only capability.";
        }
        enum "level-all" {
          description
           "This container defines the ISIS error metric."; enum describes both levels capability.";
        }
      }

    grouping database {
      default "level-all";
      description
       "This group type defines attributes ISIS level of an
        ISIS database (Link State DB).";
      leaf lsp-id object.";

    }

    typedef level-number {
      type lsp-id; uint8 {
        range "1 .. 2";
      }
      description
       "This leaf describes the LSP ID of the LSP."; type defines a current ISIS level.";
    }
      leaf checksum

    typedef lsp-id {
      type uint16; string {
        pattern
         '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]'
               +'{4}\.[0-9][0-9]-[0-9][0-9]';
      }
      description
       "This leaf describes the checksum of the LSP."; type defines ISIS LSP ID using pattern,
        system id looks like : 0143.0438.AeF0.02-01";
    }
      leaf remaining-lifetime

    typedef area-address {
      type uint16;
        units "seconds"; string {
        pattern '[0-9A-Fa-f]{2}\.([0-9A-Fa-f]{4}\.){0,3}';
      }
      description
       "This leaf describes the remaining lifetime
          in seconds before type defines the LSP expiration."; area address.";
    }
      leaf sequence

    typedef snpa {
      type uint32; string {
        length "0 .. 20";
      }
      description
       "This leaf describes the sequence number type defines Subnetwork Point of the LSP."; Attachement format.";

    }
      leaf attributes

    typedef system-id {
      type bits {
          bit PARTITIONNED string {
        pattern
         '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}';
      }
      description
             "If set, the originator supports partition
              repair.";
       "This type defines ISIS system id using pattern,
        system id looks like : 0143.0438.AeF0";
    }
          bit ATTACHED-ERROR

    typedef wide-metric {
      type uint32 {
        range "0 .. 16777215";
      }
      description
             "If set, the originator is attached to
              another area using the referred
       "This type defines wide style format
        of ISIS metric.";
    }
          bit ATTACHED-EXPENSE

    typedef std-metric {
      type uint8 {
        range "0 .. 63";
      }
      description
             "If set, the originator is attached to
              another area using the referred
       "This type defines old style format
        of ISIS metric.";
    }
          bit ATTACHED-DELAY

    typedef mesh-group-state {
      type enumeration {
        enum "meshInactive" {
          description
             "If set, the originator
           "Interface is attached to
              another area using the referred metric."; not part of a mesh group.";
        }
          bit ATTACHED-DEFAULT
        enum "meshSet" {
          description
             "If set, the originator
           "Interface is attached to
              another area using the referred metric."; part of a mesh group.";
        }
          bit OVERLOAD
        enum "meshBlocked" {
          description
             "If set, the originator is overloaded,
              and
           "LSPs must not be avoided in path calculation."; flooded over that interface.";
        }
      }
      description
       "This leaf type describes attributes meshgroup state of an interface";
    }

    /* Grouping definitions */

   grouping admin-control {

      leaf enable {
          if-feature admin-control;
          type boolean;
          default true;
          description
               "Control the LSP."; administrative
               state.";
      }

      description
       "Grouping for admin control.";
    }

   grouping adjacency-state {
             container is-neighbor adjacencies {
                list neighbor adjacency {
          uses neighbor;
                  leaf neighbor-systype {
                    type level;
                    description
           "List
                     "Type of neighbors."; neighboring system";

                  }
                  leaf neighbor-sysid {
                    type system-id;
                    description
                     "The system-id of the neighbor";

                  }
                  leaf neighbor-extended-circuit-id {
                    type extended-circuit-id;
                    description
         "This leaf describes list
                     "Circuit ID of ISIS neighbors.
         ISIS reference is TLV 2."; the neighbor";
                  }

      container authentication {
                  leaf authentication-type neighbor-snpa {
                    type string; snpa;
                    description
           "This leaf describes
                     "SNPA of the authentication type
            to be used."; neighbor";
                  }
                  leaf authentication-key usage {
                    type string; level;
                    description
           "This leaf describes
                    "How is the authentication key
            to adjacency used ?
                    On a p2p link this might be used. For security reason, level 1 and 2,
                    but on a LAN, the
            authentication key MUST NOT usage will be presented
            in plaintext format. Authors recommends
            to use MD5 hash to present the authentication-key."; level 1
                    between peers at L1 or level 2 between
                    peers at L2.";
                  }
                  leaf hold-timer {
                    type uint16;
                    description "This container describes authentication
        information of the node. ISIS reference
                     "The holding time in seconds for this
                      adjacency. This value is TLV 10."; based on
                      received hello PDUs and the elapsed
                      time since receipt.";
                  }

      container extended-is-neighbor
                  leaf neighbor-priority {
        list neighbor
                    type uint8 {
          uses neighbor-extended;
                      range "0 .. 127";
                    }
                    description
           "List
                     "Priority of neighbors."; the neighboring IS for becoming
                      the DIS.";
                  }
                  leaf lastuptime {
                    type yang:timestamp;
                    description
         "This container describes list
                     "When the adjacency most recently entered
                      state 'up', measured in hundredths of ISIS extended
         neighbors.
         ISIS reference a
                      second since the last reinitialization of
                      the network management subsystem.
                      The value is TLV 22."; 0 if the adjacency has never
                      been in state 'up'.";

                  }

      container ipv4-internal-reachability
                  leaf state {
        list prefixes
                    type enumeration {
                      enum "Up" {
          uses prefix-ipv4-std;
                        description
           "List of prefixes.";
                         "This state describes that
                          adjacency is established.";
                      }
                      enum "Down" {
                        description
                         "This container state describes list of IPv4 internal
         reachability information.
         ISIS reference that
                          adjacency is TLV 128."; NOT established.";
                      }

      leaf-list protocol-supported
                      enum "Init" {
        type uint8;
                        description
                         "This leaf state describes the list of
         supported protocols.
         ISIS reference that
                          adjacency is TLV 129."; establishing.";
                      }

      container ipv4-external-reachability {
        list prefixes
                      enum "Failed" {
          uses prefix-ipv4-std;
          description
           "List of prefixes.";
        }
                        description
                         "This container state describes list of IPv4 external
         reachability information.
         ISIS reference that
                          adjacency is TLV 130."; failed.";
                      }
                    }

      leaf-list ipv4-addresses {
        type inet:ipv4-address;
                    description
                     "This leaf describes the IPv4 addresses state of the node.
          ISIS reference is TLV 132.";
                     interface.";
                  }

                  description
                   "List of operational adjacencies.";
                }

      leaf ipv4-te-routerid {

        type inet:ipv4-address;
                description
                 "This leaf describes container lists the IPv4 Traffic Engineering
          router ID adjacencies of
                 the node.
          ISIS reference is TLV 134."; local node.";
              }
              description
               "Adjacency state";
   }

    grouping fast-reroute-global-state {
            container extended-ipv4-reachability protected-routes {
              list prefixes af-stats {
          uses prefix-ipv4-extended;
          description
           "List of prefixes.";
                key "af prefix alternate";

                leaf af {
                  type identityref {
                    base rt:address-family;
                  }
                  description
         "This container describes list of IPv4 extended
         reachability information.
         ISIS reference is TLV 135.";
                   "Address-family";
                }
                leaf dynamic-hostname prefix {
                  type string;
                  description
         "This
                   "Protected prefix.";
                }
                leaf describes the name of alternate {
                  type string;
                  description
                   "Alternate nexthop for the node.
         ISIS reference is TLV 137."; prefix.";
                }
                leaf ipv6-te-routerid alternate-type {
                  type inet:ipv6-address; enumeration {
                    enum equalcost {
                      description
         "This leaf describes the IPv6 Traffic Engineering
          router ID of the node.
          ISIS reference is TLV 140.";
                       "ECMP alternate.";
                    }

      container mt-is-neighbor
                    enum lfa {
        list neighbor
                      description
                       "LFA alternate.";
                    }
                    enum remote-lfa {
          leaf MT-ID
                      description
                       "Remote LFA alternate.";
                    }
                    enum tunnel {
            type uint16
                      description
                       "Tunnel based alternate
                       (like RSVP-TE or GRE).";
                    }
                    enum ti-lfa {
              range "0 .. 4095";
                      description
                       "TI LFA alternate.";
                    }
                    enum mrt {
                      description
             "This leaf defines the identifier
              of a topology.";
                       "MRT alternate.";
                    }
          uses neighbor-extended;
                    enum other {
                      description
           "List
                       "Unknown alternate type.";
                    }
                  }
                  description
                   "Type of neighbors."; alternate.";
                }
                leaf best {
                  type boolean;
                  description
         "This container describes list of ISIS multi-topology
          neighbors.
          ISIS reference
                   "describes if the alternate is TLV 223."; the best one.";
                }

      container mt-entries {
        list topology {
                leaf MT-ID non-best-reason {
                  type uint16 {
              range "0 .. 4095";
            } string;
                  description
             "This leaf defines
                   "Information field to describe why the identifier
              of a topology."; alternate
                   is not best.";
                }
                leaf attributes protection-available {
                  type bits {
                    bit OVERLOAD nodeprotect {
                      position 0;
                      description
                 "If set, the originator is overloaded,
                  and must be avoided in path
                  calculation.";
                      "Node protection available.";
                    }
                    bit ATTACHED linkprotect {
                      position 1;
                      description
                 "If set, the originator is attached to
                  another area using the referred metric.";
                      "Link protection available.";
                    }
                    bit srlgprotect {
                      position 2;
                      description
                      "SRLG protection available.";
                    }
                    bit downstreamprotect {
                      position 3;
                      description
             "This leaf describes attributes of the LSP
              for the associated topology.";
                      "Downstream protection available.";
                    }
                    bit other {
                      position 4;
                      description
           "List of topologies supported.";
                      "Other protection available.";
                    }
                  }
                  description
         "This container describes
                  "Describes protection provided by the topology supported.
         ISIS reference is TLV 229."; alternate.";
                }

      leaf-list ipv6-addresses
                leaf alternate-metric1 {
                  type inet:ipv6-address; uint32;
                  description
         "This
                   "Metric from PLR to destination
                    through the alternate path.";
                }
                leaf describes alternate-metric2 {
                  type uint32;
                  description
                   "Metric from PLR to the IPv6 interface
         addresses of alternate node";
                }
                leaf alternate-metric3 {
                  type uint32;
                  description
                   "Metric from alternate node to the node.
         ISIS reference is TLV 232."; destination";
                }

                description
                 "Per AF statistics.";
              }
              description
               "List of prefixes that are protected.";
            }

            container mt-extended-ipv4-reachability nonprotected-routes {
               list prefixes af-stats {
                key "af prefix";

                leaf MT-ID af {
                  type uint16 identityref {
              range "0 .. 4095";
                    base rt:address-family;
                  }
                  description
             "This
                   "Address-family";
                }
                leaf defines the identifier
              of a topology."; prefix {
                  type string;
                  description
                   "Protected prefix.";

                }
                description
                 "Per AF statistics.";
              }
          uses prefix-ipv4-extended;
              description
               "List of prefixes."; prefixes that are not protected.";
            }
        description
         "This container describes

            list of IPv4
         reachability information in multi-topology
         environment.
         ISIS reference is TLV 235.";
      }

      container mt-ipv6-reachability protection-statistics {
              key frr-protection-method;

              leaf frr-protection-method {
                type string;
                description
                 "Protection method used.";
              }
              list prefixes af-stats {
                key af;

                leaf MT-ID af {
                  type uint16 identityref {
              range "0 .. 4095";
                    base rt:address-family;
                  }
                  description
             "This leaf defines the identifier
              of a topology.";
                   "Address-family";
                }
          uses prefix-ipv6-extended;
                leaf total-routes {
                  type uint32;
                  description
           "List of
                   "Total prefixes.";
                }
        description
         "This container describes list of IPv6
         reachability information in multi-topology
         environment.
         ISIS reference is TLV 237.";
      }

      container ipv6-reachability {
        list prefixes
                leaf unprotected-routes {
          uses prefix-ipv6-extended;
                  type uint32;
                  description
           "List
                    "Total of prefixes."; prefixes who are
                    not protected.";
                }
                leaf protected-routes {
                  type uint32;
                  description
         "This container describes list
                    "Total of IPv6
         reachability information.
         ISIS reference is TLV 236."; prefixes who are
                    protected.";
                }

      list router-capabilities {
                leaf flags linkprotected-routes {
                  type bits {
            bit flooding {
              position 0; uint32;
                  description
               "If the S bit is set(1),
               the IS-IS Router CAPABILITY TLV
              MUST be flooded across the entire routing domain.
              If the S bit is
              not set(0), the TLV MUST NOT be leaked between levels.
              This bit MUST NOT be altered during the TLV leaking.";
                    "Total of prefixes who are
                    link protected.";

                }
            bit down
                leaf nodeprotected-routes {
              position 1;
              description
              "When the IS-IS Router CAPABILITY TLV is
              leaked from level-2 to level-1, the D bit
              MUST be set.  Otherwise, this bit MUST
              be clear.  IS-IS Router capability TLVs
              with the D bit set MUST NOT
              be leaked from level-1 to level-2.
              This is to prevent TLV looping.
              ";
                  type uint32;
                  description
                    "Total of prefixes who are
                    node protected.";
                }
                description
                 "Per AF statistics.";
              }

              description
           "Flags associated with router capability.";
               "Global protection statistics.";
            }
        container node-tags {
          if-feature node-tag;
          list node-tag
            description
             "IPFRR states.";
    }

    grouping notification-instance-hdr {
      description
       "This group describes common instance specific
        data for notifications.";
      leaf tag instance-name {
        type uint32; string;
        description
               "Node tag value.";
         "Describes the name of the ISIS instance.";
      }
      leaf instance-level {
        type level;
        description
             "List
         "Describes the ISIS level of tags."; the instance.";
      }
    }

    grouping notification-interface-hdr {
      description
           "Container
       "This group describes common interface specific
        data for node tags.";
        } notifications.";
      leaf binary interface-name {
        type binary; string;
        description
           "This leaf describes
         "Describes the capability name of the node.
           Format is binary according to the protocol encoding."; ISIS interface.";
      }
      leaf interface-level {
        type level;
        description
         "This container describes
         "Describes the capabilities ISIS level of the node.
         This container may be interface.";
      }
      leaf extended-circuit-id {
        type extended-circuit-id;
        description
         "Describes the extended with detailed
         information.
         ISIS reference is TLV 242."; circuit-id of the interface.";
      }
    }

    grouping isis-node-tag-cfg route-content {
      description
       "ISIS node
       "This group add isis-specific route properties.";
      leaf metric {
        type uint32;
        description
         "This leaf describes ISIS metric of a route.";
      }
      leaf-list tag config.";
      container node-tags {
          if-feature node-tag;
        type uint64;
        description
         "This leaf describes list node-tag {
            key tag; of tags associated
          with the route. The leaf tag describes both
          32bits and 64bits tags.";
      }
      leaf route-type {
        type uint32; enumeration {
          enum l2-up-internal {
            description
               "Node tag value."; "Level 2 internal route
             and not leaked to a lower level";
          }
          enum l1-up-internal {
            description "Level 1 internal route
             and not leaked to a lower level";
          }
          enum l2-up-external {
            description "Level 2 external route
             and not leaked to a lower level";
          }
          enum l1-up-external {
            description
             "List of tags."; "Level 1 external route
             and not leaked to a lower level";
          }
          enum l2-down-internal {
            description
            "Container for node tags.";
        } "Level 2 internal route
             and leaked to a lower level";
          }

    grouping authentication-global-cfg {
          choice authentication-type
          enum l1-down-internal {
              case key-chain
            description "Level 1 internal route
             and leaked to a lower level";
          }
          enum l2-down-external {
                if-feature key-chain;
                leaf key-chain
            description "Level 2 external route
             and leaked to a lower level";
          }
          enum l1-down-external {
                  type key-chain:key-chain-ref;
            description
                    "Reference "Level 1 external route
             and leaked to a key-chain."; lower level";
          }
        }
              case password {
                leaf key {
                  type string;
        description
         "This leaf describes the
                     authentication key."; type of ISIS route.";
      }
                uses key-chain:crypto-algorithm-types;
    }

    grouping fast-reroute-global-cfg {
      description
                 "Choice
       "This group defines global
       configuration of authentication.";
            } IPFRR.";

          container lfa {
            if-feature lfa;
            description
            "Grouping for
              "This container may be
              augmented with global auth config."; parameters
              for LFA.
              Creating the container has no effect on
              LFA activation.";
          }

    }

    grouping metric-type-global-cfg {
          leaf value {
              type enumeration {
                enum wide-only fast-reroute-if-cfg {
      description
                   "Advertise new metric style only
                   (RFC5305)";
                }
                enum old-only
       "This group defines interface
       configuration of IPFRR.";

        container lfa {
                  description
                   "Advertise old metric style only
                   (RFC1195)";
                }
                enum both
          if-feature lfa;
          uses lfa-if-cfg;
          container level-1 {
              uses lfa-if-cfg;
              description "Advertise both metric
                  styles";
                }
               "LFA level 21 config";
          }
          container level-2 {
              uses lfa-if-cfg;
              description
               "This leaf describes the type of metric
               to be generated.
               Wide-only means only new metric style
               is generated,
               old-only means that only old style metric
               is generated,
               and both means that both are advertised.
               This leaf is only affecting IPv4 metrics.";
               "LFA level 2 config";
          }
          description
            "Grouping for global metric style config.";
              "LFA config";
        }

    }

    grouping default-metric-global-cfg prefix-reachability-attributes {
      description
       "This group defines extended reachability attributes of an
        IPv4 or IPv6 prefix.";

      leaf value external-prefix-flag {
          type wide-metric;
              default "10"; boolean;
          description
                "Value of the metric";
           "External prefix flag.";
      }
      leaf readvertisement-flag {
          type boolean;
          description
            "Grouping for global default metric config.";
           "Readvertisement flag.";
      }

   grouping overload-global-cfg {
      leaf status node-flag {
          type boolean;
          description
           "This leaf defines the overload status.";
           "Node flag.";
      }
            description
        "Grouping for overload bit config.";
    }

    grouping overload-max-metric-global-cfg prefix-ipv4-source-router-id {
      description
       "This group defines the IPv4 source router ID of
       a prefix advertisement.";

      leaf timeout ipv4-source-router-id {
          type uint16;
          units "seconds"; inet:ipv4-address;
          description
           "IPv4 Source router ID address.";
      }

    }
    grouping prefix-ipv6-source-router-id {
      description
       "This leaf group defines the timeout in seconds IPv6 source router ID of the overload condition.";
        }
       a prefix advertisement.";

      leaf ipv6-source-router-id {
          type inet:ipv6-address;
          description
        "Grouping for overload-max-metric config.";
           "IPv6 Source router ID address.";
      }

    }

    grouping route-preference-global-cfg {
      choice granularity prefix-attributes-extension {
              case detail
      description
       "Prefix extended attributes.";

      uses prefix-reachability-attributes;
      uses prefix-ipv4-source-router-id;
      uses prefix-ipv6-source-router-id;
    }

    grouping prefix-ipv4-std {
      description
       "This group defines attributes of an
        IPv4 standard prefix.";
      leaf internal up-down {
        type uint8; boolean;
        description
         "This leaf defines expresses the protocol
                     preference for internal routes."; value of up/down bit.";
      }
      leaf external i-e {
        type uint8; boolean;
        description
         "This leaf defines expresses the protocol
                     preference for external routes.";
                } value of I/E bit.";
      }
              case coarse {
      leaf default ip-prefix {
        type uint8; inet:ipv4-address;
        description
         "This leaf defines describes the protocol
                     preference for all ISIS routes.";
                }
              }
              description
               "Choice for implementation of route preference.";
            }
      description
       "This grouping defines how route preference is configured."; IPv4 prefix";
      }

  grouping hello-authentication-cfg {
      choice authentication-type {
          case key-chain {
            if-feature key-chain;
      leaf key-chain prefix-len {
        type key-chain:key-chain-ref; uint8;
        description
                "Reference to a key-chain.";
            }
         "This leaf describes the IPv4 prefix len in bits";
      }
          case password {
      leaf key default-metric {
        type string; std-metric;
        description
         "This leaf describes the
                 authentication key.";
            }
            uses key-chain:crypto-algorithm-types;
          }
          description
             "Choice of authentication.";
        }
        description
         "Grouping for hello authentication."; ISIS default metric value";
      }

  grouping hello-interval-cfg
      container delay-metric {
        leaf value metric {
          type uint16 {
              range "1..65535";
              }

          units "seconds";
          default 10; std-metric;
          description
           "This leaf defines describes the interval of
           hello messages.";
        }

        description
           "Interval between
           hello messages."; ISIS delay metric value";
        }

      grouping hello-multiplier-cfg {
        leaf value supported {
          type uint16; boolean;
          default "false";
          description
           "This leaf defines the number of
           hello failed to be received before
           declaring describes if the adjacency down."; metric is supported.";
        }

        description
         "This grouping container defines the number of
            hello failed to be received before
            declaring the adjacency down."; ISIS delay metric.";
      }

      grouping priority-cfg
      container expense-metric {
        leaf value metric {
          type uint8 {
            range "0 .. 127";
          }
          default 64; std-metric;
          description
           "This leaf describes the priority of
           the interface
           for DIS election."; ISIS expense metric value";
        }
        leaf supported {
          type boolean;
          default "false";
          description
           "This grouping leaf describes if the
           priority of metric is supported.";
        }
        description
         "This container defines the interface
           for DIS election."; ISIS expense metric.";
      }

      grouping metric-cfg
      container error-metric {
        leaf value metric {
          type wide-metric;
          description
           "Metric value.";
        } std-metric;
          description
         "Grouping for interface metric";
           "This leaf describes the ISIS error metric value";
        }
      grouping lfa-if-cfg {
        leaf candidate-disabled supported {
          type boolean;
          default false; "false";
          description
             "Prevent
           "This leaf describes if the interface to be used as backup."; metric is supported.";
        }
          leaf enable {
            type boolean;

        description
             "Activates LFA.
             This model assumes activation
             of per-prefix LFA.";
          }
         "This container remote-lfa defines the ISIS error metric.";
      }
    }
    grouping prefix-ipv4-extended {
            if-feature remote-lfa;
      description
       "This group defines attributes of an
        IPv4 extended prefix.";
      leaf enable up-down {
        type boolean;
        description
              "Activates rLFA.";
            }
            description
             "remote LFA configuration.";
          }
          description
           "Grouping for LFA
           interface configuration";
         "This leaf expresses the value of up/down bit.";
      }
    grouping isis-global-cfg
      leaf ip-prefix {
        type inet:ipv4-address;
        description
       "Defines
         "This leaf describes the ISIS global configuration.";

          uses admin-control; IPv4 prefix";
      }
      leaf level-type prefix-len {
        type level;
            default "level-all"; uint8;
        description
         "This leaf describes the type of ISIS node.
             A node can be level-1-only, level-2-only
             or level-1-2.
             "; IPv4 prefix len in bits";
      }

      leaf system-id metric {
        type system-id; wide-metric;
        description
         "This leaf defines the system-id of describes the node."; ISIS metric value";
      }

          leaf maximum-area-addresses
      leaf-list tag {
            if-feature maximum-area-addresses;
        type uint8;
            default 3; uint32;
        description
             "Defines
         "This leaf describes a list of tags associated with
         the maximum areas supported."; prefix.";
      }
      leaf-list area-address tag64 {
        type area-address; uint64;
        description
             "List
         "This leaf describes a list of areas supported by 64-bit tags associated with
         the
             protocol instance."; prefix.";
      }

          container mpls

      uses prefix-attributes-extension;

    }

    grouping prefix-ipv6-extended {
      description
       "This group defines attributes of an
        IPv6 prefix.";
      leaf ipv4-router-id up-down {
              if-feature ipv4-router-id;
        type inet:ipv4-address; boolean;
        description
               "Router ID
         "This leaf expresses the value that would be used in
               TLV 134."; of up/down bit.";
      }
      leaf ipv6-router-id ip-prefix {
              if-feature ipv6-router-id;
        type inet:ipv6-address;
        description
               "Router ID value that would be used in
               TLV 140.";
         "This leaf describes the IPv6 prefix";
      }
            container igp-ldp-sync
      leaf prefix-len {
              if-feature igp-ldp-sync;
        type uint8;
        description
         "This container may be augmented
                with global parameters for igp-ldp-sync."; leaf describes the IPv4 prefix len in bits";
      }

      leaf metric {
        type wide-metric;
        description
         "This container handles mpls config.";
          } leaf reference-bandwidth describes the ISIS metric value";
      }
      leaf-list tag {
            if-feature reference-bandwidth;
        type uint32;
            units "bps";
        description
         "This leaf defines describes a list of tags associated with
         the bandwidth for calculating
              metric."; prefix.";
      }
      leaf-list tag64 {
        type uint64;
        description
         "This leaf describes a list of 64-bit tags associated with
         the prefix.";
      }

      uses prefix-attributes-extension;
    }

    grouping neighbor-extended {
      description
       "This group defines attributes of an
        ISIS extended neighbor.";
      leaf lsp-mtu neighbor-id {
        type uint16;
            units "bytes";
            default 1492; system-id;
        description
         "This leaf describes the maximum size system-id of a
              LSP PDU in bytes."; the neighbor.";
      }
      leaf lsp-lifetime metric {
        type uint16 {
              range "1..65535";
              }
            units "seconds"; wide-metric;
        description
         "This leaf describes the lifetime of the router
              LSP in seconds."; ISIS metric value";
      }

    }

    grouping neighbor {
      description
       "This group defines attributes of an
        ISIS standard neighbor.";
      leaf lsp-refresh neighbor-id {
            if-feature lsp-refresh;
        type uint16 {
              range "1..65535";
              }
            units "seconds"; system-id;
        description
         "This leaf describes the refresh interval system-id of the
              router LSP in seconds."; neighbor.";
      }

          container graceful-restart {
            if-feature graceful-restart;
      leaf enable i-e {
        type boolean;
        description
               "Control enabling the feature.";
            }
            description
         "This container activates graceful restart."; leaf expresses the value of I/E bit.";
      }

          container nsr {
              if-feature nsr;
              description
              "Non-Stop Routing (NSR) config state.";
      leaf enable default-metric {
        type boolean; std-metric;
        description
                   "Enable/Disable NSR.";
              }
         "This leaf describes the ISIS default metric value";
      }

          uses isis-node-tag-cfg;
      container authentication delay-metric {
              uses authentication-global-cfg;

              container level-1
        leaf metric {
                  uses authentication-global-cfg;
          type std-metric;
          description "level-1 specific cfg";
           "This leaf describes the ISIS delay metric value";
        }
              container level-2
        leaf supported {
                  uses authentication-global-cfg;
          type boolean;
          default "false";
          description "level-2 specific cfg";
           "This leaf describes if the metric is supported.";
        }
        description "authentication global cfg.
              It covers both LSPs and SNPs.";
         "This container defines the ISIS delay metric.";
      }
      container metric-type expense-metric {
              uses metric-type-global-cfg;

              container level-1
        leaf metric {
                  uses metric-type-global-cfg;
          type std-metric;
          description "level-1 specific cfg";
           "This leaf describes the ISIS delay expense value";
        }
              container level-2
        leaf supported {
                  uses metric-type-global-cfg;
          type boolean;
          default "false";
          description "level-2 specific cfg";
           "This leaf describes if the metric is supported.";
        }
        description "Metric style global cfg.";
          }

          container default-metric {
              uses default-metric-global-cfg;
         "This container level-1 {
                  uses default-metric-global-cfg;
                  description "level-1 specific cfg"; defines the ISIS expense metric.";
      }
      container level-2 error-metric {
        leaf metric {
                  uses default-metric-global-cfg;
          type std-metric;
          description "level-2 specific cfg";
           "This leaf describes the ISIS error metric value";
        }
        leaf supported {
          type boolean;
          default "false";
          description "Default
           "This leaf describes if the metric global cfg."; is supported.";
        }
        description
         "This container afs {
              if-feature nlpid-control;
              list af defines the ISIS error metric.";
      }
    }

    grouping database {
                key af;
      description
       "This group defines attributes of an
        ISIS database (Link State DB).";
      leaf af lsp-id {
        type identityref {
                    base rt:address-family;
                  } lsp-id;
        description
                   "Address-family";
         "This leaf describes the LSP ID of the LSP.";
      }
      leaf enable checksum {
        type boolean; uint16;
        description
                    "Describes
         "This leaf describes the activation state checksum of the
                     AF."; LSP.";
      }
      leaf remaining-lifetime {
        type uint16;
        units "seconds";
        description
         "This leaf describes the remaining lifetime
          in seconds before the LSP expiration.";
      }
      leaf sequence {
        type uint32;
        description
         "This list permits activation leaf describes the sequence number of new address families."; the LSP.";
      }
      leaf attributes {
        type bits {
          bit PARTITIONNED {
            description
               "Container for address-families";
             "If set, the originator supports partition
              repair.";
          }

          container preference
          bit ATTACHED-ERROR {
              uses route-preference-global-cfg;
            description
               "This container defines
             "If set, the protocol preference."; originator is attached to
              another area using the referred metric.";
          }

          container overload
          bit ATTACHED-EXPENSE {
              uses overload-global-cfg;
            description
             "This container describes if
             "If set, the router originator is
              set attached to overload state.";
              another area using the referred metric.";
          }

          container overload-max-metric
          bit ATTACHED-DELAY {
              if-feature overload-max-metric;
              uses overload-max-metric-global-cfg;
            description
             "This container describes if
             "If set, the router originator is
              set attached to overload state
              another area using max-metric
              advertisement."; the referred metric.";
          }
          bit ATTACHED-DEFAULT {
            description
             "If set, the originator is attached to
              another area using the referred metric.";
          }
          bit OVERLOAD {
            description
             "If set, the originator is overloaded,
              and must be avoided in path calculation.";
          }
        }

    grouping isis-global-topologies-cfg {
     description
      "Per topology config.";

      container default-metric {
              uses default-metric-global-cfg;

              container level-1 {
                  uses default-metric-global-cfg;
        description "level-1 specific cfg";
         "This leaf describes attributes of the LSP.";
      }

      container level-2 is-neighbor {
        list neighbor {
          uses default-metric-global-cfg; neighbor;
          description "level-2 specific cfg";
           "List of neighbors.";
        }
        description "Default metric per
              topology cfg.";
          }

        uses isis-node-tag-cfg;
         "This leaf describes list of ISIS neighbors.

         ISIS reference is TLV 2.";
      }

    grouping isis-if-cfg

      container authentication {
      description
       "Grouping for interface cfg.";
        leaf level-type authentication-type {
          type level;
        default "level-all"; string;
          description
           "This leaf defines the associated ISIS
         level of describes the interface."; authentication type
            to be used.";
        }
        leaf lsp-pacing-interval authentication-key {
          type uint16;
        units "milliseconds";
        default 33; string;
          description
           "This leaf defines describes the interval between
          LSP transmissions authentication key
            to be used. For security reason, the
            authentication key MUST NOT be presented
            in milli-seconds"; plaintext format. Authors recommends
            to use MD5 hash to present the authentication-key.";
        }
      leaf lsp-retransmit-interval {
        type uint16;
        units "seconds";
        description "This leaf defines the interval between
         retransmission container describes authentication
        information of LSP"; the node. ISIS reference is TLV 10.";
      }
      leaf passive

      container extended-is-neighbor {
        type boolean;
        default "false";
        list neighbor {
          uses neighbor-extended;
          description
           "List of neighbors.";
        }
        description
         "This leaf defines if interface is in
          passive mode (ISIS not running,
          but network container describes list of ISIS extended
         neighbors.
         ISIS reference is advertised)."; TLV 22.";
      }
      leaf csnp-interval

      container ipv4-internal-reachability {
        type uint16
        list prefixes {
              range "1..65535";
          uses prefix-ipv4-std;
          description
           "List of prefixes.";
        }
        units "seconds";
        default 10;
        description
         "This container describes list of IPv4 internal
         reachability information.
         ISIS reference is TLV 128.";
      }

      leaf-list protocol-supported {
        type uint8;
        description
         "This leaf defines describes the interval list of CSNP
          messages.";
         supported protocols.
         ISIS reference is TLV 129.";
      }

      container hello-padding ipv4-external-reachability {
        leaf enable
        list prefixes {
          type boolean;
          default "true";
          uses prefix-ipv4-std;
          description
           "Status
           "List of Hello-padding activation.
            By default, the implementation shall
            pad HELLOs."; prefixes.";
        }
        description
         "This container handles describes list of IPv4 external
         reachability information.
         ISIS hello padding
          configuration."; reference is TLV 130.";
      }

      leaf mesh-group-enable

      leaf-list ipv4-addresses {
        type mesh-group-state; inet:ipv4-address;
        description
         "Describes the mesh group state of
          the interface.";
      }
          "This leaf mesh-group {
        when "../mesh-group-enable = 'meshSet'" {
          description
           "Only valid when mesh-group-enable
            equals meshSet";
        }
        type uint8;
        description
         "Describes describes the mesh group ID IPv4 addresses of the interface."; node.
          ISIS reference is TLV 132.";
      }

      leaf interface-type ipv4-te-routerid {

        type interface-type; inet:ipv4-address;
        description
          "This leaf defines describes the type IPv4 Traffic Engineering
          router ID of adjacency
         to be established on the interface.
         This node.
          ISIS reference is affecting the type of hello
         message that would be used."; TLV 134.";
      }

      uses admin-control;

      leaf-list tag

      container extended-ipv4-reachability {
        if-feature prefix-tag;

        type uint32;

        list prefixes {
          uses prefix-ipv4-extended;
          description
           "List of prefixes.";
        }
        description
         "This leaf defines container describes list of tags associated
          with the interface."; IPv4 extended
         reachability information.
         ISIS reference is TLV 135.";
      }
      leaf-list tag64
      leaf dynamic-hostname {
        if-feature prefix-tag64;
        type uint64; string;

        description
         "This leaf defines list describes the name of 64bits tags
         associated with the interface."; node.
         ISIS reference is TLV 137.";
      }

      leaf node-flag ipv6-te-routerid {
          if-feature node-flag;
        type boolean;
          default false; inet:ipv6-address;
        description
           "Set prefix as a node
           representative prefix.";
         "This leaf describes the IPv6 Traffic Engineering
          router ID of the node.
          ISIS reference is TLV 140.";
      }

      container hello-authentication {
          uses hello-authentication-cfg;

          container level-1 mt-is-neighbor {
              uses hello-authentication-cfg;
              description "level-1 specific cfg";
          }
          container level-2
        list neighbor {
              uses hello-authentication-cfg;
              description "level-2 specific cfg";
          }
          description "Authentication type
         to be used in hello messages.";
      }

      container hello-interval
          leaf MT-ID {
          uses hello-interval-cfg;

          container level-1
            type uint16 {
              uses hello-interval-cfg;
              range "0 .. 4095";
            }
            description "level-1 specific cfg";
             "This leaf defines the identifier
              of a topology.";
          }
          container level-2 {
          uses hello-interval-cfg; neighbor-extended;
          description "level-2 specific cfg";
           "List of neighbors.";
        }
        description "Interval between
           hello messages.";
         "This container describes list of ISIS multi-topology
          neighbors.
          ISIS reference is TLV 223.";
      }

      container hello-multiplier mt-entries {
          uses hello-multiplier-cfg;

          container level-1
        list topology {
              uses hello-multiplier-cfg;
              description "level-1 specific cfg";
          }
          container level-2

          leaf MT-ID {
              uses hello-multiplier-cfg;
              description "level-2 specific cfg";
            type uint16 {
              range "0 .. 4095";
            }
            description "Hello multiplier
          configuration.";
             "This leaf defines the identifier
              of a topology.";
          }

      container priority
          leaf attributes {
          must '../interface-type = "broadcast"'
            type bits {
          error-message
           "Priority only applies to broadcast
           interfaces.";
          description
           "Check for broadcast interface.";
        }
          uses priority-cfg;

          container level-1
              bit OVERLOAD {
              uses priority-cfg;
                description "level-1 specific cfg";
                 "If set, the originator is overloaded,
                  and must be avoided in path
                  calculation.";
              }
          container level-2
              bit ATTACHED {
              uses priority-cfg;
                description "level-2 specific cfg";
                 "If set, the originator is attached to
                  another area using the referred metric.";
              }
          description "Priority for DIS election.";
            }

      container metric {
          uses metric-cfg;

          container level-1 {
              uses metric-cfg;
            description "level-1 specific cfg";
             "This leaf describes attributes of the LSP
              for the associated topology.";
          }
          container level-2 {
              uses metric-cfg;
          description "level-2 specific cfg";
           "List of topologies supported.";
        }
        description "Metric configuration.";
      }
         "This container bfd {
          if-feature bfd;
          leaf enable describes the topology supported.
         ISIS reference is TLV 229.";
      }

      leaf-list ipv6-addresses {
        type boolean;
              default false; inet:ipv6-address;
        description "
                  Enables BFD on
         "This leaf describes the IPv6 interface
              ";
          }
          description
           "BFD configuration.";
         addresses of the node.
         ISIS reference is TLV 232.";
      }

      container afs mt-extended-ipv4-reachability {
          if-feature nlpid-control;
        list af prefixes {
            key af;
          leaf af MT-ID {
            type identityref uint16 {
                base rt:address-family;
              range "0 .. 4095";
            }
            description
                "Address-family";
             "This leaf defines the identifier
              of a topology.";
          }
          uses prefix-ipv4-extended;
          description
           "List of AFs."; prefixes.";

        }
        description
               "Container for address-families";
         "This container describes list of IPv4
         reachability information in multi-topology
         environment.
         ISIS reference is TLV 235.";
      }

      container mpls mt-ipv6-reachability {
        container igp-ldp-sync
        list prefixes {
          if-feature igp-ldp-sync;
          leaf enable MT-ID {
            type boolean;
            description
             "Enable/disable IGP LDP sync."; uint16 {
              range "0 .. 4095";
            }
            description
           "IGP-LDP sync configuration.";
             "This leaf defines the identifier
              of a topology.";
          }
          uses prefix-ipv6-extended;
          description
         "Container for MPLS specific configuration
         for ISIS.";
      }
           "List of prefixes.";
        }

    grouping isis-if-topologies-cfg {
        description
       "ISIS interface topology cfg.";
      container metric {
          uses metric-cfg;
         "This container level-1 {
              uses metric-cfg;
              description "level-1 specific cfg"; describes list of IPv6
         reachability information in multi-topology
         environment.
         ISIS reference is TLV 237.";
      }

      container level-2 {
              uses metric-cfg;
              description "level-2 specific cfg";
          }
          description "Metric configuration.";
      }
    }

    /* */

    augment "/rt:routing-state/"
      +"rt:ribs/rt:rib/rt:routes/rt:route" ipv6-reachability {
      when "rt:source-protocol = 'isis:isis'"
        list prefixes {
          uses prefix-ipv6-extended;
          description "ISIS-specific route attributes.";
           "List of prefixes.";
        }
      uses route-content;
        description
         "This augments route object in RIB with ISIS-specific
        attributes."; container describes list of IPv6
         reachability information.
         ISIS reference is TLV 236.";
      }

    augment "/if:interfaces/if:interface"

      list router-capabilities {
        leaf clns-mtu flags {
          type uint16; bits {
            bit flooding {
              position 0;
              description
         "Defines CLNS MTU of
               "If the interface.";
      }
      description "ISO interface config.";
      }

    augment "/rt:routing/rt:control-plane-protocols/"
        +"rt:control-plane-protocol" {
      when "rt:type = 'isis:isis'" S bit is set(1),
               the IS-IS Router CAPABILITY TLV
              MUST be flooded across the entire routing domain.
              If the S bit is
              not set(0), the TLV MUST NOT be leaked between levels.
              This bit MUST NOT be altered during the TLV leaking.";
            }
            bit down {
              position 1;
              description
         "This augment is only valid when routing protocol
          instance type
              "When the IS-IS Router CAPABILITY TLV is isis.";
      }
      description
       "This augments a routing protocol instance
              leaked from level-2 to level-1, the D bit
              MUST be set.  Otherwise, this bit MUST
              be clear.  IS-IS Router capability TLVs
              with ISIS
        specific parameters.";
      container isis {

          must "count(area-address) > 0" {
            error-message "At least one area-address
            must the D bit set MUST NOT
              be configured.";
            description
             "Enforce configuration of at least one area."; leaked from level-1 to level-2.
              This is to prevent TLV looping.
              ";
            }
          }

          uses isis-global-cfg;

          container fast-reroute {
           if-feature fast-reroute;
           uses fast-reroute-global-cfg;
          description
                "IPFRR.";
           "Flags associated with router capability.";
        }
        container topologies node-tags {
          if-feature multi-topology; node-tag;
          list topology {

                key "name";

                leaf enable node-tag {
                  type boolean;
                  description
                   "Control enabling of topologies";
                }
            leaf name tag {
              type leafref {
                     path "../../../../../../rt:ribs/rt:rib/rt:name";
                   }

                  description "RIB";
                }

                uses isis-global-topologies-cfg;
                container fast-reroute {
                 if-feature fast-reroute;
                 uses fast-reroute-global-cfg; uint32;
              description
                    "IPFRR.";
               "Node tag value.";
            }
            description
             "List of topologies"; tags.";
          }
          description
           "Container for multi-topology"; node tags.";
        }

          container interfaces {
            list interface {
              key "name";

        leaf name binary {
          type if:interface-ref; binary;
          description
                 "Reference to
           "This leaf describes the interface within capability of the routing-instance."; node.
           Format is binary according to the protocol encoding.";
        }

            uses isis-if-cfg;
            container fast-reroute {
              if-feature fast-reroute;
              uses fast-reroute-if-cfg;
        description
                "IPFRR.";
            }
         "This container topologies {
                if-feature multi-topology;
                list topology {
                    key name;

                    leaf name {
                      type leafref {
                          path "../../../../../../../../"+
                          "rt:ribs/rt:rib/rt:name";
                      }

                      description
                       "Name describes the capabilities of RIB."; the node.
         This container may be extended with detailed
         information.
         ISIS reference is TLV 242.";
      }
    }

    grouping isis-node-tag-cfg {
      description
       "ISIS node tag config.";
      container fast-reroute node-tags {
          if-feature fast-reroute;
                      uses fast-reroute-if-cfg; node-tag;
          list node-tag {
            key tag;
            leaf tag {
              type uint32;
              description
                       "IPFRR.";
               "Node tag value.";
            }
                    uses isis-if-topologies-cfg;
            description
             "List of topologies."; tags.";
          }
          description
            "Container for multi-topology";
            }

            description
              "List of ISIS interfaces."; node tags.";
        }
            description
             "This container defines ISIS interface specific
             configuration objects.";
    }

    grouping authentication-global-cfg {
          choice authentication-type {
              case key-chain {
                if-feature key-chain;
                leaf key-chain {
                  type key-chain:key-chain-ref;
                  description
         "This container defines ISIS specific configuration
          objects.";
                    "Reference to a key-chain.";
                }
              }

    augment "/rt:routing-state/"
      +"rt:control-plane-protocols/rt:control-plane-protocol"
              case password {
      when "rt:type = 'isis:isis'"
                leaf key {
        description
         "This augment is only valid when routing protocol
          instance
                  type is isis.";
      } string;
                  description
                   "This augments routing protocol instance states with ISIS
        specific parameters.";

      container isis {
        config false;
          uses isis-global-cfg;
          container fast-reroute {
            if-feature fast-reroute;
            uses fast-reroute-global-cfg; leaf describes the
                     authentication key.";
                }
                uses fast-reroute-global-state; key-chain:crypto-algorithm-types;
              }
              description
             "IPFRR states.";
                 "Choice of authentication.";
            }

          list topologies
           description
            "Grouping for global auth config.";
    }

    grouping metric-type-global-cfg {
            key name;
          leaf name value {
              type leafref enumeration {
                enum wide-only {
                 path "../../../../../"
                 +"rt:ribs/rt:rib/rt:name";
               }
                  description
                "Name of RIB.";
                   "Advertise new metric style only
                   (RFC5305)";
                }
            container fast-route
                enum old-only {
              if-feature fast-reroute;
              uses fast-reroute-global-cfg;
              uses fast-reroute-global-state;
                  description
                "IPFRR states.";
                   "Advertise old metric style only
                   (RFC1195)";
                }
                enum both {
                  description
             "List of topologies."; "Advertise both metric
                  styles";
                }
              }

          container system-counters {
            list level {
              key level;

              leaf level {
                type level-number;
              description
               "This leaf describes the ISIS level."; type of metric
               to be generated.
               Wide-only means only new metric style
               is generated,
               old-only means that only old style metric
               is generated,
               and both means that both are advertised.
               This leaf is only affecting IPv4 metrics.";
            }
             description
            "Grouping for global metric style config.";
    }

    grouping default-metric-global-cfg {
      leaf corrupted-lsps value {
              type uint32; wide-metric;
              default "10";
              description
                 "Number
                "Value of corrupted in-memory LSPs detected.
                 LSPs received from the wire with a bad
                 checksum are silently dropped and not counted.
                 LSPs received from the wire with parse errors
                 are counted by lsp-errors."; metric";
            }
              leaf authentication-type-fails {
                type uint32;
      description
                 "Number of authentication type mismatches.";
            "Grouping for global default metric config.";
    }

   grouping overload-global-cfg {
      leaf authentication-fails status {
          type uint32; boolean;
          description
                 "Number of authentication key failures.";
           "This leaf defines the overload status.";
      }
            description
        "Grouping for overload bit config.";
  }
  grouping overload-max-metric-global-cfg {
      leaf database-overload timeout {
          type uint32; uint16;
          units "seconds";
          description
                 "Number
           "This leaf defines the timeout in seconds
            of times the database has become
                 overloaded."; overload condition.";
        }
        description
        "Grouping for overload-max-metric config.";
  }

   grouping route-preference-global-cfg {
      choice granularity {
              case detail {
                leaf own-lsp-purge internal {
                  type uint32; uint8;
                  description
                 "Number of times a zero-aged copy of
                    "This leaf defines the
                 system's own LSP is received from some
                 other node."; protocol
                     preference for internal routes.";
                }
                leaf manual-address-drop-from-area external {
                  type uint32; uint8;
                  description
                 "Number of times a manual address
                  has been dropped from
                    "This leaf defines the area."; protocol
                     preference for external routes.";
                }
              }
              case coarse {
                leaf max-sequence default {
                  type uint32; uint8;
                  description
                 "Number of times the system has attempted
                  to exceed
                    "This leaf defines the maximum sequence number."; protocol
                     preference for all ISIS routes.";
                }
              }
              leaf sequence-number-skipped {
                type uint32;
              description
                 "Number
               "Choice for implementation of times a sequence number skip has
                 occured."; route preference.";
            }
              leaf id-len-mismatch {
                type uint32;

      description
                 "Number of times a PDU
       "This grouping defines how route preference is received with
                  a different value for ID field length
                  from that of the receiving system."; configured.";
   }

  grouping hello-authentication-cfg {
      choice authentication-type {
          case key-chain {
            if-feature key-chain;
            leaf partition-changes key-chain {
              type uint32; key-chain:key-chain-ref;
              description
                 "Number of partition changes detected.";
                "Reference to a key-chain.";
            }
          }
          case password {
            leaf lsp-errors key {
              type uint32; string;
              description
                 "Number
               "This leaf describes the
                 authentication key.";
            }
            uses key-chain:crypto-algorithm-types;
          }
          description
             "Choice of LSPs with errors we have
                 received."; authentication.";
        }
        description
         "Grouping for hello authentication.";
  }

  grouping hello-interval-cfg {
        leaf spf-runs value {
          type uint32; uint16 {
              range "1..65535";
              }
          units "seconds";
          default 10;
          description
                 "Number
           "This leaf defines the interval of times we ran SPF at this level.";
           hello messages.";
        }

        description
               "List
           "Interval between
           hello messages.";
      }
      grouping hello-multiplier-cfg {
        leaf value {
          type uint16;
          description
           "This leaf defines the number of supported levels.";
           hello failed to be received before
           declaring the adjacency down.";
        }
        description
             "The container
           "This grouping defines a list the number of counters
              for
            hello failed to be received before
            declaring the IS."; adjacency down.";
      }

          container interfaces {
            list interface

      grouping priority-cfg {
              key interface;

        leaf interface value {
          type string; uint8 {
            range "0 .. 127";
          }
          default 64;
          description
           "This leaf describes the name priority of
           the interface."; interface
           for DIS election.";
        }
              uses isis-if-cfg;
              container fast-reroute {
               if-feature fast-reroute;
               uses fast-reroute-if-cfg;

        description
                "IPFRR.";
           "This grouping leaf describes the
           priority of
           the interface
           for DIS election.";
      }
              uses adjacency-state;

              list topologies

      grouping metric-cfg {
                key name;
        leaf name value {
          type leafref wide-metric;
          description
           "Metric value.";
        }
        description
         "Grouping for interface metric";
      }
      grouping lfa-if-cfg {
                      path "../../../../../"
                      +"../../rt:ribs/rt:rib/rt:name";
          leaf candidate-disabled {
            type boolean;
            default false;
            description
             "Prevent the interface to be used as backup.";
          }
          leaf enable {
            type boolean;
            description
                    "Name
             "Activates LFA.
             This model assumes activation
             of RIB."; per-prefix LFA.";
          }
                uses isis-if-topologies-cfg;

          container fast-reroute remote-lfa {
            if-feature fast-reroute;
                 uses fast-reroute-if-cfg; remote-lfa;
            leaf enable {
              type boolean;
              description
              "Activates rLFA.";
            }
            description
                  "IPFRR.";
             "remote LFA configuration.";
          }
                uses adjacency-state;
          description
                 "List of topologies.";
           "Grouping for LFA
           interface configuration";
      }

              container event-counters
    grouping isis-global-cfg {
      description
       "Defines the ISIS global configuration.";

          uses admin-control;

          leaf adjacency-changes level-type {
            type uint32; level;
            default "level-all";
            description
                   "The number
             "This leaf describes the type of times an adjacency state
                    change has occured on this interface."; ISIS node.
             A node can be level-1-only, level-2-only
             or level-1-2.
             ";
          }

          leaf adjacency-number system-id {
            type uint32; system-id;
            description
                   "The number
             "This leaf defines the system-id of adjacencies on this
                    interface."; the node.";
          }
          leaf init-fails maximum-area-addresses {
            if-feature maximum-area-addresses;
            type uint32; uint8;
            default 3;
            description
                   "The number of times initialization
             "Defines the maximum areas supported.";
          }

          leaf-list area-address {
            type area-address;
            description
             "List of
                    this interface has failed. This counts
                    events such as PPP NCP failures.
                    Failures to form an adjacency are counted areas supported by adjacency-rejects."; the
             protocol instance.";
          }

          container mpls {
            leaf adjacency-rejects ipv4-router-id {
              if-feature ipv4-router-id;
              type uint32; inet:ipv4-address;
              description
                   "The number of times an adjacency has been
                    rejected on this interface.";
               "Router ID value that would be used in
               TLV 134.";
            }
            leaf id-len-mismatch ipv6-router-id {
              if-feature ipv6-router-id;
              type uint32; inet:ipv6-address;
              description
                   "The number of times an IS-IS PDU with an
               "Router ID
                    field length different from value that would be used in
               TLV 140.";
            }
            container igp-ldp-sync {
              if-feature igp-ldp-sync;
              description
                "This container may be augmented
                with global parameters for this
                    system has been received on this interface."; igp-ldp-sync.";
            }
            description
              "This container handles mpls config.";
          }
          leaf max-area-addresses-mismatch reference-bandwidth {
            if-feature reference-bandwidth;
            type uint32;
            units "bps";
            description
                   "The number of times an IS-IS PDU with
                    according max area address field
                    differs from that
             "This leaf defines the bandwidth for
                    this system has been received on this
                    interface."; calculating
              metric.";
          }
          leaf authentication-type-fails lsp-mtu {
            type uint32; uint16;
            units "bytes";
            default 1492;
            description
                   "Number
             "This leaf describes the maximum size of authentication type mismatches."; a
              LSP PDU in bytes.";
          }
          leaf authentication-fails lsp-lifetime {
            type uint32; uint16 {
              range "1..65535";
              }
            units "seconds";
            description
                   "Number
             "This leaf describes the lifetime of authentication key failures."; the router
              LSP in seconds.";
          }
          leaf lan-dis-changes lsp-refresh {
            if-feature lsp-refresh;
            type uint32; uint16 {
              range "1..65535";
              }
            units "seconds";
            description
                   "The number of times
             "This leaf describes the DIS has changed
                    on this interface at this level.
                    If refresh interval of the interface
              router LSP in seconds.";
          }

          container graceful-restart {
            if-feature graceful-restart;
            leaf enable {
              type is point to point, boolean;
              description
               "Control enabling the count is zero."; feature.";
            }
            description
                 "Provides protocol event counters.";
             "This container activates graceful restart.";
          }

          container packet-counters {
                list level nsr {
                  key level;
              if-feature nsr;
              description
              "Non-Stop Routing (NSR) config state.";
              leaf level enable {
                  type level-number; boolean;
                  description
                     "This leaf describes the ISIS level.";
                   "Enable/Disable NSR.";
              }

          }

          uses isis-node-tag-cfg;

          container iih authentication {
                    leaf in
              uses authentication-global-cfg;

              container level-1 {
                      type uint32;
                  uses authentication-global-cfg;
                  description
                       "Received PDUs."; "level-1 specific cfg";
              }
                    leaf out
              container level-2 {
                      type uint32;
                  uses authentication-global-cfg;
                  description
                       "Sent PDUs."; "level-2 specific cfg";
              }
              description
                     "The number of IIH PDUs received/sent."; "authentication global cfg.
              It covers both LSPs and SNPs.";
          }

          container ish metric-type {
              uses metric-type-global-cfg;

              container level-1 {
                  uses metric-type-global-cfg;
                  description "level-1 specific cfg";
              }
              container level-2 {
                  uses metric-type-global-cfg;
                  description "level-2 specific cfg";
              }
              description "Metric style global cfg.";
          }

          container default-metric {
              uses default-metric-global-cfg;

              container level-1 {
                  uses default-metric-global-cfg;
                  description "level-1 specific cfg";
              }
              container level-2 {
                  uses default-metric-global-cfg;
                  description "level-2 specific cfg";
              }
              description "Default metric global cfg.";
          }
          container afs {
              if-feature nlpid-control;
              list af {
                key af;
                leaf in af {
                  type uint32; identityref {
                    base rt:address-family;
                  }
                  description
                       "Received PDUs.";
                   "Address-family";
                }

                leaf out enable {
                  type uint32; boolean;
                  description
                       "Sent PDUs.";
                    "Describes the activation state of the
                     AF.";
                }
                description
                     "The number
                 "This list permits activation
                 of ISH PDUs received/sent."; new address families.";

              }
              description
               "Container for address-families";
          }

          container esh {
                    leaf in preference {
                      type uint32;
              uses route-preference-global-cfg;
              description
                       "Received PDUs.";
               "This container defines the protocol preference.";
          }
                    leaf out

          container overload {
                      type uint32;

              uses overload-global-cfg;
              description
                       "Sent PDUs.";
             "This container describes if the router is
              set to overload state.";
          }

          container overload-max-metric {
              if-feature overload-max-metric;
              uses overload-max-metric-global-cfg;

              description
                     "The number of ESH PDUs received/sent.";
             "This container describes if the router is
              set to overload state using max-metric
              advertisement.";
          }

    }

    grouping isis-global-topologies-cfg {
     description
      "Per topology config.";

      container lsp default-metric {
                    leaf in
              uses default-metric-global-cfg;

              container level-1 {
                      type uint32;
                  uses default-metric-global-cfg;
                  description
                       "Received PDUs."; "level-1 specific cfg";
              }
                    leaf out
              container level-2 {
                      type uint32;
                  uses default-metric-global-cfg;
                  description
                       "Sent PDUs."; "level-2 specific cfg";
              }
              description
                     "The number of LSP PDUs received/sent."; "Default metric per
              topology cfg.";
          }
                  container psnp

        uses isis-node-tag-cfg;
    }

    grouping isis-if-cfg {
      description
       "Grouping for interface cfg.";

      leaf in level-type {
        type uint32; level;
        default "level-all";
        description
                       "Received PDUs.";
         "This leaf defines the associated ISIS
         level of the interface.";
      }
      leaf out lsp-pacing-interval {
        type uint32; uint16;
        units "milliseconds";
        default 33;
        description
                       "Sent PDUs.";
         "This leaf defines the interval between
          LSP transmissions in milli-seconds";
      }
      leaf lsp-retransmit-interval {
        type uint16;
        units "seconds";
        description
                     "The number
         "This leaf defines the interval between
         retransmission of PSNP PDUs received/sent."; LSP";
      }
                  container csnp {
      leaf in passive {
        type uint32; boolean;
        default "false";
        description
                       "Received PDUs.";
         "This leaf defines if interface is in
          passive mode (ISIS not running,
          but network is advertised).";
      }
      leaf out csnp-interval {
        type uint32;
                      description
                       "Sent PDUs."; uint16 {
              range "1..65535";
              }
        units "seconds";
        default 10;
        description
                     "The number
         "This leaf defines the interval of CSNP PDUs received/sent.";
          messages.";
      }

      container unknown hello-padding {
        leaf in enable {
          type uint32; boolean;
          default "true";
          description
                       "Received PDUs.";
           "Status of Hello-padding activation.
            By default, the implementation shall
            pad HELLOs.";
        }

        description
         "This container handles ISIS hello padding
          configuration.";
      }

      leaf out mesh-group-enable {
        type uint32;
                      description
                       "Sent PDUs.";
                    }
                    description
                     "The number of unknown PDUs received/sent.";
                  } mesh-group-state;
        description
                   "List
         "Describes the mesh group state of supported levels.";
          the interface.";

      }

      leaf mesh-group {
        when "../mesh-group-enable = 'meshSet'" {
          description
                 "Provides packet counters per level.";
           "Only valid when mesh-group-enable
            equals meshSet";
        }
        type uint8;
        description
               "List
         "Describes the mesh group ID of interfaces.";
          the interface.";
      }

      leaf interface-type {
        type interface-type;
        description
             "The container
         "This leaf defines operational parameters the type of interfaces."; adjacency
         to be established on the interface.
         This is affecting the type of hello
         message that would be used.";
      }

          container spf-log {
            list event

      uses admin-control;

      leaf-list tag {
              key id;
        if-feature prefix-tag;

        type uint32;
        description
         "This leaf id defines list of tags associated
          with the interface.";
      }

      leaf-list tag64 {
        if-feature prefix-tag64;

        type uint32; uint64;
        description
         "This leaf defines list of 64bits tags
         associated with the event identifier.
                  This is a purely internal value."; interface.";
      }

      leaf spf-type node-flag {
          if-feature node-flag;
          type enumeration boolean;
          default false;
          description
           "Set prefix as a node
           representative prefix.";

      }

      container hello-authentication {
                  enum full
          uses hello-authentication-cfg;

          container level-1 {
              uses hello-authentication-cfg;
              description "level-1 specific cfg";
          }
          container level-2 {
              uses hello-authentication-cfg;
              description "level-2 specific cfg";
          }
          description "Authentication type
         to be used in hello messages.";
      }

      container hello-interval {
          uses hello-interval-cfg;

          container level-1 {
              uses hello-interval-cfg;
              description "level-1 specific cfg";
          }
          container level-2 {
              uses hello-interval-cfg;
              description
                     "Computation done is a Full SPF."; "level-2 specific cfg";
          }
                  enum incremental
          description "Interval between
           hello messages.";
      }

      container hello-multiplier {
          uses hello-multiplier-cfg;

          container level-1 {
              uses hello-multiplier-cfg;
              description
                     "Computation done is an
                      incremental SPF."; "level-1 specific cfg";
          }
                  enum route-only
          container level-2 {
              uses hello-multiplier-cfg;
              description
                     "Computation done is a
                      reachability computation
                      only."; "level-2 specific cfg";

          }
          description "Hello multiplier
          configuration.";
      }

      container priority {
          must '../interface-type = "broadcast"' {
          error-message
           "Priority only applies to broadcast
           interfaces.";
          description
                 "This leaf describes the type of computation
                 used.";
           "Check for broadcast interface.";
        }
              leaf level
          uses priority-cfg;

          container level-1 {
                type level-number;
              uses priority-cfg;
              description
                 "This leaf describes the level affected by the
                 the computation."; "level-1 specific cfg";
          }
              leaf spf-delay
          container level-2 {
                type uint32;
                units "milliseconds";
              uses priority-cfg;
              description
                 "This leaf describes the SPF delay that
                 was used "level-2 specific cfg";
          }
          description "Priority for this event."; DIS election.";
      }
              leaf schedule-timestamp

      container metric {
                type yang:timestamp;
          uses metric-cfg;

          container level-1 {
              uses metric-cfg;
              description
                 "This leaf describes the timestamp
                  when the computation was scheduled."; "level-1 specific cfg";
          }
              leaf start-timestamp
          container level-2 {
                type yang:timestamp;
              uses metric-cfg;
              description
                 "This leaf describes the timestamp
                  when the computation was started."; "level-2 specific cfg";
          }
              leaf end-timestamp {
                type yang:timestamp;
          description
                 "This leaf describes the timestamp
                  when the computation was ended."; "Metric configuration.";
      }
              list trigger-lsp

      container bfd {
                key "lsp";
          if-feature bfd;
          leaf lsp enable {
              type lsp-id; boolean;
              default false;
              description
                   "This leaf describes the LSPID
                    of "
                  Enables BFD on the LSP."; interface
              ";

          }
                leaf sequence {
                  type uint32;
          description
                   "This leaf describes the sequence
                    number of the LSP.";
           "BFD configuration.";
      }

      container afs {
          if-feature nlpid-control;
          list af {
            key af;

            leaf af {
              type identityref {
                base rt:address-family;
              }
              description
                 "This leaf describes list of LSPs
                  that triggered the computation.";
                "Address-family";
            }

            description
             "List of computation events."; AFs.";
          }
          description
             "This container lists the SPF computation events.";
               "Container for address-families";
      }

      container lsp-log mpls {
            list event
        container igp-ldp-sync {
              key id;
          if-feature igp-ldp-sync;
          leaf id enable {
            type uint32; boolean;
            description
                 "This leaf defines the event identifier.
                  This is a purely internal value.";
             "Enable/disable IGP LDP sync.";
          }
              leaf level {
                type level-number;
          description
                 "This leaf describes the level affected by the
                 the computation.";
           "IGP-LDP sync configuration.";
        }
        description
         "Container for MPLS specific configuration
         for ISIS.";
      }

    }

    grouping isis-if-topologies-cfg {
      description
       "ISIS interface topology cfg.";
      container lsp metric {
                leaf lsp
          uses metric-cfg;

          container level-1 {

                  type lsp-id;
              uses metric-cfg;
              description
                   "This leaf describes the LSPID
                    of the LSP."; "level-1 specific cfg";
          }
                leaf sequence
          container level-2 {
                  type uint32;
              uses metric-cfg;
              description
                   "This leaf describes the sequence
                    number of the LSP."; "level-2 specific cfg";
          }
          description
                 "This container describes the received LSP
                 , in case of local LSP update the local
                 LSP ID is referenced."; "Metric configuration.";
      }
              leaf received-timestamp
    }

    /* */

    augment "/rt:routing-state/"
      +"rt:ribs/rt:rib/rt:routes/rt:route" {
                type yang:timestamp;
      when "rt:source-protocol = 'isis:isis'" {
        description "ISIS-specific route attributes.";
      }
      uses route-content;
      description
       "This leaf describes the timestamp
                 when the LSP was received. In case of
                 local LSP update, the timestamp refers
                 to the local LSP update time."; augments route object in RIB with ISIS-specific
        attributes.";
      }

    augment "/if:interfaces/if:interface"
       {
      leaf change clns-mtu {
        type bits {
                  bit refresh {
                    position 0;
                    description
                     "Refresh LSP, nothing has changed.";
                  }
                  bit link-down {
                    position 1; uint16;
        description
                     "One or more links are down.";
         "Defines CLNS MTU of the interface.";
      }
                  bit link-up {
                    position 2;
      description
                     "One or more links are up."; "ISO interface config.";
      }
                  bit link-metric-change

    augment "/rt:routing/rt:control-plane-protocols/"
        +"rt:control-plane-protocol" {
      when "rt:type = 'isis:isis'" {
                    position 3;
        description
                     "One or more links experienced
                     a metric change.";
         "This augment is only valid when routing protocol
          instance type is isis.";
      }
                  bit link-other-change {
                    position 4;
      description
                     "One or more links experienced
       "This augments a change that does not affect state
                     or metric.";
                  }
                  bit prefix-down routing protocol instance with ISIS
        specific parameters.";
      container isis {
                    position 5;
                    description
                     "One or more links are down.";
                  }
                  bit prefix-up

          must "count(area-address) > 0" {
                    position 6;
            error-message "At least one area-address
            must be configured.";
            description
                     "One or more prefixes are up.";
             "Enforce configuration of at least one area.";
          }
                  bit prefix-metric-change

          uses isis-global-cfg;

          container fast-reroute {
                    position 7;
           if-feature fast-reroute;
           uses fast-reroute-global-cfg;
           description
                     "One or more prefixes experienced
                     a metric change.";
                "IPFRR.";
          }
                  bit prefix-other-change
          container topologies {
                    position 8;
              if-feature multi-topology;
              list topology {

                key "name";

                leaf enable {
                  type boolean;
                  description
                     "One or more prefixes experienced
                     a change that does not affect state
                     or metric.";
                   "Control enabling of topologies";
                }
                  bit other-change

                leaf name {
                    position 9;
                    description
                     "One or more component changed that
                     is not a prefix or link.";
                  type leafref {
                     path "../../../../../../rt:ribs/rt:rib/rt:name";
                   }

                  description "RIB";
                }

                uses isis-global-topologies-cfg;
                container fast-reroute {
                 if-feature fast-reroute;
                 uses fast-reroute-global-cfg;
                 description
                 "This leaf describes the type of change
                 in the LSP.";
                    "IPFRR.";
                }

                description
                  "List of LSP events."; topologies";
              }
              description
             "This
               "Container for multi-topology";
          }

          container lists the LSP reception events.
             Local LSP modification are also contained in interfaces {
            list interface {
              key "name";
              leaf name {
                type if:interface-ref;

                description
                 "Reference to the
             list."; interface within
                  the routing-instance.";
              }

            uses isis-if-cfg;
            container database fast-reroute {
              if-feature fast-reroute;
              uses fast-reroute-if-cfg;
              description
                "IPFRR.";
            }
            container topologies {
                if-feature multi-topology;
                list level-db topology {
                    key level; name;

                    leaf level name {
                      type level-number; leafref {
                          path "../../../../../../../../"+
                          "rt:ribs/rt:rib/rt:name";
                      }

                      description
                 "Current level number";
                       "Name of RIB.";
                    }
              list lsp
                    container fast-reroute {
                key lsp-id;
                      if-feature fast-reroute;
                      uses database; fast-reroute-if-cfg;
                      description
                       "IPFRR.";
                    }
                    uses isis-if-topologies-cfg;
                    description
                     "List of LSPs in LSDB."; topologies.";
                }
              description
               "This container describes the list
               "Container for multi-topology";
            }

            description
              "List of LSPs
               in the level x database."; ISIS interfaces.";
            }
            description
             "This container describes defines ISIS Link State
              databases."; interface specific
             configuration objects.";
          }

        description
         "This container hostnames {

            list hostname defines ISIS specific configuration
          objects.";
      }
    }

    augment "/rt:routing-state/"
      +"rt:control-plane-protocols/rt:control-plane-protocol" {
              key system-id;
              leaf system-id
      when "rt:type = 'isis:isis'" {
        description
         "This augment is only valid when routing protocol
          instance type system-id; is isis.";
      }
      description
       "This leaf describes the system-id
                 associated augments routing protocol instance states with the hostname."; ISIS
        specific parameters.";

      container isis {
        config false;
          uses isis-global-cfg;
          container fast-reroute {
            if-feature fast-reroute;
            uses fast-reroute-global-cfg;
            uses fast-reroute-global-state;
            description
             "IPFRR states.";
          }

          list topologies {
            key name;

            leaf hostname name {
              type string;
                description
                 "This leaf describes the hostname
                  associated with the system ID."; leafref {
                 path "../../../../../"
                 +"rt:ribs/rt:rib/rt:name";
               }

              description
               "List
                "Name of system-id/hostname associations"; RIB.";
            }

            description
             "This
            container describes the list
             of binding between system-id and
             hostnames.";
          } fast-route {
              if-feature fast-reroute;
              uses fast-reroute-global-cfg;
              uses fast-reroute-global-state;
              description
           "This container defines various ISIS states objects.";
      }
                "IPFRR states.";
            }

    /* RPC methods */
    rpc clear-adjacency {
            description
       "This RPC request clears a particular
        set
             "List of ISIS adjacencies. If the operation
        fails for ISIS internal reason, then
        error-tag and error-app-tag should be set
        to a meaningful value.";
      input topologies.";
          }

          container system-counters {
            list level {
              key level;

              leaf routing-protocol-instance-name level {
                type instance-state-ref;
          mandatory "true"; level-number;
                description
           "Name of the ISIS protocol instance whose ISIS
            information is being queried.

            If
                 "This leaf describes the ISIS instance with name equal to the
            value of this parameter doesn't exist, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'routing-protocol-instance-not-found'."; level.";
              }
              leaf level corrupted-lsps {
                type level; uint32;
                description
           "ISIS level
                 "Number of corrupted in-memory LSPs detected.
                 LSPs received from the adjacency to be cleared.
           If ISIS level is level-1-2, both level 1 wire with a bad
                 checksum are silently dropped and level 2
           adjacencies would be cleared.

           If the value provided is different not counted.
                 LSPs received from the one
           authorized in the enum type, then this
            operation SHALL fail wire with error-tag 'data-missing'
            and error-app-tag
            'bad-isis-level'.
           "; parse errors
                 are counted by lsp-errors.";
              }
              leaf interface authentication-type-fails {
                type string; uint32;
                description
           "Name of the ISIS interface.

            If the ISIS interface with name equal to the
            value
                 "Number of this parameter doesn't exist, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'isis-interface-not-found'.";
        }
      } authentication type mismatches.";
              }

    rpc clear-database
              leaf authentication-fails {
                type uint32;
                description
       "This RPC request clears a particular
        ISIS database. If the operation
        fails for ISIS internal reason, then
        error-tag and error-app-tag should be set
        to a meaningful value.";
      input {
                 "Number of authentication key failures.";
              }
              leaf routing-protocol-instance-name database-overload {
                type instance-state-ref;
          mandatory "true"; uint32;
                description
           "Name
                 "Number of times the ISIS protocol instance whose ISIS
            information is being queried.

            If the ISIS instance with name equal to the
            value of this parameter doesn't exist, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'routing-protocol-instance-not-found'."; database has become
                 overloaded.";
              }
              leaf level own-lsp-purge {
                type level; uint32;
                description
           "ISIS level
                 "Number of times a zero-aged copy of the adjacency to be cleared.
           If ISIS level is level-1-2, both level 1 and level 2
           adjacencies would be cleared.

           If the value provided
                 system's own LSP is different received from the one
           authorized in the enum type, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'bad-isis-level'.
           ";
        }
      } some
                 other node.";
              }

    /* Notifications */

    notification database-overload {
      uses notification-instance-hdr;
              leaf overload manual-address-drop-from-area {
                type enumeration {
          enum "off" { uint32;
                description
             "The system
                 "Number of times a manual address
                  has left overload condition."; been dropped from the area.";
              }
          enum "on"
              leaf max-sequence {
                type uint32;
                description
             "The system is in overload condition.";
          }

        }
        description
           "Describes the new overload state
                 "Number of times the instance."; system has attempted
                  to exceed the maximum sequence number.";
              }
              leaf sequence-number-skipped {
                type uint32;
                description
        "This notification is sent when an ISIS instance
         overload condition changes.";
                 "Number of times a sequence number skip has
                 occured.";
              }

    notification lsp-too-large {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
              leaf pdu-size id-len-mismatch {
                type uint32;
                description
         "Size
                 "Number of times a PDU is received with
                  a different value for ID field length
                  from that of the PDU"; receiving system.";
              }
              leaf lsp-id partition-changes {
                type lsp-id; uint32;
                description
         "LSP ID.";
                 "Number of partition changes detected.";
              }
              leaf lsp-errors {
                type uint32;
                description
        "This notification is sent when we attempt
         to propagate an LSP that is larger than the
         dataLinkBlockSize for the circuit.
         The notification generation must be throttled
                 "Number of LSPs with at least a 5 second gap.
         "; errors we have
                 received.";
              }

    notification corrupted-lsp-detected {
      uses notification-instance-hdr;
              leaf lsp-id spf-runs {
                type lsp-id; uint32;
                description
                 "Number of times we ran SPF at this level.";
              }
              description
         "LSP ID.";
               "List of supported levels.";
            }
            description
        "This notification is sent when we find
         that an LSP that was stored in memory has
         become corrupted.
         ";
             "The container defines a list of counters
              for the IS.";
          }

    notification attempt-to-exceed-max-sequence

          container interfaces {
      uses notification-instance-hdr;
            list interface {
              key interface;

              leaf lsp-id interface {
                type lsp-id;
        description
         "LSP ID.";
      } string;
                description
                 "This notification is sent when the system
        wraps leaf describes the 32-bit sequence counter name
                 of an LSP.
         "; the interface.";
              }

    notification id-len-mismatch
              uses isis-if-cfg;
              container fast-reroute {
               if-feature fast-reroute;
               uses notification-instance-hdr; fast-reroute-if-cfg;
               description
                "IPFRR.";
              }
              uses notification-interface-hdr; adjacency-state;

              list topologies {
                key name;

                leaf pdu-field-len name {
                  type uint8; leafref {
                      path "../../../../../"
                      +"../../rt:ribs/rt:rib/rt:name";
                  }

                  description
         "Size
                    "Name of the ID length in the received PDU"; RIB.";
                }
      leaf raw-pdu
                uses isis-if-topologies-cfg;
                container fast-reroute {
        type binary;
                 if-feature fast-reroute;
                 uses fast-reroute-if-cfg;
                 description
         "Received raw PDU.";
                  "IPFRR.";
                }
                uses adjacency-state;

                description
        "This notification is sent when we receive a PDU
        with a different value for the System ID length.
        The notification generation must be throttled
        with at least a 5 second gap.
         ";
                 "List of topologies.";
              }

    notification max-area-addresses-mismatch

              container event-counters {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                leaf max-area-addresses adjacency-changes {
                  type uint8; uint32;
                  description
         "Received
                   "The number of supported areas"; times an adjacency state
                    change has occured on this interface.";
                }
                leaf raw-pdu adjacency-number {
                  type binary; uint32;
                  description
         "Received raw PDU.";
                   "The number of adjacencies on this
                    interface.";
                }
                leaf init-fails {
                  type uint32;
                  description
        "This notification is sent when we receive a PDU
        with a different value for the Maximum Area Addresses.
        The notification generation must be throttled
        with at least a 5 second gap.
         ";
                   "The number of times initialization of
                    this interface has failed. This counts
                    events such as PPP NCP failures.
                    Failures to form an adjacency are counted
                    by adjacency-rejects.";
                }

    notification own-lsp-purge {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                leaf lsp-id adjacency-rejects {
                  type lsp-id; uint32;
                  description
         "LSP ID.";
                   "The number of times an adjacency has been
                    rejected on this interface.";
                }
                leaf id-len-mismatch {
                  type uint32;
                  description
        "This notification is sent when the system
        receives a
                   "The number of times an IS-IS PDU with its own system an ID and zero age.
         ";
                    field length different from that for this
                    system has been received on this interface.";
                }

    notification sequence-number-skipped {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                leaf lsp-id max-area-addresses-mismatch {
                  type lsp-id;
        description
         "LSP ID.";
      } uint32;
                  description
        "This notification is sent when the system
        receives a
                   "The number of times an IS-IS PDU with its own system ID and
        different contents. The
                    according max area address field
                    differs from that for
                    this system has to reissue
        the LSP with a higher sequence number.
         "; been received on this
                    interface.";
                }
    notification authentication-type-failure {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                leaf raw-pdu authentication-type-fails {
                  type binary;
        description
         "Received raw PDU.";
      } uint32;
                  description
        "This notification is sent when the system
        receives a PDU with the wrong
                   "Number of authentication type
        field.
        The notification generation must be throttled with
        at least a 5 second gap.
         "; mismatches.";
                }

    notification authentication-failure
                leaf authentication-fails {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                  type uint32;
                  description
                   "Number of authentication key failures.";
                }
                leaf raw-pdu lan-dis-changes {
                  type binary; uint32;
                  description
         "Received raw PDU.";
                   "The number of times the DIS has changed
                    on this interface at this level.
                    If the interface type is point to point,
                    the count is zero.";
                }
                description
                 "Provides protocol event counters.";
              }
              container packet-counters {
                list level {
                  key level;

                  leaf level {
                    type level-number;
                    description
                     "This notification is sent when the system
        receives a PDU with leaf describes the wrong authentication
        information.
        The notification generation must be throttled with
        at least a 5 second gap.
         "; ISIS level.";
                  }

    notification version-skew

                  container iih {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                    leaf protocol-version in {
                      type uint8; uint32;
                      description
         "Protocol version received in the PDU.";
                       "Received PDUs.";
                    }
                    leaf raw-pdu out {
                      type binary; uint32;
                      description
         "Received raw PDU.";
                       "Sent PDUs.";
                    }
                    description
        "This notification is sent when the system
        receives a PDU with a different protocol version
        number.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";
                     "The number of IIH PDUs received/sent.";
                  }

    notification area-mismatch
                  container ish {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                    leaf raw-pdu in {
                      type binary; uint32;
                      description
                       "Received raw PDU."; PDUs.";
                    }
                    leaf out {
                      type uint32;
                      description
        "This notification is sent when the system
        receives a Hello PDU from an IS that does
        not share any area address.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";
                       "Sent PDUs.";
                    }

    notification rejected-adjacency
                    description
                     "The number of ISH PDUs received/sent.";
                  }
                  container esh {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                    leaf raw-pdu in {
                      type binary; uint32;
                      description
                       "Received raw PDU."; PDUs.";
                    }
                    leaf reason out {
                      type string; uint32;
                      description
         "The system may provide a reason to reject the
          adjacency. If the reason is not available,
          the system use an empty string.";
                       "Sent PDUs.";
                    }
                    description
        "This notification is sent when the system
        receives a Hello PDU from an IS but does not
        establish an adjacency for some reason.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";
    }
    notification protocols-supported-mismatch
                     "The number of ESH PDUs received/sent.";
                  }
                  container lsp {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                    leaf raw-pdu in {
                      type binary; uint32;
                      description
                       "Received raw PDU."; PDUs.";
                    }
      leaf-list protocols
                    leaf out {
                      type uint8; uint32;
                      description
         "The list of protocols supported by the
          remote system.";
                       "Sent PDUs.";
                    }
                    description
        "This notification is sent when the system
        receives a non pseudonode
                     "The number of LSP that has no matching
        protocol supported.
        The notification generation must be throttled with at least
         a 5 second gap.
         "; PDUs received/sent.";
                  }

    notification lsp-error-detected
                  container psnp {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                    leaf lsp-id in {
                      type lsp-id; uint32;
                      description
         "LSP ID.";
                       "Received PDUs.";
                    }
                    leaf raw-pdu out {
                      type binary; uint32;
                      description
         "Received raw PDU.";
                       "Sent PDUs.";
                    }
                    description
                     "The number of PSNP PDUs received/sent.";
                  }
                  container csnp {
                    leaf error-offset in {
                      type uint32;
                      description
         "If the problem is a malformed TLV,
         the error-offset points to the start of the TLV.
         If the problem is with the LSP header,
         the error-offset points to the suspicious byte";
                       "Received PDUs.";
                    }
                    leaf tlv-type out {
                      type uint8; uint32;
                      description
         "if the problem is a malformed TLV, the tlv-type is set
         to the type value of the suspicious TLV.
         Otherwise this leaf is not present.";
                       "Sent PDUs.";
                    }
                    description
        "This notification is sent when the system
        receives a  LSP with a parse error.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";
                     "The number of CSNP PDUs received/sent.";
                  }

    notification adjacency-change
                  container unknown {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
                    leaf neighbor in {
                      type string; uint32;
                      description
         "Describes the name
                       "Received PDUs.";
                    }
                    leaf out {
                      type uint32;
                      description
                       "Sent PDUs.";
                    }
                    description
                     "The number of the neighbor. If the
         name unknown PDUs received/sent.";
                  }
                  description
                   "List of supported levels.";
                }
                description
                 "Provides packet counters per level.";
              }
              description
               "List of the neighbor is not available, the
         field would be empty."; interfaces.";
            }
      leaf neighbor-system-id {
        type system-id;
            description
         "Describes the system-id
             "The container defines operational parameters
              of the neighbor."; interfaces.";
          }

          container spf-log {
            list event {
              key id;

              leaf level id {
                type level; uint32;
                description
         "Describes the ISIS level of
                 "This leaf defines the adjacency."; event identifier.
                  This is a purely internal value.";
              }
              leaf state spf-type {
                type enumeration {
                  enum "Up" full {
                    description
             "This state describes that
              adjacency
                     "Computation done is established."; a Full SPF.";
                  }
                  enum "Down" incremental {
                    description
             "This state describes that
              adjacency
                     "Computation done is no more established."; an
                      incremental SPF.";
                  }
                  enum route-only {
                    description
                     "Computation done is a
                      reachability computation
                      only.";
                  }
                }
                description
                 "This leaf describes the new state type of the
          ISIS adjacency."; computation
                 used.";
              }
              leaf reason level {
                type string; level-number;
                description
         "If the adjacency is going to DOWN,
         this
                 "This leaf provides a reason for describes the adjacency
         going down. The reason is provided as a text.
         If level affected by the adjacency is going to UP, no reason is
         provided.";
      }
      description
        "This notification is sent when an ISIS adjacency
         moves to Up state or to Down state.";
    }

    notification lsp-received {
      uses notification-instance-hdr;
      uses notification-interface-hdr;

      leaf lsp-id {
        type lsp-id;
        description
         "LSP ID.";
                 the computation.";
              }
              leaf sequence spf-delay {
                type uint32;
                units "milliseconds";
                description
         "Sequence number of
                 "This leaf describes the received LSP."; SPF delay that
                 was used for this event.";
              }
              leaf received-timestamp schedule-timestamp {
                type yang:timestamp;
                description
                 "This leaf describes the timestamp
                  when the LSP computation was received. "; scheduled.";
              }
              leaf neighbor-system-id start-timestamp {
                type system-id;
        description
         "Describes the system-id of the neighbor
         that sent the LSP.";
      } yang:timestamp;
                description
                 "This notification is sent leaf describes the timestamp
                  when a LSP
        is received.
        The notification generation must be throttled with at least
         a 5 second gap. "; the computation was started.";
              }
    notification lsp-generation {
      uses notification-instance-hdr;
              leaf lsp-id end-timestamp {
                type lsp-id; yang:timestamp;
                description
         "LSP ID.";
                 "This leaf describes the timestamp
                  when the computation was ended.";
              }
              list trigger-lsp {
                key "lsp";
                leaf sequence lsp {
                  type uint32; lsp-id;
                  description
         "Sequence number
                   "This leaf describes the LSPID
                    of the received LSP.";
                }
                leaf send-timestamp sequence {
                  type yang:timestamp; uint32;
                  description
                   "This leaf describes the timestamp
         when our LSP was regenerated. "; sequence
                    number of the LSP.";
                }
                description
                 "This notification is sent when a LSP
        is regenerated.
        The notification generation must be throttled with at least
         a 5 second gap. "; leaf describes list of LSPs
                  that triggered the computation.";
              }
              description
               "List of computation events.";
            }

  <CODE ENDS>

8.  IS-IS Segment Routing YANG Module

   <CODE BEGINS> file "ietf-isis-sr@2016-10-26.yang"

   module ietf-isis-sr {
     namespace "urn:ietf:params:xml:ns:"
             + "yang:ietf-isis-sr";
     prefix isis-sr;

     import ietf-routing {
       prefix "rt";

            description
             "This container lists the SPF computation events.";
          }

     import ietf-segment-routing-common
          container lsp-log {
       prefix "sr-cmn";

     }

     import ietf-segment-routing
            list event {
       prefix "sr";
     }

     import ietf-isis
              key id;

              leaf id {
       prefix "isis";
     }

     organization
      "IETF ISIS Working Group";

     contact
       "WG List:  &lt;mailto:spring@ietf.org&gt;

       Editor:    Stephane Litkowski
             &lt;mailto:stephane.litkowski@orange.com&gt;

           Acee Lindem
             &lt;mailto:acee@cisco.com&gt;
           Yingzhen Qu
             &lt;mailto:yiqu@cisco.com&gt;
           Pushpasis Sarkar
             &lt;mailto:psarkar@juniper.net&gt;
           Ing-Wher Chen
             &lt;mailto:ing-wher.chen@ericsson.com&gt;
           Jeff Tantsura
             &lt;mailto:jeff.tantsura@ericsson.com&gt;

       ";
                type uint32;
                description
       "The YANG module
                 "This leaf defines a generic configuration model for
       Segment routing ISIS extensions common across all of the vendor
       implementations.";

     revision 2016-10-26 {
       description
           "Initial revision.";
       reference "draft-ietf-isis-yang-isis-cfg-13";
     }

     /* Identities */
     /* Features */

   feature remote-lfa-sr {
       description
        "Enhance rLFA to use SR path.";
   }

   feature ti-lfa {
       description
        "Enhance IPFRR with ti-lfa
        support"; event identifier.
                  This is a purely internal value.";
              }

     /* Groupings */

   grouping adjacency-state
              leaf level {
                type level-number;
                description
                 "This group will extend adjacency state.";
       list adjacency-sid leaf describes the level affected by the
                 the computation.";
              }
              container lsp {
         key value;
                leaf af lsp {

                  type identityref {
             base rt:address-family;
           } lsp-id;
                  description
            "Address-family associated with
                   "This leaf describes the LSPID
                    of the
            segment ID"; LSP.";
                }
                leaf value sequence {
                  type uint32;
                  description
            "Value
                   "This leaf describes the sequence
                    number of the LSP.";
                }
                description
                 "This container describes the received LSP
                 , in case of local LSP update the Adj-SID."; local
                 LSP ID is referenced.";
              }

              leaf weight received-timestamp {
                type uint8; yang:timestamp;

                description
            "Weight associated with
                 "This leaf describes the adjacency SID."; timestamp
                 when the LSP was received. In case of
                 local LSP update, the timestamp refers
                 to the local LSP update time.";
              }

              leaf protection-requested change {
                type boolean; bits {
                  bit refresh {
                    position 0;
                    description
            "Describe if the adjacency SID
            must be protected.";
                     "Refresh LSP, nothing has changed.";
                  }
                  bit link-down {
                    position 1;
                    description
          "List of adjacency Segment IDs.";
                     "One or more links are down.";
                  }
                  bit link-up {
                    position 2;
                    description
                     "One or more links are up.";
                  }

   grouping prefix-segment-id
                  bit link-metric-change {
                    position 3;
                    description
        "This group defines segment routing extensions
        for prefixes.";

       list sid-list
                     "One or more links experienced
                     a metric change.";
                  }
                  bit link-other-change {
         key value;

         leaf flags
                    position 4;
                    description
                     "One or more links experienced
                     a change that does not affect state
                     or metric.";
                  }
                  bit prefix-down {
           type bits
                    position 5;
                    description
                     "One or more links are down.";
                  }
                  bit prefix-up {
                    position 6;
                    description
                     "One or more prefixes are up.";
                  }
                  bit readvertisment prefix-metric-change {
                    position 7;
                    description
                "If set, then the prefix to
               which this Prefix-SID is attached,
               has been propagated by the
               router either from another level
                     "One or from redistribution."; more prefixes experienced
                     a metric change.";
                  }
                  bit php prefix-other-change {
                    position 5; 8;
                    description
               "If set, then the penultimate hop MUST NOT
               pop the Prefix-SID before delivering the packet
               to
                     "One or more prefixes experienced
                     a change that does not affect state
                     or metric.";
                  }
                  bit other-change {
                    position 9;
                    description
                     "One or more component changed that
                     is not a prefix or link.";
                  }
                }
                description
                 "This leaf describes the node
               that advertised type of change
                 in the Prefix-SID."; LSP.";
              }
             bit explicit-null {
               position 4;

              description
               "If set, any upstream neighbor
               "List of LSP events.";
            }

            description
             "This container lists the Prefix-SID originator MUST replace
               the Prefix-SID with a
               Prefix-SID having an
               Explicit-NULL value (0 for IPv4 and 2 for
               IPv6) before forwarding LSP reception events.
             Local LSP modification are also contained in the packet.";
             list.";
          }
             bit  value
          container database {
               position 3;
            list level-db {
              key level;

              leaf level {
                type level-number;
                description
               "If set, then the Prefix-SID carries a
               value (instead of an index).
               By default the flag is UNSET.";
                 "Current level number";
              }
             bit  local
              list lsp {
               position 2;
                key lsp-id;

                uses database;
                description
               "If set, then the value/index carried by
                 "List of LSPs in LSDB.";
              }

              description
               "This container describes the Prefix-SID has local significance.
               By default list of LSPs
               in the flag is UNSET.";
             } level x database.";
            }

            description
            "Describes flags associated with the
            segment ID.";
             "This container describes ISIS Link State
              databases.";
          }
          container hostnames {

            list hostname {
              key system-id;
              leaf algorithm system-id {
                type uint8; system-id;
                description
            "Algorithm to be used for path computation.";
                 "This leaf describes the system-id
                 associated with the hostname.";
              }
              leaf value hostname {

                type uint32; string;
                description
            "Value of
                 "This leaf describes the hostname
                  associated with the prefix-SID."; system ID.";
              }
              description
               "List of segments."; system-id/hostname associations";
            }

            description
             "This container describes the list
             of binding between system-id and
             hostnames.";
          }

     grouping adjacency-segment-id {

        description
           "This group container defines segment routing extensions various ISIS states objects.";
      }
    }

    /* RPC methods */

    rpc clear-adjacency {
      description
       "This RPC request clears a particular
        set of ISIS adjacencies. If the operation
        fails for adjacencies.";

       list sid-list ISIS internal reason, then
        error-tag and error-app-tag should be set
        to a meaningful value.";
      input {
         key value;

        leaf flags routing-protocol-instance-name {
          type bits {
             bit address-family {
               position 7; instance-state-ref;
          mandatory "true";
          description
                "If unset, then
           "Name of the Adj-SID refers
               to an adjacency with outgoing IPv4 encapsulation. ISIS protocol instance whose ISIS
            information is being queried.

            If set then the Adj-SID refers ISIS instance with name equal to an adjacency the
            value of this parameter doesn't exist, then this
            operation SHALL fail with outgoing IPv6 encapsulation."; error-tag 'data-missing'
            and error-app-tag
            'routing-protocol-instance-not-found'.";
        }
             bit backup
        leaf level {
               position 6;
          type level;
          description
                "If set,
           "ISIS level of the Adj-SID refers to an adjacency being protected
               (e.g.: using IPFRR or MPLS-FRR)";
             }
             bit  value {
               position 5;
               description
               "If set, then to be cleared.
           If ISIS level is level-1-2, both level 1 and level 2
           adjacencies would be cleared.

           If the SID carries a value (instead of an index).
               By default the flag provided is SET.";

             }
             bit  local {
               position 4;
               description
               "If set, then the value/index carried by different from the SID has local significance.
               By default one
           authorized in the flag is SET."; enum type, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'bad-isis-level'.
           ";
        }
             bit  set
        leaf interface {
               position 3;
          type string;
          description
               "When set,
           "Name of the S-Flag indicates that ISIS interface.

            If the
               Adj-SID refers ISIS interface with name equal to a set the
            value of adjacencies"; this parameter doesn't exist, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'isis-interface-not-found'.";
        }
      }
    }

    rpc clear-database {
      description
            "Describes flags associated with
       "This RPC request clears a particular
        ISIS database. If the
            segment ID.";
         } operation
        fails for ISIS internal reason, then
        error-tag and error-app-tag should be set
        to a meaningful value.";
      input {

        leaf weight routing-protocol-instance-name {
          type uint8; instance-state-ref;
          mandatory "true";
          description
            "The value represents the weight
           "Name of the Adj-SID
             for ISIS protocol instance whose ISIS
            information is being queried.

            If the purpose ISIS instance with name equal to the
            value of load balancing."; this parameter doesn't exist, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'routing-protocol-instance-not-found'.";
        }
        leaf neighbor-id level {
          type isis:system-id; level;
          description
            "Describes the system ID
           "ISIS level of the neighbor
            associated with the SID value. This adjacency to be cleared.
           If ISIS level is only
            used on LAN adjacencies.";
         }
         leaf level-1-2, both level 1 and level 2
           adjacencies would be cleared.

           If the value {
           type uint32;
           description
            "Value of provided is different from the one
           authorized in the Adj-SID."; enum type, then this
            operation SHALL fail with error-tag 'data-missing'
            and error-app-tag
            'bad-isis-level'.
           ";
        }
         description
          "List of segments.";
      }

    }
     grouping segment-routing-binding-tlv {
     list segment-routing-bindings

    /* Notifications */

    notification database-overload {

         key "fec range";
      uses notification-instance-hdr;

      leaf fec overload {
        type string; enumeration {
          enum "off" {
            description
           "IP (v4 or v6) range to be bound to SIDs.";
             "The system has left overload condition.";
          }

         leaf range
          enum "on" {
           type uint16;
            description
            "Describes number of elements to assign
            a binding to.";
             "The system is in overload condition.";
          }

        }

         leaf flags {
           type bits {
             bit address-family {
               position 7;
        description
               "If unset, then
           "Describes the Prefix FEC
               carries an IPv4 Prefix.
               If set then new overload state of the Prefix FEC carries instance.";
      }
      description
        "This notification is sent when an
               IPv6 Prefix."; ISIS instance
         overload condition changes.";
    }
             bit mirror

    notification lsp-too-large {
               position 6;
      uses notification-instance-hdr;
      uses notification-interface-hdr;

      leaf pdu-size {
        type uint32;
        description
               "Set if
         "Size of the advertised SID/path
               corresponds to a mirrored context.
               "; PDU";
      }
             bit flooding
      leaf lsp-id {
               position 5;
        type lsp-id;
        description
                "If the S bit is set(1),
                the IS-IS Router CAPABILITY TLV
               MUST be flooded across the entire routing domain.
               If the S bit is
               not set(0), the TLV MUST NOT be leaked between levels.
               This bit MUST NOT be altered during the TLV leaking.";
         "LSP ID.";
      }
             bit down {
               position 4;
      description
               "When the IS-IS Router CAPABILITY TLV
        "This notification is
               leaked from level-2 sent when we attempt
         to level-1, propagate an LSP that is larger than the D bit
               MUST be set.  Otherwise, this bit MUST
               be clear.  IS-IS Router capability TLVs
               with
         dataLinkBlockSize for the D bit set MUST NOT circuit.
         The notification generation must be leaked from level-1 to level-2.
               This is to prevent TLV looping. throttled
         with at least a 5 second gap.
         ";
    }
             bit attached

    notification corrupted-lsp-detected {
               position 3;
      uses notification-instance-hdr;
      leaf lsp-id {
        type lsp-id;
        description
               "The originator of the SID/Label Binding
               TLV MAY set the A bit in order to signal
         "LSP ID.";
      }
      description
        "This notification is sent when we find
         that the prefixes and
               SIDs advertised an LSP that was stored in the SID/Label Binding
               TLV are directly
               connected to their originators. memory has
         become corrupted.
         ";
    }

    notification attempt-to-exceed-max-sequence {
      uses notification-instance-hdr;
      leaf lsp-id {
        type lsp-id;
        description
         "LSP ID.";
      }
      description
              "Flags of
        "This notification is sent when the binding."; system
        wraps the 32-bit sequence counter of an LSP.
         ";
    }

    notification id-len-mismatch {
      uses notification-instance-hdr;
      uses notification-interface-hdr;

      leaf weight pdu-field-len {
        type uint8;
        description
            "Weight
         "Size of the path for loadbalancing purpose."; ID length in the received PDU";
      }

         container binding {
           container prefix-sid
      leaf raw-pdu {
             uses prefix-segment-id;
        type binary;
        description
              "Binding prefix SID to
         "Received raw PDU.";
      }
      description
        "This notification is sent when we receive a PDU
        with a different value for the range."; System ID length.
        The notification generation must be throttled
        with at least a 5 second gap.
         ";
    }

    notification max-area-addresses-mismatch {
      uses notification-instance-hdr;
      uses notification-interface-hdr;

      leaf ero-metric max-area-addresses {
        type uint32; uint8;
        description
              "Cost
         "Received number of ERO path."; supported areas";
      }
      leaf raw-pdu {
        type binary;
        description
         "Received raw PDU.";
      }
      description
        "This notification is sent when we receive a PDU
        with a different value for the Maximum Area Addresses.
        The notification generation must be throttled
        with at least a 5 second gap.
         ";
    }
           container ero

    notification own-lsp-purge {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf address-family lsp-id {
        type identityref {
                 base rt:address-family;
               } lsp-id;
        description
                "Address-family.";
         "LSP ID.";
      }

             leaf loose {
               type boolean;
      description
                "Set to true,
                if hop
        "This notification is sent when the system
        receives a loose hop."; PDU with its own system ID and zero age.
         ";
    }

    notification sequence-number-skipped {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf address lsp-id {
        type string; lsp-id;
        description
               "IP address of a node on the
               path.";
         "LSP ID.";
      }
      description
              "Binding ERO path
        "This notification is sent when the system
        receives a PDU with its own system ID and
        different contents. The system has to reissue
        the range."; LSP with a higher sequence number.
         ";
    }
           container backup-ero

    notification authentication-type-failure {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf address-family raw-pdu {
        type identityref {
                 base rt:address-family;
               } binary;
        description
                "Address-family.";
         "Received raw PDU.";
      }

             leaf loose {
               type boolean;
      description
                "Set to true,
                if hop
        "This notification is sent when the system
        receives a PDU with the wrong authentication type
        field.
        The notification generation must be throttled with
        at least a loose hop."; 5 second gap.
         ";
    }

    notification authentication-failure {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf address raw-pdu {
        type string; binary;
        description
               "IP address of a node on the
               path.";
         "Received raw PDU.";
      }
      description
              "Binding backup ERO path to
        "This notification is sent when the system
        receives a PDU with the range."; wrong authentication
        information.
        The notification generation must be throttled with
        at least a 5 second gap.
         ";
    }
           container unnumbered-interface-id-ero

    notification version-skew {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf router-id protocol-version {
        type string; uint8;
        description
                "Router ID of
         "Protocol version received in the node owning PDU.";
      }
      leaf raw-pdu {
        type binary;
        description
         "Received raw PDU.";
      }
      description
        "This notification is sent when the interface."; system
        receives a PDU with a different protocol version
        number.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";
    }

    notification area-mismatch {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf interface-id raw-pdu {
        type uint32; binary;
        description
               "Interface ID on which the path is built.";
         "Received raw PDU.";
      }
      description
              "Binding
        "This notification is sent when the system
        receives a path over unnumbered interface."; Hello PDU from an IS that does
        not share any area address.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";
    }
           container backup-unnumbered-interface-id-ero

    notification rejected-adjacency {
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf router-id raw-pdu {
        type string; binary;
        description
                "Router ID of the node owning the interface.";
         "Received raw PDU.";
      }
      leaf interface-id reason {
        type uint32; string;
        description
               "Interface ID on which
         "The system may provide a reason to reject the path
          adjacency. If the reason is built.";
             }
             description
              "Binding a backup path over unnumbered interface.";
           }
           description
            "Bindings associated with not available,
          the range."; system use an empty string.";
      }
      description
        "This container describes list of SID/Label
          bindings.
          ISIS reference notification is TLV 149.";
       }
       description
        "Defines binding TLV sent when the system
        receives a Hello PDU from an IS but does not
        establish an adjacency for database."; some reason.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";
    }
     /* Cfg */
     augment "/rt:routing/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis" {
       when "/rt:routing/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"

    notification protocols-supported-mismatch {
         description
         "This augment ISIS routing protocol when used";
       }
       description
        "This augments ISIS protocol configuration
         with segment routing.";
      uses sr:controlplane-cfg;
       container protocol-srgb {
            if-feature sr:protocol-srgb; notification-instance-hdr;
      uses sr-cmn:srgb-cfg;
            description
              "Per-protocol SRGB.";
          }

     }

      augment "/rt:routing/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:interfaces/isis:interface" {
       when "/rt:routing/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'" notification-interface-hdr;
      leaf raw-pdu {
        type binary;
        description
         "This augment ISIS routing protocol when used";
       }
       description
        "This augments ISIS protocol configuration
         with segment routing.";

       uses sr:igp-interface-cfg;
         "Received raw PDU.";
      }

      augment "/rt:routing/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:interfaces/isis:interface"+
           "/isis:fast-reroute" {
       when "/rt:routing/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      leaf-list protocols {
        type uint8;
        description
         "This augment ISIS routing protocol when used";
         "The list of protocols supported by the
          remote system.";
      }
      description
        "This augments ISIS IP FRR notification is sent when the system
        receives a non pseudonode LSP that has no matching
        protocol supported.
        The notification generation must be throttled with TILFA.";

       container ti-lfa at least
         a 5 second gap.
         ";
    }

    notification lsp-error-detected {
           if-feature ti-lfa;
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf enable lsp-id {
        type boolean;
               description
                "Enables TI-LFA computation.";
           } lsp-id;
        description
            "TILFA configuration.";
       }
         "LSP ID.";
      }

     augment "/rt:routing/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:interfaces/isis:interface"+
           "/isis:fast-reroute/isis:lfa/isis:remote-lfa" {
       when "/rt:routing/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      leaf raw-pdu {
        type binary;
        description
         "This augment ISIS routing protocol when used";
         "Received raw PDU.";
      }
       description
        "This augments ISIS remoteLFA config with
        use of segment-routing path.";
      leaf use-segment-routing-path error-offset {
           if-feature remote-lfa-sr;
        type boolean; uint32;
        description
            "force remote LFA
         "If the problem is a malformed TLV,
         the error-offset points to use segment routing
            path instead the start of LDP path.";
       } the TLV.
         If the problem is with the LSP header,
         the error-offset points to the suspicious byte";
      }

     /* Operational states */

     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis" {
       when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      leaf tlv-type {
        type uint8;
        description
         "This augment ISIS routing protocol when used";
         "if the problem is a malformed TLV, the tlv-type is set
         to the type value of the suspicious TLV.
         Otherwise this leaf is not present.";
      }
      description
        "This augments ISIS protocol configuration notification is sent when the system
        receives a  LSP with segment routing.";

       uses sr:controlplane-cfg;
       container protocol-srgb {
            if-feature sr:protocol-srgb;
            uses sr-cmn:srgb-cfg;
            description
              "Per-protocol SRGB.";
          } a parse error.
        The notification generation must be throttled with at least
         a 5 second gap.
         ";

    }

      augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:interfaces/isis:interface"

    notification adjacency-change {
       when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      uses notification-instance-hdr;
      uses notification-interface-hdr;
      leaf neighbor {
        type string;
        description
         "This augment ISIS routing protocol when used";
       }
       description
        "This augments ISIS protocol configuration
         with segment routing.";

       uses sr:igp-interface-cfg;
         "Describes the name of the neighbor. If the
         name of the neighbor is not available, the
         field would be empty.";
      }

     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:interfaces/isis:interface" +
           "/isis:adjacencies/isis:adjacency" {
       when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      leaf neighbor-system-id {
        type system-id;
        description
         "This augment ISIS routing protocol when used";
         "Describes the system-id of the neighbor.";
      }
      leaf level {
        type level;
        description
        "This augments
         "Describes the ISIS protocol configuration
         with segment routing.";

       uses adjacency-state; level of the adjacency.";
      }
     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:database/isis:level-db/isis:lsp"+
           "/isis:extended-is-neighbor/isis:neighbor"
      leaf state {
        when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
        type enumeration {
          enum "Up" {
            description
             "This augment ISIS routing protocol when used";
       }
       description
        "This augments ISIS protocol LSDB neighbor.";
       uses adjacency-segment-id; state describes that
              adjacency is established.";
          }
     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:database/isis:level-db/isis:lsp"+
           "/isis:mt-is-neighbor/isis:neighbor" {
               when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
          enum "Down" {
            description
             "This augment ISIS routing protocol when used"; state describes that
              adjacency is no more established.";
          }
        }
        description
         "This augments leaf describes the new state of the
          ISIS protocol LSDB neighbor.";
       uses adjacency-segment-id; adjacency.";
      }
     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:database/isis:level-db/isis:lsp"+
           "/isis:extended-ipv4-reachability/isis:prefixes" {
               when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      leaf reason {
        type string;
        description
         "This augment ISIS routing protocol when used";
         "If the adjacency is going to DOWN,
         this leaf provides a reason for the adjacency
         going down. The reason is provided as a text.
         If the adjacency is going to UP, no reason is
         provided.";
      }
      description
        "This augments notification is sent when an ISIS protocol LSDB prefix.";
       uses prefix-segment-id; adjacency
         moves to Up state or to Down state.";
    }
     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:database/isis:level-db/isis:lsp"+
           "/isis:mt-extended-ipv4-reachability/isis:prefixes"

    notification lsp-received {
               when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      uses notification-instance-hdr;
      uses notification-interface-hdr;

      leaf lsp-id {
        type lsp-id;
        description
         "This augment ISIS routing protocol when used";
         "LSP ID.";
      }
      leaf sequence {
        type uint32;
        description
        "This augments ISIS protocol LSDB prefix.";
       uses prefix-segment-id;
         "Sequence number of the received LSP.";
      }
     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:database/isis:level-db/isis:lsp"+
           "/isis:ipv6-reachability/isis:prefixes" {
               when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
      leaf received-timestamp {
        type yang:timestamp;

        description
         "This augment ISIS routing protocol leaf describes the timestamp
         when used"; the LSP was received. ";
      }
      leaf neighbor-system-id {
        type system-id;
        description
        "This augments ISIS protocol LSDB prefix.";
       uses prefix-segment-id;
         "Describes the system-id of the neighbor
         that sent the LSP.";
      }
     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:database/isis:level-db/isis:lsp"+
           "/isis:mt-ipv6-reachability/isis:prefixes" {
               when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'" {
      description
        "This augment ISIS routing protocol notification is sent when used"; a LSP
        is received.
        The notification generation must be throttled with at least
         a 5 second gap. ";
    }
           description
        "This augments ISIS protocol LSDB prefix.";

    notification lsp-generation {
      uses prefix-segment-id; notification-instance-hdr;

      leaf lsp-id {
        type lsp-id;
        description
         "LSP ID.";
      }
     augment "/rt:routing-state/" +
           "rt:control-plane-protocols/rt:control-plane-protocol"+
           "/isis:isis/isis:database/isis:level-db/isis:lsp"
      leaf sequence {
           when "/rt:routing-state/rt:control-plane-protocols/"+
           "rt:control-plane-protocol/rt:type = 'isis:isis'"
        type uint32;
        description
         "Sequence number of the received LSP.";
      }
      leaf send-timestamp {
        type yang:timestamp;

        description
         "This augment ISIS routing protocol leaf describes the timestamp
         when used"; our LSP was regenerated. ";
      }
      description
        "This augments ISIS protocol LSDB.";
       uses segment-routing-binding-tlv; notification is sent when a LSP
        is regenerated.
        The notification generation must be throttled with at least
         a 5 second gap. ";
    }

     /* Notifications */

  }

  <CODE ENDS>

9.

7.  Security Considerations

   Configuration and state data defined in this document are designed to
   be accessed via the NETCONF protocol [RFC6241].

   As IS-IS is an IGP protocol (critical piece of the network), ensuring
   stability and security of the protocol is mandatory for the network
   service.

   Authors recommends to implement NETCONF access control model
   ([RFC6536]) to restrict access to all or part of the configuration to
   specific users.  Access control to RPCs is also critical as RPC
   allows to clear protocol datastructures that would definitively
   impact the network service.  This kind of RPC needs only to be used
   in specific cases by well-known experienced users.

   Authors consider that all the configuration is considered as
   sensitive/vulnerable as well as RPCs.  But security teams can decide
   to open some part of the configuration to less experienced users
   depending on the internal organization, for example:

   o  User FullWrite: would access to the whole data model.  This kind
      of profile may be restricted to few experienced people.

   o  User PartialWrite: would only access to configuration part within
      /isis/interfaces/interface.  So this kind of profile is restricted
      to creation/modification/deletion of interfaces.  This profile
      does not have access to RPC.

   o  User Read: would only access to state part /isis-state.

   Unauthorized access to configuration or RPC may cause high damages to
   the network service.

   The /isis-state/database may contain authentication information.  As
   presented in the description of the /isis-state/database/level-
   1/lsp/authentication/authentication-key, the authentication MUST
   never be presented in plaintext format for security reason.  Authors
   recommend the usage of MD5 to display or return the authentication-
   key.

   Some authentication-key may also be present in the /isis
   configuration.  When configuring IS-IS using the NETCONF protocol,
   authors recommends the usage of secure transport of NETCONF using SSH
   ([RFC6242]).

10.

8.  Contributors

   Authors would like to thank Kiran Agrahara Sreenivasa, Dean
   Bogdanovic, Yingzhen Qu, Yi Yang for their major contributions to the
   draft.

11.

9.  Acknowledgements

   TBD.

12.

10.  IANA Considerations

   The IANA is requested to assign two new URIs from the IETF XML
   registry ([RFC3688]).  Authors are suggesting the following URIs : URI: urn:ietf:params:xml:ns:yang:ietf-isis
       Registrant Contact: IS-IS WG
       XML: N/A, the requested URI is an XML namespace

       URI: urn:ietf:params:xml:ns:yang:ietf-isis-sr urn:ietf:params:xml:ns:yang:ietf-isis
       Registrant Contact: IS-IS WG
       XML: N/A, the requested URI is an XML namespace

   This document also requests two one new YANG modules module name in the YANG
   Module Names registry ([RFC6020]) with the following suggestion : suggestion:

       name: ietf-isis
       namespace: urn:ietf:params:xml:ns:yang:ietf-isis
       prefix: isis
       reference: RFC XXXX

       name: ietf-isis-sr
       namespace: urn:ietf:params:xml:ns:yang:ietf-isis-sr
       prefix: isis-sr
       reference: RFC XXXX

13.

11.  Change log for ietf-isis-sr ietf-isis YANG module

13.1.

11.1.  From version -12 to version -13

   o  Align with new segment routing common module.

13.2.  From version -09 to version -11 -14

   o  Fixed XPATH  Segment Routing extensions are now in 'when' expressions.

13.3.  From version -08 to version -09

   o  Align to draft-ietf-netmod-routing-cfg-23.

13.4.  From version -07 to version -08

   o  Align to draft-ietf-netmod-routing-cfg-21.

14.  Change log for ietf-isis YANG module

14.1. a separate document.

11.2.  From version -12 to version -13

   o  Move feature nlpid-control to container rather than list.

   o  Rename multi-topology to topologies to align with OSPF.

   o  Rename bfd/enabled to bfd/enable for consistency reason.

   o  Add support for NSR with a feature.

14.2.

11.3.  From version -09 to version -12

   o  Rename node-tag container to node-tags.

14.3.

11.4.  From version -08 to version -09

   o  Added container before af list.

   o  Added container before topology list.

   o  Aligned LFA if per level cfg.

   o  Align to draft-ietf-netmod-routing-cfg-23.

14.4.

11.5.  From version -07 to version -08

   o  Remove selector from system-id type.

   o  Add some default values.

   o  Moved lists to containers+groupings for per level configuration.

   o  remove routing-instance as per core routing model v21.

   o  added BFD leaf (no more BFD protocol model).

   o  changed keychain module reference.

14.5.

11.6.  From version -05 to version -07

   o  Move Overload config from list to container.

   o  Move Overload-max-metric config from list to container.

   o  Move preference config from list to container.

   o  Add Node flag in config.

   o  Removed BFD config => moved to isis-bfd module.

   o  Remove call to routing policy model.

14.6.

11.7.  From version -03 to version -05

   o  Correct invalid references to previous versions of core routing
      model.

   o  Remove BFD config and replace by groupings from ietf-bfd.

   o  Adding routing-policy support through routing-policy model.

14.7.

11.8.  From version -02 to version -03

   o  Reviewed config and op state groupings.

   o  Add default value to lfa candidate-disabled.

   o  Add enable leaf to isis container to reflect admin state.

   o  Move to VRF centric only.

   o  Segment routing is part os a separate module.

14.8.

11.9.  From version -01 to version -02

   o  Adding IPFRR.

   o  Adding igp-ldp-sync.

   o  Adding segment-routing.

   o  Adding instance reference to operational states.

   o  Move AF type from string to identity.

   o  Updated router-capability in LSDB description.

   o  packet counters moved to interface-packet-counters.

   o  Added modification information in lsp-log.

   o  Removing igp-ldp-sync timer in IS-IS.

   o  Defining hierarchy for operational states.

   o  Adding clns-mtu.

   o  Adding key-chain.

14.9.

11.10.  From version -00 to version -01

   o  Interface metric move from af container to interface container.

   o  Hello-padding on interface moved to hello-padding-disable with
      empty type.

   o  three-way-handshake removed.

   o  route preference changed to a choice.

   o  csnp-authentication/psnp-authentication merged to authentication
      container.

   o  lsp-gen-interval-exp-delay removed.

   o  Added overload-max-metric feature.

   o  overload-max-metric is in a separate container.

   o  Change hello-padding to container.

   o  Change bfd to container.

   o  Make BFD a feature.

   o  Create mpls-te container and put router-id inside.

   o  Remove GR helper disable and timers.

15.

12.  Normative References

   [I-D.ietf-netmod-routing-cfg]
              Lhotka, L. and A. Lindem, "A YANG Data Model for Routing
              Management", draft-ietf-netmod-routing-cfg-24 (work in
              progress), October 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-09 (work in progress), September
              2016.

   [I-D.ietf-spring-sr-yang]
              Litkowski, S., Qu, Y., Sarkar, P., and J. Tantsura, "YANG
              Data Model for Segment Routing", draft-ietf-spring-sr-
              yang-04
              rtgwg-yang-key-chain-10 (work in progress), October 2016.

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

   [RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
              DOI 10.17487/RFC3688, January 2004,
              <http://www.rfc-editor.org/info/rfc3688>.

   [RFC5120]  Przygienda, T., Shen, N., and N. Sheth, "M-ISIS: Multi
              Topology (MT) Routing in Intermediate System to
              Intermediate Systems (IS-ISs)", RFC 5120, DOI 10.17487/
              RFC5120, February 2008,
              <http://www.rfc-editor.org/info/rfc5120>.

   [RFC5286]  Atlas, A., Ed. and A. Zinin, Ed., "Basic Specification for
              IP Fast Reroute: Loop-Free Alternates", RFC 5286, DOI
              10.17487/RFC5286, September 2008,
              <http://www.rfc-editor.org/info/rfc5286>.

   [RFC5443]  Jork, M., Atlas, A., and L. Fang, "LDP IGP
              Synchronization", RFC 5443, DOI 10.17487/RFC5443, March
              2009, <http://www.rfc-editor.org/info/rfc5443>.

   [RFC6020]  Bjorklund, M., Ed., "YANG - A Data Modeling Language for
              the Network Configuration Protocol (NETCONF)", RFC 6020,
              DOI 10.17487/RFC6020, October 2010,
              <http://www.rfc-editor.org/info/rfc6020>.

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

   [RFC6242]  Wasserman, M., "Using the NETCONF Protocol over Secure
              Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
              <http://www.rfc-editor.org/info/rfc6242>.

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

   [RFC7490]  Bryant, S., Filsfils, C., Previdi, S., Shand, M., and N.
              So, "Remote Loop-Free Alternate (LFA) Fast Reroute (FRR)",
              RFC 7490, DOI 10.17487/RFC7490, April 2015,
              <http://www.rfc-editor.org/info/rfc7490>.

Appendix A.  Example of IS-IS configuration in XML

   This section gives an example of configuration of an IS-IS instance
   on a device.  The example is written in XML.

   <?xml version="1.0" encoding="utf-8"?>
   <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
     <routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
         <name>SLI</name>
         <router-id>1.1.1.1</router-id>
         <description/>
         <interfaces>
           <interface>
             <name>Loopback0</name>
           </interface>
           <interface>
             <name>Eth1</name>
           </interface>
         </interfaces>
         <control-plane-protocols>
           <control-plane-protocol>
             <name>ISIS</name>
             <description/>
             <type>isis:isis</type>
             <isis xmlns="urn:ietf:params:xml:ns:yang:ietf-isis">
                 <enable>true</enable>
                 <level-type>level-2</level-type>
                 <system-id>87FC.FCDF.4432</system-id>
                 <area-address>49.0001</area-address>
                 <mpls-te>
                   <ipv4-router-id>1.1.1.1</ipv4-router-id>
                 </mpls-te>
                 <lsp-lifetime>65535</lsp-lifetime>
                 <lsp-refresh>65000</lsp-refresh>
                 <metric-type>
                   <value>wide</value>
                 </metric-type>
                 <default-metric>
                   <value>111111</value>
                 </default-metric>
                 <afs>
                   <af>
                       <af>ipv4-unicast</af>
                       <enabled>true</enabled>
                   </af>
                 </afs>
                 <interfaces>
                   <interface>
                     <name>Loopback0</name>
                     <tag>200</tag>
                     <metric>
                       <value>0</value>
                     </metric>
                     <passive>true</passive>
                   </interface>
                   <interface>
                     <name>Eth1</name>
                     <level-type>level-2</level-type>
                     <interface-type>point-to-point</interface-type>
                     <metric>
                       <value>167890</value>
                     </metric>
                   </interface>
                 </interfaces>
             </isis>
           </control-plane-protocol>
         </control-plane-protocols>
     </routing>
     <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
       <interface>
         <name>Loopback0</name>
         <description/>
         <type/>
         <link-up-down-trap-enable/>
         <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
           <mtu/>
           <address>
             <ip>1.1.1.1</ip>
             <prefix-length>32</prefix-length>
           </address>
         </ipv4>

       </interface>
       <interface>
         <name>Eth1</name>
         <description/>
         <type/>
         <link-up-down-trap-enable/>
         <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
           <mtu/>
           <address>
             <ip>10.0.0.1</ip>
             <prefix-length>30</prefix-length>
           </address>
         </ipv4>

       </interface>
     </interfaces>
   </data>

Authors' Addresses

   Stephane Litkowski
   Orange

   Email: stephane.litkowski@orange.com

   Derek Yeung
   Arrcus, Inc

   Email: derek@arrcus.com

   Acee Lindem
   Cisco Systems

   Email: acee@cisco.com

   Jeffrey Zhang
   Juniper Networks

   Email: zzhang@juniper.net

   Ladislav Lhotka
   CZ.NIC

   Email: lhotka@nic.cz