Adding OpenConfig YANG models.

Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/isis/openconfig-isis.yang b/models/openconfig/src/main/yang/isis/openconfig-isis.yang
new file mode 100644
index 0000000..ce8e669
--- /dev/null
+++ b/models/openconfig/src/main/yang/isis/openconfig-isis.yang
@@ -0,0 +1,2032 @@
+module openconfig-isis {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/openconfig-isis";
+
+  prefix "oc-isis";
+
+  // import some basic types
+  import ietf-inet-types { prefix "inet"; }
+  import ietf-yang-types { prefix "yang"; }
+  import openconfig-types { prefix "oc-types"; }
+  import openconfig-isis-types { prefix "oc-isis-types"; }
+  import openconfig-routing-policy { prefix "oc-rpol"; }
+  import openconfig-extensions { prefix "oc-ext"; }
+  import openconfig-interfaces { prefix "oc-if"; }
+  import openconfig-segment-routing { prefix "oc-sr"; }
+  // TODO(robjs): Import authentication and keychain following merge of these
+  // modules.
+  //import openconfig-authentication-types { prefix "oc-auth-types"; }
+  //import openconfig-keychain { prefix "oc-keychain"; }
+
+  // Include submodules:
+  // IS-IS LSP is the LSDB for IS-IS.
+  include openconfig-isis-lsp;
+  // IS-IS RT is routing-related features for IS-IS
+  include openconfig-isis-routing;
+
+  // meta
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net ";
+
+  description
+    "This module describes a YANG model for ISIS protocol configuration.
+    It is a limited subset of all of the configuration parameters
+    available in the variety of vendor implementations, hence it is
+    expected that it would be augmented with vendor - specific configuration
+    data as needed. Additional modules or submodules to handle other
+    aspects of ISIS configuration, including policy, routing, types,
+    LSDB and additional address families are also expected. This model
+    supports the following ISIS configuration level hierarchy:
+
+    ISIS
+    +-> { global ISIS configuration}
+        +-> levels +-> { level config}
+            +-> { system-level-counters }
+            +-> { level link-state-database}
+        +-> interface +-> { interface config }
+            +-> { circuit-counters }
+            +-> { levels config }
+            +-> { level adjacencies }";
+
+  oc-ext:openconfig-version "0.3.2";
+
+  revision "2017-07-26" {
+    description
+      "Update LSDB and fix bugs.";
+    reference "0.3.2";
+  }
+
+  revision "2017-05-15" {
+    description
+      "Refactor LSDB.";
+    reference "0.3.0";
+  }
+
+  revision "2017-01-13" {
+    description
+      "Remove top-level /isis container";
+    reference "0.2.1";
+  }
+
+  revision "2016-12-15" {
+    description
+      "Add segment routing to IS-IS module";
+    reference "0.2.0";
+  }
+
+  revision "2016-10-18" {
+    description
+      "Initial revision of IS-IS models.";
+    reference "0.1.0";
+  }
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  // typedef statements
+
+  // grouping statements
+
+  grouping isis-global-config {
+    description
+      "This grouping defines lobal configuration options for ISIS router.";
+
+    // multi-instance
+    leaf instance {
+      type string;
+      default 0;
+      description
+        "ISIS Instance.";
+    }
+
+    leaf-list net {
+      type oc-isis-types:net;
+      description
+        "ISIS network entity title (NET). The first 8 bits are usually
+        49 (private AFI), next 16 bits represent area, next 48 bits represent
+        system id and final 8 bits are set to 0.";
+      reference
+        "International Organization for Standardization, Information
+        technology - Open Systems Interconnection-Network service
+        Definition - ISO/ IEC 8348:2002.";
+    }
+
+    leaf maximum-area-addresses {
+      type uint8;
+      default 3;
+      description
+        "Maximum areas supported.";
+    }
+
+    leaf level-capability {
+      type oc-isis-types:level-type;
+      default "LEVEL_1_2";
+      description
+        "ISIS level capability(level-1, level-2,vlevel-1-2).";
+    }
+
+    leaf max-ecmp-paths {
+      type uint8;
+      description
+        "ISIS max-paths count.";
+    }
+
+    leaf poi-tlv {
+      type boolean;
+      default false;
+      description
+        "ISIS purge TLV. When set to true, a TLV is added to purges to record
+         the system ID  of the IS generating the purge.";
+      reference "RFC6232: Purge Originator Identification TLV for IS-IS. TLV 13.";
+    }
+
+    leaf iid-tlv {
+      type boolean;
+      default false;
+      description
+        "ISIS Instance Identifier TLV. When set to trues, the IID-TLV identifies
+        the unique instance as well as the topology/topologies to which the
+        PDU applies.";
+      reference "RFC6822: IS-IS Multi-Instance. TLV 7";
+    }
+
+    leaf fast-flooding {
+      type boolean;
+      default true;
+      description
+        "When set to true, IS will always flood the LSP that triggered an SPF
+     before the router actually runs the SPF computation.";
+    }
+  }
+
+  grouping admin-config {
+    description
+      "Re-usable grouping to enable or disable a particular IS-IS feature.";
+
+    leaf enabled {
+      type boolean;
+      default false;
+      description
+        "When set to true, the functionality within which this leaf is
+        defined is enabled, when set to false it is explicitly disabled.";
+    }
+  }
+
+  grouping isis-bfd-config {
+    description
+      "This grouping defines Bidirectionl-Forwarding-Detection
+      configuration.";
+
+    //There is also BFD state under adjacency
+    leaf bfd-tlv {
+      type boolean;
+      description
+        "When set to true, BFD TLV is used. This enables support for the IS-IS
+        BFD TLV options, which specify that a BFD session must be established
+        before an IS-IS adjacency can transition to the established state.
+        This option should be enabled on all IS-IS neighbors on a shared
+        interface.";
+      reference "RFC6213. TLV 148";
+    }
+    reference "RFC5880: Bidirectional Forwarding Detection (BFD).";
+  }
+
+  grouping isis-authentication-check-config {
+    description
+      "This grouping defines ISIS authentication check.";
+
+    leaf authentication-check {
+      type boolean;
+      default true;
+      description
+        "When set to true, reject all ISIS protocol PDUs that either have a mismatch
+        in authentication-type or authentication-key.";
+    }
+  }
+
+  grouping isis-metric-style-config {
+    description
+      "This grouping defines ISIS metric style.";
+
+    leaf metric-style {
+      type oc-isis-types:metric-style;
+      description
+        "ISIS metric style types(narrow, wide).";
+    }
+  }
+
+  grouping authentication-key-config {
+    description
+      "This grouping defines authentication key configuration.";
+
+    leaf auth-password {
+      type oc-types:routing-password;
+      description
+        "Authentication key string.";
+    }
+  }
+
+  grouping keychain-base-group {
+    description
+      "This grouping defines keychain configuration.";
+
+    container keychain {
+      description
+        "This container defines keychain parameters.";
+
+      // TODO(robjs): Import keychain parameters following merge of the auth
+      // models.
+      //uses oc-keychain:keychain-common-base;
+      //uses oc-keychain:tolerance-base;
+      //uses oc-keychain:keychain-key-base;
+    }
+  }
+
+  grouping isis-authentication-config {
+    description
+      "This grouping defines ISIS authentication configuration.";
+
+    // TODO(robjs): Add authentication following merge of auth modules.
+    //leaf auth-type {
+    //  type oc-auth-types:auth-type;
+    //  description
+    //    "ISIS authentication type (key, key-chain).";
+    //}
+
+    leaf csnp-authentication {
+      type boolean;
+      default false;
+      description
+        "Enable or disable for IS-IS CSNPs.";
+    }
+
+    leaf psnp-authentication {
+      type boolean;
+      default false;
+      description
+        "Enable or disable authentication for IS-IS PSNPs.";
+    }
+
+    leaf lsp-authentication {
+      type boolean;
+      default false;
+      description
+        "Enable or disable authentication for IS-IS LSPs.";
+    }
+  }
+
+  grouping isis-authentication-group {
+   description
+     "This grouping defines ISIS authentication.";
+
+    container config {
+      description
+        "This container defines ISIS authentication configuration.";
+
+      uses isis-authentication-config;
+    }
+
+    container state {
+      config false;
+      description
+        "This container defines ISIS authentication state.";
+
+      uses isis-authentication-config;
+    }
+
+    container key {
+      description
+        "This container defines ISIS authentication key";
+      container config {
+        description
+          "This container defines ISIS authentication key configuration.";
+
+        uses authentication-key-group-config {
+          when "../auth-type = KEY";
+        }
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines ISIS authentication key state.";
+
+        uses authentication-key-group-config {
+          when "../auth-type = KEY";
+        }
+      }
+    }
+
+    uses keychain-base-group  {
+      when "../auth-type = KEY_CHAIN";
+    }
+  }
+
+  grouping isis-hello-authentication-config {
+    description
+      "Configuration options for IS-IS hello authentication.";
+
+    leaf hello-authentication {
+      type boolean;
+      default false;
+      description
+        "Enabled or disable ISIS Hello authentication.";
+    }
+
+    // TODO(robjs): Add hello-auth-type following merge of auth models.
+    //leaf hello-auth-type {
+    //  type oc-auth-types:auth-type;
+    //  description
+    //    "ISIS authentication type (key, key-chain).";
+    //}
+  }
+
+  grouping isis-hello-authentication-group {
+    description
+      "This grouping defines ISIS hello-authentication.";
+
+    container config {
+      description
+        "This container defines ISIS authentication configuration.";
+
+      uses isis-hello-authentication-config;
+    }
+
+    container state {
+      config false;
+      description
+        "This container defines ISIS authentication state.";
+
+      uses isis-hello-authentication-config;
+    }
+
+    container key {
+      description
+        "This container defines ISIS authentication key";
+
+      container config {
+        description
+          "This container defines ISIS authentication key configuration.";
+
+        uses authentication-key-group-config {
+          when "../auth-type = KEY";
+        }
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines ISIS authentication key state.";
+
+        uses authentication-key-group-config {
+          when "../auth-type = KEY";
+        }
+      }
+    }
+
+    uses keychain-base-group  {
+      when "../auth-type = KEY_CHAIN";
+    }
+  }
+
+  grouping isis-ldp-igp-config {
+    description
+      "This grouping defines ISIS/LDP Synchronization configuration.";
+
+    leaf enabled {
+      type boolean;
+      default true;
+      description
+        "When set to true, rely on IGP/LDP synchronization. IGP cost for
+     link is maintained at max until LDP adjacencies are established ";
+      reference "RFC5443: LDP IGP Synchronization.";
+    }
+
+    leaf post-session-up-delay {
+      type uint16;
+      units seconds;
+      description
+        "Specifies a delay, expressed in units of seconds,
+        between the LDP session to the IGP neighbor being established, and
+        it being considered synchronized by the IGP.";
+    }
+  }
+
+  grouping isis-te-config {
+    description
+      "This grouping defines ISIS Traffic Engineering configuration.";
+
+    leaf ipv4-router-id {
+      type inet:ipv4-address-no-zone;
+      description
+        "IPv4 MPLS Traffic Engineering Router-ID.";
+    }
+
+    leaf ipv6-router-id {
+      type inet:ipv6-address-no-zone;
+      description
+        "IPv6 MPLS Traffic Engineering Router-ID.";
+    }
+  }
+
+  grouping isis-reference-bandwidth-config {
+    description
+      "This grouping defines ISIS Reference Bandwidth Configuration.";
+
+    leaf reference-bandwidth {
+      type uint32;
+      description
+        "ISIS Reference Bandwidth value";
+    }
+  }
+
+  grouping isis-overload-bit-set-config {
+    description
+      "This grouping defines ISIS Overload Bit.";
+
+    leaf set-bit {
+      type boolean;
+      default false;
+      description
+        "When set to true, IS-IS overload bit is set.";
+    }
+
+    leaf set-bit-on-boot {
+      type boolean;
+      default false;
+      description
+        "When set to true, the IS-IS overload bit is set on system boot.";
+    }
+
+    leaf advertise-high-metric {
+      type boolean;
+      default false;
+      description
+        "When set to true, the local IS advertises links with the highest
+        available metric regardless of their configured metric. The metric
+        value is based on the metric style - if wide metrics are utilised
+        the metric is advertised as 16777214, otherwise they are advertised
+        with a value of 63.";
+    }
+  }
+
+  grouping isis-overload-bit-reset-config {
+    description
+      "This grouping defines ISIS Overload Bit Reset Triggers";
+
+    leaf reset-trigger {
+      type identityref {
+          base oc-isis-types:OVERLOAD_RESET_TRIGGER_TYPE;
+      }
+      description
+        "In the case that the system sets the overload bit on start, the
+        system should reset the bit (i.e., clear the overload bit) upon
+        the specified trigger.";
+    }
+
+    leaf delay {
+      type uint16;
+      units seconds;
+      description
+        "If a reset trigger is specified, the system should delay resetting
+        the overload bit for the specified number of seconds after the
+        trigger occurs.";
+    }
+  }
+
+  grouping isis-attached-bit-config {
+    description
+      "This grouping defines ISIS Attached Bit";
+
+    leaf ignore-bit {
+      type boolean;
+      default false;
+      description
+        "When set to true, if the attached bit is set on an incoming Level 1
+        IS-IS, the local system ignores it. In this case the local system
+        does not set a default route to the L1L2 router advertising the PDU
+        with the attached bit set.";
+    }
+
+    leaf suppress-bit {
+      type boolean;
+      default false;
+      description
+        "When set to true, if the local IS acts as a L1L2 router, then the
+        attached bit is not advertised in locally generated PDUs.";
+    }
+  }
+
+  grouping overload-bit-group {
+    description
+      "This grouping defines ISIS Overload Bit.";
+
+    container config {
+      description
+        "This container defines ISIS Overload Bit configuration.";
+
+      uses isis-overload-bit-set-config;
+    }
+
+    container state {
+      config false;
+      description
+        "This container defines state for ISIS Overload Bit.";
+
+      uses isis-overload-bit-set-config;
+    }
+
+    container reset-triggers {
+      description
+        "This container defines state for ISIS Overload Bit reset triggers";
+
+      list reset-trigger {
+        key "reset-trigger";
+
+        description
+          "This list describes ISIS Overload reset trigger reasons.";
+
+        leaf reset-trigger {
+          type leafref {
+            path "../config/reset-trigger";
+          }
+          description
+            "Reference to the reset trigger reason";
+        }
+
+        container config {
+          description
+            "This container defines ISIS Overload Bit reset trigger
+            configuration.";
+
+          uses isis-overload-bit-reset-config;
+        }
+
+        container state {
+          config false;
+          description
+            "This container defines state for ISIS Overload Bit reset
+            triggers.";
+
+          uses isis-overload-bit-reset-config;
+        }
+      }
+    }
+  }
+
+
+  grouping isis-base-level-config {
+    description
+      "This grouping defines ISIS Level configuration.";
+
+    leaf level-number {
+      type oc-isis-types:level-number;
+      description
+        "ISIS level number (level-1, level-2).";
+    }
+  }
+
+  grouping isis-interface-level-config {
+    description
+      "This grouping defines ISIS Interface Level configuration.";
+
+    leaf level-number {
+      type oc-isis-types:level-number;
+      description
+        "ISIS level number(level-1, level-2).";
+    }
+
+    leaf passive {
+      type boolean;
+      default false;
+      description
+        "ISIS passive interface admin enable/disable function.";
+    }
+
+    leaf priority {
+      type uint8 {
+        range "0 .. 127";
+      }
+      description
+        "ISIS neighbor priority(LAN hello PDU only).";
+    }
+  }
+
+  grouping isis-hello-timers-config {
+    description
+      "This grouping defines ISIS hello timers configuration.";
+
+    leaf hello-interval {
+      type uint32;
+      description
+        "ISIS hello-interval value.";
+    }
+
+    leaf hello-multiplier {
+      type uint8;
+      description
+        "ISIS hello-multiplier value.";
+    }
+  }
+
+  grouping isis-interface-config {
+    description
+      "This grouping defines ISIS interface configuration.";
+
+    leaf interface-id {
+      type oc-if:interface-id;
+      description
+        "Interface for which ISIS configuration is to be applied.";
+    }
+
+    leaf passive {
+      type boolean;
+      default false;
+      description
+        "When set to true, the referenced interface is a passive interface
+        such that it is not eligible to establish adjacencies with other
+        systems, but is advertised into the IS-IS topology.";
+    }
+
+    leaf hello-padding {
+      type oc-isis-types:hello-padding-type;
+      description
+        "This leaf controls padding type for IS-IS Hello PDUs.";
+    }
+
+    leaf circuit-type {
+      type oc-isis-types:circuit-type;
+      description
+        "ISIS circuit type (p2p, broadcast).";
+    }
+  }
+
+  grouping isis-adaptive-timers-state {
+    description
+      "This grouping defines ISIS adaptive timers state";
+
+    leaf adaptive-timer {
+      type oc-isis-types:adaptive-timer-type;
+        description
+          "ISIS adaptive timer types (linear, exponential).";
+    }
+  }
+
+  grouping isis-lsp-generation-timers-config {
+    description
+      "This grouping defines ISIS LSP Generation timers configuration";
+
+    leaf lsp-max-wait-interval {
+      type uint64;
+      units milliseconds;
+      description
+        "Time interval in milliseconds that specifies max interval between
+         two consecutive occurrences of an LSP being generated.";
+    }
+
+    leaf lsp-first-wait-interval {
+      type uint64;
+      units milliseconds;
+      description
+        "Time interval in milliseconds that specifies the first LSP generation
+        delay.";
+    }
+
+    leaf lsp-second-wait-interval {
+      type uint64;
+      units milliseconds;
+      description
+        "Time interval in milliseconds that specifies the millisecond LSP
+         generation delay.";
+    }
+  }
+
+  grouping isis-lsp-timers-config {
+    description
+      "This grouping defines ISIS LSP timers configuration";
+
+    leaf lsp-lifetime-interval {
+      type uint16;
+      units seconds;
+      default 1200;
+      description
+        "Time interval in seconds that specifies how long an LSP remains in
+        LSDB without being refreshed.";
+    }
+
+    leaf lsp-refresh-interval {
+      type uint16;
+      units seconds;
+      description
+        "Time interval in seconds that specifies how often route topology
+         that a device originates is transmitted in LSPs.";
+    }
+  }
+
+  grouping isis-spf-timers-config {
+    description
+      "This grouping defines ISIS SPF timers configuration.";
+
+    leaf spf-hold-interval {
+      type uint64;
+      units milliseconds;
+      default 5000;
+      description
+        "SPF Hold Down time interval in milliseconds.";
+    }
+
+    leaf spf-first-interval {
+      type uint64;
+      units milliseconds;
+      description
+        "Time interval in milliseconds between the
+        detection of topology change and when the SPF algorithm runs.";
+    }
+    leaf spf-second-interval {
+      type uint64;
+      units milliseconds;
+      description
+        "Time interval in milliseconds between the first and second
+         SPF calculation.";
+    }
+  }
+
+  grouping isis-interface-timers-config {
+    description
+      "This grouping defines ISIS interface timers configuration.";
+
+    leaf csnp-interval {
+      type uint16;
+      units seconds;
+      description
+        "The interval, specified in seconds, at which periodic CSNP packets
+        should be transmitted by the local IS.";
+    }
+
+    leaf lsp-pacing-interval {
+      type uint64;
+      units milliseconds;
+      description
+        "The interval interval in milliseconds between the
+        detection of topology change and when the SPF algorithm runs.";
+    }
+  }
+
+  grouping isis-transport-config {
+    description
+      "This grouping defines configuration parameters relating to the
+      transport protocol used by the ISIS.";
+
+    leaf lsp-mtu-size {
+      type uint16;
+      description
+        "The maximum size in bytes of an IS-IS Link state PDU.";
+    }
+  }
+
+  grouping isis-graceful-restart-config {
+    description
+      "This grouping defines ISIS graceful restart configuration.";
+
+    leaf helper-only {
+      type boolean;
+      description
+        "Enable or disable the IS-IS graceful restart helper function. When
+        this leaf is set, the local system does not utilise the IS-IS
+        graceful restart procedures during its own restart, but supports
+        retaining forwarding information during a remote speaker's restart.";
+    }
+    reference "RFC 5306: Restart Signaling for IS-IS.";
+  }
+
+  // configuration context containers
+  grouping inter-level-propagation-policies-structural {
+    description
+      "Propagate prefixes between IS-IS levels.";
+
+    container inter-level-propagation-policies {
+      description
+        "Policies to propagate prefixes between IS-IS levels.";
+
+      container level1-to-level2 {
+        description
+          "Policies relating to prefixes to be propagated from
+          Level 1 to Level 2.";
+
+        container config {
+          description
+            "Configuration parameters relating to the propagation
+            of prefixes from IS-IS Level 1 to Level 2.";
+
+          uses inter-level-propagation-policy-config;
+        }
+
+        container state {
+          config false;
+          description
+            "Operational state parameters relating to the
+            propagation of prefixes from IS-IS Level 1 to Level 2.";
+
+          uses inter-level-propagation-policy-config;
+        }
+
+      }
+
+      container level2-to-level1 {
+        description
+          "Policies relating to prefixes to be propagated from
+           Level2 to Level 1.";
+
+        container config {
+          description
+            "Configuration parameters relating to the propagation
+            of prefixes from IS-IS Level 2 to Level 1.";
+
+          uses inter-level-propagation-policy-config;
+        }
+
+        container state {
+          config false;
+          description
+            "Operational state parameters relating to the propagation
+            of prefixes from IS-IS Level 2 to Level 1.";
+
+          uses inter-level-propagation-policy-config;
+        }
+      }
+    }
+  }
+
+  grouping inter-level-propagation-policy-config {
+    description
+      "Policy governing the propagation of prefixes between levels.";
+
+    uses oc-rpol:apply-policy-import-config;
+  }
+
+  grouping authentication-key-group-config {
+    description
+      "This grouping defines ISIS authentication key configuration.";
+
+    uses authentication-key-config;
+
+    // TODO(robjs): Add crypto-algorithm after merge of authentication modules.
+    //leaf crypto-algorithm {
+    //  type identityref {
+    //    base oc-auth-types:CRYPTO_TYPE;
+    //  }
+    //  description
+    //    "Authentication key cryptographic algorithm to be used for key encryption.";
+    //}
+  }
+
+  grouping isis-global-base {
+    description
+      "This grouping describes ISIS Global router.";
+
+    container config {
+      description
+        "This container defines ISIS global configuration router.";
+
+      uses isis-authentication-check-config;
+      uses isis-global-config;
+    }
+
+    container state {
+      config false;
+      description
+        "This container defines state for ISIS global router.";
+
+      uses isis-authentication-check-config;
+      uses isis-global-config;
+    }
+
+    container lsp-bit {
+      description
+        "This container defines ISIS LSP Operational Bits.";
+
+      container overload-bit {
+        description
+          "This container defines Overload Bit configuration.";
+        uses overload-bit-group;
+      }
+
+      container attached-bit {
+        description
+          "This container defines Attached Bit.";
+
+        container config {
+          description
+            "This container defines Attached Bit configuration.";
+
+          uses isis-attached-bit-config;
+        }
+
+        container state {
+          config false;
+          description
+            "This container defines state for Link State PDU Bit.";
+
+          uses isis-attached-bit-config;
+        }
+      }
+    }
+
+    container reference-bandwidth {
+      description
+        "This container defines ISIS Reference Bandwidth.";
+
+      container config {
+        description
+          "This container defines Reference Bandwidth configuration";
+        uses isis-reference-bandwidth-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines state for Reference Bandwidth.";
+
+        uses isis-reference-bandwidth-config;
+      }
+    }
+
+    container nsr {
+      description
+        "This container defines ISIS Non-Stop Routing.";
+
+      container config {
+        description
+          "This container defines Non-Stop-Routing configuration.";
+
+        uses admin-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines state for Non-Stop-Routing";
+
+        uses admin-config;
+      }
+    }
+
+    container graceful-restart {
+      description
+        "This container defines ISIS Graceful Restart.";
+
+      container config {
+        description
+          "This container defines ISIS graceful-restart configuration.";
+
+        uses admin-config;
+        uses isis-graceful-restart-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines state information for ISIS graceful-restart.";
+
+        uses admin-config;
+        uses isis-graceful-restart-config;
+      }
+    }
+
+    container timers {
+      description
+        "This container defines ISIS timers.";
+
+      container config {
+        description
+          "This container defines ISIS global timers configuration.";
+
+        uses isis-lsp-timers-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines state information for ISIS global timers.";
+
+        uses isis-lsp-timers-config;
+      }
+
+      container spf {
+        description
+          "This container defines ISIS SPF timer settings.";
+
+        container config {
+          description
+            "This container defines ISIS SPF timers configuration.";
+
+          uses isis-spf-timers-config;
+        }
+
+        container state {
+         config false;
+         description
+          "This container defines state information for ISIS SPF timers.";
+
+         uses isis-spf-timers-config;
+         uses isis-adaptive-timers-state;
+       }
+      }
+
+      container lsp-generation {
+        description
+          "This container defines ISIS LSP Generation.";
+
+        container config {
+          description
+            "This container defines ISIS LSP Generation timers
+            configuration.";
+
+          uses isis-lsp-generation-timers-config;
+        }
+
+        container state {
+          config false;
+          description
+            "This container defines state information for ISIS LSP Generation
+            timers.";
+
+          uses isis-lsp-generation-timers-config;
+          uses isis-adaptive-timers-state;
+        }
+      }
+    }
+
+    container transport {
+      description
+        "This container defines ISIS transport.";
+
+      container config {
+        description
+          "This container defines ISIS transport related configuration.";
+
+        uses isis-transport-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines state information for ISIS transport
+          parameters.";
+
+        uses isis-transport-config;
+      }
+    }
+
+    container mpls {
+      description
+        "Configuration and operational state relating to MPLS-related
+        features in IS-IS";
+
+      container igp-ldp-sync {
+        description
+          "Configuration and operational state relating to synchronisation
+          between the LDP and IS-IS";
+
+        container config {
+          description
+            "This container defines ISIS/IGP configuration.";
+
+          uses isis-ldp-igp-config;
+        }
+
+        container state {
+          config false;
+          description
+            "This container defines state information for ISIS/LDP Sync.";
+
+          uses isis-ldp-igp-config;
+        }
+      }
+    }
+
+    container igp-shortcuts {
+      description
+        "This container defines IGP shortcuts configuration and state
+        information.";
+
+      uses isis-shortcuts-afi-list;
+    }
+
+    container afi-safi {
+      description
+        "This container defines address-family specific configuration
+        and state information.";
+
+      uses isis-afi-safi-list;
+    }
+
+    uses oc-sr:sr-igp-top;
+  }
+
+  grouping isis-route-preference-config {
+    description
+      "This grouping defines ISIS route preference configuration";
+
+    leaf external-route-preference {
+      type uint8 {
+        range "1..max";
+      }
+      description
+        "Administrative Distance(preference) for external ISIS routes.";
+    }
+
+    leaf internal-route-preference {
+      type uint8 {
+        range "1..max";
+      }
+      description
+        "Administrative Distance(preference) for internal ISIS routes.";
+    }
+  }
+
+  grouping isis-interfaces {
+    description
+      "This grouping defines ISIS interfaces configured on local system.";
+
+    list interface {
+      key "interface-id";
+
+      description
+        "This list contains ISIS interfaces.";
+
+      leaf interface-id {
+        type leafref {
+          path "../config/interface-id";
+        }
+        description
+          "Reference to interface-id";
+      }
+
+      uses isis-interface-group;
+      uses oc-if:interface-ref;
+    }
+  }
+
+  grouping isis-interface-group {
+    description
+      "This grouping defines ISIS interfaces configured on local system.";
+
+    container config {
+      description
+        "This container defines ISIS interface configuration.";
+
+      uses admin-config;
+      uses isis-interface-config;
+    }
+
+    container state {
+      config false;
+      description
+        "This container defines state information for ISIS interfaces.";
+
+      uses admin-config;
+      uses isis-interface-config;
+    }
+
+    container circuit-counters {
+      description
+        "This container defines state information for ISIS circuit counters.";
+
+      uses circuit-counters-structural;
+    }
+
+    container authentication {
+      description
+        "This container defines ISIS authentication.";
+
+      uses isis-hello-authentication-group;
+    }
+
+    container afi-safi {
+      description
+        "This container defines address-family specific configuration
+        and state information.";
+
+      uses isis-if-global-afi-safi-list;
+    }
+
+    container levels {
+      description
+        "This container defines ISIS level specific configuration and
+        state information.";
+
+      uses isis-interface-levels;
+    }
+
+    container timers {
+      description
+        "This container describes ISIS interface timers configuration";
+
+      container config {
+        description
+          "Configuration parameters relating to interface
+          timers for IS-IS";
+
+        uses isis-interface-timers-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines state information for ISIS interface timers.";
+
+        uses isis-interface-timers-config;
+      }
+    }
+
+    container bfd {
+      //TODO(bogdanov): Integrate BFD model/module
+      description
+        "This container defines BFD.";
+
+      container config {
+        description
+          "This container defines BFD configuration parameters.";
+
+        uses isis-bfd-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines BFD state information.";
+
+        uses isis-bfd-config;
+      }
+    }
+  }
+
+  grouping isis-levels {
+    description
+      "This grouping defines global ISIS Levels.";
+
+    list level {
+      key "level-number";
+
+      description
+        "Configuration and operational state parameters related to a
+        particular level within the IS-IS protocol instance";
+
+      leaf level-number {
+        type leafref {
+          path "../config/level-number";
+        }
+        description
+          "Reference to ISIS level-number.";
+      }
+
+      uses isis-level-group;
+    }
+  }
+
+  grouping isis-interface-levels {
+    description
+      "This grouping defines ISIS interface Levels.";
+
+    list level {
+      key "level-number";
+      description
+        "Configuration and operational state parameters related to a
+        particular level on an IS-IS enabled interface.";
+
+      leaf level-number {
+        type leafref {
+          path "../config/level-number";
+        }
+        description
+          "Reference to ISIS level-number.";
+      }
+
+      uses isis-interface-level-group;
+    }
+  }
+
+  grouping isis-level-group {
+    description
+      "This grouping defines ISIS level configuration and state
+      information.";
+
+    container config {
+      description
+        "This container defines ISIS level based configuration.";
+
+      uses admin-config;
+      uses isis-base-level-config;
+      uses isis-metric-style-config;
+      uses isis-authentication-check-config;
+    }
+
+    container state {
+      config false;
+      description
+        "This container defines ISIS level state information.";
+
+      uses admin-config;
+      uses isis-base-level-config;
+      uses isis-metric-style-config;
+      uses isis-authentication-check-config;
+    }
+
+    container system-level-counters {
+      description
+        "This container defines ISIS system level counters.";
+
+      uses system-level-counters-structural;
+    }
+
+    container link-state-database {
+      config false;
+      description
+        "This container defines ISIS LSDB.";
+
+      list lsp {
+        key "lsp-id";
+        description
+          "This list describes LSPs in the LSDB.";
+        uses lsp-state;
+      }
+    }
+
+    container traffic-engineering {
+      description
+        "This container defines ISIS TE.";
+
+      container config {
+        description
+          "This container defines ISIS TE configuration.";
+
+        uses admin-config;
+        uses isis-te-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines ISIS TE state information.";
+
+        uses admin-config;
+        uses isis-te-config;
+      }
+    }
+
+    container route-preference {
+      description
+        "This container defines Administrative Distance (or preference)
+        assigned to ISIS routes (level1 internal, level2 internal, level1
+        external, level2 external).";
+
+      container config {
+        description
+          "This container defines route preference configuration.";
+        uses isis-route-preference-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines ISIS route preference state information.";
+        uses isis-route-preference-config;
+      }
+    }
+
+    container authentication {
+      description
+        "This container defines ISIS authentication.";
+      uses isis-authentication-group;
+    }
+
+  }
+
+  grouping isis-interface-level-group {
+    description
+      "This grouping defines ISIS interface level.";
+
+    container config {
+      description
+        "This container defines interface ISIS level configuration.";
+
+      uses isis-interface-level-config;
+      uses admin-config;
+    }
+
+    container state {
+      config false;
+      description
+        "This container defines interface ISIS level state information.";
+
+      uses isis-interface-level-config;
+      uses admin-config;
+    }
+
+    container packet-counters {
+      description
+        "This container defines ISIS interface packet counters.";
+
+      uses packet-counters-structural;
+    }
+
+    container adjacencies {
+      config false;
+      description
+        "This container defines ISIS adjacencies.";
+
+      list adjacency {
+        key "system-id";
+
+        description
+          "List of the local system's IS-IS adjacencies.";
+
+        leaf system-id {
+          type leafref {
+            path "../state/system-id";
+          }
+          description
+            "Reference to the IS neighbor.";
+        }
+
+        container state {
+          description
+            "Operational state relating to the IS-IS adjacency with the
+            remote system";
+
+          uses adjacency-state;
+        }
+      }
+    }
+
+    container timers {
+      description
+        "This container defines ISIS timers.";
+
+      container config {
+        description
+          "This container defines ISIS interface hello-timers configuration.";
+
+        uses isis-hello-timers-config;
+      }
+
+      container state {
+        config false;
+        description
+          "This container defines ISIS interface hello-timers state.";
+
+        uses isis-hello-timers-config;
+      }
+    }
+
+    container afi-safi {
+      description
+        "This container defines address-family specific configuration
+        and state information.";
+
+      uses isis-if-afi-safi-list;
+    }
+
+    container hello-authentication {
+      description
+        "This container defines ISIS authentication.";
+
+      uses isis-hello-authentication-group;
+    }
+  }
+
+
+  grouping isis-top {
+    description
+      "This grouping define top-level ISIS model data.";
+
+    container isis {
+      description
+        "This container defines top-level ISIS configuration and state
+        information.";
+
+      container global {
+        description
+          "This container defines global ISIS configuration and state
+          information.";
+
+        uses isis-global-base;
+        uses inter-level-propagation-policies-structural;
+      }
+
+      container levels {
+        description
+          "This container defines ISIS level configuration and state
+          information.";
+        uses isis-levels;
+      }
+
+      container interfaces {
+        description
+          "This container defines global ISIS interface configuration and
+          state information.";
+        uses isis-interfaces;
+      }
+    }
+  }
+
+  grouping adjacency-state {
+    description
+      "This grouping defines ISIS adjacency.";
+
+    leaf system-id {
+     type oc-isis-types:system-id;
+      description
+        "ISIS neighbor system-id.";
+    }
+
+    leaf neighbor-ipv4-address {
+      type inet:ipv4-address-no-zone;
+      description
+        "ISIS Neighbor IPv4 address.";
+    }
+
+    leaf neighbor-ipv6-address {
+      type inet:ipv6-address-no-zone;
+      description
+        "ISIS Neighbor IPv6 address.";
+    }
+
+    leaf neighbor-snpa {
+      type oc-isis-types:snpa;
+      description
+        "ISIS neighbor SNPA.";
+    }
+
+    leaf local-extended-circuit-id {
+      type oc-isis-types:extended-circuit-id;
+      description
+        "Local extended circuit ID.";
+    }
+    leaf neighbor-extended-circuit-id {
+      type oc-isis-types:extended-circuit-id;
+      description
+        "ISIS neighbor extended circuit ID.";
+    }
+
+    leaf priority {
+      type uint8 {
+        range "0..127";
+      }
+      description
+        "Priority of the neighboring IS(LAN Hello only).";
+    }
+
+    leaf dis-system-id {
+      type oc-isis-types:system-id;
+      description
+        "DIS System ID(LAN hello only).";
+    }
+
+    leaf neighbor-circuit-type {
+      type oc-isis-types:level-type;
+      description
+        "Received ISIS circuit type (level-1, level-2, level-1-2).";
+    }
+
+    leaf adjacency-type {
+      type oc-isis-types:level-type;
+      description
+        "Formed ISIS adjacency type(level-1, level-2, level-1-2).";
+    }
+
+    leaf adjacency-state {
+      type oc-isis-types:isis-interface-adj-state;
+      description
+        "P2P 3-way ISIS adjacency state(up, down, init, failed).";
+      reference "RFC4303. TLV 240.";
+    }
+
+    leaf remaining-hold-time {
+      type uint16;
+      units seconds;
+      description
+        "Holding time in seconds for adjacency. This value is based on received
+        hello PDUs and the elapsed time since receipt.";
+    }
+
+    leaf up-time {
+      type yang:timestamp;
+      description
+        "Adjacency up time.";
+    }
+
+    leaf multi-topology {
+      type boolean;
+      description
+        "When set to true, ISIS multi-topology is supported.";
+      reference "RFC5129. TLV 229.";
+    }
+
+    leaf-list topology {
+      type identityref {
+        base oc-isis-types:AFI_SAFI_TYPE;
+      }
+      description
+        "ISIS topology type support(ipv4-unicast, ipv6-unicast,
+        ipv4-multicast, ipv6-multicast).";
+    }
+
+    leaf restart-support {
+      type boolean;
+      description
+        "When set to true, Graceful-restart signaling is supported.";
+    }
+
+    leaf restart-suppress {
+      type boolean;
+      description
+        "When set to true, adjacency is not advertised. The SA bit is used by a
+        starting router to  request that its neighbor suppress advertisement of
+        the adjacency  to the starting router in the neighbor's LSPs.";
+    }
+
+    leaf restart-status {
+      type boolean;
+      description
+        "When set to true, neighbor is being helped. The RR bit is used by a
+        (re)starting router to signal to its neighbors that a (re)start is in
+        progress.";
+    }
+
+    leaf-list area-address {
+      type oc-isis-types:area-address;
+      description
+        "List of ISIS area-address(es).";
+    }
+
+    leaf-list nlpid {
+      type enumeration {
+        enum IPV4 {
+          description
+      "IPv4 Address family.";
+        }
+        enum IPV6 {
+          description
+      "IPv6 Address family.";
+        }
+      }
+      description
+        "Supported Protocol. IPv4 is defined as (0xcc)
+        and IPv6 - (0x8e). ISIS reference is TLV 129.";
+    }
+
+    // TODO(bogdanov): update when BFD model is integrated.
+    //leaf ipv4-bfd-status {
+      //type oc-isis-types:bfd-state;
+      //description
+      //  "IPv4 BFD session status.";
+    //}
+    //leaf ipv6-bfd-status {
+      //type oc-isis-types:bfd-state;
+      //description
+      //  "IPv4 BFD session status. ";
+    //}
+
+  }
+
+  grouping packet-counters-generic-state {
+    description
+      "Operational state parameters relating to LSP packet counters.";
+
+    leaf received {
+      type yang:counter32;
+      description
+        "The number of the specified type of PDU received on the interface.";
+    }
+    leaf processed {
+      type yang:counter32;
+      description
+        "The number of the specified type of PDU received on the interface
+        that have been processed by the local system.";
+    }
+    leaf dropped {
+      type yang:counter32;
+      description
+        "The number of the specified type of PDU received on the interface
+        that have been dropped.";
+    }
+
+    leaf sent {
+      type yang:counter32;
+      description
+        "The number of the specified type of PDU that have been sent by the
+        local system on the interface.";
+    }
+
+    leaf retransmit {
+      type yang:counter32;
+      description
+        "The number of the specified type of PDU that that have been
+        retransmitted by the local system on the interface.";
+    }
+  }
+
+  grouping packet-counters-structural {
+    description
+      "This grouping defines ISIS packet counter state.";
+
+    container lsp {
+      description
+        "This container defines LSP packet counters.";
+
+     container state {
+      config false;
+      description
+        "This container defines LSP PDU counters.";
+
+      uses packet-counters-generic-state;
+     }
+    }
+
+    container iih {
+      description
+        "This container defines IIH packet counters.";
+
+      container state {
+        config false;
+        description
+          "Operational counters relating to IIH PDUs";
+
+        uses packet-counters-generic-state;
+      }
+    }
+
+    container ish {
+      description
+        "This container defines ISH packet counters.";
+
+     container state {
+      config false;
+      description
+        "Operational state relating to ISH PDUs.";
+
+      uses packet-counters-generic-state;
+     }
+    }
+
+    container esh {
+     description
+       "This container defines ESH packet counters.";
+     container state {
+      config false;
+      description
+        "Operational state relating to ESH PDUs";
+
+      uses packet-counters-generic-state;
+     }
+    }
+
+    container psnp {
+     description
+      "This container defines PSNP packet counters.";
+
+      container state {
+        config false;
+        description
+          "Packet counters relating to PSNPs.";
+
+        uses packet-counters-generic-state;
+      }
+    }
+
+    container csnp {
+      description
+        "Operational state parameters relating to CSNPs.";
+
+      container state {
+        config false;
+        description
+          "Packet counters relating to CSNPs.";
+
+        uses packet-counters-generic-state;
+      }
+    }
+
+    container unknown {
+      description
+        "Operational state parameters relating to IS-IS PDUs that are not
+        otherwise classified - referred to as Unknown PDUs.";
+
+      container state {
+        config false;
+        description
+          "Packet counters relating to unknown PDUs.";
+
+        uses packet-counters-generic-state;
+      }
+    }
+  }
+
+  grouping system-level-counters-state {
+    description
+      "IS-IS counters that are relevant to the system IS-IS context.";
+
+    leaf corrupted-lsps {
+      type yang:counter32;
+      description
+        "Number 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. MIB
+        Entry: SysCorrLSPs.";
+    }
+
+    leaf database-overloads {
+      type yang:counter32;
+      description
+        "Number of times the database has become
+        overloaded.
+        MIB entry: SysLSPL(Level)DbaseOloads.";
+    }
+
+    leaf manual-address-drop-from-areas {
+      type yang:counter32;
+      description
+        "Number of times a manual address has been dropped from area.
+        MIB Entry: SysManAddrDropFromAreas.";
+    }
+
+    leaf exceed-max-seq-nums {
+      type yang:counter32;
+      description
+        "The number of times the system has attempted to exceed the maximum
+        sequence number. MIB Entry: SysAttmptToExMaxSeqNums.";
+    }
+    leaf seq-num-skips {
+      type yang:counter32;
+      description
+        "Number of times a sequence number skip has occurred. MIB Entry:
+        SysSeqNumSkips.";
+    }
+
+    leaf own-lsp-purges {
+      type yang:counter32;
+      description
+        "Number of times a zero-aged copy of the system's
+        own LSP is received from some other node.
+        MIB Entry: isisSysOwnLSPPurges.";
+    }
+
+    leaf id-len-mismatch {
+      type yang:counter32;
+      description
+        "Number of times a PDU is received with a different value for ID field
+        length from that of the receiving system. MIB Entry:
+        isisSysIDFieldLenMismatches.";
+    }
+
+    leaf part-changes {
+      type yang:counter32;
+      description
+        "The number of partition changes detected. MIB Entry: SysPartChanges.";
+    }
+
+    leaf max-area-address-mismatches {
+      type yang:counter32;
+      description
+        "Number of times a PDU is received with a different value for
+        MaximumAreaAddresses from that of the receiving system. MIB Entry:
+        SysMaxAreaAddrMismatches.";
+    }
+
+    leaf auth-fails {
+      type yang:counter32;
+      description
+        "The number of authentication key failures.
+         MIB Entry: SysAuthFails.";
+    }
+
+    leaf spf-runs {
+      type yang:counter32;
+      description
+        "The number of times SPF was ran at this level.";
+    }
+
+    leaf auth-type-fails {
+      type yang:counter32;
+      description
+        "The number of authentication type mismatches.";
+    }
+
+    leaf lsp-errors {
+      type yang:counter32;
+      description
+        "The number of received LSPs with errors.";
+    }
+  }
+
+  grouping system-level-counters-structural {
+    description
+      "This grouping defines system level counters.";
+
+    container state {
+      config false;
+      description
+        "The container defines a list of system counters for the IS.";
+
+      uses system-level-counters-state;
+    }
+  }
+
+  grouping circuit-counters-state {
+    description
+      "Operational state parameters relating to counters specific to one
+      interface or circuit.";
+
+    leaf adj-changes {
+      type yang:counter32;
+      description
+        "Number of times an adjacency state change has occurred on this circuit.
+        MIB Entry: CircAdjChanges.";
+    }
+
+    leaf init-fails {
+      type yang:counter32;
+      description
+        "Number of times initialization of this circuit has failed. This counts
+        events such as PPP NCP failures. MIB Entry: CircInitFails.";
+    }
+
+    leaf rejected-adj {
+      type yang:counter32;
+      description
+        "Number of times an adjacency has been rejected on this circuit. MIB
+        Entry: CircRejAdjs.";
+    }
+
+    leaf id-field-len-mismatches {
+      type yang:counter32;
+      description
+        "Number of times an IS-IS control PDU with an ID field length different
+        from that for this system has been received.
+        MIB Entry: CircIDFieldLenMismatches.";
+    }
+
+    leaf max-area-address-mismatches {
+      type yang:counter32;
+      description
+        "Number of times an IS-IS control PDU with a max area address field
+        different from that for this system has been received. MIB Entry:
+        CircMaxAreaAddrMismatches.";
+    }
+
+    leaf auth-type-fails {
+      type yang:counter32;
+      description
+        "Number of times an IS-IS control PDU with an auth type field different
+        from that for this system has been received. MIB Entry:
+        CircAuthTypeFails.";
+    }
+
+    leaf auth-fails {
+      type yang:counter32;
+      description
+        "Number of times an IS-IS control PDU with the correct auth type has
+        failed to pass authentication validation. MIB Entry: CircAuthFails.";
+    }
+
+    leaf lan-dis-changes {
+      type yang:counter32;
+      description
+        "Number of times the Designated IS has changed on this circuit at this
+        level. If the circuit is point to point, this count is zero. MIB Entry:
+        CircLANDesISChanges.";
+    }
+
+    leaf adj-number {
+      type uint32;
+      description
+        "Number of adjacencies on this circuit.
+        MIB Entry: CircNumAdj.";
+    }
+  }
+
+  grouping circuit-counters-structural {
+    description
+      "This grouping defines circuit counters.";
+
+    container state {
+      config false;
+      description
+          "The container defines a list of counters for IS circuit.";
+
+     uses circuit-counters-state;
+    }
+  }
+}