module ietf-te {

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

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

  /* Import TE generic types */
  import ietf-te-types {
    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
    "YANG data module for TE configuration,
    state, RPC and notifications.";

  revision "2016-07-05" {
    description "Latest update to TE generic YANG module.";
    reference "TBD";
  }

  typedef tunnel-ref {
    type leafref {
      path "/te:te/te:tunnels/te:tunnel/te:name";
    }
    description
      "This type is used by data models that need to reference
       configured TE tunnel.";
  }

  /**
   * TE tunnel generic groupings
   */

  grouping p2p-secondary-path-params {
    description
      "tunnel path properties.";
    container config {
      description
        "Configuration parameters relating to
        tunnel properties";
      uses path-properties_config;
      uses path-params_config;
    }
    container state {
      config false;
      description
        "State information associated with tunnel
        properties";
      uses path-properties_config;
      uses path-params_config;
      uses p2p-secondary-path-params_state;
    }
  }

  grouping p2p-primary-path-params {
    description
      "TE tunnel primary path properties grouping";
    container config {
      description
        "Configuration parameters relating to
        tunnel properties";
      uses path-properties_config;
      uses path-params_config;
    }
    container state {
      config false;
      description
        "State information associated with tunnel
        properties";
      uses path-params_config;
      uses p2p-primary-path-params_state;
    }
  }

  grouping p2p-primary-path-params_state {
    description "TE primary path state parameters";
    list lsp {
      key
        "source destination tunnel-id lsp-id "+
        "extended-tunnel-id type";
      description "List of LSPs associated with the tunnel.";

      leaf source {
        type leafref {
          path "../../../../../../lsps-state/lsp/source";
        }
        description
          "Tunnel sender address extracted from
          SENDER_TEMPLATE  object";
        reference "RFC3209";
      }
      leaf destination {
        type leafref {
          path "../../../../../../lsps-state/lsp/destination";
        }
        description
          "Tunnel endpoint address extracted from
          SESSION object";
        reference "RFC3209";
      }
      leaf tunnel-id {
        type leafref {
          path "../../../../../../lsps-state/lsp/tunnel-id";
        }
        description
          "Tunnel identifier used in the SESSION
          that remains constant over the life
          of the tunnel.";
        reference "RFC3209";
      }
      leaf lsp-id {
        type leafref {
          path "../../../../../../lsps-state/lsp/lsp-id";
        }
        description
          "Identifier used in the SENDER_TEMPLATE
          and the FILTER_SPEC that can be changed
          to allow a sender to share resources with
          itself.";
        reference "RFC3209";
      }
      leaf extended-tunnel-id {
        type leafref {
          path "../../../../../../lsps-state/lsp/extended-tunnel-id";
        }
        description
          "Extended Tunnel ID of the LSP.";
        reference "RFC3209";
      }
      leaf type {
        type leafref {
          path "../../../../../../lsps-state/lsp/type";
        }
        description "LSP type P2P or P2MP";
      }
    }
  }

  grouping p2p-secondary-path-params_state {
    description "TE secondary path state parameters";
    list lsp {
      key "source";
      description "List of LSPs associated with the tunnel.";

      leaf source {
        type leafref {
          path "../../../../../../../lsps-state/lsp/source";
        }
        description
          "Tunnel sender address extracted from
          SENDER_TEMPLATE  object";
        reference "RFC3209";
      }
      leaf destination {
        type leafref {
          path "../../../../../../../lsps-state/lsp/destination";
        }
        description
          "Tunnel endpoint address extracted from
          SESSION object";
        reference "RFC3209";
      }
      leaf tunnel-id {
        type leafref {
          path "../../../../../../../lsps-state/lsp/tunnel-id";
        }
        description
          "Tunnel identifier used in the SESSION
          that remains constant over the life
          of the tunnel.";
        reference "RFC3209";
      }
      leaf lsp-id {
        type leafref {
          path "../../../../../../../lsps-state/lsp/lsp-id";
        }
        description
          "Identifier used in the SENDER_TEMPLATE
          and the FILTER_SPEC that can be changed
          to allow a sender to share resources with
          itself.";
        reference "RFC3209";
      }
      leaf extended-tunnel-id {
        type leafref {
          path "../../../../../../../lsps-state/lsp/extended-tunnel-id";
        }
        description
          "Extended Tunnel ID of the LSP.";
        reference "RFC3209";
      }
      leaf type {
        type leafref {
          path "../../../../../../../lsps-state/lsp/type";
        }
        description "LSP type P2P or P2MP";
      }
    }
  }

  grouping path-params_config {
    description
      "TE tunnel path parameters configuration grouping";
    leaf path-named-constraint {
      if-feature te-types:named-path-constraints;
      type string;
      description
        "Reference to a globally defined named path
        constraint set";
    }
    uses te-types:tunnel-path-selection;
    choice type {
      description
        "Describes the path type";
      case dynamic {
        leaf dynamic {
          type empty;
          description
            "A CSPF dynamically computed path";
        }
      }
      case explicit {
        leaf explicit-path-name {
          type string;
          description
            "The explicit-path name";
        }

        list explicit-route-objects {
          key "index";
          description
            "List of explicit route objects";
          leaf index {
            type uint8 {
              range "0..255";
            }
            description
              "Index of this explicit route object";
          }
          leaf explicit-route-usage {
            type identityref {
              base te-types:route-usage-type;
            }
            description "An explicit-route hop action.";
          }
          uses te-types:explicit-route-subobject;
        }
      }
    }
    leaf no-cspf {
      type empty;
      description
        "Indicates no CSPF is to be attempted on this
        path.";
    }
    leaf lockdown {
      type empty;
      description
        "Indicates no reoptimization to be attempted for
        this path.";
    }
  }

  /* TE tunnel configuration data */
  grouping tunnel-params_config {
    description
      "Configuration parameters relating to TE tunnel";
    leaf name {
      type string;
      description "TE tunnel name.";
    }
    leaf type {
      type identityref {
        base te-types:tunnel-type;
      }
      description "TE tunnel type.";
    }
    leaf identifier {
      type uint16;
      description
        "TE tunnel Identifier.";
    }
    leaf description {
      type string;
      description
        "Textual description for this TE tunnel";
    }
    leaf lsp-priority-setup {
      type uint8 {
        range "0..7";
      }
      description
        "TE LSP setup priority";
    }
    leaf lsp-priority-hold {
      type uint8 {
        range "0..7";
      }
      description
        "TE LSP hold priority";
    }
    leaf lsp-protection-type {
      type identityref {
        base te-types:lsp-prot-type;
      }
      description "LSP protection type.";
    }
    leaf admin-status {
      type identityref {
        base te-types:state-type;
      }
      default te-types:state-up;
      description "TE tunnel administrative state.";
    }
    leaf source {
      type inet:ip-address;
      description
        "TE tunnel source address.";
    }
    leaf destination {
      /* Add when check */
      type inet:ip-address;
      description
        "P2P tunnel destination address";
    }
    leaf src-tp-id {
      type binary;
      description
        "TE tunnel source termination point identifier.";
    } 
    leaf dst-tp-id {
      /* Add when check */
      type binary;
      description
        "TE tunnel destination termination point identifier.";
    }
    container hierarchical-link-id {
        description
          "Identifies a hierarchical link (in server layer)
           that this tunnel is associated with.";
        leaf local-te-node-id {
          type te-types:te-node-id;
          description
            "Local TE node identifier";
        }
        leaf local-te-link-tp-id {
          type te-types:te-tp-id;
          description
            "Local TE link termination point identifier";
        }
        leaf remote-te-node-id {
          type te-types:te-node-id;
          description
            "Remote TE node identifier";
        }
        leaf te-topology-id {
          type te-types:te-topology-id;
          description
            "It is presumed that a datastore will contain many
             topologies. To distinguish between topologies it is
             vital to have UNIQUE topology identifiers.";
        }
    }
    uses te-types:tunnel-bidir-assoc-properties;
  }

  grouping tunnel-params_state {
    description
      "State parameters relating to TE tunnel";
    leaf oper-status {
      type identityref {
        base te-types:state-type;
      }
      description "TE tunnel operational state.";
    }
  }

  grouping path-properties_config {
    description "TE path properties grouping";
    leaf name {
      type string;
      description "TE path name";
    }
    leaf preference {
      type uint8 {
        range "1..255";
      }
      description
        "Specifies a preference for this path. The lower the
        number higher the preference";
    }
  }

  /* TE tunnel configuration/state grouping */
  grouping tunnel-properties {
    description
      "Top level grouping for tunnel properties.";
    container config {
      description
        "Configuration parameters relating to
         tunnel properties";
      uses tunnel-params_config;
    }
    container state {
      config false;
      description
        "State information associated with tunnel
         properties";
      uses tunnel-params_config;
      uses tunnel-params_state;
    }
    list primary-paths {
      key "name";
      description
        "List of primary paths for this tunnel.";
      leaf name {
        type leafref {
          path "../config/name";
        }
        description "TE path name";
      }
      leaf preference {
        type leafref {
          path "../config/preference";
        }
        description
          "Specifies a preference for this path. The lower the
           number higher the preference";
      }
      uses p2p-primary-path-params;
      list secondary-paths {
        key "name";
        description
          "List of secondary paths for this tunnel.";
        leaf name {
          type leafref {
            path "../config/name";
          }
          description "TE path name";
        }
        leaf preference {
          type leafref {
            path "../config/preference";
          }
          description
            "Specifies a preference for this path. The lower the
            number higher the preference";
        }
        uses p2p-secondary-path-params;
      }
    }
  }
  /*** End of TE tunnel groupings ***/

  /**
   * LSP related generic groupings
   */
  grouping lsp-record-route-information_state {
    description "recorded route information grouping";
    container lsp-record-route {
      description "RSVP recorded route object information";
      list record-route-subobjects {
        when "../origin-type != 'ingress'" {
          description "Applicable on non-ingress LSPs only";
        }
        key "subobject-index";
        description "";
        leaf subobject-index {
          type uint32;
          description "RRO subobject index";
        }
        uses te-types:record-route-subobject;
      }
    }
  }

  grouping lsp-properties_state {
    description
      "State parameters relating to LSP";
    leaf oper-status {
      type identityref {
        base te-types:state-type;
      }
      description "LSP operational state.";
    }

    leaf origin-type {
      type enumeration {
        enum ingress {
          description
            "Origin ingress";
        }
        enum egress {
          description
            "Origin egress";
        }
        enum transit {
          description
            "transit";
        }
      }
      description
        "Origin type of LSP relative to the location 
        of the local switch in the path.";
    }

    leaf lsp-resource-status {
      type enumeration {
        enum primary {
          description
            "A primary LSP is a fully established LSP for
             which the resource allocation has been committed
             at the data plane";
        }
        enum secondary {
          description
            "A secondary LSP is an LSP that has been provisioned
             in the control plane only; e.g. resource allocation
             has not been committed at the data plane";
        }
      }
      description "LSP resource allocation type";
      reference "rfc4872, section 4.2.1";
    }

    leaf lsp-protection-role {
      type enumeration {
        enum working {
          description
            "A working LSP must be a primary LSP whilst a protecting
             LSP can be either a primary or a secondary LSP. Also,
             known as protected LSPs when working LSPs are associated
             with protecting LSPs.";
        }
        enum protecting {
          description
            "A secondary LSP is an LSP that has been provisioned
             in the control plane only; e.g. resource allocation
             has not been committed at the data plane";
        }
      }
      description "LSP role type";
      reference "rfc4872, section 4.2.1";
    }

    leaf lsp-operational-status {
      type empty;
      description
        "This bit is set when a protecting LSP is carrying the normal
         traffic after protection switching";
    }
  }
  /*** End of TE LSP groupings ***/

  /**
   * TE global generic groupings
   */

  /* Global named admin-groups configuration data */
  grouping named-admin-groups_config {
    description
      "Global named administrative groups configuration
      grouping";
    list named-admin-groups {
      if-feature te-types:extended-admin-groups;
      if-feature te-types:named-extended-admin-groups;
      key "name";
      description
        "List of named TE admin-groups";
      leaf name {
        type string;
        description
          "A string name that uniquely identifies a TE
          interface named admin-group";
      }
      leaf bit-position {
        type uint32;
        description
          "Bit position representing the administrative group";
      }
    }
  }

  /* Global named admin-srlgs configuration data */
  grouping named-srlgs_config {
    description
      "Global named SRLGs configuration
      grouping";
    list named-srlgs {
      if-feature te-types:named-srlg-groups;
      key "name";
      description
        "A list of named SRLG groups";
      leaf name {
        type string;
        description
          "A string name that uniquely identifies a TE
          interface named srlg";
      }
      leaf group {
        type te-types:srlg;
        description "An SRLG value";
      }
    }
  }

  /* Global named explicit-paths configuration data */
  grouping named-explicit-paths_config {
    description
      "Global explicit path configuration
      grouping";
    list named-explicit-paths {
      key "name";
      description
        "A list of explicit paths";
      leaf name {
        type string;
        description
          "A string name that uniquely identifies an
          explicit path";
      }
      list explicit-route-objects {
        key "index";
        description
          "List of explicit route objects";
        leaf index {
          type uint8 {
            range "0..255";
          }
          description
            "Index of this explicit route object";
        }
        leaf explicit-route-usage {
          type identityref {
            base te-types:route-usage-type;
          }
          description "An explicit-route hop action.";
        }
        uses te-types:explicit-route-subobject;
      }
    }
  }

  /* Global named paths constraints configuration data */
  grouping named-path-constraints_config {
    description
      "Global named path constraints configuration
      grouping";
    list named-constraints {
      if-feature te-types:named-path-constraints;
      key "name";
      description
        "A list of named path constraints";
      leaf name {
        type string;
        description
          "A string name that uniquely identifies a
          path constraint set";
      }
      uses te-types:tunnel-path-selection;
    }
  }

  /* TE globals container data */
  grouping globals-grouping {
    description
      "Globals TE system-wide configuration data grouping";
    container globals {
      description
        "Globals TE system-wide configuration data container";
      container config {
        description
          "Configuration parameters for system-wide
           parameters";
        uses named-admin-groups_config;
        uses named-srlgs_config;
        uses named-explicit-paths_config;
        uses named-path-constraints_config;
      }
      container state {
        config false;
        description
          "State for system-wide parameters";
        uses named-admin-groups_config;
        uses named-srlgs_config;
        uses named-explicit-paths_config;
        uses named-path-constraints_config;
      }
    }
  }

  /* TE tunnels container data */
  grouping tunnels-grouping {
    description
      "Tunnels TE configuration data grouping";
    container tunnels {
      description
        "Tunnels TE configuration data container";

      list tunnel {
        key "name type";
        unique "identifier";
        description "TE tunnel.";
        leaf name {
          type leafref {
            path "../config/name";
          }
          description "TE tunnel name.";
        }
        leaf type {
          type leafref {
            path "../config/type";
          }
          description "TE tunnel type.";
        }
        leaf identifier {
          type leafref {
            path "../config/identifier";
          }
          description
            "TE tunnel Identifier.";
        }
        uses tunnel-properties;
      }
    }
  }

  /* TE LSPs ephemeral state container data */
  grouping lsps-state-grouping {
    description
      "LSPs state operational data grouping";
    container lsps-state {
      config "false";
      description "LSPs operational state data.";

      list lsp {
        key
          "source destination tunnel-id lsp-id "+
          "extended-tunnel-id type";
        description
          "List of LSPs associated with the tunnel.";
        leaf source {
          type inet:ip-address;
          description
            "Tunnel sender address extracted from
            SENDER_TEMPLATE  object";
          reference "RFC3209";
        }
        leaf destination {
          type inet:ip-address;
          description
            "Tunnel endpoint address extracted from
            SESSION object";
          reference "RFC3209";
        }
        leaf tunnel-id {
          type uint16;
          description
            "Tunnel identifier used in the SESSION
            that remains constant over the life
            of the tunnel.";
          reference "RFC3209";
        }
        leaf lsp-id {
          type uint16;
          description
            "Identifier used in the SENDER_TEMPLATE
            and the FILTER_SPEC that can be changed
            to allow a sender to share resources with
            itself.";
          reference "RFC3209";
        }
        leaf extended-tunnel-id {
          type inet:ip-address;
           description
            "Extended Tunnel ID of the LSP.";
          reference "RFC3209";
        }
        leaf type {
          type identityref {
            base te-types:tunnel-type;
          }
          description "The LSP type P2P or P2MP";
        }
        uses lsp-properties_state;
        uses lsp-record-route-information_state;
      }
    }
  }
  /*** End of TE global groupings ***/

  /**
   * TE configurations container
   */
  container te {
    presence "Enable TE feature.";
    description
       "TE global container.";

    /* TE Global Configuration Data */
    uses globals-grouping;

    /* TE Tunnel Configuration Data */
    uses tunnels-grouping;

    /* TE LSPs State Data */
    uses lsps-state-grouping;
  }

  /* TE Global RPCs/execution Data */
  rpc globals-rpc {
    description
      "Execution data for TE global.";
  }

  /* TE interfaces RPCs/execution Data */
  rpc interfaces-rpc {
    description
      "Execution data for TE interfaces.";
  }

  /* TE Tunnel RPCs/execution Data */
  rpc tunnels-rpc {
    description
      "TE tunnels RPC nodes";
  }

  /* TE Global Notification Data */
  notification globals-notif {
    description
      "Notification messages for Global TE.";
  }

  /* TE Tunnel Notification Data */
  notification tunnels-notif {
    description
      "Notification messages for TE tunnels.";
  }
}
