module openconfig-isis-lsdb-types {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/isis-lsdb-types";

  prefix "oc-isis-lsdb-types";

  import openconfig-extensions { prefix oc-ext; }

  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This module contains general LSDB type definitions for use in
    ISIS YANG model. ";

  oc-ext:openconfig-version "0.3.2";

  revision "2017-07-26" {
    description
      "Update LSDB and fix bugs.";
    reference "0.3.2";
  }

  revision "2017-05-15" {
    description
      "Refactor LSDB.";
    reference "0.3.0";
  }

  revision "2017-01-13" {
    description
      "Remove top-level /isis container";
    reference "0.2.1";
  }

  revision "2016-12-15" {
    description
      "Add segment routing to IS-IS module";
    reference "0.2.0";
  }

  revision "2016-10-18" {
    description
      "Initial revision of IS-IS models.";
    reference "0.1.0";
  }

  identity ISIS_TLV_TYPE {
    description
      "Base identity for an ISIS TLV type.";
  }

  identity ISIS_SUBTLV_TYPE {
    description
      "Base identity for an ISIS SUB-TLV type.";
  }

  identity IS_REACHABILITY_SUBTLVS_TYPE {
    base "ISIS_SUBTLV_TYPE";
    description
      "Base identity for an ISIS TLV 22, 23, 222, 223, 141 SUB-TLV
      type.";
  }

  identity IP_REACHABILITY_SUBTLVS_TYPE {
    base "ISIS_SUBTLV_TYPE";
    description
      "Base identity for an ISIS TLV 135, 235, 236, 237 SUB-TLV
      type.";
  }

  identity ROUTER_CAPABILITY_SUBTLVS_TYPE {
    base "ISIS_SUBTLV_TYPE";
    description
      "Base identity for an ISIS TLV 242 SUB-TLV type.";
  }

  identity AREA_ADDRESSES {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 1. 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.";
    reference
      "ISO 10589";
  }

  identity IIS_NEIGHBORS {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 2. 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.";
    reference
      "ISO 10589";
  }

  identity INSTANCE_ID {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 7. 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";
    reference
      "RFC6822: IS-IS Multi-Instance";
  }

  identity AUTHENTICATION {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 10.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.";
    reference
      "ISO 10589";
  }

  identity PURGE_OI {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 13. If an IS generates a purge, it SHOULD include
      this TLV in the purge with its own system ID.  If an IS
      receives a purge that does not include this TLV, then it SHOULD
      add this TLV with both its own system ID and the system ID of
      the IS from which it received the purge.  This allows ISs
      receiving purges to log the system ID of the originator, or the
      upstream source of the purge.";
    reference
      "RFC6232: Purge Originator Identification TLV";
  }

  identity LSP_BUFFER_SIZE {
   base "ISIS_TLV_TYPE";
   description
     "ISIS TLV 14. The maximum MTU that the advertising system can
     receive, expressed in bytes.";
   reference
     "ISO 10589: LSP Buffer Size TLV";
  }

