openconfig-isis-lsp

This sub-module describes a YANG model for the IS-IS Link State Database (LSDB). Portions of this code were derived from IETF R...

  • Version: 2021-06-16

    openconfig-isis-lsp@2021-06-16


    
      submodule openconfig-isis-lsp {
    
        yang-version 1;
    
        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-mplst;
        }
    
        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).";
    
        revision "2021-06-16" {
          description
            "Remove trailing whitespace";
          reference
            "0.6.2";
    
        }
    
        revision "2020-03-24" {
          description
            "Support IGP-LDP sync per interface.";
          reference
            "0.6.0";
    
        }
    
        revision "2020-02-04" {
          description
            "Consistent prefix for openconfig-mpls-types.";
          reference
            "0.5.0";
    
        }
    
        revision "2018-11-21" {
          description
            "Add OpenConfig module metadata extensions.";
          reference
            "0.4.2";
    
        }
    
        revision "2018-06-05" {
          description
            "Fix bugs in when statements.";
          reference
            "0.4.1";
    
        }
    
        revision "2018-05-14" {
          description
            "Update LSDB model to correct Extended IS reach TLV
          bug. This change is backwards incompatible due to
          adding an additional level of hierarchy to support
          multiple instances of the TLV.";
          reference
            "0.4.0";
    
        }
    
        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";
    
        }
    
        oc-ext:openconfig-version "0.6.2";
    
        typedef isis-metric-flags {
          type enumeration {
            enum "INTERNAL" {
              value 0;
              description
                "When this flag is not set, internal metrics are in use.";
            }
            enum "UNSUPPORTED" {
              value 1;
              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-link-characteristics-a-bit
    
        grouping isis-lsdb-tlv-nlpid-state {
          description
            "NLP ID parameters for IS-IS.";
          leaf-list nlpid {
            type enumeration {
              enum "IPV4" {
                value 0;
                description
                  "IPv4 Address family.";
              }
              enum "IPV6" {
                value 1;
                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-tlv-nlpid-state
    
        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-subtlv-type-state
    
        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 isis-lsdb-tlv-type-state
    
        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 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 state
              }  // container admin-group
    
              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 state
              }  // container link-id
    
              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 state
              }  // container ipv4-interface-address
    
              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 state
              }  // container ipv4-neighbor-address
    
              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 state
              }  // container max-link-bandwidth
    
              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 state
              }  // container max-reservable-link-bandwidth
    
              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";
                  description
                    "Setup priority (0 through 7) for unreserved
                  bandwidth.";
                  leaf priority {
                    type leafref {
                      path "../state/priority";
                    }
                    description
                      "Reference to the setup priority to which the
                    unreserved bandwidth corresponds.";
                  }
    
                  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 state
                }  // list setup-priority
              }  // container unreserved-bandwidth
    
              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 state
              }  // container ipv6-interface-address
    
              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 state
              }  // container ipv6-neighbor-address
    
              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 state
              }  // container extended-admin-group
    
              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 state
              }  // container te-default-metric
    
              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" {
                        value 0;
                        description
                          "If set, local protection is available for the
                        link.";
                      }
                      enum "LINK_EXCLUDED" {
                        value 1;
                        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 state
              }  // container link-attributes
    
              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" {
                        value 0;
                        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" {
                        value 1;
                        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" {
                        value 2;
                        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" {
                        value 3;
                        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" {
                        value 4;
                        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" {
                        value 5;
                        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 state
              }  // container link-protection-type
    
              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 state
    
                  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 state
                    }  // list constraint
                  }  // container constraints
                }  // list bandwidth-constraint
              }  // container bandwidth-constraints
    
              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 state
              }  // container unconstrained-lsp
    
              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.";
                reference
                  "draft-ietf-isis-segment-routing-extensions. sub-TLV 31:
                  TLV 22, 222, 223, 141. ";
    
                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" {
                          value 0;
                          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" {
                          value 1;
                          description
                            "Backup flag. When set, the Adj-SID refers to an
                          adjacency being protected (e.g.: using IPFRR or
                          MPLS-FRR).";
                        }
                        enum "VALUE" {
                          value 2;
                          description
                            "Value flag. When set, the SID carries a value
                          (instead of an index). By default the flag is
                          SET.";
                        }
                        enum "LOCAL" {
                          value 3;
                          description
                            "Local flag. When set, the value/index carried
                          by the SID has local significance. By default
                          the flag is SET.";
                        }
                        enum "SET" {
                          value 4;
                          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.";
                    }
                  }  // container state
                }  // list adjacency-sid
              }  // container adjacency-sids
    
              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";
                reference
                  "draft-ietf-isis-segment-routing-extensions. sub-TLV 32:
                  TLV 22, 222, 223, 141.";
    
                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" {
                          value 0;
                          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" {
                          value 1;
                          description
                            "Backup flag. When set, the Adj-SID refers to an
                          adjacency being protected (e.g.: using IPFRR or
                          MPLS-FRR).";
                        }
                        enum "VALUE" {
                          value 2;
                          description
                            "Value flag. When set, the SID carries a value
                          (instead of an index). By default the flag is
                          SET.";
                        }
                        enum "LOCAL" {
                          value 3;
                          description
                            "Local flag. When set, the value/index carried
                          by the SID has local significance. By default
                          the flag is SET.";
                        }
                        enum "SET" {
                          value 4;
                          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.";
                    }
                  }  // container state
                }  // list lan-adjacency-sid
              }  // container lan-adjacency-sids
    
              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 state
              }  // container link-delay
    
              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 state
              }  // container min-max-link-delay
    
              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 state
              }  // container link-delay-variation
    
              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 state
              }  // container link-loss
    
              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 state
              }  // container residual-bandwidth
    
              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 state
              }  // container available-bandwidth
    
              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.";
                  }
                }  // container state
              }  // container utilized-bandwidth
            }  // list subtlv
          }  // container subtlvs
    
          uses isis-lsdb-undefined-subtlv;
        }  // grouping is-reachability-neighbor-state
    
        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;
              }  // container state
            }  // list undefined-tlv
          }  // container undefined-tlvs
        }  // grouping isis-lsdb-undefined-tlv
    
        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;
              }  // container state
            }  // list undefined-subtlv
          }  // container undefined-subtlvs
        }  // grouping isis-lsdb-undefined-subtlv
    
        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 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 state
              }  // container tag
    
              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 state
              }  // container tag64
    
              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" {
                        value 0;
                        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" {
                        value 1;
                        description
                          "Readvertisement flag. Set when the prefix has been
                      leaked from one level to another (upwards or
                      downwards).";
                      }
                      enum "NODE_FLAG" {
                        value 2;
                        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 state
              }  // container flags
    
              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 state
              }  // container ipv4-source-router-id
    
              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.";
    
                  }
                }  // container state
              }  // container ipv6-source-router-id
    
              uses isis-lsdb-prefix-sid-state;
            }  // list subtlv
          }  // container subtlvs
    
          uses isis-lsdb-undefined-subtlv;
        }  // grouping isis-lsdb-prefix-state
    
        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" {
                      value 0;
                      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" {
                      value 1;
                      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" {
                      value 2;
                      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" {
                      value 3;
                      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" {
                      value 4;
                      description
                        "Value flag. When set, the Prefix-SID carries a
                      value (instead of an index). By default the flag is
                      UNSET.";
                    }
                    enum "LOCAL" {
                      value 5;
                      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.";
                }
              }  // container state
            }  // list prefix-sid
          }  // container prefix-sids
        }  // grouping isis-lsdb-prefix-sid-state
    
        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" {
                    value 0;
                    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 state
          }  // container default-metric
    
          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 state
          }  // container delay-metric
    
          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 state
          }  // container expense-metric
    
          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.";
              }
            }  // container state
          }  // container error-metric
        }  // grouping isis-lsdb-common-metric-specification
    
        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.";
            }
          }  // container state
    
          uses isis-lsdb-common-metric-specification;
        }  // grouping isis-lsdb-neighbor
    
        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.";
            }
          }  // container state
    
          uses isis-lsdb-common-metric-specification;
        }  // grouping ipv4-prefix-attributes-state
    
        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 isis-lsdb-common-mt-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;
          }  // container state
    
          uses isis-lsdb-prefix-state;
        }  // grouping ipv4-prefix-extended-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;
          }  // container state
    
          uses isis-lsdb-prefix-state;
        }  // grouping ipv4-mt-prefix-extended-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 ipv4-prefix-extended-params-state
    
        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;
          }  // container state
    
          uses isis-lsdb-prefix-state;
        }  // grouping ipv6-prefix-extended-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;
          }  // container state
    
          uses isis-lsdb-prefix-state;
        }  // grouping ipv6-mt-prefix-extended-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 ipv6-prefix-extended-params-state
    
        grouping isis-lsdb-common-extisreach-neighbors {
          description
            "Common structure for the Extended IS Reachability and IS
          Reachability Neighbour attributes.";
          container neighbors {
            description
              "This container describes IS neighbors.";
            list neighbor {
              key "system-id";
              description
                "This list describes ISIS extended neighbors 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 corresponding to the extended
                neighbour.";
                leaf system-id {
                  type oc-isis-types:system-id;
                  description
                    "System-id of the neighbor.";
                }
              }  // container state
    
              container instances {
                description
                  "This list contains all instances of an adjacency
                between the originating IS and the remote IS.
                Multiple instances are used where there are
                parallel adjacencies between two systems.";
                list instance {
                  key "id";
                  description
                    "Instance of the TLV to the remote IS neighbor.";
                  leaf id {
                    type leafref {
                      path "../state/id";
                    }
                    description
                      "Reference to the unique identifier for
                    the instance of the extended IS
                    reachability sub-TLV.";
                  }
    
                  container state {
                    description
                      "State parameters of extended neighbor";
                    leaf id {
                      type uint64;
                      description
                        "Unique identifier for the instance of the
                      TLV for the IS neighbor. The instance
                      ID is not required to be consistent across
                      across readvertisements of the LSP.";
                    }
    
                    leaf metric {
                      type oc-isis-types:wide-metric;
                      description
                        "Metric value.";
                    }
                  }  // container state
    
                  uses is-reachability-neighbor-state;
                }  // list instance
              }  // container instances
            }  // list neighbor
          }  // container neighbors
        }  // grouping isis-lsdb-common-extisreach-neighbors
    
        grouping isis-lsdb-mtis-common {
          description
            "Common grouping for structure used within the multi-topology IS
          neighbour and multi-topology IS neighbour attribute TLVs.";
          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.";
              }
    
              container state {
                description
                  "Operational state parameters related to the
                MT ISN TLV.";
                uses mt-isis-neighbor-state;
              }  // container state
    
              container instances {
                description
                  "This list contains all instances of an adjacency
                between the originating and remote IS. Multiple
                instances are used to indicate where there are
                parallel adjacencies between systems.";
                list instance {
                  key "id";
                  description
                    "Instance of TLV-222 between the originating
                  and remote IS.";
                  leaf id {
                    type leafref {
                      path "../state/id";
                    }
                    description
                      "Reference to the unique identifier for the
                    instance of the multi-topology IS neighbor
                    TLV instance.";
                  }
    
                  uses mt-isis-neighbor-instance;
                }  // list instance
              }  // container instances
            }  // list neighbor
          }  // container neighbors
        }  // grouping isis-lsdb-mtis-common
    
        grouping mt-isis-neighbor-state {
          description
            "This grouping defines state parameters that are related to
          each neighbour entry for the MT ISN TLV.";
          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.";
          }
        }  // grouping mt-isis-neighbor-state
    
        grouping mt-isis-neighbor-instance {
          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 metric {
              type oc-isis-types:wide-metric;
              description "ISIS metric value.";
            }
    
            leaf id {
              type uint64;
              description
                "Unique identifier for the TLV instance for the
              neighbor. The ID is not required to be consistent
              across readvertisements of the LSP.";
            }
          }  // container state
    
          uses is-reachability-neighbor-state;
        }  // grouping mt-isis-neighbor-instance
    
        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 isis-lsdb-generic-tlv
    
        grouping undefined-tlv-state {
          description
            "Generic grouping defining an unknown TLV.";
          uses isis-lsdb-generic-tlv;
        }  // grouping undefined-tlv-state
    
        grouping undefined-subtlv-state {
          description
            "Generic grouping defining an unknown sub-TLV.";
          uses isis-lsdb-generic-tlv;
        }  // grouping undefined-subtlv-state
    
        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" {
                  value 0;
                  description
                    "This enum describes ISIS level 1 PDU.";
                }
                enum "LEVEL_2" {
                  value 1;
                  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" {
                  value 0;
                  description
                    "When set, the originator supports partition
                  repair.";
                }
                enum "ATTACHED_ERROR" {
                  value 1;
                  description
                    "When set, the originator is attached to another
                  area using the referred metric.";
                }
                enum "ATTACHED_EXPENSE" {
                  value 2;
                  description
                    "When set, the originator is attached to another
                  area using the referred metric.";
                }
                enum "ATTACHED_DELAY" {
                  value 3;
                  description
                    "When set, the originator is attached to another
                  area using the referred metric.";
                }
                enum "ATTACHED_DEFAULT" {
                  value 4;
                  description
                    "When set, the originator is attached to another
                  area using the referred metric.";
                }
                enum "OVERLOAD" {
                  value 5;
                  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 state
    
          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 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 state
              }  // container area-address
    
              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 state
              }  // container lsp-buffer-size
    
              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 state
              }  // container nlpid
    
              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 state
              }  // container hostname
    
              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 state
              }  // container ipv4-interface-addresses
    
              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 state
              }  // container ipv6-interface-addresses
    
              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 state
              }  // container ipv4-te-router-id
    
              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 state
              }  // container ipv6-te-router-id
    
              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 state
                }  // list instance-id
              }  // container instance-ids
    
              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" {
                          value 0;
                          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 state
                }  // list ipv4-srlg
              }  // container ipv4-srlgs
    
              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" {
                          value 0;
                          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 state
                }  // list ipv6-srlg
              }  // container ipv6-srlgs
    
              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 state
              }  // container purge-oi
    
              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" {
                          value 0;
                          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" {
                          value 1;
                          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 state
    
                  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 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 state
                      }  // container segment-routing-algorithms
    
                      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" {
                                value 0;
                                description
                                  "When set, the router is capable of
                                processing SR MPLS encapsulated IPv4
                                packets on all interfaces.";
                              }
                              enum "IPV6_MPLS" {
                                value 1;
                                description
                                  "When set, the router is capable of
                                processing SR MPLS encapsulated IPv6
                                packets on all interfaces.";
                              }
                              enum "IPV6_SR" {
                                value 2;
                                description
                                  "When set, the router is capable of
                                processing the IPv6 Segment Routing Header
                                on all interfaces.";
                              }
                            }
                            description
                              "Segment Routing Capability Flags.";
                          }
                        }  // container state
    
                        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-mplst:mpls-label;
                                description
                                  "The first value of the SRGB when
                                expressed as an MPLS label.";
                              }
                            }  // container state
                          }  // list srgb-descriptor
                        }  // container srgb-descriptors
                      }  // container segment-routing-capability
                    }  // list subtlv
                  }  // container subtlvs
    
                  uses isis-lsdb-undefined-subtlv;
                }  // list capability
              }  // container router-capabilities
    
              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;
                  }  // list neighbor
                }  // container neighbors
              }  // container is-reachability
    
              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;
                  }  // list prefix
                }  // container prefixes
              }  // container ipv4-internal-reachability
    
              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;
                  }  // list prefix
                }  // container prefixes
              }  // container ipv4-external-reachability
    
              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" {
                        value 0;
                        description
                          "HMAC-MD5 Authentication type.";
                      }
                      enum "CLEARTEXT" {
                        value 1;
                        description
                          "Cleartext Authentication type.";
                      }
                    }
                    description
                      "Authentication type to be used.";
                  }
    
                  leaf authentication-key {
                    type string;
                    description
                      "Authentication key to be used.";
                  }
                }  // container state
              }  // container authentication
    
              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.";
    
                uses isis-lsdb-common-extisreach-neighbors;
              }  // container extended-is-reachability
    
              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;
                  }  // list prefix
                }  // container prefixes
              }  // container extended-ipv4-reachability
    
              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;
                  }  // list prefix
                }  // container prefixes
              }  // container ipv6-reachability
    
              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" {
                            value 0;
                            description
                              "When set, node is overloaded, still part of
                            the topology but cannot be used for transit.";
                          }
                          enum "ATTACHED" {
                            value 1;
                            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 state
                  }  // list topology
                }  // container topologies
              }  // container multi-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.";
    
                uses isis-lsdb-common-extisreach-neighbors;
              }  // container isis-neighbor-attribute
    
              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 state
              }  // container is-alias-id
    
              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.";
    
                uses isis-lsdb-mtis-common;
              }  // container mt-isn
    
              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.";
    
                uses isis-lsdb-mtis-common;
              }  // container mt-isis-neighbor-attribute
    
              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";
                    description
                      "IPv4 prefixes that are contained within MT
                    reachability TLV.";
                    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.";
                    }
    
                    uses ipv4-mt-prefix-extended-state;
                  }  // list prefix
                }  // container prefixes
              }  // container mt-ipv4-reachability
    
              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;
                  }  // list prefix
                }  // container prefixes
              }  // container mt-ipv6-reachability
            }  // list tlv
          }  // container tlvs
    
          uses isis-lsdb-undefined-tlv;
        }  // grouping lsp-state
      }  // submodule openconfig-isis-lsp
    

© 2023 YumaWorks, Inc. All rights reserved.