netconfcentral logo

ietf-te@2017-10-29



  module ietf-te {

    yang-version 1.1;

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

    prefix te;

    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@jabil.com>

     Editor:   Igor Bryskin
               <mailto:Igor.Bryskin@huawei.com>";

    description
      "YANG data module for TE configuration,
    state, RPC and notifications.";

    revision "2017-10-29" {
      description
        "Latest update to TE generic YANG module.";
      reference
        "TBA";

    }


    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.";
    }

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

    grouping path-route-objects {
      description
        "List of EROs to be included or excluded when performing
       the path computation.";
      container explicit-route-objects {
        description
          "Container for the exclude route object list";
        list route-object-exclude-always {
          key "index";
          description
            "List of explicit route objects to always exclude
           from path computation";
          uses te-types:explicit-route-hop_config;
        }  // list route-object-exclude-always

        list route-object-include-exclude {
          key "index";
          description
            "List of explicit route objects to include or
           exclude in path computation";
          leaf explicit-route-usage {
            type identityref {
              base te-types:route-usage-type;
            }
            description
              "Explicit-route usage.";
          }

          uses te-types:explicit-route-hop_config;
        }  // list route-object-include-exclude
      }  // container explicit-route-objects
    }  // grouping path-route-objects

    grouping path-affinities-contents_config {
      description
        "Path affinities constraints grouping";
      leaf usage {
        type identityref {
          base te-types:resource-affinities-type;
        }
        description "Affinities usage";
      }

      choice style {
        description
          "Path affinities representation style";
        leaf value {
          type te-types:admin-groups;
          description
            "Bitmap indicating what bits are of significance";
        }
        list affinity-names {
          key "name";
          description
            "List of named affinities";
          leaf name {
            type string;
            description "Affinity name";
          }
        }  // list affinity-names
      }  // choice style
    }  // grouping path-affinities-contents_config

    grouping path-affinities_state {
      description "Path affinities grouping";
      container path-affinities {
        description
          "Path affinities container";
        list constraints {
          key "usage";
          description
            "List of named affinity constraints";
          leaf usage {
            type leafref {
              path "../state/usage";
            }
            description "Affinities usage";
          }

          container state {
            config false;
            description
              "Configuration applied parameters and state";
            uses path-affinities-contents_config;
          }  // container state
        }  // list constraints
      }  // container path-affinities
    }  // grouping path-affinities_state

    grouping path-srlgs_state {
      description
        "Path SRLG properties grouping";
      container path-srlgs {
        description
          "Path SRLG properties container";
        choice style {
          description
            "Type of SRLG representation";
          container state {
            config false;
            description
              "Configuration applied parameters and state";
            uses path-affinities-values_config;
          }  // container state
          container constraints {
            description
              "SRLG named constraints";
            list constraint {
              key "usage";
              description
                "List of named SRLG constraints";
              leaf usage {
                type leafref {
                  path "../state/usage";
                }
                description
                  "Affinity resource usage";
              }

              container state {
                config false;
                description
                  "Configuration applied parameters and state";
                leaf usage {
                  type identityref {
                    base te-types:route-exclude-srlg;
                  }
                  description "SRLG usage";
                }
              }  // container state

              container srlg-names {
                description
                  "Container for named SRLG list";
                list srlg-name {
                  key "name";
                  description
                    "List named SRLGs";
                  leaf name {
                    type leafref {
                      path "../state/name";
                    }
                    description
                      "The SRLG name";
                  }

                  container state {
                    config false;
                    description
                      "Configuration applied parameters and
                     state";
                    leaf name {
                      type string;
                      description
                        "The SRLG name";
                    }
                  }  // container state
                }  // list srlg-name
              }  // container srlg-names
            }  // list constraint
          }  // container constraints
        }  // choice style
      }  // container path-srlgs
    }  // grouping path-srlgs_state

    grouping path-affinities {
      description "Path affinities grouping";
      container path-affinities {
        description
          "Path affinities container";
        list constraints {
          key "usage";
          description
            "List of named affinity constraints";
          uses path-affinities-contents_config;
        }  // list constraints
      }  // container path-affinities
    }  // grouping path-affinities

    grouping path-affinities-values_config {
      description
        "Path affinities values configuration grouping";
      leaf usage {
        type identityref {
          base te-types:route-exclude-srlg;
        }
        description "SRLG usage";
      }

      leaf-list values {
        type te-types:srlg;
        description "SRLG value";
      }
    }  // grouping path-affinities-values_config

    grouping path-srlgs {
      description
        "Path SRLG properties grouping";
      container path-srlgs {
        description
          "Path SRLG properties container";
        choice style {
          description
            "Type of SRLG representation";
          case values {
            uses path-affinities-values_config;
          }  // case values
          list constraints {
            key "usage";
            description
              "List of named SRLG constraints";
            leaf usage {
              type identityref {
                base te-types:route-exclude-srlg;
              }
              description "SRLG usage";
            }

            container constraint {
              description
                "Container for named SRLG list";
              list srlg-names {
                key "name";
                description
                  "List named SRLGs";
                leaf name {
                  type string;
                  description
                    "The SRLG name";
                }
              }  // list srlg-names
            }  // container constraint
          }  // list constraints
        }  // choice style
      }  // container path-srlgs
    }  // grouping path-srlgs

    grouping bidirectional-association_config {
      description
        "TE tunnel associated bidirectional leaves
      grouping";
      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 identityref {
          base te-types:bidir-association-type;
        }
        default
          'bidir-assoc-non-corouted';
        description
          "The TE tunnel association type.";
      }

      leaf provisioning {
        type identityref {
          base te-types:bidir-provisioning-mode;
        }
        description
          "Describes the provisioning model of the
        associated bidirectional LSP";
        reference
          "draft-ietf-teas-mpls-tp-rsvpte-ext-
          associated-lsp, section-3.2";

      }
    }  // grouping bidirectional-association_config

    grouping 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";
          uses bidirectional-association_config;
        }  // container association
      }  // container bidirectional
    }  // grouping bidir-assoc-properties

    grouping p2p-reverse-primary-path-properties {
      description "tunnel path properties.";
      container p2p-reverse-primary-path {
        description
          "Tunnel reverse primary path properties";
        uses p2p-path-reverse-properties_config;

        container state {
          config false;
          description
            "Configuration applied parameters and state";
          uses p2p-path-properties_state;
        }  // container state
      }  // container p2p-reverse-primary-path

      container p2p-reverse-secondary-path {
        description
          "Tunnel reverse secondary path properties";
        uses p2p-reverse-path-candidate-secondary-path-config;
      }  // container p2p-reverse-secondary-path
    }  // grouping p2p-reverse-primary-path-properties

    grouping p2p-secondary-path-properties {
      description "tunnel path properties.";
      uses p2p-path-properties_config;

      uses protection-restoration-params_config;

      uses protection-external-commands;

      container state {
        config false;
        description
          "Configuration applied parameters and state";
        uses p2p-path-properties_state;
      }  // container state
    }  // grouping p2p-secondary-path-properties

    grouping p2p-primary-path-properties {
      description
        "TE tunnel primary path properties grouping";
      uses hierarchical-link;

      uses p2p-path-properties_config;

      container state {
        config false;
        description
          "Configuration applied parameters and state";
        uses p2p-path-properties_state;
      }  // container state
    }  // grouping p2p-primary-path-properties

    grouping computed-path-properties_state {
      description
        "Computed path properties grouping";
      leaf metric-type {
        type identityref {
          base te-types:path-metric-type;
        }
        description "TE path metric type";
      }

      leaf accumulative-value {
        type uint64;
        description
          "TE path metric accumulative value";
      }
    }  // grouping computed-path-properties_state

    grouping computed-path-properties {
      description
        "TE computed path properties grouping";
      container computed-path-properties {
        description
          "The TE path computed properties";
        list path-metric {
          key "metric-type";
          description "TE path metric type";
          leaf metric-type {
            type leafref {
              path "../state/metric-type";
            }
            description
              "TE path metric type";
          }

          container state {
            config false;
            description
              "Configuration applied parameters and state";
            uses computed-path-properties_state;
          }  // container state
        }  // list path-metric

        uses path-affinities_state;

        uses path-srlgs_state;

        container path-computed-route-objects {
          description
            "Container for the list of computed route objects
           as returned by the computation engine";
          list path-computed-route-object {
            key "index";
            description
              "List of computed route objects returned by the
             computation engine";
            leaf index {
              type leafref {
                path "../state/index";
              }
              description
                "Index of computed route object";
            }

            container state {
              config false;
              description
                "Configuration applied parameters and state";
              uses te-types:explicit-route-hop_config;
            }  // container state
          }  // list path-computed-route-object
        }  // container path-computed-route-objects

        uses shared-resources-tunnels;
      }  // container computed-path-properties
    }  // grouping computed-path-properties

    grouping p2p-path-properties_state {
      description
        "TE per path state parameters";
      uses computed-path-properties;

      container lsps {
        description "TE LSPs container";
        list lsp {
          key "source destination tunnel-id lsp-id extended-tunnel-id";
          description
            "List of LSPs associated with the tunnel.";
          uses lsp-properties_state;

          uses shared-resources-tunnels;

          uses lsp-record-route-information_state;
        }  // list lsp
      }  // container lsps
    }  // grouping p2p-path-properties_state

    grouping p2p-path-properties-common_config {
      description
        "TE tunnel common path properties configuration 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";
      }

      leaf path-setup-protocol {
        type identityref {
          base te-types:path-signaling-type;
        }
        description
          "Signaling protocol used to set up this tunnel";
      }

      leaf path-computation-method {
        type identityref {
          base te-types:path-computation-method;
        }
        default
          'path-locally-computed';
        description
          "The method used for computing the path, either
        locally computed, queried from a server or not
        computed at all (explicitly configured).";
      }

      leaf path-computation-server {
        when
          "../path-computation-method = "
            + "'te-types:path-externally-queried'" {
          description
            "The path-computation server when the path is
           externally queried";
        }
        type inet:ip-address;
        description
          "Address of the external path computation
         server";
      }

      leaf compute-only {
        type empty;
        description
          "When set, the path is computed and updated whenever
         the topology is updated. No resources are committed
         or reserved in the network.";
      }

      leaf use-path-computation {
        when
          "../path-computation-method ="
            + " 'te-types:path-locally-computed'";
        type boolean;
        description
          "A CSPF dynamically computed path";
      }

      leaf lockdown {
        type empty;
        description
          "Indicates no reoptimization to be attempted for
         this path.";
      }

      leaf path-scope {
        type identityref {
          base te-types:path-scope-type;
        }
        description "Path scope";
      }
    }  // grouping p2p-path-properties-common_config

    grouping p2p-path-reverse-properties_config {
      description
        "TE tunnel reverse path properties configuration
       grouping";
      uses p2p-path-properties-common_config;

      leaf named-explicit-path {
        when
          "../path-computation-method ="
            + " 'te-types:path-explicitly-defined'";
        type leafref {
          path
            "../../../../../../globals/named-explicit-paths/"
              + "named-explicit-path/name";
        }
        description "The explicit-path name";
      }

      leaf named-path-constraint {
        if-feature te-types:named-path-constraints;
        type leafref {
          path
            "../../../../../../globals/"
              + "named-path-constraints/named-path-constraint/"
              + "name";
        }
        description
          "Reference to a globally defined named path
        constraint set";
      }
    }  // grouping p2p-path-reverse-properties_config

    grouping p2p-path-properties_config {
      description
        "TE tunnel path properties configuration grouping";
      uses p2p-path-properties-common_config;

      leaf named-explicit-path {
        when
          "../path-computation-method ="
            + " 'te-types:path-explicitly-defined'";
        type leafref {
          path
            "../../../../../globals/named-explicit-paths/"
              + "named-explicit-path/name";
        }
        description "The explicit-path name";
      }

      leaf named-path-constraint {
        if-feature te-types:named-path-constraints;
        type leafref {
          path
            "../../../../../globals/"
              + "named-path-constraints/named-path-constraint/"
              + "name";
        }
        description
          "Reference to a globally defined named path
        constraint set";
      }
    }  // grouping p2p-path-properties_config

    grouping tunnel-p2mp-params_config {
      description
        "Configuration parameters relating to TE tunnel";
      leaf name {
        type string;
        description "TE tunnel name.";
      }

      leaf identifier {
        type uint16;
        description "TE tunnel Identifier.";
      }

      leaf description {
        type string;
        description
          "Textual description for this TE tunnel";
      }
    }  // grouping tunnel-p2mp-params_config

    grouping hierarchical-link_config {
      description
        "Hierarchical link configuration grouping";
      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.";
      }
    }  // grouping hierarchical-link_config

    grouping hierarchical-link {
      description
        "Hierarchical link grouping";
      container hierarchical-link {
        description
          "Identifies a hierarchical link (in client layer)
         that this tunnel is associated with.";
        uses hierarchical-link_config;
      }  // container hierarchical-link
    }  // grouping hierarchical-link

    grouping protection-restoration-params_config {
      description
        "Protection and restoration parameters";
      container protection {
        description "Protection parameters";
        leaf enable {
          type boolean;
          default 'false';
          description
            "A flag to specify if LSP protection is enabled";
          reference
            "rfc4427";

        }

        leaf protection-type {
          type identityref {
            base te-types:lsp-protection-type;
          }
          description "LSP protection type.";
        }

        leaf protection-reversion-disable {
          type boolean;
          description
            "Disable protection reversion to working path";
        }

        leaf hold-off-time {
          type uint32;
          units "milli-seconds";
          default '0';
          description
            "The time between the declaration of an SF or SD condition
           and the initialization of the protection switching
           algorithm.";
        }

        leaf wait-to-revert {
          type uint16;
          units "seconds";
          description
            "Time to wait before attempting LSP reversion";
        }

        leaf lockout-of-normal {
          type boolean;
          description
            "
            When set to 'True', it represents a lockout of normal
            traffic external command. When set to 'False', it
            represents a clear lockout of normal traffic external
            command. The lockout of normal traffic command applies
            to this Tunnel.
          ";
          reference
            "ITU-T G.808, RFC 4427";

        }

        leaf freeze {
          type boolean;
          description
            "
            When set to 'True', it represents a freeze external
            command. When set to 'False', it represents a clear
            freeze external command. The freeze command command
            applies to all the Tunnels which are sharing the
            protection resources with this Tunnel.
          ";
          reference
            "ITU-T G.808, RFC 4427";

        }
      }  // container protection

      container restoration {
        description "Restoration parameters";
        leaf enable {
          type boolean;
          default 'false';
          description
            "A flag to specify if LSP restoration is enabled";
          reference
            "rfc4427";

        }

        leaf restoration-type {
          type identityref {
            base te-types:lsp-restoration-type;
          }
          description
            "LSP restoration type.";
        }

        leaf restoration-scheme {
          type identityref {
            base te-types:restoration-scheme-type;
          }
          description
            "LSP restoration scheme.";
        }

        leaf restoration-reversion-disable {
          type boolean;
          description
            "Disable restoration reversion to working path";
        }

        leaf hold-off-time {
          type uint32;
          units "milli-seconds";
          description
            "The time between the declaration of an SF or SD condition
           and the initialization of the protection switching
           algorithm.";
        }

        leaf wait-to-restore {
          type uint16;
          units "seconds";
          description
            "Time to wait before attempting LSP restoration";
        }

        leaf wait-to-revert {
          type uint16;
          units "seconds";
          description
            "Time to wait before attempting LSP reversion";
        }
      }  // container restoration
    }  // grouping protection-restoration-params_config

    grouping protection-external-commands {
      description
        "Path protection external commands grouping";
      container protection-external-commands {
        description
          "Path protection external commands grouping";
        leaf lockout-of-protection {
          type boolean;
          description
            "A LoP command is applied locally.";
          reference
            "ITU-T G.808; RFC 4427.";

        }

        container manual-switch {
          description
            "Manual switch (MS) command properties";
          leaf manual-switch {
            type boolean;
            description
              "A MS command is applied locally.";
            reference
              "ITU-T G.808; RFC 4427.";

          }

          leaf manual-swith-tunnel {
            type tunnel-ref;
            description
              "The tunnel which this MS command applies.
             It can be either a normal traffic tunnel
             or an extra-traffic tunnel. If it is not
             specified the MS command applies to the
             Null signal (i.e., manual switch to null).";
            reference
              "ITU-T G.808; RFC 4427.";

          }
        }  // container manual-switch

        container forced-switch {
          description
            "The forced switch (FS) command properties";
          leaf forced-switch {
            type boolean;
            description
              "A FS command is applied locally.";
            reference
              "ITU-T G.808; RFC 4427.";

          }

          leaf forced-swith-tunnel {
            type tunnel-ref;
            description
              "The tunnel which this FS command applies.
             It can be either a normal traffic tunnel
             or an extra-traffic tunnel. If it is not
             specified the FS command applies to the
             Null signal (i.e., forced switch to null).
            ";
            reference
              "ITU-T G.808; RFC 4427.";

          }
        }  // container forced-switch
      }  // container protection-external-commands
    }  // grouping protection-external-commands

    grouping tunnel-p2p-depency-tunnels_config {
      description
        "Groupong for tunnel dependency list of tunnels";
      container dependency-tunnels {
        description
          "Dependency tunnels list";
        list dependency-tunnel {
          key "name";
          description
            "Dependency tunnel entry";
          leaf name {
            type leafref {
              path
                "../../../../../tunnels/tunnel/name";
            }
            description
              "Dependency tunnel name";
          }

          leaf encoding {
            type identityref {
              base te-types:lsp-encoding-types;
            }
            description "LSP encoding type";
          }

          leaf switching-type {
            type identityref {
              base te-types:switching-capabilities;
            }
            description "LSP switching type";
            reference
              "RFC3945";

          }
        }  // list dependency-tunnel
      }  // container dependency-tunnels
    }  // grouping tunnel-p2p-depency-tunnels_config

    grouping tunnel-p2p-params_config {
      description
        "Configuration parameters relating to TE tunnel";
      leaf name {
        type string;
        description "TE tunnel name.";
      }

      leaf identifier {
        type uint16;
        description "TE tunnel Identifier.";
      }

      leaf description {
        type string;
        description
          "Textual description for this TE tunnel";
      }

      leaf encoding {
        type identityref {
          base te-types:lsp-encoding-types;
        }
        description "LSP encoding type";
      }

      leaf switching-type {
        type identityref {
          base te-types:switching-capabilities;
        }
        description "LSP switching type";
        reference
          "RFC3945";

      }

      leaf provisioning-state {
        type identityref {
          base te-types:tunnel-state-type;
        }
        default 'tunnel-state-up';
        description
          "TE tunnel administrative state.";
      }

      leaf preference {
        type uint8 {
          range "1..255";
        }
        description
          "Specifies a preference for this tunnel.
        A lower number signifies a better preference";
      }

      leaf reoptimize-timer {
        type uint16;
        units "seconds";
        description
          "frequency of reoptimization of
        a traffic engineered LSP";
      }

      leaf source {
        type inet:ip-address;
        description
          "TE tunnel source address.";
      }

      leaf destination {
        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 {
        type binary;
        description
          "TE tunnel destination termination point identifier.";
      }

      leaf ignore-overload {
        type boolean;
        description
          "The tunnel path can traverse overloaded node.";
      }

      uses protection-restoration-params_config;

      uses te-types:common-constraints_config;

      uses tunnel-p2p-depency-tunnels_config;
    }  // grouping tunnel-p2p-params_config

    grouping tunnel-p2p-params_state {
      description
        "State parameters relating to TE tunnel";
      leaf operational-state {
        type identityref {
          base te-types:tunnel-state-type;
        }
        default 'tunnel-state-up';
        description
          "TE tunnel administrative state.";
      }
    }  // grouping tunnel-p2p-params_state

    grouping access-segment-info {
      description
        "info related to a segment";
      container forward {
        description
          "for the forward direction of this tunnel";
        uses te-types:label-set-info;
      }  // container forward

      container reverse {
        description
          "for the reverse direction of this tunnel";
        uses te-types:label-set-info;
      }  // container reverse
    }  // grouping access-segment-info

    grouping path-access-segment-info {
      description
        "If an end-to-end tunnel crosses multiple domains using
       the same technology, some additional constraints have to be
       taken in consideration in each domain";
      container path-in-segment {
        presence
          "The end-to-end tunnel starts in a previous domain;
         this tunnel is a segment in the current domain.";
        description
          "This tunnel is a segment that needs to be coordinated
         with previous segment stitched on head-end side.";
        uses access-segment-info;
      }  // container path-in-segment

      container path-out-segment {
        presence
          "The end-to-end tunnel is not terminated in this domain;
         this tunnel is a segment in the current domain.";
        description
          "This tunnel is a segment that needs to be coordinated
         with previous segment stitched on head-end side.";
        uses access-segment-info;
      }  // container path-out-segment
    }  // grouping path-access-segment-info

    grouping tunnel-p2mp-properties {
      description
        "Top level grouping for P2MP tunnel properties.";
      uses tunnel-p2mp-params_config;

      container state {
        config false;
        description
          "Configuration applied parameters and state";
        leaf operational-state {
          type identityref {
            base te-types:tunnel-state-type;
          }
          default 'tunnel-state-up';
          description
            "TE tunnel administrative state.";
        }
      }  // container state
    }  // grouping tunnel-p2mp-properties

    grouping p2p-path-candidate-secondary-path-config {
      description
        "Configuration parameters relating to a secondary path which
      is a candidate for a particular primary path";
      leaf secondary-path {
        type leafref {
          path
            "../../../../../p2p-secondary-paths/"
              + "p2p-secondary-path/name";
        }
        description
          "A reference to the secondary path that should be utilised
        when the containing primary path option is in use";
      }

      leaf path-setup-protocol {
        type identityref {
          base te-types:path-signaling-type;
        }
        description
          "Signaling protocol used to set up this tunnel";
      }
    }  // grouping p2p-path-candidate-secondary-path-config

    grouping p2p-reverse-path-candidate-secondary-path-config {
      description
        "Configuration parameters relating to a secondary path which
      is a candidate for a particular primary path";
      leaf secondary-path {
        type leafref {
          path
            "../../../../p2p-secondary-paths/"
              + "p2p-secondary-path/name";
        }
        description
          "A reference to the secondary path that should be utilised
        when the containing primary path option is in use";
      }

      leaf path-setup-protocol {
        type identityref {
          base te-types:path-signaling-type;
        }
        description
          "Signaling protocol used to set up this tunnel";
      }
    }  // grouping p2p-reverse-path-candidate-secondary-path-config

    grouping p2p-path-candidate-secondary-path-state {
      description
        "Operational state parameters relating to a secondary path
      which is a candidate for a particular primary path";
      leaf active {
        type boolean;
        description
          "Indicates the current active path option that has
        been selected of the candidate secondary paths";
      }
    }  // grouping p2p-path-candidate-secondary-path-state

    grouping tunnel-p2p-properties {
      description
        "Top level grouping for tunnel properties.";
      uses tunnel-p2p-params_config;

      container state {
        config false;
        description
          "Configuration applied parameters and state";
        uses tunnel-p2p-params_state;
      }  // container state

      uses bidir-assoc-properties;

      container p2p-primary-paths {
        description
          "Set of P2P primary aths container";
        list p2p-primary-path {
          key "name";
          description
            "List of primary paths for this tunnel.";
          uses p2p-primary-path-properties;

          uses p2p-reverse-primary-path-properties;

          container candidate-p2p-secondary-paths {
            description
              "The set of candidate secondary paths which may be used
            for this primary path. When secondary paths are specified
            in the list the path of the secondary LSP in use must be
            restricted to those path options referenced. The
            priority of the secondary paths is specified within the
            list. Higher priority values are less preferred - that is
            to say that a path with priority 0 is the most preferred
            path. In the case that the list is empty, any secondary
            path option may be utilised when the current primary path
            is in use.";
            list candidate-p2p-secondary-path {
              key "secondary-path";
              description
                "List of secondary paths for this tunnel.";
              uses p2p-path-candidate-secondary-path-config;

              container state {
                config false;
                description
                  "Configuration applied parameters and state";
                uses p2p-path-candidate-secondary-path-state;
              }  // container state
            }  // list candidate-p2p-secondary-path
          }  // container candidate-p2p-secondary-paths
        }  // list p2p-primary-path
      }  // container p2p-primary-paths

      container p2p-secondary-paths {
        description
          "Set of P2P secondary paths container";
        list p2p-secondary-path {
          key "name";
          description
            "List of secondary paths for this tunnel.";
          uses p2p-secondary-path-properties;
        }  // list p2p-secondary-path
      }  // container p2p-secondary-paths
    }  // grouping tunnel-p2p-properties

    grouping shared-resources-tunnels {
      description
        "Set of tunnels that share secondary path resources with
      this tunnnel";
      container shared-resources-tunnels {
        description
          "Set of tunnels that share secondary path resources with
        this tunnnel";
        leaf-list lsp-shared-resources-tunnel {
          type tunnel-ref;
          description
            "Reference to the tunnel that sharing secondary path
          resources with this tunnel";
        }
      }  // container shared-resources-tunnels
    }  // grouping shared-resources-tunnels

    grouping tunnel-actions {
      description "Tunnel actions";
      action tunnel-action {
        description "Tunnel action";
        input {
          leaf action-type {
            type identityref {
              base te-types:tunnel-action-type;
            }
            description "Tunnel action type";
          }
        }

        output {
          leaf action-result {
            type identityref {
              base te-types:te-action-result;
            }
            description
              "The result of the RPC operation";
          }
        }
      }  // rpc tunnel-action
    }  // grouping tunnel-actions

    grouping protection-actions {
      description
        "Protection external command actions";
      action protection-external-commands {
        input {
          leaf protection-external-command {
            type identityref {
              base te-types:protection-external-commands;
            }
            description
              "Protection external command";
          }

          leaf tunnel-using-lsp-resources {
            type tunnel-ref;
            description
              "The tunnel which this external command applies.
             It can be either a normal traffic tunnel or an
             extra-traffic tunnel. It is not specified if the
             external command does not apply to a specific tunnel
             (e.g., a clear command) or if it applies to the Null
             signal (e.g., forced switch to null).";
          }
        }
      }  // rpc protection-external-commands
    }  // grouping protection-actions

    grouping lsp-record-route-information_state {
      description
        "recorded route information grouping";
      container lsp-record-route-subobjects {
        description
          "RSVP recorded route object information";
        list record-route-subobject {
          when
            "../../origin-type = 'ingress'" {
            description
              "Applicable on non-ingress LSPs only";
          }
          key "index";
          description
            "Record route sub-object list";
          leaf index {
            type leafref {
              path "../state/index";
            }
            description
              "Index of record-route object";
          }

          container state {
            config false;
            description
              "Configuration applied parameters and state";
            uses te-types:record-route-subobject_state;
          }  // container state
        }  // list record-route-subobject
      }  // container lsp-record-route-subobjects
    }  // grouping lsp-record-route-information_state

    grouping lsps-state-grouping {
      description
        "LSPs state operational data grouping";
      container lsps-state {
        config false;
        description
          "TE LSPs state container";
        list lsp {
          key "source destination tunnel-id lsp-id extended-tunnel-id";
          description
            "List of LSPs associated with the tunnel.";
          uses lsp-properties_state;

          uses lsp-record-route-information_state;
        }  // list lsp
      }  // container lsps-state
    }  // grouping lsps-state-grouping

    grouping named-admin-groups_config {
      description
        "Global named administrative groups configuration
      grouping";
      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";
      }
    }  // grouping named-admin-groups_config

    grouping named-admin-groups {
      description
        "Global named administrative groups configuration
      grouping";
      container named-admin-groups {
        description
          "TE named admin groups container";
        list named-admin-group {
          if-feature te-types:extended-admin-groups;
          if-feature te-types:named-extended-admin-groups;
          key "name";
          description
            "List of named TE admin-groups";
          uses named-admin-groups_config;
        }  // list named-admin-group
      }  // container named-admin-groups
    }  // grouping named-admin-groups

    grouping named-srlgs_config {
      description
        "Global named SRLGs configuration grouping";
      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";
      }

      leaf cost {
        type uint32;
        description
          "SRLG associated cost. Used during path to append
         the path cost when traversing a link with this SRLG";
      }
    }  // grouping named-srlgs_config

    grouping named-srlgs {
      description
        "Global named SRLGs configuration grouping";
      container named-srlgs {
        description
          "TE named SRLGs container";
        list named-srlg {
          if-feature te-types:named-srlg-groups;
          key "name";
          description
            "A list of named SRLG groups";
          uses named-srlgs_config;
        }  // list named-srlg
      }  // container named-srlgs
    }  // grouping named-srlgs

    grouping named-explicit-paths_config {
      description
        "Global explicit path configuration
      grouping";
      leaf name {
        type string;
        description
          "A string name that uniquely identifies an
        explicit path";
      }
    }  // grouping named-explicit-paths_config

    grouping named-explicit-paths {
      description
        "Global explicit path configuration
      grouping";
      container named-explicit-paths {
        description
          "TE named explicit path container";
        list named-explicit-path {
          key "name";
          description
            "A list of explicit paths";
          uses named-explicit-paths_config;

          container explicit-route-objects {
            description
              "Explicit route objects container";
            list explicit-route-object {
              key "index";
              description
                "List of explicit route objects";
              leaf explicit-route-usage {
                type identityref {
                  base te-types:route-usage-type;
                }
                description
                  "An explicit-route hop action.";
              }

              uses te-types:explicit-route-hop_config;
            }  // list explicit-route-object
          }  // container explicit-route-objects
        }  // list named-explicit-path
      }  // container named-explicit-paths
    }  // grouping named-explicit-paths

    grouping path-metrics-bounds_config {
      description
        "TE path metric bounds grouping";
      leaf metric-type {
        type identityref {
          base te-types:path-metric-type;
        }
        description "TE path metric type";
      }

      leaf upper-bound {
        type uint64;
        description
          "Upper bound on end-to-end TE path metric";
      }
    }  // grouping path-metrics-bounds_config

    grouping path-objective-function_config {
      description
        "Optimization metrics configuration grouping";
      leaf objective-function-type {
        type identityref {
          base te-types:objective-function-type;
        }
        description
          "Objective function entry";
      }
    }  // grouping path-objective-function_config

    grouping path-metric-bounds {
      description
        "TE path metric bounds grouping";
      container path-metric-bounds {
        description
          "TE path metric bounds container";
        list path-metric-bound {
          key "metric-type";
          description
            "List of TE path metrics";
          uses path-metrics-bounds_config;
        }  // list path-metric-bound
      }  // container path-metric-bounds
    }  // grouping path-metric-bounds

    grouping path-constraints_state {
      description
        "TE path constraints state";
      leaf bandwidth-generic_state {
        type te-types:te-bandwidth;
        description
          "A technology agnostic requested bandwidth to use
         for path computation";
      }

      leaf disjointness_state {
        type te-types:te-path-disjointness;
        description
          "The type of resource disjointness.";
      }
    }  // grouping path-constraints_state

    grouping path-constraints_config {
      description
        "Global named path constraints configuration
      grouping";
      leaf name {
        type string;
        description
          "A string name that uniquely identifies a
        path constraint set";
      }

      uses te-types:common-constraints_config;

      uses path-metric-bounds;

      uses te-types:generic-path-optimization;

      uses path-affinities;

      uses path-srlgs;

      uses path-route-objects;

      uses shared-resources-tunnels {
        description
          "Set of tunnels that are allowed to share secondary path
         resources of this tunnel";
      }

      uses path-access-segment-info {
        description
          "Tunnel constraints induced by other segments.";
      }
    }  // grouping path-constraints_config

    grouping named-path-constraints {
      description
        "Global named path constraints configuration
      grouping";
      container named-path-constraints {
        description
          "TE named path constraints container";
        list named-path-constraint {
          if-feature te-types:named-path-constraints;
          key "name";
          description
            "A list of named path constraints";
          uses path-constraints_config;

          container state {
            config false;
            description
              "Configuration applied parameters and state";
            uses path-constraints_state;
          }  // container state
        }  // list named-path-constraint
      }  // container named-path-constraints
    }  // grouping named-path-constraints

    grouping globals-grouping {
      description
        "Globals TE system-wide configuration data grouping";
      container globals {
        description
          "Globals TE system-wide configuration data container";
        uses named-admin-groups;

        uses named-srlgs;

        uses named-explicit-paths;

        uses named-path-constraints;
      }  // container globals
    }  // grouping globals-grouping

    grouping tunnels-grouping {
      description
        "Tunnels TE configuration data grouping";
      container tunnels {
        description
          "Tunnels TE configuration data container";
        list tunnel {
          key "name";
          description "P2P TE tunnels list.";
          uses tunnel-p2p-properties;

          uses tunnel-actions;
        }  // list tunnel

        list tunnel-p2mp {
          key "name";
          unique "identifier";
          description
            "P2MP TE tunnels list.";
          uses tunnel-p2mp-properties;
        }  // list tunnel-p2mp
      }  // container tunnels
    }  // grouping tunnels-grouping

    grouping lsp-properties_state {
      description
        "LSPs state operational data grouping";
      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 operational-state {
        type identityref {
          base te-types:lsp-state-type;
        }
        description "LSP operational state.";
      }

      leaf path-setup-protocol {
        type identityref {
          base te-types:path-signaling-type;
        }
        description
          "Signaling protocol used to set up this tunnel";
      }

      leaf origin-type {
        type enumeration {
          enum "ingress" {
            value 0;
            description "Origin ingress";
          }
          enum "egress" {
            value 1;
            description "Origin egress";
          }
          enum "transit" {
            value 2;
            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" {
            value 0;
            description
              "A primary LSP is a fully established LSP for
             which the resource allocation has been committed
             at the data plane";
          }
          enum "secondary" {
            value 1;
            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" {
            value 0;
            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" {
            value 1;
            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-protection-state {
        type identityref {
          base te-types:lsp-protection-state;
        }
        description
          "The state of the APS state machine controlling which
         tunnels is using the resources of the protecting LSP.";
      }
    }  // grouping lsp-properties_state

    container te {
      presence "Enable TE feature.";
      description "TE global container.";
      uses globals-grouping;

      uses tunnels-grouping;

      uses lsps-state-grouping;

      uses protection-actions;
    }  // container te

    rpc globals-rpc {
      description
        "Execution data for TE global.";
    }  // rpc globals-rpc

    rpc interfaces-rpc {
      description
        "Execution data for TE interfaces.";
    }  // rpc interfaces-rpc

    rpc tunnels-rpc {
      description "TE tunnels RPC nodes";
      input {
        container tunnel-info {
          description
            "Tunnel Identification";
          choice type {
            description
              "Tunnel information type";
            leaf p2p-id {
              type tunnel-ref;
              description "P2P TE tunnel";
            }
            leaf p2mp-id {
              type tunnel-p2mp-ref;
              description "P2MP TE tunnel";
            }
          }  // choice type
        }  // container tunnel-info
      }

      output {
        container result {
          description
            "The container result of the RPC operation";
          leaf result {
            type enumeration {
              enum "success" {
                value 0;
                description "Origin ingress";
              }
              enum "in-progress" {
                value 1;
                description "Origin egress";
              }
              enum "fail" {
                value 2;
                description "transit";
              }
            }
            description
              "The result of the RPC operation";
          }
        }  // container result
      }
    }  // rpc tunnels-rpc

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

    notification tunnels-notif {
      description
        "Notification messages for TE tunnels.";
    }  // notification tunnels-notif
  }  // module ietf-te