  identity EXTENDED_IS_REACHABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 22. An extended IS reachability TLV that has a
      different data structure to TLV 2 that introduces the use of
      sub-TLV object-group.";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering";
  }

  identity IS_NEIGHBOR_ATTRIBUTE {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 23. Identical in format to TLV 22 and included in
      Original LSPs or Extended LSPs. Regardless of the type of LSP
      in which the TLVs appear, the information pertains to the
      neighbor relationship between the Originating System and the IS
      identified in the TLV";
    reference
      "RFC5311: Simplified Extension of Link State PDU (LSP) Space
      for IS-IS";
  }

  identity ISIS_ALIAS_ID {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 24. IS-Alias TLV which 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";
  }

  identity IPV4_INTERNAL_REACHABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 128. TLV defines IP addresses within the routing
      domain reachable directly via one or more interfaces on this
      Intermediate system";
    reference
      "RFC1195: OSI ISIS for IP and Dual Environments. RFC5302:
      Domain-Wide Prefix Distribution with Two-Level IS-IS";
  }

  identity NLPID {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 129. TLV defines the set Network Layer Protocol
      Identifiers for Network Layer protocols that this Intermediate
      System is capable of relaying";
    reference
      "RFC1195: Use of OSI IS-IS for Routing in TCP/IP and
      Dual Environments";
  }

  identity IPV4_EXTERNAL_REACHABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 130. TLV defines IP addresses outside the routing
      domain reachable via interfaces on this Intermediate system.
      This is permitted to appear multiple times, and in an LSP with
      any LSP number. However, this field must not appear in
      pseudonode LSPs";
    reference "
      RFC1195: OSI ISIS for IP and Dual Environments.  RFC5302:
      Domain-Wide Prefix Distribution with Two-Level IS-IS";
  }

  identity IPV4_INTERFACE_ADDRESSES {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 132. The IP address of one or more interfaces
      corresponding to the SNPAs enabled on this Intermediate system
      (i.e., one or more IP addresses of this router). This is
      permitted to appear multiple times, and in an LSP with any LSP
      number.";
    reference
      "RFC1195: Use of OSI IS-IS for Routing in TCP/IP and Dual
      Environments";
  }

  identity IPV4_TE_ROUTER_ID {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 134. Traffic Engineering router ID TLV that contains
      the 4-octet router ID of the router originating the LSP";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering";
  }

  identity EXTENDED_IPV4_REACHABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 135. Extended IP reachability TLV that provides for a
      32-bit metric and adds one bit to indicate that a prefix has
      been redistributed _down_ in the hierarchy";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering";
  }

  identity DYNAMIC_NAME {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 137. The Dynamic hostname TLV is optional.  This TLV
      may be present in any fragment of a non-pseudonode LSP.  The
      value field identifies the symbolic name of the router
      originating the LSP.  This symbolic name can be the FQDN for the
      router, it can be a subset of the FQDN, or it can be any string
      operators want to use for the router.";
    reference
      "RFC6233: IS-IS Registry Extension for Purges, RFC 5301: Dynamic
      Hostname Exchange Mechanism for IS-IS.";
  }

  identity IPV4_SRLG {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 138. IPv4 Shared Risk Link Group TLV";
    reference
      "RFC5307: IS-IS Extensions in Support of Generalized
      Multi-Protocol Label Switching (GMPLS)";
  }

  identity IPV6_SRLG {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 139. IPv6 Shared Risk Link Group";
    reference
      "RFC6119: IPv6 Traffic Engineering in IS-IS";
  }

  identity IPV6_TE_ROUTER_ID {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 140. The IPv6 TE Router ID TLV contains a 16-octet
      IPv6 address. A stable global IPv6 address MUST be used, so that
      the router ID provides a routable address, regardless of the
      state of a node's interfaces. If a router does not implement
      traffic engineering, it MAY include or omit the IPv6 TE Router
      ID TLV.  If a router implements traffic engineering for IPv6, it
      MUST include this TLV in its LSP.  This TLV MUST NOT be included
      more than once in an LSP.";
    reference
      "RFC6119: IPv6 Traffic Engineering in IS-IS.";
  }

  identity MT_ISN {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 222. TLV is aligned with extended IS reachability TLV
      type 22 beside an additional two bytes in front at the beginning
      of the TLV that. indicate MT membership.";
    reference
      "RFC5120: M-ISIS: Multi Topology (MT) Routing in Intermediate
      System to Intermediate Systems (IS-ISs)";
  }

  identity MT_IS_NEIGHBOR_ATTRIBUTE {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 223. Is is identical in format to TLV 222. In the
      event that there is a need to advertise in Extended LSPs such
      information associated with neighbors of the Originating System,
      it is necessary to define new TLVs to carry the sub-TLV
      information.";
    reference
      "RFC5311: Simplified Extension of Link State PDU (LSP) Space for
      IS-IS";
  }

  identity MULTI_TOPOLOGY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 229. This MT TLV can advertise up to 127 MTs.  It is
      announced in IIHs and LSP fragment 0, and can occur multiple
      times.  The resulting MT set SHOULD be the union of all the MT
      TLV occurrences in the packet. Any other IS-IS PDU occurrence of
      this TLV MUST be ignored.  Lack of MT TLV in hellos and fragment
      zero LSPs MUST be interpreted as participation of the
      advertising interface or router in MT ID #0 only.  If a router
      advertises MT TLV, it has to advertise all the MTs it
      participates in, specifically including topology ID #0 also.";
    reference
      "RFC5120: M-ISIS: Multi Topology (MT) Routing in Intermediate
      System to Intermediate Systems (IS-ISs)";
  }

  identity IPV6_INTERFACE_ADDRESSES {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 232. IPv6 Interface Address TLV that maps directly to
      the IP Interface Address TLV in [RFC1195]. We necessarily modify
      the contents to be 0-15 16-octet IPv6 interface addresses
      instead of 0-63 4-octet IPv4 interface addresses";
    reference "RFC5308: Routing IPv6 with IS-IS.";
  }

  identity MT_IPV4_REACHABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 235. TLV is aligned with extended IP reachability TLV
      type 135 beside an additional two bytes in front to indicate MT
      membership";
    reference
      "RFC5120: M-ISIS: Multi Topology (MT) Routing in Intermediate
      System to Intermediate Systems (IS-ISs)";
  }

  identity IPV6_REACHABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 236. The IPv6 Reachability TLV describes network
      reachability through the specification of a routing prefix,
      metric information, a bit to indicate if the prefix is being
      advertised down from a higher level, a bit to indicate if the
      prefix is being distributed from another routing protocol, and
      OPTIONALLY the existence of Sub-TLVs to allow for later
      extension.";
    reference
      "RFC5308: Routing IPv6 with IS-IS";
  }

  identity MT_IPV6_REACHABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 237. TLV is aligned with IPv6 Reachability TLV type
      236 beside an additional two bytes in front to indicate MT
      membership.";
    reference
      "RFC5120: M-ISIS: Multi Topology (MT) Routing in Intermediate
      System to Intermediate Systems (IS-ISs).";
  }

  identity ROUTER_CAPABILITY {
    base "ISIS_TLV_TYPE";
    description
      "ISIS TLV 242. IS-IS TLV named CAPABILITY, formed of multiple
      sub-TLVs, which allows a router to announce its capabilities
      within an IS-IS level or the entire routing domain.";
    reference
      "RFC4971: Intermediate System to Intermediate System (IS-IS)
      Extensions for Advertising Router Information.";
  }

  //sub-TLVs for TLVs 22, 23, 141, 222, 223

  identity IS_REACHABILITY_ADMIN_GROUP {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 3. Administrative group(color).";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering";
  }

  identity IS_REACHABILITY_LINK_ID {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 4. Link Local/Remote Identifiers.";
    reference
      "RFC5307: IS-IS Extensions in Support of Generalized
      Multi-Protocol Label Switching (GMPLS)";
  }

  identity IS_REACHABILITY_IPV4_INTERFACE_ADDRESS {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 6. IPv4 Interface Address.";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering.";
  }

  identity IS_REACHABILITY_IPV4_NEIGHBOR_ADDRESS {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 8. IPv4 Neighbor Address.";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering.";
  }

  identity IS_REACHABILITY_MAX_LINK_BANDWIDTH {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 9. Maximum Link Bandwidth.";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering.";
  }

  identity IS_REACHABILITY_MAX_RESERVABLE_BANDWIDTH {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 10. Maximum Reservable Bandwidth.";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering.";
  }

  identity IS_REACHABILITY_UNRESERVED_BANDWIDTH {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 11. Unreserved bandwidth.";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering.";
  }

  identity IS_REACHABILITY_IPV6_INTERFACE_ADDRESS {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 12. IPv6 Interface Address.";
    reference
      "RFC6119: IPv6 Traffic Engineering in IS-IS.";
  }

  identity IS_REACHABILITY_IPV6_NEIGHBOR_ADDRESS {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 13. IPv6 Neighbor Address.";
    reference
      "RFC6119: IPv6 Traffic Engineering in IS-IS.";
  }

  identity IS_REACHABILITY_EXTENDED_ADMIN_GROUP {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 14. Extended Administrative Group.";
    reference
      "RFC7308: Extended Administrative Groups in MPLS Traffic
      Engineering (MPLS-TE).";
  }

  identity IS_REACHABILITY_TE_DEFAULT_METRIC {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 18. TE Default Metric.";
    reference
      "RFC5305: IS-IS Extensions for Traffic Engineering.";
  }

  identity IS_REACHABILITY_LINK_ATTRIBUTES {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 19. Link Attributes.";
    reference
      "RFC5209: Definition of an IS-IS Link Attribute Sub-TLV.";
  }

  identity IS_REACHABILITY_LINK_PROTECTION_TYPE {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 20. Link Protection Type.";
    reference
      "RFC5307: IS-IS Extensions in Support of Generalized
      Multi-Protocol  Label Switching (GMPLS)";
  }

  identity IS_REACHABILITY_BANDWIDTH_CONSTRAINTS {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 22. Bandwidth Constraints.";
    reference
      "RFC4124: Protocol Extensions for Support of Diffserv-aware MPLS
      Traffic Engineering.";
  }

  identity IS_REACHABILITY_UNCONSTRAINED_LSP {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 23. Unconstrained LSP.";
    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.";
  }

  identity IS_REACHABILITY_ADJ_SID {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 31. Adjacency Segment Identifier.";
    reference
      "draft-ietf-isis-segment-routing-extensions.";
  }

  identity IS_REACHABILITY_ADJ_LAN_SID {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 32. Adjacency LAN Segment Identifier.";
    reference
      "draft-ietf-isis-segment-routing-extensions.";
  }

  identity IS_REACHABILITY_LINK_DELAY {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 33. Unidirectional Link Delay.";
    reference
      "RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.";
  }

  identity IS_REACHABILITY_MIN_MAX_LINK_DELAY {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 34. Min/Max Unidirectional Link Delay.";
    reference
      "RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.";
  }

  identity IS_REACHABILITY_LINK_DELAY_VARIATION {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 35. Unidirectional Link Delay Variation.";
    reference
      "RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.";
  }

  identity IS_REACHABILITY_LINK_LOSS {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 36. Unidirectional Link Loss Delay.";
    reference
      "RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.";
  }

  identity IS_REACHABILITY_RESIDUAL_BANDWIDTH {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 37. Unidirectional Residual Bandwidth.";
    reference
      "RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.";
  }

  identity IS_REACHABILITY_AVAILABLE_BANDWIDTH {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 38. Unidirectional Available Bandwidth.";
    reference
      "RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.";
  }

  identity IS_REACHABILITY_UTILIZED_BANDWIDTH {
    base "IS_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 39. Unidirectional Utilized Bandwidth.";
    reference
      "RFC7810: IS-IS Traffic Engineering (TE) Metric Extensions.";
  }

  //sub-TLVs for TLVs 135, 235, 236, 237
  identity IP_REACHABILITY_TAG {
    base "IP_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 1. 32-bit Administrative Tag.";
    reference
      "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6
      Reachability.";
  }

  identity IP_REACHABILITY_TAG64 {
    base "IP_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 2. 64-bit Administrative Tag.";
    reference
      "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6
      Reachability.";
  }

  identity IP_REACHABILITY_PREFIX_SID {
    base "IP_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 3. Prefix Segment Identifier.";
    reference
      "draft-ietf-isis-segment-routing-extension.";
  }

  identity IP_REACHABILITY_PREFIX_FLAGS {
    base "IP_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 4. Prefix Attribute Flags.";
    reference
      "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6
      Reachability.";
  }

  identity IP_REACHABILITY_IPV4_ROUTER_ID {
    base "IP_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 11. IPv4 Source Router ID.";
    reference
      "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6
      Reachability.";
  }

  identity IP_REACHABILITY_IPV6_ROUTER_ID {
    base "IP_REACHABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 12. IPv6 Source Router ID.";
    reference
      "RFC7794: IS-IS Prefix Attributes for Extended IPv4 and IPv6
      Reachability.";
  }


  //sub-TLVs for TLVs 242

  identity ROUTER_CAPABILITY_SR_CAPABILITY {
    base "ROUTER_CAPABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 2. Segment Routing Capability.";
    reference
      "draft-ietf-isis-segment-routing-extensions.";
  }

  identity ROUTER_CAPABILITY_SR_ALGORITHM {
    base "ROUTER_CAPABILITY_SUBTLVS_TYPE";
    description
      "sub-TLV 19. Segment Routing Algorithm.";
    reference
      "draft-ietf-isis-segment-routing-extensions.";
  }

}
