   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
      **/
   }
