   module ietf-te-types {

     namespace "urn:ietf:params:xml:ns:yang:ietf-te-types";

     /* Replace with IANA when assigned */
     prefix "te-types";

     import ietf-inet-types {
       prefix inet;
     }

     organization
       "IETF Traffic Engineering Architecture and Signaling (TEAS)
        Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/teas/>
        WG List:  <mailto:teas@ietf.org>

        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>

        WG Chair: Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

        Editor:   Tarek Saad
                  <mailto:tsaad@cisco.com>

        Editor:   Rakesh Gandhi
                  <mailto:rgandhi@cisco.com>

        Editor:   Vishnu Pavan Beeram
                  <mailto:vbeeram@juniper.net>

        Editor:   Himanshu Shah
                  <mailto:hshah@ciena.com>

        Editor:   Xufeng Liu
                  <mailto:xufeng.liu@ericsson.com>

        Editor:   Xia Chen
                  <mailto:jescia.chenxia@huawei.com>

        Editor:   Raqib Jones
                  <mailto:raqib@Brocade.com>

        Editor:   Bin Wen
                  <mailto:Bin_Wen@cable.comcast.com>";

     description
       "This module contains a collection of generally
       useful TE specific YANG data type defintions.";

     revision 2016-03-20 {
       description "Latest revision of TE generic types";
       reference "RFC3209";
     }

     identity tunnel-type {
       description
         "Base identity from which specific tunnel types are
         derived.";
     }

     identity tunnel-p2p {
       base tunnel-type;
       description
         "TE point-to-point tunnel type.";
     }

     identity tunnel-p2mp {
       base tunnel-type;
       description
         "TE point-to-multipoint tunnel type.";
     }

     identity state-type {
       description
         "Base identity for TE states";
     }

     identity state-up {
       base state-type;
       description
         "State up";
     }

     identity state-down {
       base state-type;
       description
         "State down";
     }

     identity lsp-prot-type {
       description
         "Base identity from which LSP protection types are
         derived.";
     }

     identity lsp-prot-unprotected {
       description
         "LSP protection 'Unprotected'";
       reference "RFC4872";
     }

     identity lsp-prot-reroute-extra {
       description
         "LSP protection '(Full) Rerouting'";
       reference "RFC4872";
     }

     identity lsp-prot-reroute {
       description
         "LSP protection 'Rerouting without Extra-Traffic'";
       reference "RFC4872";
     }

     identity lsp-prot-1-for-n {
       description
         "LSP protection '1:N Protection with Extra-Traffic'";
       reference "RFC4872";
     }

     identity lsp-prot-unidir-1-to-1 {
       description
         "LSP protection '1+1 Unidirectional Protection'";
       reference "RFC4872";
     }

     identity lsp-prot-bidir-1-to-1 {
       description
         "LSP protection '1+1 Bidirectional Protection'";
       reference "RFC4872";
     }

     identity switching-capabilities {
       description
         "Base identity for interface switching capabilities";
     }

     identity switching-psc1 {
       base switching-capabilities;
       description
         "Packet-Switch Capable-1 (PSC-1)";
     }

     identity switching-evpl {
       base switching-capabilities;
       description
         "Ethernet Virtual Private Line (EVPL)";
     }

     identity switching-l2sc {
       base switching-capabilities;
       description
         "Layer-2 Switch Capable (L2SC)";
     }

     identity switching-tdm {
       base switching-capabilities;
       description
         "Time-Division-Multiplex Capable (TDM)";
     }

     identity switching-otn {
       base switching-capabilities;
       description
         "OTN-TDM capable";
     }

     identity switching-dcsc {
       base switching-capabilities;
       description
         "Data Channel Switching Capable (DCSC)";
     }
     identity switching-lsc {
       base switching-capabilities;
       description
         "Lambda-Switch Capable (LSC)";
     }

     identity switching-fsc {
       base switching-capabilities;
       description
         "Fiber-Switch Capable (FSC)";
     }

     identity lsp-encoding-types {
       description
         "Base identity for encoding types";
     }

     identity lsp-encoding-packet {
       base lsp-encoding-types;
       description
         "Packet LSP encoding";
     }

     identity lsp-encoding-ethernet {
       base lsp-encoding-types;
       description
         "Ethernet LSP encoding";
     }

     identity lsp-encoding-pdh {
       base lsp-encoding-types;
       description
         "ANSI/ETSI LSP encoding";
     }

     identity lsp-encoding-sdh {
       base lsp-encoding-types;
       description
         "SDH ITU-T G.707 / SONET ANSI T1.105 LSP encoding";
     }

     identity lsp-encoding-digital-wrapper {
       base lsp-encoding-types;
       description
         "Digital Wrapper LSP encoding";
     }

     identity lsp-encoding-lambda {
       base lsp-encoding-types;
       description
         "Lambda (photonic) LSP encoding";
     }

     identity lsp-encoding-fiber {
       base lsp-encoding-types;
       description
         "Fiber LSP encoding";
     }

     identity lsp-encoding-fiber-channel {
       base lsp-encoding-types;
       description
         "FiberChannel LSP encoding";
     }

     identity lsp-encoding-oduk {
       base lsp-encoding-types;
       description
         "G.709 ODUk (Digital Path)LSP encoding";
     }

     identity lsp-encoding-optical-channel {
       base lsp-encoding-types;
       description
         "Line (e.g., 8B/10B) LSP encoding";
     }

     identity lsp-encoding-line {
       base lsp-encoding-types;
       description
         "Line (e.g., 8B/10B) LSP encoding";
     }

     /* TE basic features */
     feature p2mp-te {
       description
         "Indicates support for P2MP-TE";
     }

     feature frr-te {
       description
         "Indicates support for TE FastReroute (FRR)";
     }

     feature extended-admin-groups {
       description
         "Indicates support for TE link extended admin
         groups.";
     }

     feature named-path-affinities {
       description
         "Indicates support for named path affinities";
     }

     feature named-extended-admin-groups {
       description
         "Indicates support for named extended admin groups";
     }

     feature named-srlg-groups {
       description
         "Indicates support for named SRLG groups";
     }

     feature named-path-constraints {
       description
         "Indicates support for named path constraints";
     }

     grouping explicit-route-subobject {
       description
         "The explicit route subobject grouping";
       choice type {
         description
           "The explicit route subobject type";
         case ipv4-address {
           description
             "IPv4 address explicit route subobject";
           leaf v4-address {
             type inet:ipv4-address;
             description
               "An IPv4 address.  This address is
               treated as a prefix based on the
               prefix length value below. Bits beyond
               the prefix are ignored on receipt and
               SHOULD be set to zero on transmission.";
           }
           leaf v4-prefix-length {
             type uint8;
             description
               "Length in bits of the IPv4 prefix";
           }
           leaf v4-loose {
             type boolean;
             description
               "Describes whether the object is loose
               if set, or otherwise strict";
           }
         }
         case ipv6-address {
           description
             "IPv6 address Explicit Route Object";
           leaf v6-address {
             type inet:ipv6-address;
             description
               "An IPv6 address.  This address is
               treated as a prefix based on the
               prefix length value below.  Bits
               beyond the prefix are ignored on
               receipt and SHOULD be set to zero
               on transmission.";
           }
           leaf v6-prefix-length {
             type uint8;
             description
               "Length in bits of the IPv4 prefix";
           }
           leaf v6-loose {
             type boolean;
             description
               "Describes whether the object is loose
               if set, or otherwise strict";
           }
         }
         case as-number {
           leaf as-number {
             type uint16;
             description "AS number";
           }
           description
             "Autonomous System explicit route subobject";
         }
         case unnumbered-link {
           leaf router-id {
             type inet:ip-address;
             description
               "A router-id address";
           }
           leaf interface-id {
             type uint32;
             description "The interface identifier";
           }
           description
             "Unnumbered link explicit route subobject";
           reference
             "RFC3477: Signalling Unnumbered Links in
             RSVP-TE";
         }
         case label {
           leaf value {
             type uint32;
             description "the label value";
           }
           description
             "The Label ERO subobject";
         }
         /* AS domain sequence..? */
       }
     }

     grouping record-route-subobject {
       description
         "The record route subobject grouping";
       choice type {
         description
           "The record route subobject type";
         case ipv4-address {
           leaf v4-address {
             type inet:ipv4-address;
             description
               "An IPv4 address.  This address is
               treated as a prefix based on the prefix
               length value below. Bits beyond the
               prefix are ignored on receipt and
               SHOULD be set to zero on transmission.";
           }
           leaf v4-prefix-length {
             type uint8;
             description
               "Length in bits of the IPv4 prefix";
           }
           leaf v4-flags {
             type uint8;
             description
               "IPv4 address sub-object flags";
             reference "RFC3209";
           }
         }
         case ipv6-address {
           leaf v6-address {
             type inet:ipv6-address;
             description
               "An IPv6 address.  This address is
               treated as a prefix based on the
               prefix length value below. Bits
               beyond the prefix are ignored on
               receipt and SHOULD be set to zero
               on transmission.";
           }
           leaf v6-prefix-length {
             type uint8;
             description
               "Length in bits of the IPv4 prefix";
           }
           leaf v6-flags {
             type uint8;
             description
               "IPv6 address sub-object flags";
             reference "RFC3209";
           }
         }
         case label {
           leaf value {
             type uint32;
             description "the label value";
           }
           leaf flags {
             type uint8;
             description
               "Label sub-object flags";
             reference "RFC3209";
           }
           description
             "The Label ERO subobject";
         }
       }
     }

     identity route-usage-type {
       description
         "Base identity for route usage";
     }

     identity route-include-ero {
       base route-usage-type;
       description
         "Include ERO from route";
     }

     identity route-exclude-ero {
       base route-usage-type;
       description
         "Exclude ERO from route";
     }

     identity route-exclude-srlg {
       base route-usage-type;
       description
         "Exclude SRLG from route";
     }

     identity path-metric-type {
       description
         "Base identity for path metric type";
     }

     identity path-metric-te {
       base path-metric-type;
       description
         "TE path metric";
     }

     identity path-metric-igp {
       base path-metric-type;
       description
         "IGP path metric";
     }

     identity path-tiebreaker-type {
       description
         "Base identity for path tie-breaker type";
     }

     identity path-tiebreaker-minfill {
       base path-tiebreaker-type;
       description
         "Min-Fill LSP path placement";
     }

     identity path-tiebreaker-maxfill {
       base path-tiebreaker-type;
       description
         "Max-Fill LSP path placement";
     }

     identity path-tiebreaker-randoom {
       base path-tiebreaker-type;
       description
         "Random LSP path placement";
     }

     identity bidir-provisioning-mode {
       description
         "Base identity for bidirectional provisioning
         mode.";
     }

     identity bidir-provisioning-single-sided {
       base bidir-provisioning-mode;
       description
         "Single-sided bidirectional provioning mode";
     }

     identity bidir-provisioning-double-sided {
       base bidir-provisioning-mode;
       description
         "Double-sided bidirectional provioning mode";
     }

     identity bidir-association-type {
       description
         "Base identity for bidirectional association type";
     }

     identity bidir-assoc-corouted {
       base bidir-association-type;
       description
         "Co-routed bidirectional association type";
     }

     identity bidir-assoc-non-corouted {
       base bidir-association-type;
       description
         "Non co-routed bidirectional association type";
     }

     identity resource-affinities-type {
       description
         "Base identity for resource affinities";
     }

     identity resource-aff-include-all {
       base resource-affinities-type;
       description
         "The set of attribute filters associated with a
         tunnel all of which must be present for a link
         to be acceptable";
     }

     identity resource-aff-include-any {
       base resource-affinities-type;
       description
         "The set of attribute filters associated with a
         tunnel any of which must be present for a link
         to be acceptable";
     }

     identity resource-aff-exclude-any {
       base resource-affinities-type;
       description
         "The set of attribute filters associated with a
         tunnel any of which renders a link unacceptable";
     }

     typedef admin-group {
       type binary {
          length 32;
       }
       description
         "Administrative group/Resource class/Color.";
     }

     typedef extended-admin-group {
       type binary;
       description
         "Extended administrative group/Resource class/Color.";
     }

     typedef admin-groups {
       type union {
         type admin-group;
         type extended-admin-group;
       }
       description "TE administrative group derived type";
     }

     typedef srlg {
       type uint32;
       description "SRLG type";
     }

     identity path-computation-srlg-type {
       description
         "Base identity for SRLG path computation";
     }

     identity srlg-ignore {
       base path-computation-srlg-type;
       description
         "Ignores SRLGs in path computation";
     }

     identity srlg-strict {
       base path-computation-srlg-type;
       description
         "Include strict SRLG check in path computation";
     }

     identity srlg-preferred {
       base path-computation-srlg-type;
       description
         "Include preferred SRLG check in path computation";
     }

     identity srlg-weighted {
       base path-computation-srlg-type;
       description
         "Include weighted SRLG check in path computation";
     }

     typedef te-metric {
       type uint32;
       description
         "TE link metric";
     }

     typedef topology-id {
       type string {
         pattern '/?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*';
       }
       description
         "An identifier for a topology.";
     }

     /**
      * TE tunnel generic groupings
      **/

     /* Tunnel path selection parameters */
     grouping tunnel-path-selection {
       description
         "Tunnel path selection properties grouping";
       container path-selection {
         description
           "Tunnel path selection properties container";
         leaf topology {
           type te-types:topology-id;
           description
             "The tunnel path is computed using the specific
             topology identified by this identifier";
         }
         leaf cost-limit {
           type uint32 {
             range "1..4294967295";
           }
           description
             "The tunnel path cost limit.";
         }
         leaf hop-limit {
           type uint8 {
             range "1..255";
           }
           description
             "The tunnel path hop limit.";
         }
         leaf metric-type {
           type string;
           description
             "The tunnel path metric type.";
         }
         leaf tiebreaker-type {
           type string;
           description
             "The tunnel path computation tie breakers.";
         }
         leaf ignore-overload {
           type boolean;
           description
             "The tunnel path can traverse overloaded node.";
         }
         uses tunnel-path-affinities;
         uses tunnel-path-srlgs;
       }
     }

     grouping tunnel-path-affinities {
       description
         "Path affinities grouping";
       container tunnel-path-affinities {
         if-feature named-path-affinities;
         description
           "Path affinities container";
         choice style {
           description
             "Path affinities representation style";
           case values {
             leaf value {
               type uint32 {
                 range "0..4294967295";
               }
               description
                 "Affinity value";
             }
             leaf mask {
               type uint32 {
                 range "0..4294967295";
               }
               description
                 "Affinity mask";
             }
           }
           case named {
             list constraints {
               key "usage";
               leaf usage {
                 type string;
                 description "Affinities usage";
               }
               container constraint {
                 description
                   "Container for named affinities";
                 list affinity-names {
                   key "name";
                   leaf name {
                     type string;
                     description
                       "Affinity name";
                   }
                   description
                     "List of named affinities";
                 }
               }
               description
                 "List of named affinity constraints";
             }
           }
         }
       }
     }

     grouping tunnel-path-srlgs {
       description
         "Path SRLG properties grouping";
       container tunnel-path-srlgs {
         description
           "Path SRLG properties container";
         choice style {
           description
             "Type of SRLG representation";
           case values {
             leaf usage {
               type string;
               description "SRLG usage";
             }
             leaf-list values {
               type te-types:srlg;
               description "SRLG value";
             }
           }
           case named {
             list constraints {
               key "usage";
               leaf usage {
                 type string;
                 description "SRLG usage";
               }
               container constraint {
                 description
                   "Container for named SRLG list";
                 list srlg-names {
                   key "name";
                   leaf name {
                     type string;
                     description
                       "The SRLG name";
                   }
                   description
                     "List named SRLGs";
                 }
               }
               description
                 "List of named SRLG constraints";
             }
           }
         }
       }
     }

     grouping tunnel-bidir-assoc-properties {
       description
         "TE tunnel associated bidirectional properties
         grouping";
       container bidirectional {
         description
           "TE tunnel associated bidirectional attributes.";
         container association {
           description
             "Tunnel bidirectional association properties";
           leaf id {
             type uint16;
             description
               "The TE tunnel association identifier.";
           }
           leaf source {
             type inet:ip-address;
             description
               "The TE tunnel association source.";
           }
           leaf global-source {
             type inet:ip-address;
             description
               "The TE tunnel association global
               source.";
           }
           leaf type {
             type string;
             description
               "The TE tunnel association type.";
           }
           leaf provisioing {
             type string;
             description
               "Describes the provisioning model of the
               associated bidirectional LSP";
             reference
               "draft-ietf-teas-mpls-tp-rsvpte-ext-
               associated-lsp, section-3.2";
           }
         }
       }
     }
     /*** End of TE tunnel groupings ***/

     /**
      * TE interface generic groupings
      **/
   }
