Adding OpenConfig YANG models.

Change-Id: I0a2fdd5826e80933cf4b9ae939ff3051acec02aa
diff --git a/models/openconfig/src/main/yang/isis/openconfig-isis-lsp.yang b/models/openconfig/src/main/yang/isis/openconfig-isis-lsp.yang
new file mode 100644
index 0000000..81c48e6
--- /dev/null
+++ b/models/openconfig/src/main/yang/isis/openconfig-isis-lsp.yang
@@ -0,0 +1,3542 @@
+submodule openconfig-isis-lsp {
+
+  belongs-to openconfig-isis {
+    prefix oc-isis;
+  }
+  import openconfig-extensions { prefix "oc-ext"; }
+  import openconfig-inet-types { prefix "inet"; }
+  import openconfig-isis-types { prefix "oc-isis-types"; }
+  import openconfig-isis-lsdb-types { prefix "oc-isis-lsdb-types"; }
+  import openconfig-types { prefix "oc-types"; }
+  import openconfig-mpls-types { prefix "oc-mpls-types"; }
+  // meta
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net ";
+
+  description
+    "This sub-module describes a YANG model for the IS-IS Link State
+    Database (LSDB).
+
+    Portions of this code were derived from IETF RFCs relating to the
+    IS-IS protocol.
+    Please reproduce this note if possible.
+    IETF code is subject to the following copyright and license:
+    Copyright (c) IETF Trust and the persons identified as authors of
+    the code.
+    All rights reserved.
+    Redistribution and use in source and binary forms, with or without
+    modification, is permitted pursuant to, and subject to the license
+    terms contained in, the Simplified BSD License set forth in
+    Section 4.c of the IETF Trust's Legal Provisions Relating
+    to IETF Documents (http://trustee.ietf.org/license-info).";
+
+  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";
+  }
+
+  typedef isis-metric-flags {
+    type enumeration {
+      enum INTERNAL {
+        description
+          "When this flag is not set, internal metrics are in use.";
+      }
+      enum UNSUPPORTED {
+        description
+          "When this flag (referred to as the S-bit) is set, then
+          the metric is unsupported.";
+      }
+    }
+    description
+      "Type definition for flags used in IS-IS metrics";
+  }
+
+  grouping isis-lsdb-link-characteristics-a-bit {
+    description
+      "Definition of the A bit, as used in IS-IS link delay TLVs.";
+
+    leaf a-bit {
+      type boolean;
+      description
+        "The A bit is set when the measured value of this parameter
+        exceeds its configured maximum threshold. The A bit is cleared
+        when the measured value falls below its configured reuse
+        threshold.";
+    }
+  }
+
+  grouping isis-lsdb-tlv-nlpid-state {
+    description
+      "NLP ID parameters for IS-IS.";
+
+    leaf-list nlpid {
+      type enumeration {
+        enum IPV4 {
+          description "IPv4 Address family.";
+        }
+        enum IPV6 {
+          description "IPv6 Address family.";
+        }
+      }
+      description
+        "Protocol supported. IPv4 is defined as (0xcc) and IPv6 -
+        (0x8e)";
+      reference
+        "RFC1195: Use of OSI IS-IS for Routing in TCP/IP and
+        Dual Environments. TLV 129. ";
+    }
+  }
+
+  grouping isis-lsdb-subtlv-type-state {
+    description
+      "Per-subTLV type operational state parameters for ISIS.";
+
+    leaf type {
+      type identityref {
+        base oc-isis-lsdb-types:ISIS_SUBTLV_TYPE;
+      }
+      description
+        "The type of subTLV being described. The type of subTLV is
+        expressed as a canonical name.";
+    }
+  }
+
+  grouping isis-lsdb-tlv-type-state {
+    description
+      "Per-subTLV type operational state parameters for ISIS.";
+
+    leaf type {
+      type identityref {
+        base oc-isis-lsdb-types:ISIS_TLV_TYPE;
+      }
+      description
+        "The type of TLV being described. The type of TLV is
+        expressed as a canonical name.";
+    }
+  }
+
+  grouping is-reachability-neighbor-state {
+    description
+      "This grouping defines is-reachability neighbor.";
+
+    container subtlvs {
+      description
+        "This container describes IS Neighbor sub-TLVs.";
+
+      list subtlv {
+        key "type";
+
+        description
+          "List of subTLV types in the LSDB for the specified TLV.";
+
+        leaf type {
+          type leafref {
+            path "../state/type";
+          }
+          description
+            "Reference to the sub-TLV type.";
+        }
+
+        container state {
+          description
+            "State parameters of IS neighbor state";
+
+          uses isis-lsdb-subtlv-type-state;
+        }
+
+        container admin-group {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_ADMIN_GROUP'" {
+            description
+              "Only include the administrative group container when
+              the sub-TLV is type 3";
+          }
+          description
+            "This container defines sub-TLV 3.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 3.";
+
+            leaf-list admin-group {
+              type uint32;
+              description
+                "The administrative group sub-TLV contains a 4-octet
+                bit mask assigned by the network administrator.  Each
+                set bit corresponds to one administrative group
+                assigned to the interface. By convention, the least
+                significant bit is referred to as group 0, and the
+                most significant bit is referred to as group 31.";
+              reference
+                "RFC5305: IS-IS Extensions for Traffic Engineering.
+                sub-TLV 3: TLV 22,23,141,222, 223.";
+            }
+          }
+        }
+
+        container link-id {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_LINK_ID'" {
+            description
+              "Only include the link identifier container when the
+              sub-TLV is type 4";
+          }
+          description
+            "This container defines sub-TLV 4.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 4.";
+
+            leaf local {
+              type uint32;
+              description
+                "The value field of this sub-TLV contains 4 octets of
+                Link Local Identifier followed by 4 octets of Link
+                Remote Identifier.";
+              reference
+                "RFC5307: IS-IS Extensions in Support of Generalized
+                Multi-Protocol Label Switching (GMPLS). sub-TLV 3: TLV
+                22,23,141,222, 223.";
+            }
+
+            leaf remote {
+              type uint32;
+              description
+                "If the Link Remote Identifier is unknown, it is set
+                to 0.";
+              reference
+                "RFC5307: IS-IS Extensions in Support of Generalized
+                Multi-Protocol Label Switching (GMPLS). sub-TLV 3: TLV
+                22,23,141,222, 223.";
+            }
+          }
+        }
+
+        container ipv4-interface-address {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_IPV4_INTERFACE_ADDRESS'" {
+            description
+              "Only include the IPv4 interface address group container
+              when the sub-TLV is type 6";
+          }
+          description
+            "This container defines sub-TLV 6.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 6.";
+
+            leaf-list address {
+              type inet:ipv4-address;
+              description
+                "A 4-octet IPv4 address for the interface described by
+                the (main) TLV. This sub-TLV can occur multiple
+                times.";
+              reference
+                "RFC5305: IS-IS Extensions for Traffic Engineering.
+                sub-TLV 6: TLV 22,23,41,222,223.";
+            }
+          }
+        }
+
+        container ipv4-neighbor-address {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_IPV4_NEIGHBOR_ADDRESS'" {
+            description
+              "Only include the IPv4 neighbor address container when
+              the sub-TLV is type 8.";
+          }
+          description
+            "This container defines sub-TLV 8.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 8.";
+
+            leaf-list address {
+              type inet:ipv4-address;
+              description
+                "A single IPv4 address for a neighboring router on
+                this link. This sub-TLV can occur multiple times.";
+              reference
+                "RFC5305: IS-IS Extensions for Traffic Engineering.
+                sub-TLV 8: TLV 22,23, 141,222,223.";
+            }
+          }
+        }
+
+        container max-link-bandwidth {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_MAX_LINK_BANDWIDTH'" {
+            description
+              "Only include the maximum link bandwidth container when
+              the sub-TLV is type 9.";
+          }
+          description
+            "This container defines sub-TLV 9.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 9.";
+
+            leaf bandwidth {
+              type oc-types:ieeefloat32;
+              units "bytes per second";
+              description
+                "The maximum bandwidth that can be used on this link
+                in this direction (from the system originating the LSP
+                to its neighbors).  It is encoded in 32 bits in IEEE
+                floating point format.  The units are bytes (not
+                bits!) per second.";
+              reference
+                "RFC5305: IS-IS Extensions for Traffic Engineering.
+                sub-TLV 9: TLV 22,23,141,222,223.";
+            }
+          }
+        }
+
+        container max-reservable-link-bandwidth {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_MAX_RESERVABLE_BANDWIDTH'" {
+            description
+              "Only include the maximum reservable link bandwidth
+              container when the sub-TLV type is 10.";
+          }
+          description
+            "This container defines sub-TLV 10.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 10.";
+
+            leaf bandwidth {
+              type oc-types:ieeefloat32;
+              units "bytes per second";
+              description
+                "The maximum amount of bandwidth that can be reserved
+                in this direction on this link.  Note that for
+                oversubscription purposes,  this can be greater than
+                the bandwidth of the link. It is encoded  in 32 bits
+                in IEEE floating point format.  The units are bytes
+                (not bits!) per second.";
+              reference
+                "RFC5305: IS-IS Extensions for Traffic Engineering.
+                Sub-TLV 10: TLV 22,23,141,222,223.";
+            }
+          }
+        }
+
+        container unreserved-bandwidth {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_UNRESERVED_BANDWIDTH'" {
+            description
+              "Only include the unreserved bandwidth container when
+              the sub-TLV type is 11.";
+          }
+          description
+            "This container defines unreserved-bandwidth. The units
+            are bytes per second.";
+
+          reference
+            "RFC5305: IS-IS Extensions for Traffic Engineering. sub-
+            TLV 11: TLV 22,23,141,222,223";
+
+          list setup-priority {
+            key "priority";
+
+            leaf priority {
+              type leafref {
+                path "../state/priority";
+              }
+              description
+                "Reference to the setup priority to which the
+                unreserved bandwidth corresponds.";
+            }
+
+            description
+              "Setup priority (0 through 7) for unreserved
+              bandwidth.";
+
+            container state {
+              description
+                "State parameters of IS Extended Reachability sub-TLV
+                11.";
+
+              leaf priority {
+                type uint8 {
+                  range "0..7";
+                }
+                description
+                  "Setup priority level of 0 through 7 to be used by
+                  Unreserved Bandwidth sub-TLV 11.";
+              }
+
+              leaf bandwidth {
+                type oc-types:ieeefloat32;
+                units "bytes per second";
+                description
+                  "The amount of bandwidth reservable in this
+                  direction on this link. Note that for
+                  oversubscription purposes, this can be greater than
+                  the bandwidth of the link. It contains eight 32-bit
+                  IEEE floating point numbers(one for each priority).
+                  The units are bytes (not bits!) per second. The
+                  values correspond to the bandwidth that can be
+                  reserved with a setup priority of 0 through 7,
+                  arranged in increasing order with priority 0
+                  occurring at the start of the sub-TLV, and priority
+                  7 at the end of the sub-TLV.";
+              }
+            }
+          }
+        }
+
+        container ipv6-interface-address {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_IPV6_INTERFACE_ADDRESS'" {
+            description
+              "Only include the IPv6 interface address when the
+              sub-TLV type is 12.";
+          }
+          description
+            "This container defines sub-TLV 12.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 12.";
+
+            leaf-list address {
+              type inet:ipv6-address;
+              description
+                "Contains a 16-octet IPv6 address for the interface
+                described by the containing  Extended IS Reachability
+                TLV. This sub-TLV can occur multiple times.";
+              reference
+                "RFC6119: IPv6 Traffic Engineering in IS-IS. sub-TLV
+                12: TLV 22,23,141,222,223.";
+            }
+          }
+        }
+
+        container ipv6-neighbor-address {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_IPV6_NEIGHBOR_ADDRESS'" {
+            description
+              "Only include the IPv6 neighbor address when the
+              sub-TLV type is 13.";
+          }
+          description
+            "This container defines sub-TLV 13.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 13.";
+
+            leaf-list address {
+              type inet:ipv6-address;
+              description
+                "Contains a 16-octet IPv6 address for a neighboring
+                router on the link described by the (main) TLV. This
+                sub-TLV can occur multiple times.";
+              reference
+                "RFC6119: IPv6 Traffic Engineering in IS-IS. sub-TLV
+                13: ISIS TLV 22,23,141,222,223.";
+            }
+          }
+        }
+
+        container extended-admin-group {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_EXTENDED_ADMIN_GROUP'" {
+            description
+              "Only include the extended admin group when the
+              sub-TLV type is 14.";
+          }
+          description
+            "This container defines sub-TLV 14.";
+          container state {
+            description
+              "State parameters of sub-TLV 14.";
+
+            leaf-list extended-admin-group {
+              type uint32;
+              description
+                "The extended-admin-group sub-TLV is used in addition
+                to the Administrative Groups when it is desirable to
+                make more than 32 colors available for advertisement
+                in a network.";
+              reference
+                "RFC7308: Extended Administrative Groups in MPLS
+                Traffic Engineering (MPLS-TE). sub-TLV 14: TLV
+                22,23,141,222,223.";
+            }
+          }
+        }
+
+        container te-default-metric {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_TE_DEFAULT_METRIC'" {
+            description
+              "Only include the default traffic engineering metric
+              container when the sub-TLV type is 18.";
+          }
+          description
+            "This container defines sub-TLV 18.";
+          container state {
+            description
+              "State parameters of sub-TLV 18.";
+
+            leaf metric {
+              type uint32;
+              description
+                "This metric is administratively assigned and can be
+                used to present a differently weighted topology to
+                traffic engineering SPF calculations. To preclude
+                overflow within a traffic engineering SPF
+                implementation, all metrics greater than or equal to
+                MAX_PATH_METRIC SHALL be considered to have a metric
+                of MAX_PATH_METRIC.";
+              reference
+                "RFC5305: IS-IS Extensions for Traffic Engineering.
+                sub-TLV 18: TLV 22,23,141,222,223.";
+            }
+          }
+        }
+
+        container link-attributes {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_LINK_ATTRIBUTES'" {
+            description
+              "Only include the link attributes container when the
+              sub-TLV is type 19.";
+          }
+          description
+            "This container defines link-attributes.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              19.";
+
+            leaf-list local-protection {
+              type enumeration {
+                enum LOCAL_PROTECTION {
+                  description
+                    "If set, local protection is available for the
+                    link.";
+                }
+                enum LINK_EXCLUDED {
+                  description
+                    "If set, the link is excluded from local
+                    protection.";
+                }
+              }
+              description
+                "Link local-protection attributes.";
+
+              reference
+                "RFC5029: Definition of an IS-IS Link Attribute Sub-
+                TLV. TLV 22, sub-TLV 19.";
+            }
+          }
+        }
+
+        container link-protection-type {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_LINK_PROTECTION_TYPE'" {
+            description
+              "Only include the link protection type container when
+              the sub-TLV type 20.";
+          }
+          description
+            "ISIS LSDB parameters relating to the type of link
+            protection offered.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 20.";
+
+            leaf-list type {
+              type enumeration {
+                enum EXTRA_TRAFFIC {
+                  description
+                    "If set the link has extra traffic protection. If
+                    the link is of type Extra Traffic, it means that
+                    the link is protecting another link or links. The
+                    LSPs on a link of this type will be lost if any of
+                    the links it is protecting fail.";
+                }
+                enum UNPROTECTED {
+                  description
+                    "If set, the link is unprotected. If the link is
+                    of type Unprotected, it means that there is no
+                    other link protecting this link.  The LSPs on a
+                    link of this type will be lost if the link
+                    fails.";
+                }
+                enum SHARED {
+                  description
+                    "If set, the link has shared protection. If the
+                    link is of type Shared, it means that there are
+                    one or more disjoint links of type Extra Traffic
+                    that are protecting this link.  These Extra
+                    Traffic links are shared between one or more links
+                    of type Shared.";
+                }
+                enum ONE_ONE {
+                  description
+                    "If set, the link has dedicated 1:1 protection. If
+                    the link is of type Dedicated 1:1, it means that
+                    there is one dedicated disjoint link of type Extra
+                    Traffic that is protecting this link.";
+                }
+                enum PLUS_ONE {
+                  description
+                    "If set, the link has dedicated 1+1 protection. If
+                    the link is of type Dedicated 1+1, it means that a
+                    dedicated disjoint link is protecting this link.
+                    However, the protecting link is not advertised in
+                    the link state database and is therefore not
+                    available for the routing of LSPs.";
+                }
+                enum ENHANCED {
+                  description
+                    "If set the link has enhanced protection.  If the
+                    link is of type Enhanced, it means that a
+                    protection scheme that is more reliable than
+                    Dedicated 1+1, e.g., 4 fiber BLSR/MS-SPRING, is
+                    being used to protect this link.";
+                }
+              }
+              description
+                "Link protection capabilities.";
+              reference
+                "RFC5307: IS-IS Extensions in Support of Generalized
+                Multi-Protocol  Label Switching (GMPLS). sub-TLV 20:
+                TLV 22,23,141,222,223.";
+            }
+          }
+        }
+
+        container bandwidth-constraints {
+          when "../state/type =" +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_BANDWIDTH_CONSTRAINTS'" {
+            description
+              "Only include the bandwidth constraints container when
+              the sub-TLV is type 22.";
+          }
+          description
+            "This container defines bandwidth-constraints. For DS-TE,
+            the existing Maximum Reservable link bandwidth parameter
+            is retained, but its semantics is generalized and
+            interpreted as the aggregate bandwidth constraint across
+            all Class-Types";
+
+          reference
+            "RFC4124: Protocol Extensions for Support of Diffserv-
+            aware MPLS Traffic Engineering. sub-TLV 22: TLV 22, 23,
+            141, 222,223";
+
+          list bandwidth-constraint {
+            key "model-id";
+
+            description
+              "List of the Bandwidth Constraints sub-TLV instances
+              present in the TLV.";
+
+            leaf model-id {
+              type leafref {
+                path "../state/model-id";
+              }
+              description
+                "Reference to the model ID associated with the
+                instance of the Bandwidth Constraints sub-TLV.";
+            }
+
+            container state {
+              description
+                "State parameters of IS Extended Reachability sub-TLV
+                22.";
+
+              leaf model-id {
+                type uint8;
+                description
+                  "Identifier for the Bandwidth Constraints  Model
+                  currently in use by the LSR initiating the IGP
+                  advertisement.";
+              }
+            }
+
+            container constraints {
+              description
+                "Constraints contained within the Bandwidth
+                Constraints sub-TLV";
+
+              list constraint {
+                key "constraint-id";
+
+                description
+                  "List of the constraints within the Bandwidth
+                  Constraints sub-TLV. The BC0 level is indicated by
+                  the constraint-id leaf being set to 0, with BCN
+                  being indicated by constraint-id N.";
+
+                leaf constraint-id {
+                  type leafref {
+                    path "../state/constraint-id";
+                  }
+                  description
+                    "Reference to the unique ID for the BCN level.";
+                }
+
+                container state {
+                  description
+                    "Operational state parameters of the BCN level";
+
+                  leaf constraint-id {
+                    type uint32;
+                    description
+                      "Unique reference for the bandwidth constraint level. BC0
+                      is indicated by this leaf being set to zero, with BCN
+                      represented by this leaf being set to N.";
+                  }
+
+                  leaf bandwidth {
+                    type oc-types:ieeefloat32;
+                    units "bytes per second";
+                    description
+                      "The bandwidth constraint, expressed as a 32-bit IEEE
+                      floating point number expressed in bytes per second.";
+                  }
+                }
+              }
+            }
+          }
+        }
+
+        container unconstrained-lsp {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_UNCONSTRAINED_LSP'" {
+            description
+              "Only include the unconstrained LSP container when the
+              sub-TLV is type 23.";
+          }
+          description
+            "This container defines sub-TLV 23.";
+          container state {
+            description
+              "State parameters of sub-TLV 23.";
+
+            uses isis-lsdb-subtlv-type-state;
+
+            leaf count {
+              type uint16;
+              description
+                "Unconstrained TE LSP count(TE Label Switched Paths
+                (LSPs) signalled with zero bandwidth).";
+              reference
+                "RFC5330: A Link-Type sub-TLV to Convey the Number of
+                Traffic Engineering Label Switched Paths Signalled
+                with Zero Reserved Bandwidth across a Link. sub-TLV
+                23: TLV 22,23,141,222,223";
+            }
+          }
+        }
+
+        container adjacency-sids {
+          when "../state/type =   'oc-isis-lsdb-types:IS_REACHABILITY_ADJ_SID'" {
+            description
+              "Only include the adjacency SIDs container when the
+              sub-TLV type is 31";
+          }
+
+          description
+            "This container defines segment routing adjacency SIDs.";
+
+          list adjacency-sid {
+            key "value";
+
+            description
+              "Adjacency Segment-IDs List. An IGP-Adjacency Segment is
+              an IGP segment attached to a unidirectional adjacency or
+              a set of unidirectional adjacencies. By default, an IGP-
+              Adjacency Segment is local to the node which advertises
+              it.";
+
+            leaf value {
+              type leafref {
+                path "../state/value";
+              }
+              description
+                "Reference to the value of the Adjacency-SID.";
+            }
+
+            container state {
+              description
+                "State parameters of Adjacency-SID.";
+
+              leaf value {
+                type uint32;
+                description
+                  "Adjacency-SID value.";
+              }
+
+              leaf-list flags {
+                type enumeration {
+                  enum ADDRESS_FAMILY {
+                    description
+                      "Address-family flag. When unset, the Adj-SID
+                      refers to an adjacency with outgoing IPv4
+                      encapsulation. If set then the Adj-SID refers to
+                      an adjacency with outgoing IPv6 encapsulation.";
+                  }
+                  enum BACKUP {
+                    description
+                      "Backup flag. When set, the Adj-SID refers to an
+                      adjacency being protected (e.g.: using IPFRR or
+                      MPLS-FRR).";
+                  }
+                  enum VALUE {
+                    description
+                      "Value flag. When set, the SID carries a value
+                      (instead of an index). By default the flag is
+                      SET.";
+                  }
+                  enum LOCAL {
+                    description
+                      "Local flag. When set, the value/index carried
+                      by the SID has local significance. By default
+                      the flag is SET.";
+                  }
+                  enum SET {
+                    description
+                      "Set flag. When set, the S-Flag indicates that
+                      the Adj-SID refers to a set of adjacencies.";
+                  }
+                }
+                description
+                  "Flags associated with Adj-Segment-ID.";
+              }
+
+              leaf weight {
+                type uint8;
+                description
+                  "Value that represents the weight of the Adj-SID for
+                  the purpose of load balancing.";
+              }
+            }
+          }
+
+          reference
+            "draft-ietf-isis-segment-routing-extensions. sub-TLV 31:
+            TLV 22, 222, 223, 141. ";
+        }
+
+        container lan-adjacency-sids {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_ADJ_LAN_SID'" {
+            description
+              "Only include the LAN adjacency SID container when
+              the sub-TLV is type 32.";
+          }
+          description
+            "This container defines segment routing LAN adjacency
+            SIDs";
+
+          list lan-adjacency-sid {
+            key "value";
+
+            description
+              "Adjacency Segment-IDs List. An IGP-Adjacency Segment is
+              an IGP segment attached to a unidirectional adjacency or
+              a set of unidirectional adjacencies. By default, an IGP-
+              Adjacency Segment is local to the node which advertises
+              it.";
+
+            leaf value {
+              type leafref {
+                path "../state/value";
+              }
+              description
+                "Reference to the value of the LAN Adjacency-SID.";
+            }
+
+            container state {
+              description
+                "State parameters of LAN Adjacency-SID.";
+
+              leaf value {
+                type uint32;
+                description
+                  "LAN Adjacency-SID value.";
+              }
+
+              leaf-list flags {
+                type enumeration {
+                  enum ADDRESS_FAMILY {
+                    description
+                      "Address-family flag. When unset, the Adj-SID
+                      refers to an adjacency with outgoing IPv4
+                      encapsulation. If set then the Adj-SID refers to
+                      an adjacency with outgoing IPv6 encapsulation.";
+                  }
+                  enum BACKUP {
+                    description
+                      "Backup flag. When set, the Adj-SID refers to an
+                      adjacency being protected (e.g.: using IPFRR or
+                      MPLS-FRR).";
+                  }
+                  enum VALUE {
+                    description
+                      "Value flag. When set, the SID carries a value
+                      (instead of an index). By default the flag is
+                      SET.";
+                  }
+                  enum LOCAL {
+                    description
+                      "Local flag. When set, the value/index carried
+                      by the SID has local significance. By default
+                      the flag is SET.";
+                  }
+                  enum SET {
+                    description
+                      "Set flag. When set, the S-Flag indicates that
+                      the Adj-SID refers to a set of adjacencies.";
+                  }
+                }
+                description
+                  "Flags associated with LAN-Adj-Segment-ID.";
+              }
+
+              leaf weight {
+                type uint8;
+                description
+                   "Value that represents the weight of the Adj-SID
+                   for the purpose of load balancing.";
+              }
+
+              leaf neighbor-id {
+                type oc-isis-types:system-id;
+                description
+                  "System ID of the neighbor associated with the LAN-
+                  Adj-Segment-ID value.";
+              }
+            }
+          }
+
+          reference
+            "draft-ietf-isis-segment-routing-extensions. sub-TLV 32:
+            TLV 22, 222, 223, 141.";
+        }
+
+        container link-delay {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_LINK_DELAY'" {
+            description
+              "Include the link delay container only when the sub-TLV
+              type is type 33.";
+          }
+          description
+            "This container defines unidirectional link delay.";
+
+          reference
+            "RFC7810: IS-IS Traffic Engineering (TE) Metric
+            Extensions. sub-TLV 33: TLV 22, 23, 141, 222, 223.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              33.";
+
+            uses isis-lsdb-link-characteristics-a-bit;
+
+            leaf delay {
+              type uint32;
+              units microseconds;
+              description
+                "Average link delay value (in microseconds) between
+                two directly connected IS-IS neighbors over a
+                configurable interval.";
+            }
+          }
+        }
+
+        container min-max-link-delay {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_MIN_MAX_LINK_DELAY'" {
+            description
+              "Only include the min/max link delay container when the
+              sub-TLV is type 34.";
+          }
+          description
+            "This container defines min/max link delay.";
+
+          reference
+            "RFC7810: IS-IS Traffic Engineering (TE) Metric
+            Extensions. sub-TLV 34: TLV 22, 23, 141, 222, 223.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              34.";
+
+            uses isis-lsdb-link-characteristics-a-bit;
+
+            leaf min-delay {
+              type uint32;
+              units microseconds;
+              description
+                "Minimum measured link delay value(in microseconds)
+                between two directly connected IS-IS neighbors over a
+                configurable interval.";
+            }
+
+            leaf max-delay {
+              type uint32;
+              units microseconds;
+              description
+                "Maximum measured link delay value(in microseconds)
+                between two directly connected IS-IS neighbors over a
+                configurable interval.";
+            }
+          }
+        }
+
+        container link-delay-variation {
+          when "../state/type = " +
+                "'oc-isis-lsdb-types:IS_REACHABILITY_LINK_DELAY_VARIATION'" {
+            description
+              "Only include the link delay variation container when
+              the sub-TLV is type 35.";
+          }
+          description
+            "This container defines unidirectional link delay
+            variation.";
+
+          reference
+            "RFC7810: IS-IS Traffic Engineering (TE) Metric
+            Extensions. sub-TLV 35: TLV 22,23,141,222,223.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              35.";
+
+            leaf delay {
+              type uint32;
+              units microseconds;
+              description
+                "Average link delay between two directly connected IS-
+                IS neighbors over a configurable interval.";
+            }
+          }
+        }
+
+        container link-loss {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_LINK_LOSS'" {
+            description
+              "Only include the link loss container when the sub-TLV
+              is type 36.";
+          }
+          description
+            "This container defines unidirectional link loss delay.";
+
+          reference
+            "RFC7810: IS-IS Traffic Engineering (TE) Metric
+            Extensions. sub-TLV 36: TLV 22, 23, 141, 222, 223.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              36.";
+
+            uses isis-lsdb-link-characteristics-a-bit;
+
+            leaf link-loss {
+              type uint32;
+              description
+                "Link packet loss as a percentage of the total traffic
+                sent over a configurable interval. The basic unit is
+                0.000003%, where (2^24 - 2) is 50.331642%. This value
+                is the highest packet-loss percentage that can be
+                expressed (the assumption being that precision is more
+                important on high-speed links than the ability to
+                advertise loss rates greater than this, and that high-
+                speed links with over 50% loss are unusable).
+                Therefore, measured values that are larger than the
+                field maximum SHOULD be encoded as the maximum
+                value.";
+            }
+          }
+        }
+
+        container residual-bandwidth {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_RESIDUAL_BANDWIDTH'" {
+            description
+              "Only include the resdiual bandwidth container when the
+              sub-TLV is type 37.";
+          }
+          description
+            "This container defines unidirectional residual
+            bandwidth.";
+
+          reference
+            "RFC7810: IS-IS Traffic Engineering (TE) Metric
+            Extensions. sub-TLV 37: TLV 22, 23, 141, 222, 223.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              37.";
+
+            leaf bandwidth {
+              type oc-types:ieeefloat32;
+              units "bytes per second";
+              description
+                "Residual bandwidth on a link,forwarding adjacency
+                [RFC4206], or bundled link in IEEE floating-point
+                format with units of bytes per second. For a link or
+                forwarding adjacency, residual bandwidth is defined to
+                be the Maximum Bandwidth [RFC5305] minus the bandwidth
+                currently allocated to RSVP-TE label switched paths.
+                For a bundled link, residual bandwidth is defined to
+                be the sum of the component link residual
+                bandwidths.";
+            }
+          }
+        }
+
+        container available-bandwidth {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_AVAILABLE_BANDWIDTH'" {
+            description
+              "Only include the available bandwdith container when the
+              sub-TLV is type 38.";
+          }
+          description
+            "This container defines unidirectional lavailable
+            bandwidth.";
+
+          reference
+            "RFC7810: IS-IS Traffic Engineering (TE) Metric
+            Extensions. sub-TLV 38: TLV 22, 23, 141, 222, 223.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              38.";
+
+            uses isis-lsdb-subtlv-type-state;
+
+            leaf bandwidth {
+              type oc-types:ieeefloat32;
+              units "bytes per second";
+              description
+                "The available bandwidth on a link, forwarding
+                adjacency, or bundled link in IEEE floating-point
+                format with units of bytes per second. For a link or
+                forwarding adjacency, available bandwidth is defined
+                to be residual bandwidth minus the measured bandwidth
+                used for the actual forwarding of non-RSVP-TE label
+                switched path packets.  For a bundled link, available
+                bandwidth is defined to be the sum of the component
+                link available bandwidths minus the measured bandwidth
+                used for the actual forwarding of non-RSVP-TE label
+                switched path packets.  For a bundled link, available
+                bandwidth is defined to be the sum of the component
+                link available bandwidths.";
+            }
+          }
+        }
+
+        container utilized-bandwidth {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_REACHABILITY_UTILIZED_BANDWIDTH'" {
+            description
+              "Only include the utilized bandwidth container when the
+              TLV is type 39.";
+          }
+          description
+            "This container defines unidirectional utilized
+            bandwidth.";
+
+          reference
+            "RFC7810: IS-IS Traffic Engineering (TE) Metric
+            Extensions. sub-TLV 39: TLV 22, 23, 141, 222, 223.";
+
+          container state {
+            description
+              "State parameters of IS Extended Reachability sub-TLV
+              39.";
+
+            uses isis-lsdb-subtlv-type-state;
+
+            leaf bandwidth {
+              type oc-types:ieeefloat32;
+              units "bytes per second";
+              description
+                "The bandwidth utilization on a link, forwarding
+                adjacency, or bundled link in IEEE floating-point
+                format with units of bytes per second.  For a link or
+                forwarding adjacency, bandwidth utilization represents
+                the actual utilization of the link (i.e., as measured
+                by the advertising node).  For a bundled link,
+                bandwidth utilization is defined to be the sum of the
+                component link bandwidth utilizations.";
+            }
+          }
+        }
+      }
+    }
+
+    uses isis-lsdb-undefined-subtlv;
+  }
+
+  grouping isis-lsdb-undefined-tlv {
+    description
+      "Grouping for unknown TLVs in the IS-IS LSDB";
+
+    container undefined-tlvs {
+      description
+        "Surrounding container for a list of unknown TLVs.";
+
+      list undefined-tlv {
+        key "type";
+        description
+          "List of TLVs that are not defined within the model, or are
+          not recognised by the system.";
+
+        leaf type {
+          type leafref {
+            path "../state/type";
+          }
+          description
+            "Reference to the undefined TLV's type";
+        }
+
+        container state {
+          description
+            "State parameters of the undefined TLV.";
+
+          uses undefined-tlv-state;
+        }
+      }
+    }
+  }
+
+  grouping isis-lsdb-undefined-subtlv {
+    description
+      "Grouping for unknown Sub-TLVs in the IS-IS LSDB.";
+
+    container undefined-subtlvs {
+      description
+        "This container describes undefined ISIS TLVs.";
+
+      list undefined-subtlv {
+        key "type";
+
+        description
+          "Sub-TLVs that are not defined in the model or not
+          recognised by system.";
+
+        leaf type {
+          type leafref {
+            path "../state/type";
+          }
+          description
+            "Reference to the type of the undefined sub-TLV";
+        }
+
+        container state {
+          description
+            "State parameters of the undefined sub-TLV.";
+
+          uses undefined-subtlv-state;
+        }
+      }
+    }
+  }
+
+  grouping isis-lsdb-prefix-state {
+    description
+      "This grouping defines prefix reachability.";
+
+     container subtlvs {
+      description
+        "This container describes IS prefix sub-TLVs.";
+
+      list subtlv {
+        key "type";
+
+        description
+          "List of subTLV types in the LSDB for the specified TLV.";
+
+        leaf type {
+          type leafref {
+            path "../state/type";
+          }
+          description
+            "Reference to the sub-TLV type";
+        }
+
+        container state {
+          description
+            "State parameters for a prefix.";
+
+          uses isis-lsdb-subtlv-type-state;
+        }
+
+      container tag {
+        when "../state/type = " +
+             "'oc-isis-lsdb-types:IP_REACHABILITY_TAG'" {
+          description
+            "Only include the tag container when the sub-TLV is type
+            1.";
+        }
+        description
+          "This container defines sub-TLV 1.";
+
+        container state {
+          description
+            "State parameters of sub-TLV 1.";
+
+          leaf-list tag32 {
+            type uint32;
+            description
+              "List of 32-bit tags associated with the prefix. Example
+              uses of these tags include carrying BGP standard (or
+              extended) communities and controlling redistribution
+              between levels and areas, different routing protocols,
+              or multiple instances of IS-IS running on the same
+              router.";
+            reference
+              "RFC5130: A Policy Control Mechanism in IS-IS Using
+              Administrative Tags. sub-TLV 1.";
+          }
+        }
+      }
+
+      container tag64 {
+        when "../state/type = " +
+             "'oc-isis-lsdb-types:IP_REACHABILITY_TAG64'" {
+          description
+            "Only include the tag64 container when the sub-TLV is type
+            2.";
+        }
+        description
+          "This container defines sub-TLV 2.";
+
+        container state {
+          description
+            "State parameters of sub-TLV 2.";
+
+          leaf-list tag64 {
+            type uint64;
+            description
+              "List of 64-bit tags associated with the prefix. Example
+              uses of these tags include carrying BGP standard (or
+              extended) communities and controlling redistribution
+              between levels and areas, different routing protocols,
+              or multiple instances of IS-IS running on the same
+              router.";
+            reference
+              "RFC5130: A Policy Control Mechanism in IS-IS Using
+              Administrative Tags. sub-TLV 2.";
+          }
+        }
+      }
+
+      container flags {
+        when "../state/type = " +
+             "'oc-isis-lsdb-types:IP_REACHABILITY_PREFIX_FLAGS'" {
+          description
+            "Only include the flags container when the sub-TLV is type
+            4.";
+        }
+        description
+          "This container defines sub-TLV 4.";
+
+        container state {
+          description
+            "State parameters of sub-TLV 4.";
+
+          uses isis-lsdb-subtlv-type-state;
+
+          leaf-list flags {
+            type enumeration {
+              enum EXTERNAL_FLAG {
+                description
+                  "External prefix flag. Set if the prefix has been
+                  redistributed from another protocol. This includes
+                  the case where multiple virtual routers are
+                  supported and the source of the redistributed prefix
+                  is another IS-IS instance.";
+              }
+              enum READVERTISEMENT_FLAG {
+                description
+                  "Readvertisement flag. Set when the prefix has been
+                  leaked from one level to another (upwards or
+                  downwards).";
+              }
+              enum NODE_FLAG {
+                description
+                  "Node flag. Set when the prefix identifies the
+                  advertising router, i.e., the prefix is a host
+                  prefix advertising  a globally reachable address
+                  typically associated with a loopback address.";
+              }
+            }
+            description
+              "Additional prefix reachability flags.";
+
+            reference
+              "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and
+              IPv6 Reachability. sub-TLV 4.";
+            }
+          }
+        }
+
+        container ipv4-source-router-id {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IP_REACHABILITY_IPV4_ROUTER_ID'" {
+            description
+              "Only include the IPv4 Source Router ID container when
+              the sub-TLV is type 11.";
+          }
+          description
+            "This container defines sub-TLV 11.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 11.";
+
+            uses isis-lsdb-subtlv-type-state;
+
+            leaf router-id {
+              type inet:ipv4-address;
+              description
+                "IPv4 Source router ID address. In cases where the
+                advertisement is an identifier for the advertising
+                router (e.g., with the N-flag set in the Prefix
+                Attribute Flags sub-TLV), it may be useful for other
+                routers to know the source of the advertisement. When
+                reachability advertisement is leaked from one level to
+                another, Router ID advertised is always the Router ID
+                of the IS-IS instance that originated the
+                advertisement. This would be true even if the prefix
+                had been learned from another protocol.";
+              reference
+                "RFC7794: IS-IS Prefix Attributes for Extended IPv4
+                and IPv6 Reachability. sub-TLV 11";
+            }
+          }
+        }
+
+        container ipv6-source-router-id {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IP_REACHABILITY_IPV6_ROUTER_ID'" {
+            description
+              "Only include the IPv6 Source Router ID container when
+              the sub-TLV is type 12.";
+          }
+          description
+            "This container defines sub-TLV 12.";
+
+          container state {
+            description
+              "State parameters of sub-TLV 12.";
+
+            uses isis-lsdb-subtlv-type-state;
+
+            leaf router-id {
+              type inet:ipv6-address;
+              description
+                "IPv6 Source router ID address. In cases where the
+                advertisement is an identifier for the advertising
+                router (e.g., with the N-flag set in the Prefix
+                Attribute Flags sub-TLV), it may be useful for other
+                routers to know the source of the advertisement. When
+                reachability advertisement is leaked from one level to
+                another, Router ID advertised is always the Router ID
+                of the IS-IS instance that originated the
+                advertisement. This would be true even if the prefix
+                had been learned from another protocol.";
+              reference
+                "RFC7794: IS-IS Prefix Attributes for Extended IPv4
+                and IPv6 Reachability. sub-TLV 12.";
+            }
+          }
+        }
+
+        uses isis-lsdb-prefix-sid-state;
+      }
+    }
+
+    uses isis-lsdb-undefined-subtlv;
+  }
+
+  grouping isis-lsdb-prefix-sid-state {
+    description
+      "This grouping defines ISIS Prefix SID.";
+
+    container prefix-sids {
+      when "../state/type = " +
+           "'oc-isis-lsdb-types:IP_REACHABILITY_PREFIX_SID'" {
+        description
+          "Only include the Prefix SID container when
+          the sub-TLV is type 3.";
+      }
+      description
+        "This container defines segment routing extensions for
+        prefixes.";
+
+      reference
+        "draft-ietf-isis-segment-routing-extensions. sub-TLV 3: TLV
+        135, 235, 236, 237.";
+
+      list prefix-sid {
+        key "value";
+
+        description
+         "Prefix Segment-ID list. IGP-Prefix Segment is an IGP segment
+         attached to an IGP prefix. An IGP-Prefix Segment is global
+         (unless explicitly advertised otherwise) within the SR/IGP
+         domain.";
+
+        leaf value {
+          type leafref {
+            path "../state/value";
+          }
+          description
+            "Reference to the value of the prefix SID.";
+        }
+
+        container state {
+          description
+            "State parameters for Prefix-SID.";
+
+          leaf value {
+            type uint32;
+            description
+              "IGP Prefix-SID value.";
+          }
+
+          leaf-list flags {
+            type enumeration {
+              enum READVERTISEMENT {
+                description
+                  "Readvertisment flag. When set, the prefix to which
+                  this Prefix-SID is attached, has been propagated by
+                  the router either from another level or from
+                  redistribution.";
+              }
+              enum NODE {
+                description
+                  "Node flag. When set, the Prefix-SID refers to the
+                  router identified by the prefix. Typically, the
+                  N-Flag is set on Prefix-SIDs attached to a router
+                  loopback address.";
+              }
+              enum NO_PHP {
+                description
+                  "Penultimate-Hop-Popping flag. When set, then the
+                  penultimate hop MUST NOT pop the Prefix-SID before
+                  delivering the packet to the node that advertised
+                  the Prefix-SID.";
+              }
+              enum EXPLICIT_NULL {
+                description
+                  "Explicit-Null flag. When set, any upstream neighbor
+                  of 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
+                  the packet.";
+              }
+              enum VALUE {
+                description
+                  "Value flag. When set, the Prefix-SID carries a
+                  value (instead of an index). By default the flag is
+                  UNSET.";
+              }
+              enum LOCAL {
+                description
+                  "Local flag. When set, the value/index carried by
+                  the Prefix-SID has local significance. By default
+                  the flag is UNSET.";
+              }
+            }
+            description
+              "Flags associated with Prefix Segment-ID.";
+          }
+
+          leaf algorithm {
+            type uint8;
+            description
+              "Prefix-SID algorithm to be used for path computation.";
+          }
+        }
+      }
+    }
+  }
+
+  grouping isis-lsdb-common-metric-specification {
+    description
+      "Common definitions of the metric in IS-IS.";
+
+    container default-metric {
+      description
+        "This container defines ISIS Default Metric.";
+
+      container state {
+        description
+          "State parameters for default-metric.";
+
+        leaf flags {
+          type enumeration {
+            enum INTERNAL {
+              description
+                "When set to zero, indicates internal metrics.";
+            }
+          }
+          description
+            "ISIS Default-Metric Flags.";
+        }
+
+        leaf metric {
+          type oc-isis-types:narrow-metric;
+          description
+            "ISIS default metric value. This is a metric understood by
+            every Intermediate system in the domain. Each circuit
+            shall have a positive  integral value assigned for this
+            metric. The value may be associated with any  objective
+            function of the circuit, but by convention is intended to
+            measure the capacity of the circuit for handling traffic,
+            for example, its throughput in  bits-per-second. Higher
+            values indicate a lower capacity.";
+        }
+      }
+    }
+
+    container delay-metric {
+     description
+       "This container defines the ISIS delay metric.";
+
+      container state {
+        description
+          "State parameters of delay-metric.";
+
+        leaf metric {
+          type oc-isis-types:narrow-metric;
+          description
+            "ISIS delay metric value. This metric measures the transit
+            delay of the associated circuit. It is an optional metric,
+            which if assigned to a circuit shall have a positive
+            integral value. Higher values indicate a longer transit
+            delay.";
+        }
+
+        leaf-list flags {
+          type isis-metric-flags;
+          description
+            "ISIS Delay Metric Flags.";
+        }
+      }
+    }
+
+    container expense-metric {
+      description
+        "This container defines the ISIS expense metric.";
+
+      container state {
+        description
+          "State parameters of expense-metric.";
+
+        leaf metric {
+          type oc-isis-types:narrow-metric;
+          description
+            "ISIS expense metric value. This metric measures the
+            monetary cost of utilising the associated circuit. It is
+            an optional metric, which if assigned to a circuit shall
+            have a positive integral value1). Higher values indicate a
+            larger monetary expense.";
+        }
+
+        leaf-list flags {
+          type isis-metric-flags;
+          description
+            "ISIS Expense Metric Flags.";
+        }
+      }
+    }
+
+    container error-metric {
+      description
+        "This container defines the ISIS error metric.";
+
+      container state {
+        description
+          "State parameters of error-metric.";
+
+        leaf metric {
+          type oc-isis-types:narrow-metric;
+          description
+            "ISIS error metric value. This metric measures the
+            residual error probability of the associated circuit. It
+            is an optional metric, which if assigned to a circuit
+            shall have a non-zero value. Higher values indicate a
+            larger probability of undetected errors on the circuit.";
+        }
+
+        leaf-list flags {
+          type isis-metric-flags;
+          description
+            "IS-IS error metric flags.";
+        }
+      }
+    }
+  }
+
+  grouping isis-lsdb-neighbor {
+    description
+      "This grouping defines attributes of an ISIS standard
+      neighbor.";
+
+    container state {
+      description
+        "State parameters of IS standard neighbor.";
+
+      leaf system-id {
+        type oc-isis-types:system-id;
+        description
+          "System-ID of IS neighbor.";
+      }
+    }
+
+    uses isis-lsdb-common-metric-specification;
+
+  }
+
+  grouping ipv4-prefix-attributes-state {
+   description
+     "This group defines attributes of an IPv4 standard prefix.";
+
+    container state {
+     description
+       "State parameters of IPv4 standard prefix.";
+
+      leaf up-down {
+        type boolean;
+        description
+          "The up/down bit. Set if a prefix is advertised from a
+          higher level to a lower level (e.g., level 2 to level 1),
+          indicating that the prefix has traveled down the hierarchy.
+          Prefixes that have the up/down bit set may only be
+          advertised down the hierarchy, i.e., to lower levels. When a
+          prefix is first injected into IS-IS, the bit is UNSET.";
+      }
+
+      leaf prefix {
+        type inet:ipv4-prefix;
+        description
+          "IPv4 prefix contained within reachability TLVs.";
+      }
+    }
+
+    uses isis-lsdb-common-metric-specification;
+  }
+
+  grouping isis-lsdb-common-mt-id {
+    description
+      "Common definition of the multi-topology ID";
+
+    leaf mt-id {
+      type uint16 {
+        range "0..4095";
+      }
+      description
+        "Multi-topology ID";
+    }
+  }
+
+  grouping ipv4-prefix-extended-state {
+    description
+      "This grouping defines attributes of an IPv4 extended prefix.";
+
+    container state {
+      description
+        "State parameters of an IPv4 extended prefix.";
+      uses ipv4-prefix-extended-params-state;
+    }
+
+    uses isis-lsdb-prefix-state;
+  }
+
+  grouping ipv4-mt-prefix-extended-state {
+    description
+      "State parameters that relate to an IPv4 prefix in a
+      multi-topology context.";
+
+    container state {
+      description
+        "State parameters of an IPv4 extended prefix.";
+      uses ipv4-prefix-extended-params-state;
+      uses isis-lsdb-common-mt-id;
+    }
+
+    uses isis-lsdb-prefix-state;
+  }
+
+  grouping ipv4-prefix-extended-params-state {
+    description
+      "State parameters that relate to an IPv4 prefix";
+
+    leaf up-down {
+      type boolean;
+      description
+        "The up/down bit. Set if a prefix is advertised from a
+        higher level to a lower level (e.g., level 2 to level 1),
+        indicating that the prefix has traveled down the hierarchy.
+        Prefixes that have the up/down bit set may only be
+        advertised down the hierarchy, i.e., to lower levels. When a
+        prefix is first injected into IS-IS, the bit is UNSET.";
+    }
+
+    leaf s-bit {
+      type boolean;
+      description
+        "The Sub-TLV present bit. If UNSET, the octets of Sub-TLVs
+        are not present. Otherwise, the bit is set and the octet
+        following the prefix will contain the length of the Sub-TLV
+        portion of the structure.";
+    }
+
+    leaf prefix {
+      type inet:ipv4-prefix;
+      description
+        "IPv4 prefix contained within extended reachability TLVs.";
+    }
+
+    leaf metric {
+      type oc-isis-types:wide-metric;
+      description
+        "ISIS metric value.";
+    }
+  }
+
+  grouping ipv6-prefix-extended-state {
+    description
+      "State parameters relating to an IPv6 prefix.";
+
+    container state {
+      description
+        "State parameters of IPv6 prefix attributes";
+
+      uses ipv6-prefix-extended-params-state;
+    }
+
+    uses isis-lsdb-prefix-state;
+  }
+
+  grouping ipv6-mt-prefix-extended-state {
+    description
+      "State parameters relating to a multi-topology IPv6
+      prefix.";
+
+    container state {
+      description
+        "State parameters relating an IPv6 prefix attribute";
+      uses ipv6-prefix-extended-params-state;
+      uses isis-lsdb-common-mt-id;
+    }
+
+    uses isis-lsdb-prefix-state;
+  }
+
+  grouping ipv6-prefix-extended-params-state {
+    description
+      "Common parameters of an IPv6 extended prefix.";
+
+    leaf up-down {
+      type boolean;
+      description
+        "The up/down bit. Set if a prefix is advertised from a
+        higher level to a lower level (e.g., level 2 to level 1),
+        indicating that the prefix has traveled down the hierarchy.
+        Prefixes that have the up/down bit set may only be
+        advertised down the hierarchy, i.e., to lower levels. When a
+        prefix is first injected into IS-IS, the bit is UNSET.";
+    }
+
+    leaf x-bit {
+      type boolean;
+      description
+        "The external bit. Set when the prefix was distributed into
+        IS-IS from another routing protocol.";
+    }
+
+    leaf s-bit {
+      type boolean;
+      description
+        "The sub-tlv present bit. If UNSET, the octets of Sub-TLVs
+         are not present. Otherwise, the bit is set and the octet
+         following the prefix will contain the length of the Sub-TLV
+         portion of the structure.";
+    }
+
+    leaf prefix {
+      type inet:ipv6-prefix;
+      description
+        "IPv6 prefix contained within extended reachability TLVs.";
+    }
+
+    leaf metric {
+      type oc-isis-types:wide-metric;
+      description
+        "ISIS metric value.";
+    }
+  }
+
+  grouping mt-isis-neighbor {
+    description
+      "This grouping defines list of ISIS multi-topology neighbors for
+      extended ISIS LSP(multiple system IDs).";
+
+     container state {
+      description
+        "State parameters of MT neighbor.";
+
+      leaf mt-id {
+        type uint16 {
+          range "0..4095";
+        }
+        description
+          "Identifier of a topology being announced.";
+      }
+
+      leaf system-id {
+        type oc-isis-types:system-id;
+        description
+          "System-id of the IS neighbor.";
+      }
+
+      leaf metric {
+        type oc-isis-types:wide-metric;
+        description
+          "ISIS metric value.";
+      }
+    }
+    uses is-reachability-neighbor-state;
+  }
+
+  grouping isis-lsdb-generic-tlv {
+    description
+      "Generic TLV encoding grouping.";
+
+    leaf type {
+      type uint8;
+      description
+        "TLV Type.";
+    }
+
+    leaf length {
+      type uint8;
+      description
+        "TLV length.";
+    }
+
+    leaf value {
+      type binary;
+      description
+        "TLV value.";
+    }
+  }
+
+  grouping undefined-tlv-state {
+    description
+      "Generic grouping defining an unknown TLV.";
+
+    uses isis-lsdb-generic-tlv;
+  }
+
+  grouping undefined-subtlv-state {
+    description
+      "Generic grouping defining an unknown sub-TLV.";
+
+    uses isis-lsdb-generic-tlv;
+  }
+
+  grouping lsp-state {
+    description
+      "This grouping defines ISIS LSP state information.";
+
+    leaf lsp-id {
+     type leafref {
+        path "../state/lsp-id";
+      }
+
+      description
+        "A reference to the Link State PDU ID.";
+    }
+
+    container state {
+      description
+        "State parameters of Link State PDU.";
+
+      leaf lsp-id {
+        type oc-isis-types:lsp-id;
+        description
+          "LSP ID of the LSP.";
+      }
+
+      leaf maximum-area-addresses {
+        type uint8;
+        description
+          "Number of area addresses permitted for this ISs area. 0
+          indicates the IS only supports three area addresses (by
+          default). Any number inclusive of 1 and 254 indicates the
+          number of areas allowed.";
+      }
+
+      leaf version {
+        type uint8;
+        default 1;
+        description
+          "PDU version. This is set to 1.";
+      }
+
+      leaf version2 {
+        type uint8;
+        default 1;
+        description
+          "PDU version2. This is set to 1";
+      }
+
+      leaf id-length {
+        type uint8;
+        description
+          "Length of the ID field of NSAP addresses and NETs used in
+          this routing domain.";
+      }
+
+      leaf pdu-type {
+        type enumeration {
+          enum LEVEL_1 {
+            description "This enum describes ISIS level 1 PDU.";
+          }
+          enum LEVEL_2 {
+            description "This enum describes ISIS level 2 PDU.";
+          }
+        }
+         description
+           "Link State PDU type.";
+      }
+
+      leaf remaining-lifetime {
+         type uint16;
+         units "seconds";
+         description
+           "Remaining lifetime in seconds before the LSP expiration.";
+      }
+
+      leaf sequence-number {
+         type uint32;
+         description
+           "Sequence number of the LSP.";
+      }
+
+      leaf checksum {
+         type uint16;
+         description
+           "Checksum of the LSP.";
+      }
+
+      leaf pdu-length {
+         type uint16;
+         description
+           "Total length of the LSP.";
+      }
+
+      leaf-list flags {
+        type enumeration {
+          enum PARTITION_REPAIR {
+            description
+              "When set, the originator supports partition
+              repair.";
+          }
+          enum ATTACHED_ERROR {
+            description
+              "When set, the originator is attached to another
+              area using the referred metric.";
+          }
+          enum ATTACHED_EXPENSE {
+            description
+              "When set, the originator is attached to another
+              area using the referred metric.";
+          }
+          enum ATTACHED_DELAY {
+            description
+              "When set, the originator is attached to another
+              area using the referred metric.";
+          }
+          enum ATTACHED_DEFAULT {
+            description
+              "When set, the originator is attached to another
+              area using the referred metric.";
+          }
+          enum OVERLOAD {
+            description
+              "When set, the originator is overloaded, and must
+              be avoided in path calculation.";
+          }
+        }
+        description
+          "LSP Type-Block flags.";
+      }
+
+      leaf is-type {
+        type oc-isis-types:level-number;
+        description
+          "Type of neighboring system.";
+      }
+    }
+
+    container tlvs {
+      description
+        "This container defines Link State PDU State TLVs.";
+
+      list tlv {
+        key "type";
+
+        description
+          "List of TLV types in the LSDB for the specified LSP.";
+
+        leaf type {
+          type leafref {
+            path "../state/type";
+          }
+          description
+            "Reference to the TLV's type.";
+        }
+
+        container state {
+          config false;
+          description
+            "Operational state parameters relating to the specified
+            LSP";
+
+          uses isis-lsdb-tlv-type-state;
+        }
+
+        container area-address {
+          when "../state/type = 'oc-isis-lsdb-types:AREA_ADDRESSES'" {
+            description
+              "Include area address parameters only when the TLV type
+              is TLV 1.";
+          }
+
+          description
+            "This container defines TLV 1.";
+
+          container state {
+            description
+              "State parameters of ISIS TLV 1.";
+
+            leaf-list address {
+              type oc-isis-types:area-address;
+              description
+                "Area adress(es) of the IS. Set of manual area
+                addresses of this IS.";
+             reference
+              "ISO 10589 Intermediate System to Intermediate System
+              Intra- Domain Routeing Exchange Protocol for use in
+              Conjunction with the Protocol for Providing the
+              Connectionless-mode Network Service (ISO 8473 )
+              International Standard 10589: 2002, Second Edition,
+              2002. TLV 1.";
+            }
+          }
+        }
+
+        container lsp-buffer-size {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:LSP_BUFFER_SIZE'" {
+            description
+              "Include the LSP buffer size parameters only when the
+              TLV type is TLV 14.";
+          }
+
+          description
+            "This container defines TLV 14 - the LSP Buffer Size
+            TLV.";
+
+          container state {
+            description
+              "State parameters of TLV 14.";
+
+            leaf size {
+              type uint16;
+              units "bytes";
+              description
+                "The maximum MTU that the advertising system can
+                receive, expressed in bytes.";
+              reference
+               "ISO 10589 Intermediate System to Intermediate System
+               Intra- Domain Routeing Exchange Protocol for use in
+               Conjunction with the Protocol for Providing the
+               Connectionless-mode Network Service (ISO 8473 )
+               International Standard 10589: 2002, Second Edition,
+               2002. TLV 14.";
+            }
+          }
+        }
+
+        container nlpid {
+          when "../state/type = 'oc-isis-lsdb-types:NLPID'" {
+            description
+              "Include NLPID specification only when the TLV type is
+              TLV 129.";
+          }
+
+          description
+            "This container defines TLV 129.";
+
+          container state {
+           description
+             "State parameters of ISIS TLV 129.";
+
+            uses isis-lsdb-tlv-nlpid-state;
+          }
+        }
+
+        container hostname {
+          when "../state/type = 'oc-isis-lsdb-types:DYNAMIC_NAME'" {
+            description
+              "Include the dynamic hostname TLV only when the TLV is
+              type 137.";
+          }
+          description
+            "This container defines TLV 137.";
+
+          container state {
+            description
+              "State parameters of ISIS TLV 137.";
+
+            leaf-list hostname {
+              type string;
+              description
+                "Name of the node.";
+
+              reference
+                "RFC6233: IS-IS Registry Extension for Purges, RFC
+                5301: Dynamic Hostname Exchange Mechanism for IS-IS.
+                TLV 137";
+           }
+         }
+        }
+
+        container ipv4-interface-addresses {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IPV4_INTERFACE_ADDRESSES'" {
+            description
+              "Include the IPv4 interface addresses TLV only when the
+              TLV is type 132.";
+          }
+          description
+            "This container defines TLV 132.";
+
+          container state {
+            description
+              "State parameters of ISIS TLV 132.";
+
+            leaf-list address {
+              type inet:ipv4-address;
+              description
+                "IPv4 address(es) of the interface corresponding to
+                the SNPA over which this PDU is to be transmitted.";
+             reference
+              "RFC1195: Use of OSI IS-IS for Routing in TCP/IP and
+              Dual Environments. TLV 132.";
+            }
+          }
+        }
+
+        container ipv6-interface-addresses {
+          when "../state/type = " +
+                "'oc-isis-lsdb-types:IPV6_INTERFACE_ADDRESSES'" {
+            description
+              "Include the IPv6 interface addresses TLV only when the
+              TLV is type 232.";
+          }
+          description
+            "This container defines TLV 232.";
+
+          container state {
+            description
+              "State parameters of ISIS TLV 232.";
+
+            leaf-list address {
+              type inet:ipv6-address;
+              description
+                "IPv6 interface addresses of the node.  MUST contain
+                only the non-link-local IPv6 addresses assigned to the
+                IS.";
+              reference
+                "RFC5308: Routing IPv6 with IS-IS. TLV 232.";
+            }
+          }
+        }
+
+        container ipv4-te-router-id {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IPV4_TE_ROUTER_ID'" {
+            description
+              "Include the IPv4 traffic engineering router ID TLV only
+              when the TLV is type 134.";
+          }
+          description
+            "This container defines TLV 134.";
+
+          container state {
+            description
+              "State parameters of ISIS TLV 134.";
+
+            leaf-list router-id {
+              type inet:ipv4-address;
+              description
+                "IPv4 Traffic Engineering router ID of the node. For
+                traffic engineering, it guarantees that we have a
+                single stable address that can always be referenced in
+                a path that will be reachable from multiple hops away,
+                regardless of the state of the node's interfaces.";
+             reference
+              "RFC5305: IS-IS Extensions for Traffic Engineering. TLV
+              134.";
+            }
+          }
+        }
+
+        container ipv6-te-router-id {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IPV6_TE_ROUTER_ID'" {
+            description
+              "Include the IPv6 traffic engineering router ID TLV only
+              when the TLV is type 140.";
+          }
+          description
+            "This container defines TLV 140.";
+
+          container state {
+            description
+              "State parameters of ISIS TLV 140.";
+
+            leaf-list router-id {
+              type inet:ipv6-address;
+              description
+                "IPv6 Traffic Engineering router ID of the node. For
+                traffic engineering, it guarantees that we have a
+                single stable address that can always be referenced in
+                a path that will be reachable from multiple hops away,
+                regardless of the state of the node's interfaces.";
+              reference
+                "RFC6119: IPv6 Traffic Engineering in IS-IS. TLV
+                140.";
+            }
+          }
+        }
+
+        container instance-ids {
+          when "../state/type = 'oc-isis-lsdb-types:INSTANCE_ID'" {
+            description
+              "Include the ISIS Instance Identifier TLV only when the
+              TLV is type 7.";
+          }
+          description
+            "This container defines ISIS Instance Identifier TLV.";
+          reference "RFC6822: IS-IS Multi-Instance. TLV 7.";
+
+          list instance-id {
+            key "instance-id";
+
+            description
+              "A list of instance IDs received within TLV 7 within an
+              IS-IS LSP. In the case that more than one instance of
+              TLV 7 is included in the LSP, the instance IDs specified
+              within the instances are concatenated within this
+              list.";
+
+            leaf instance-id {
+              type leafref {
+                path "../state/instance-id";
+              }
+              description
+                "Reference to the unique instance ID.";
+            }
+            container state {
+              description
+                "State parameters of ISIS TLV 7.";
+
+              leaf instance-id {
+                type uint16;
+                description
+                  "An Instance Identifier (IID) to uniquely identify
+                  an IS-IS instance. When the IID = 0, the list of
+                  supported ITIDs MUST NOT be present. An IID-TLV with
+                  IID = 0 MUST NOT appear in an SNP or LSP. When the
+                  TLV appears (with a non-zero IID) in an SNP or LSP,
+                  exactly one ITID. MUST be present indicating the
+                  topology with which the PDU is associated. If no
+                  ITIDs or multiple ITIDs are present or the IID is
+                  zero, then the PDU MUST be ignored.";
+              }
+
+              leaf-list topology-id {
+                type uint16;
+                description
+                  "Instance-Specific Topology Identifiers (ITIDs).";
+              }
+            }
+          }
+        }
+
+        container ipv4-srlgs {
+          when "../state/type = 'oc-isis-lsdb-types:IPV4_SRLG'" {
+            description
+              "Include the IPv4 SRLG TLV only when the TLV is type
+              138.";
+          }
+         description
+           "This container defines ISIS SRLG TLV 138.";
+
+         reference
+            "RFC5307: IS-IS Extensions in Support of Generalized
+            Multi-Protocol Label Switching (GMPLS). TLV 138.";
+
+          list ipv4-srlg {
+            key "instance-number";
+
+            description
+              "Instance of the IPv4 SRLG TLV";
+
+            leaf instance-number {
+              type leafref {
+                path "../state/instance-number";
+              }
+              description
+                "Reference to the instance number of TLV 138.";
+            }
+
+            container state {
+              description
+                "State parameters of TLV 138.";
+
+              leaf instance-number {
+                type uint32;
+                description
+                  "An arbitrary unsigned 32-bit integer used to
+                  disambiguate the instance of TLV 138. The instance
+                  identifier is synthesised by the system
+                  and may be renumbered for the same SRLG definition
+                  in subsequent advertised LSPs if (and only if) the
+                  entire list of SRLGs is replaced.";
+              }
+
+              leaf system-id {
+                type oc-isis-types:system-id;
+                description
+                  "Neighbor system ID.";
+              }
+
+              leaf psn-number {
+                type uint8;
+                description
+                  "Pseudonode number if the neighbor is on a LAN
+                  interface.";
+              }
+
+              leaf-list flags {
+                type enumeration {
+                  enum NUMBERED {
+                    description
+                      "When set, the interface is numbered, whereas if
+                      unset indicates that the interface is
+                      unnumbered.";
+                  }
+                }
+                description
+                  "SRLG flags.";
+              }
+
+              leaf ipv4-interface-address {
+                type inet:ipv4-address;
+                description
+                  "IPv4 interface address.";
+              }
+
+              leaf ipv4-neighbor-address {
+                type inet:ipv4-address;
+                description
+                  "IPv4 neighbor address.";
+              }
+
+              leaf-list srlg-value {
+                type uint32;
+                description
+                  "List of SRLG values.";
+              }
+            }
+          }
+        }
+
+        container ipv6-srlgs {
+          when "../state/type = 'oc-isis-lsdb-types:IPV6_SRLG'" {
+            description
+              "Include the IPv6 SRLG TLV only when the TLV is type
+              139.";
+          }
+          description
+            "This container defines ISIS SRLG TLV.";
+
+          reference
+            "RFC6119: IPv6 Traffic Engineering in IS-IS. TLV 139.";
+
+          list ipv6-srlg {
+            key "instance-number";
+
+            description
+              "Instance of the IPv6 SRLG TLV.";
+
+            leaf instance-number {
+              type leafref {
+                path "../state/instance-number";
+              }
+              description
+                "Reference to the instance number of the IPv6 Shared
+                Risk Link Group (SRLG) TLV.";
+            }
+
+            container state {
+              description
+                "State parameters of TLV 139.";
+
+              leaf instance-number {
+                type uint32;
+                description
+                  "An arbitrary unsigned 32-bit integer used to
+                  disambiguate the instance of TLV 138. The instance
+                  identifier is synthesised by the system
+                  and may be renumbered for the same SRLG definition
+                  in subsequent advertised LSPs if (and only if) the
+                  entire list of SRLGs is replaced.";
+              }
+
+              leaf system-id {
+                type oc-isis-types:system-id;
+                description
+                  "Neighbor system ID.";
+              }
+
+              leaf psn-number {
+                type uint8;
+                description
+                  "Pseudonode number if the neighbor is on a LAN
+                  interface.";
+              }
+
+              leaf-list flags {
+                type enumeration {
+                  enum NA {
+                    description
+                      "When set, the IPv6 neighbour address is
+                      included, whereas if unset, it is omitted";
+                  }
+                }
+                description
+                  "IPv6 SRLG flags.";
+              }
+
+              leaf ipv6-interface-address {
+                type inet:ipv6-address;
+                description
+                  "IPv6 interface address or Link Local Identifier.";
+              }
+
+              leaf ipv6-neighbor-address {
+                type inet:ipv6-address;
+                description
+                  "IPv6 neighbor address or Link Remote Identifier.";
+              }
+
+              leaf-list srlg-value {
+                type uint32;
+                description
+                  "SRLG values.";
+              }
+            }
+          }
+        }
+
+        container purge-oi {
+          when "../state/type = 'oc-isis-lsdb-types:PURGE_OI'" {
+            description
+              "Only include the purge originator identitication TLV
+              when the TLV type is 13.";
+          }
+          description
+            "This container defines ISIS purge TLV.";
+
+          reference
+            "RFC6232: Purge Originator Identification TLV for IS-IS.
+            TLV 13.";
+
+          container state {
+            description
+              "State parameters of TLV 13.";
+
+            leaf system-id-count {
+              type uint8;
+              description
+                "Number of system IDs carried in this TLV.";
+            }
+
+            leaf source-system-id {
+              type oc-isis-types:system-id;
+              description
+                "System ID of the Intermediate System that inserted
+                this TLV.";
+            }
+
+            leaf received-system-id {
+              type oc-isis-types:system-id;
+              description
+                "System ID of the Intermediate System from which the
+                purge was received.";
+            }
+          }
+        }
+
+        container router-capabilities {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:ROUTER_CAPABILITY'" {
+            description
+              "Only include the router capability TLV when the TLV is
+              type 242.";
+          }
+          description
+            "This container defines router capabilities.";
+
+          list capability {
+            key "instance-number";
+
+            description
+              "This list describes IS Router capabilities.";
+
+            reference
+              "RFC4971: Intermediate System to Intermediate System
+              (IS-IS) Extensions for Advertising Router Information.
+              TLV 242.";
+
+            leaf instance-number {
+              type leafref {
+                path "../state/instance-number";
+              }
+              description
+                "Reference to the instance number of the router
+                capability TLV.";
+            }
+
+            container state {
+              description
+                "State parameters of TLV 242.";
+
+              leaf instance-number {
+                type uint32;
+                description
+                  "A unique instance number for the instance of the
+                  router capabilities TLV. The instance number should
+                  be autogenerated by the producer of the data and may
+                  be renumbered if the entire LSP contents are
+                  replaced in subsequent advertisements.";
+              }
+
+              leaf router-id {
+                type inet:ipv4-address;
+                description
+                  "IPv4 router-id.";
+              }
+
+              leaf-list flags {
+                type enumeration {
+                  enum FLOOD {
+                    description
+                      "When the S bit is set(1), the IS - IS Router
+                      CAPABILITY TLV MUST be flooded across the entire
+                      routing domain. When 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.";
+                  }
+                  enum DOWN {
+                    description
+                      "When the IS-IS Router CAPABILITY TLV is leaked
+                      from level - 2 to level-1, the Down bit MUST be
+                      set. Otherwise, this bit MUST be clear. IS - IS
+                      Router capability TLVs with the Down bit set
+                      MUST NOT be leaked from level - 1 to level-2.
+                      This is to prevent TLV looping.";
+                  }
+                }
+                description
+                  "Router capability flags.";
+              }
+            }
+
+            container subtlvs {
+              description
+                "This container describes router capability TLV
+                sub-TLVs";
+
+              list subtlv {
+                key "type";
+                description
+                  "List of subTLV types in the LSDB for the specified
+                  TLV";
+
+                leaf type {
+                  type leafref {
+                    path "../state/type";
+                  }
+                  description
+                    "Reference to the sub-TLV type";
+                }
+
+                container state {
+                  description
+                    "State parameters of IS Router Capabilities";
+
+                  uses isis-lsdb-subtlv-type-state;
+                 }
+
+                container segment-routing-algorithms {
+                  when "../state/type = " +
+                       "'oc-isis-lsdb-types:ROUTER_CAPABILITY_SR_ALGORITHM'" {
+                    description
+                      "Only include segment routing algorithm when the
+                      sub-TLV is type 19.";
+                  }
+                  description
+                    "This container defines SR algorithm sub-TLV 19.";
+
+                  reference
+                    "draft-ietf-isis-segment-routing-extensions.
+                     TLV 242, sub-TLV 19";
+
+                    container state {
+                      description
+                        "State parameters of sub-TLV 19 - Segment
+                        Routing Algorithm.";
+
+                      leaf-list algorithm {
+                        type enumeration {
+                          enum SPF {
+                            value 0;
+                            description
+                              "Shortest Path First (SPF) algorithm
+                              based on link metric.  This is the
+                              well-known shortest path algorithm as
+                              computed by the IS-IS Decision process.
+                              Consistent with the deployed practice
+                              for link-state protocols, algorithm 0
+                              permits any node to overwrite the SPF
+                              path with a different path based on
+                              local policy.";
+                          }
+                          enum STRICT_SPF {
+                            value 1;
+                            description
+                              "Strict Shortest Path First (SPF)
+                              algorithm based on link metric. The
+                              algorithm is identical to algorithm 0
+                              but algorithm 1 requires that all nodes
+                              along the path will honor the SPF
+                              routing decision. Local policy MUST NOT
+                              alter the forwarding decision computed
+                              by algorithm 1 at the node claiming to
+                              support algorithm 1.";
+                          }
+                        }
+                        description
+                          "The Segment Routing algorithm that is
+                          described by the TLV.";
+                      }
+                    }
+                }
+
+                container segment-routing-capability {
+                  when "../state/type = " +
+                       "'oc-isis-lsdb-types:ROUTER_CAPABILITY_SR_CAPABILITY'" {
+                    description
+                      "Only include the SR capability sub-TLV when
+                      the sub-TLV type is 2.";
+                  }
+                  description
+                    "This container defines SR Capability sub-TLV 2.";
+
+                  reference
+                    "draft-ietf-isis-segment-routing-extensions. TLV
+                    242, sub-TLV 2.";
+
+                  container state {
+                    description
+                      "State parameters of IS SR Router Capability";
+
+                    leaf-list flags {
+                      type enumeration {
+                        enum IPV4_MPLS {
+                          description
+                            "When set, the router is capable of
+                            processing SR MPLS encapsulated IPv4
+                            packets on all interfaces.";
+                        }
+                        enum IPV6_MPLS {
+                          description
+                            "When set, the router is capable of
+                            processing SR MPLS encapsulated IPv6
+                            packets on all interfaces.";
+                        }
+                        enum IPV6_SR {
+                          description
+                            "When set, the router is capable of
+                            processing the IPv6 Segment Routing Header
+                            on all interfaces.";
+                        }
+                      }
+                      description
+                        "Segment Routing Capability Flags.";
+                    }
+                  }
+
+                  container srgb-descriptors {
+                    description
+                      "SRGB Descriptors included within the SR
+                      capability sub-TLV";
+
+                    list srgb-descriptor {
+                      key "range";
+                      description
+                        "Descriptor entry within the SR capabilty
+                        sub-TLV";
+
+                      leaf range {
+                        type leafref {
+                          path "../state/range";
+                        }
+                        description
+                          "Reference to unique SRGB Descriptor.";
+                      }
+
+                      container state {
+                        description
+                          "State parameters of the SR range";
+
+                        leaf range {
+                          type uint32;
+                          description
+                            "Number of SRGB elements. The range
+                            value MUST be greater than 0.";
+                        }
+
+                        leaf label {
+                          type oc-mpls-types:mpls-label;
+                          description
+                            "The first value of the SRGB when
+                            expressed as an MPLS label.";
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+            uses isis-lsdb-undefined-subtlv;
+          }
+        }
+
+        container is-reachability {
+          when "../state/type = 'oc-isis-lsdb-types:IIS_NEIGHBORS'" {
+            description
+              "Include IIS_NEIGHBORS sub-TLV when the TLV type is 2.";
+          }
+          description
+            "This container describes list of ISIS neighbors and
+            attributes.";
+
+           reference
+             "ISO 10589, Intermediate System to Intermediate System
+             Intra- Domain Routeing Exchange Protocol for use in
+             Conjunction with the Protocol for Providing the
+             Connectionless-mode Network Service (ISO 8473),
+             International Standard 10589: 2002, Second Edition,
+             2002. TLV 2.";
+
+          container neighbors {
+            description
+              "This container describes IS neighbors.";
+
+            list neighbor {
+              key "system-id";
+              description
+                "IS reachability neighbor attributes.";
+
+              leaf system-id {
+                type leafref {
+                  path "../state/system-id";
+                }
+                description
+                  "Reference to the system ID of the neighbor.";
+              }
+
+              uses isis-lsdb-neighbor;
+            }
+          }
+        }
+
+        container ipv4-internal-reachability {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IPV4_INTERNAL_REACHABILITY'" {
+            description
+              "Include IPv4 internal reachability TLV when the TLV
+              type is specified as 128.";
+          }
+          description
+            "This container defines list of IPv4 internal reachability
+            information.";
+
+          reference
+            "RFC1195: OSI ISIS for IP and Dual Environments. RFC5302:
+            Domain-Wide Prefix Distribution with Two-Level IS-IS. TLV
+            128";
+
+          container prefixes {
+            description
+              "This container describes IS prefixes.";
+
+            list prefix {
+              key "prefix";
+
+              description
+                "IPv4 prefixes and internal reachability attributes.";
+
+              leaf prefix {
+                type leafref {
+                  path "../state/prefix";
+                }
+                description
+                  "Reference to the IPv4 prefix";
+              }
+
+              uses ipv4-prefix-attributes-state;
+            }
+          }
+        }
+
+        container ipv4-external-reachability {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IPV4_EXTERNAL_REACHABILITY'" {
+            description
+              "Include IPv4 external reachability when the TLV type
+              is set to 130.";
+          }
+          description
+           "This container defines list of IPv4 external reachability
+            information.";
+
+          reference
+            "RFC1195: OSI ISIS for IP and Dual Environments.  RFC5302:
+            Domain-Wide Prefix Distribution with Two-Level IS-IS. TLV
+            130";
+
+          container prefixes {
+            description
+              "This container describes IS neighbors.";
+
+            list prefix {
+              key "prefix";
+
+              description
+                "IPv4 external prefixes and reachability attributes.";
+
+              leaf prefix {
+                type leafref {
+                  path "../state/prefix";
+                }
+                description
+                  "Reference to the IPv4 prefix.";
+              }
+
+              uses ipv4-prefix-attributes-state;
+            }
+          }
+        }
+
+        container authentication {
+          when "../state/type = 'oc-isis-lsdb-types:AUTHENTICATION'" {
+            description
+              "Only include the authentication TLV when the TLV is
+              type 10.";
+          }
+          description
+            "This container defines authentication information of the
+            node.";
+
+          reference
+            "ISO 10589 Intermediate System to Intermediate System
+            Intra- Domain Routeing Exchange Protocol for use in
+            Conjunction with the Protocol for Providing the
+            Connectionless-mode Network Service (ISO 8473)
+            International Standard 10589: 2002, Second Edition, 2002.
+            TLV 10.";
+
+          container state {
+            description
+              "State parameters of TLV 10.";
+
+            leaf crypto-type {
+              type enumeration {
+                enum HMAC_MD5 {
+                  description
+                    "HMAC-MD5 Authentication type.";
+                }
+                enum CLEARTEXT {
+                  description
+                    "Cleartext Authentication type.";
+                }
+               }
+               description
+                 "Authentication type to be used.";
+            }
+
+            leaf authentication-key {
+              type string;
+              description
+                "Authentication key to be used.";
+            }
+          }
+        }
+
+        container extended-is-reachability {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:EXTENDED_IS_REACHABILITY'" {
+            description
+              "Only included the extended IS reachability TLV when the
+              TLV is type 22.";
+          }
+
+          description
+            "This container defines list of ISIS extended reachability
+            neighbors.";
+
+          reference
+            "RFC5305: IS-IS Extensions for Traffic Engineering. TLV
+            22.";
+
+          container neighbors {
+            description
+              "This container describes IS neighbors.";
+
+            list neighbor {
+              key "system-id";
+              description
+                "This list describes ISIS extended neigbors and
+                reachability attributes.";
+
+              leaf system-id {
+                type leafref {
+                  path "../state/system-id";
+                }
+                description
+                  "Reference to the neighboring system's system ID.";
+              }
+
+              container state {
+                description
+                  "State parameters of extended neighbor";
+
+                leaf system-id {
+                  type oc-isis-types:system-id;
+                  description
+                    "System-id of the neighbor.";
+                }
+                leaf metric {
+                  type oc-isis-types:wide-metric;
+                  description
+                    "Metric value.";
+                }
+              }
+              uses is-reachability-neighbor-state;
+            }
+          }
+        }
+
+        container extended-ipv4-reachability {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:EXTENDED_IPV4_REACHABILITY'" {
+            description
+              "Only include the extended IPv4 reachability container
+              when the TLV type is 135.";
+          }
+          description
+            "This container defines list of IPv4 extended reachability
+            information.";
+
+          reference
+            "RFC5305: IS-IS Extensions for Traffic Engineering. TLV
+            135";
+
+          container prefixes {
+            description
+              "This container describes IS prefixes.";
+
+            list prefix {
+              key "prefix";
+
+              description
+                "This list describes IPv4 extended prefixes and
+                attributes.";
+
+              leaf prefix {
+                type leafref {
+                  path "../state/prefix";
+                }
+                description
+                  "Reference to the IPv4 prefix that the TLV describes
+                  the attributes of.";
+              }
+
+              uses ipv4-prefix-extended-state;
+            }
+          }
+        }
+
+        container ipv6-reachability {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IPV6_REACHABILITY'" {
+            description
+              "Only include the IPv6 reachability container when the
+              TLV type is 236.";
+          }
+          description
+            "This container defines list of IPv6 reachability
+            information.";
+
+          reference
+            "RFC5308: Routing IPv6 with IS-IS. TLV 236";
+
+          container prefixes {
+            description
+              "This container describes IS prefixes.";
+
+            list prefix {
+              key "prefix";
+
+              description
+                "This list defines IPv6 extended prefix attributes.";
+
+              leaf prefix {
+                type leafref {
+                  path "../state/prefix";
+                }
+                description
+                  "Reference to the IPv6 prefix that the TLV
+                  corresponds to.";
+              }
+
+              uses ipv6-prefix-extended-state;
+            }
+          }
+        }
+
+        container multi-topology {
+          when "../state/type = 'oc-isis-lsdb-types:MULTI_TOPOLOGY'" {
+            description
+              "Only include the multi-topology container when the TLV
+              is type 229.";
+          }
+
+          description
+            "This container defines the topology supported.";
+
+          reference
+            "RFC5120: M-ISIS: Multi Topology (MT) Routing in
+            Intermediate System to Intermediate Systems (IS-ISs). TLV
+            229";
+
+          container topologies {
+            description
+              "This container describes IS topologies.";
+
+            list topology {
+              key "mt-id";
+
+              description
+                "This list describes a topology.";
+
+              leaf mt-id {
+                type leafref {
+                  path "../state/mt-id";
+                }
+                description
+                  "Reference to the multi-topology ID being described
+                  by the list entry.";
+              }
+
+              container state {
+                description
+                  "State parameters of IS multi-topology TLV 229.";
+
+                leaf mt-id {
+                  type uint16 {
+                    range "0 .. 4095";
+                  }
+                  description
+                    "Multi-topology ID.";
+                }
+
+                leaf attributes {
+                  type enumeration {
+                    enum OVERLOAD {
+                      description
+                        "When set, node is overloaded, still part of
+                        the topology but cannot be used for transit.";
+                    }
+                    enum ATTACHED {
+                      description
+                        "When set, node is attached to another area
+                        using the referred metric and can be used as
+                        default gateway.";
+                    }
+                  }
+                  description
+                    "Attributes of the LSP for the associated
+                    topology.";
+                }
+              }
+            }
+          }
+        }
+
+        container isis-neighbor-attribute {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:IS_NEIGHBOR_ATTRIBUTE'" {
+            description
+              "Only include the neighbor attribute container when the
+              TLV is type 23.";
+          }
+          description
+            "This container defines list of ISIS topology neighbors
+            for extended ISIS LSP (multiple system IDs). ";
+
+          reference
+            "RFC5311: Simplified Extension of Link State PDU (LSP)
+            Space for IS-IS. TLV 23. It is identical in format  to the
+            extended IS reachability TLV 22.";
+
+          container neighbors {
+            description
+              "This container describes IS neighbors.";
+
+            list neighbor {
+              key "system-id";
+
+              leaf system-id {
+                type leafref {
+                  path "../state/system-id";
+                }
+                description
+                  "Reference to the neighboring IS";
+              }
+
+              container state {
+                description
+                  "State parameters of extended neighbor.";
+
+                leaf system-id {
+                  type oc-isis-types:system-id;
+                  description
+                    "System-id of the neighbor.";
+                }
+                leaf metric {
+                  type oc-isis-types:wide-metric;
+                  description
+                    "Metric value.";
+                }
+              }
+              uses is-reachability-neighbor-state;
+
+              description
+                "This list defines ISIS extended reachability neighbor
+                attributes.";
+            }
+          }
+        }
+
+        container is-alias-id {
+          when "../state/type = 'oc-isis-lsdb-types:ISIS_ALIAS_ID'" {
+            description
+              "Only include the ISIS alias ID container when the TLV
+              is type 24.";
+          }
+
+          description
+            "This container defines the IS-Alias TLV which allows
+             extension-capable ISs to recognize the Originating System
+             of an Extended LSP set. It identifies the Normal system-
+             id of the Originating System.";
+
+          reference
+            "RFC5311: Simplified Extension of Link State PDU (LSP)
+             Space for IS-IS TLV 24.";
+
+          container state {
+            config false;
+            description
+              "State parameters of alias ID.";
+
+            leaf alias-id {
+              type oc-isis-types:system-id;
+              description
+                "List of alias ID(s).";
+            }
+          }
+        }
+
+        container mt-isn {
+          when "../state/type = 'oc-isis-lsdb-types:MT_ISN'" {
+            description
+              "Only include the MT ISN container when the TLV is type
+              222.";
+          }
+          description
+            "This container defines list of ISIS multi-topology
+            neighbors.";
+
+          reference
+            "RFC5120: M-ISIS: Multi Topology (MT) Routing in
+            Intermediate System to Intermediate Systems (IS-ISs). TLV
+            222.";
+
+          container neighbors {
+            description
+              "MT-IS neigbor attributes.";
+
+            list neighbor {
+              key "mt-id system-id";
+              description
+                "This container describes IS neighbors.";
+
+              leaf mt-id {
+                type leafref {
+                  path "../state/mt-id";
+                }
+                description
+                "Reference to the topology that the neighbor is
+                within.";               
+							}
+
+              leaf system-id {
+                type leafref {
+                  path "../state/system-id";
+                }
+                description
+                  "Reference to the System ID of the neighbor.";
+              }
+
+              uses mt-isis-neighbor;
+            }
+          }
+        }
+
+        container mt-isis-neighbor-attribute {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:MT_IS_NEIGHBOR_ATTRIBUTE'" {
+            description
+              "Only include the MT ISIS neighbor attribute container
+              when the TLV is type 223.";
+          }
+
+          description
+            "This container defines list of ISIS multi-topology
+            neighbors.";
+
+          reference
+            "RFC5311: Simplified Extension of Link State PDU (LSP)
+            Space for IS-IS. TLV 223. It is identical in format to the
+            MT-ISN TLV 222.";
+
+          container neighbors {
+            description
+              "This container describes IS neighbors.";
+
+            list neighbor {
+              key "mt-id system-id";
+              description
+                "List of multi-topology neighbors.";
+
+              leaf mt-id {
+                type leafref {
+                  path "../state/mt-id";
+                }
+                description
+                  "Reference to the topology that the neighbor is
+                  within.";
+              }
+
+              leaf system-id {
+                type leafref {
+                  path "../state/system-id";
+                }
+                description
+                  "Reference to the system ID of the neighbor";
+              }
+
+              uses mt-isis-neighbor;
+            }
+          }
+        }
+
+        container mt-ipv4-reachability {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:MT_IPV4_REACHABILITY'" {
+            description
+              "Only include the multi-topology IPv4 reachability
+              container when the TLV is type 235.";
+          }
+          description
+            "This container defines list of IPv4 reachability
+            Information in multi-topology environment.";
+
+          reference
+            "RFC5120: M-ISIS: Multi Topology (MT) Routing in
+            Intermediate System to Intermediate Systems (IS-ISs). TLV
+            235.";
+
+          container prefixes {
+            description
+              "This container describes IS prefixes.";
+
+            list prefix {
+              key "mt-id prefix";
+
+              leaf mt-id {
+                type leafref {
+                  path "../state/mt-id";
+                }
+                description
+                  "Reference to the topology ID of the topology that
+                  the prefix is within.";
+              }
+
+              leaf prefix {
+                type leafref {
+                  path "../state/prefix";
+                }
+                description
+                  "Reference to the prefix to which reachability is
+                  being advertised.";
+              }
+
+              description
+                "IPv4 prefixes that are contained within MT
+                reachability TLV.";
+
+              uses ipv4-mt-prefix-extended-state;
+            }
+          }
+        }
+
+        container mt-ipv6-reachability {
+          when "../state/type = " +
+               "'oc-isis-lsdb-types:MT_IPV6_REACHABILITY'" {
+            description
+              "Only include the multi-topology IPv6 reachability
+              container when the TLV is type 237.";
+          }
+          description
+            "This container defines list of IPv6 reachability
+            information in multi - topology environment.";
+
+          reference
+            "RFC5120: M-ISIS: Multi Topology (MT) Routing in
+            Intermediate System to Intermediate Systems (IS-ISs). TLV
+            237.";
+
+          container prefixes {
+            description
+              "This container describes IS prefixes.";
+
+            list prefix {
+              key "prefix mt-id";
+              description
+                  "List of IPv6 prefixes contained within MT
+                  reachability TLV.";
+
+              leaf prefix {
+                type leafref {
+                  path "../state/prefix";
+                }
+                description
+                  "Reference to the IPv6 prefix described by the
+                  TLV.";
+              }
+
+              leaf mt-id {
+                type leafref {
+                  path "../state/mt-id";
+                }
+                description
+                  "Reference to the multi-topology ID.";
+              }
+
+              uses ipv6-mt-prefix-extended-state;
+            }
+          }
+        }
+      }
+    }
+
+    uses isis-lsdb-undefined-tlv;
+  }
+}