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;
  }
}
