ietf-vn

This YANG module for the Virtual Network (VN). It describes a VN operation module that can take place in the context of the Cust...

  • Version: 2025-03-27

    ietf-vn@2025-03-27


    
      module ietf-vn {
    
        yang-version 1.1;
    
        namespace
          "urn:ietf:params:xml:ns:yang:ietf-vn";
    
        prefix vn;
    
        import ietf-yang-types {
          prefix yang;
          reference
            "RFC 6991: Common YANG Data Types";
    
    
        }
        import ietf-network {
          prefix nw;
          reference
            "RFC 8345: A YANG Data Model for Network Topologies";
    
    
        }
        import ietf-network-topology {
          prefix nt;
          reference
            "RFC 8345: A YANG Data Model for Network Topologies";
    
    
        }
        import ietf-te-types {
          prefix te-types;
          reference
            "RFC 8776: Common YANG Data Types for Traffic Engineering";
    
    
        }
        import ietf-te-topology {
          prefix tet;
          reference
            "RFC 8795: YANG Data Model for Traffic Engineering (TE)
            	  Topologies";
    
    
        }
    
        organization
          "IETF Traffic Engineering Architecture and Signaling (TEAS)
         Working Group";
    
        contact
          "WG Web:  <https://datatracker.ietf.org/wg/teas/>
         WG List:  <mailto:teas@ietf.org>
    
         Editor:  Young Lee <younglee.tx@gmail.com>
         Editor:  Dhruv Dhody <dhruv.ietf@gmail.com>";
    
        description
          "This YANG module for the Virtual Network (VN).
         It describes a VN operation module that can take place
         in the context of the Customer Network Controller (CNC) -
         Multi-Domain Service Coordinator (MDSC) interface (CMI) of
         the Abstraction and Control of TE Networks (ACTN)
         architecture where the CNC is the actor of a VN
         instantiation/modification/deletion as per RFC 8453.
    
         Copyright (c) 2025 IETF Trust and the persons identified as
         authors of the code.  All rights reserved.
    
         Redistribution and use in source and binary forms, with or
         without modification, is permitted pursuant to, and subject to
         the license terms contained in, the Revised BSD License set
         forth in Section 4.c of the IETF Trust's Legal Provisions
         Relating to IETF Documents
         (https://trustee.ietf.org/license-info).
    
         This version of this YANG module is part of RFC 9731; see the
         RFC itself for full legal notices.";
    
        revision "2025-03-27" {
          description "The initial version.";
          reference
            "RFC 9731: A YANG Data Model for Virtual Network (VN)
            	  Operations";
    
        }
    
    
        feature multi-src-dest {
          description
            "Support for selection of one source or destination
           among multiple.";
          reference
            "RFC 8453: Framework for Abstraction and Control of TE
            	  Networks (ACTN)";
    
        }
    
        typedef vn-id {
          type string {
            length "1..max";
          }
          description
            "A type definition for a VN identifier.";
        }
    
        typedef ap-id {
          type string {
            length "1..max";
          }
          description
            "A type definition for an Access Point (AP) identifier.";
        }
    
        typedef vnm-id {
          type string {
            length "1..max";
          }
          description
            "A type definition for a VN-member identifier.";
        }
    
        typedef vn-compute-status {
          type te-types:te-common-status;
          description
            "A type definition for representing the VN compute status.
           Note that all statuses apart from up and down are considered
           to be unknown.";
        }
    
        identity vn-computation-error-reason {
          description
            "Base identity for VN computation error reasons.";
        }
    
        identity vn-computation-error-not-ready {
          base vn-computation-error-reason;
          description
            "VN computation has failed because the MDSC is not
           ready.";
        }
    
        identity vn-computation-error-no-cnc {
          base vn-computation-error-reason;
          description
            "VN computation has failed because one or more dependent
           CNCs are unavailable.";
        }
    
        identity vn-computation-error-no-resource {
          base vn-computation-error-reason;
          description
            "VN computation has failed because there is no
           available resource in one or more domains.";
        }
    
        identity vn-computation-error-path-not-found {
          base vn-computation-error-reason;
          description
            "VN computation failed as no path found.";
        }
    
        identity vn-computation-ap-unknown {
          base vn-computation-error-reason;
          description
            "VN computation failed as the source or destination Access
           Point (AP) not known.";
        }
    
        container access-point {
          description "AP configurations.";
          reference
            "RFC 8453: Framework for Abstraction and Control of TE
            	  Networks (ACTN), Section 6";
    
          list ap {
            key "id";
            description
              "The access-point identifier.";
            leaf id {
              type ap-id;
              description
                "An AP identifier unique within the scope of the entity
               that controls the VN.";
            }
    
            leaf pe {
              type leafref {
                path "/nw:networks/nw:network/nw:node/tet:te-node-id";
              }
              description
                "A reference to the PE node in the native TE Topology.";
            }
    
            leaf max-bandwidth {
              type te-types:te-bandwidth;
              description
                "The max bandwidth of the AP.";
            }
    
            leaf avl-bandwidth {
              type te-types:te-bandwidth;
              description
                "The available bandwidth of the AP.";
            }
    
            list vn-ap {
              key "id";
              description
                "List of VNAPs in this AP.";
              leaf id {
                type ap-id;
                description
                  "A unique identifier for the VNAP.";
              }
    
              leaf vn {
                type leafref {
                  path "/virtual-network/vn/id";
                }
                description
                  "A reference to the VN.";
              }
    
              leaf abstract-node {
                type leafref {
                  path "/nw:networks/nw:network/nw:node/nw:node-id";
                }
                must
                  '/nw:networks/nw:network/nw:node[nw:node-id='
                    + 'current()/../abstract-node]/tet:te-node-id' {
                  description
                    "The associated network for the abstract-node
                   must be TE enabled.";
                }
                description
                  "A reference to the abstract node that represents
                 the VN.";
              }
    
              leaf ltp {
                type leafref {
                  path "/nw:networks/nw:network/nw:node[nw:node-id=current()/../abstract-node]/nt:termination-point/tet:te-tp-id";
                }
                description
                  "A reference to the Link Termination Point (LTP)
                 in the abstract-node, i.e., the LTP should be in
                 the abstract layer and not the underlying layer.";
                reference
                  "RFC 8795: YANG Data Model for Traffic Engineering (TE)
                  	  Topologies";
    
              }
    
              leaf max-bandwidth {
                type te-types:te-bandwidth;
                config false;
                description
                  "The max bandwidth of the VNAP.";
              }
            }  // list vn-ap
          }  // list ap
        }  // container access-point
    
        container virtual-network {
          description "VN configurations.";
          reference
            "RFC 8453: Framework for Abstraction and Control of TE
            Networks (ACTN)";
    
          list vn {
            key "id";
            description
              "A VN is identified by a vn-id.";
            leaf id {
              type vn-id;
              description
                "An identifier unique within the scope of the entity
               that controls the VN.";
            }
    
            container te-topology-identifier {
              description
                "TE topology identifier container.";
              leaf provider-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a provider.
    If omitted, it assumes that the topology provider ID
    value = 0 (the default).";
              }
    
              leaf client-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a client.
    If omitted, it assumes that the topology client ID
    value = 0 (the default).";
              }
    
              leaf topology-id {
                type te-topology-id;
                default "";
                description
                  "When the datastore contains several topologies,
    'topology-id' distinguishes between them.
    
    If omitted, the default (empty) string for this leaf is
    assumed.";
              }
            }  // container te-topology-identifier
    
            leaf abstract-node {
              type leafref {
                path "/nw:networks/nw:network/nw:node/tet:te-node-id";
              }
              description
                "A reference to the abstract node in TE Topology.";
            }
    
            list vn-member {
              key "id";
              description
                "List of vn-members in a VN.";
              leaf id {
                type vnm-id;
                description
                  "A vn-member identifier.";
              }
    
              container src {
                description
                  "The source of VN member.";
                leaf ap {
                  type leafref {
                    path "/access-point/ap/id";
                  }
                  description
                    "A reference to the source AP.";
                }
    
                leaf vn-ap-id {
                  type leafref {
                    path "/access-point/ap[id=current()/../ap]/vn-ap/id";
                  }
                  description
                    "A reference to the source VNAP.";
                }
    
                leaf multi-src {
                  if-feature multi-src-dest;
                  type boolean;
                  default "false";
                  description
                    "Is the source part of a multi-source, where
    only one of the sources is enabled?";
                }
              }  // container src
    
              container dest {
                description
                  "The destination of the VN member.";
                leaf ap {
                  type leafref {
                    path "/access-point/ap/id";
                  }
                  description
                    "A reference to the destination AP.";
                }
    
                leaf vn-ap-id {
                  type leafref {
                    path "/access-point/ap[id=current()/../ap]/vn-ap/id";
                  }
                  description
                    "A reference to the destination VNAP.";
                }
    
                leaf multi-dest {
                  if-feature multi-src-dest;
                  type boolean;
                  default "false";
                  description
                    "Is the destination part of a multi-destination,
    where only one of the destinations is enabled.";
                }
              }  // container dest
    
              leaf connectivity-matrix-id {
                type leafref {
                  path "/nw:networks/nw:network/nw:node/tet:te/tet:te-node-attributes/tet:connectivity-matrices/tet:connectivity-matrix/tet:id";
                }
                description
                  "A reference to the connectivity-matrix.";
                reference
                  "RFC 8795: YANG Data Model for Traffic Engineering (TE)
                  	  Topologies";
    
              }
    
              container underlay {
                description
                  "An empty container that can be augmented with underlay
    technology information not supported by RFC 8795 (for
    example, Segment Routing (SR).";
              }  // container underlay
    
              leaf oper-status {
                type te-types:te-oper-status;
                config false;
                description
                  "The vn-member operational state.";
              }
    
              leaf if-selected {
                if-feature multi-src-dest;
                type boolean;
                default "false";
                config false;
                description
                  "Is the vn-member selected among the multi-source
                 or multi-destination options?";
              }
            }  // list vn-member
    
            leaf admin-status {
              type te-types:te-admin-status;
              default "up";
              description
                "VN administrative state.";
            }
    
            leaf oper-status {
              type te-types:te-oper-status;
              config false;
              description
                "VN operational state.";
            }
    
            leaf vn-level-diversity {
              type te-types:te-path-disjointness;
              description
                "The type of disjointness on the VN level (i.e., across all
    VN members).";
            }
          }  // list vn
        }  // container virtual-network
    
        rpc vn-compute {
          description
            "The VN computation without actual instantiation.  This is
           used by the CNC to get the VN results without actually
           creating it in the network.
    
           The input could include a reference to the single node
           abstract topology.  It could optionally also include
           constraints and optimization criteria.  The computation
           is done based on the list of VN members.
    
           The output includes a reference to the single node
           abstract topology with each VN member including a
           reference to the connectivity-matrix-id where the
           path properties could be found.  Error information is
           also included.";
          input {
            container te-topology-identifier {
              description
                "TE topology identifier container.";
              leaf provider-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a provider.
    If omitted, it assumes that the topology provider ID
    value = 0 (the default).";
              }
    
              leaf client-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a client.
    If omitted, it assumes that the topology client ID
    value = 0 (the default).";
              }
    
              leaf topology-id {
                type te-topology-id;
                default "";
                description
                  "When the datastore contains several topologies,
    'topology-id' distinguishes between them.
    
    If omitted, the default (empty) string for this leaf is
    assumed.";
              }
            }  // container te-topology-identifier
    
            leaf abstract-node {
              type leafref {
                path "/nw:networks/nw:network/nw:node/tet:te-node-id";
              }
              description
                "A reference to the abstract node in TE Topology.";
            }
    
            container path-constraints {
              description
                "TE named path constraints container.";
              container te-bandwidth {
                description
                  "Container that specifies TE bandwidth.
    
    The choices can be augmented for specific data-plane
    technologies.";
                choice technology {
                  default "generic";
                  description
                    "Data-plane technology type.";
                  leaf generic {
                    type te-bandwidth;
                    description
                      "Bandwidth specified in a generic format.";
                  }
                }  // choice technology
              }  // container te-bandwidth
    
              leaf link-protection {
                type identityref {
                  base link-protection-type;
                }
                default
                  "te-types:link-protection-unprotected";
                description
                  "Link protection type required for the links included
    in the computed path.";
                reference
                  "RFC 4202: Routing Extensions in Support of
                  	  Generalized Multi-Protocol Label Switching
                  	  (GMPLS)";
    
              }
    
              leaf setup-priority {
                type uint8 {
                  range "0..7";
                }
                default "7";
                description
                  "TE LSP requested setup priority.";
                reference
                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
              }
    
              leaf hold-priority {
                type uint8 {
                  range "0..7";
                }
                default "7";
                description
                  "TE LSP requested hold priority.";
                reference
                  "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
              }
    
              leaf signaling-type {
                type identityref {
                  base path-signaling-type;
                }
                default
                  "te-types:path-setup-rsvp";
                description
                  "TE tunnel path signaling type.";
              }
    
              container path-metric-bounds {
                description
                  "Top-level container for the list of path metric bounds.";
                list path-metric-bound {
                  key "metric-type";
                  description
                    "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                  leaf metric-type {
                    type identityref {
                      base link-path-metric-type;
                    }
                    description
                      "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                  }
    
                  leaf upper-bound {
                    type uint64;
                    default "0";
                    description
                      "Upper bound on the specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specified 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                  }
                }  // list path-metric-bound
              }  // container path-metric-bounds
    
              container path-affinities-values {
                description
                  "Path affinities represented as values.";
                list path-affinities-value {
                  key "usage";
                  description
                    "List of named affinity constraints.";
                  leaf usage {
                    type identityref {
                      base resource-affinities-type;
                    }
                    description
                      "Identifies an entry in the list of value affinity
    constraints.";
                  }
    
                  leaf value {
                    type admin-groups;
                    default "";
                    description
                      "The affinity value.
    
    The default is empty.";
                  }
                }  // list path-affinities-value
              }  // container path-affinities-values
    
              container path-affinity-names {
                description
                  "Path affinities represented as names.";
                list path-affinity-name {
                  key "usage";
                  description
                    "List of named affinity constraints.";
                  leaf usage {
                    type identityref {
                      base resource-affinities-type;
                    }
                    description
                      "Identifies an entry in the list of named affinity
    constraints.";
                  }
    
                  list affinity-name {
                    key "name";
                    description
                      "List of named affinities.";
                    leaf name {
                      type string;
                      description
                        "Identifies a named affinity entry.";
                    }
                  }  // list affinity-name
                }  // list path-affinity-name
              }  // container path-affinity-names
    
              container path-srlgs-lists {
                description
                  "Path Shared Risk Link Group (SRLG) properties container.";
                list path-srlgs-list {
                  key "usage";
                  description
                    "List of Shared Risk Link Group (SRLG) values to be
    included or excluded.";
                  leaf usage {
                    type identityref {
                      base route-usage-type;
                    }
                    description
                      "Identifies an entry in a list of Shared Risk Link Groups
    (SRLGs) to either include or exclude.";
                  }
    
                  leaf-list values {
                    type srlg;
                    description
                      "List of Shared Risk Link Group (SRLG) values.";
                  }
                }  // list path-srlgs-list
              }  // container path-srlgs-lists
    
              container path-srlgs-names {
                description
                  "Container for the list of named Shared Risk Link Groups
    (SRLGs).";
                list path-srlgs-name {
                  key "usage";
                  description
                    "List of named Shared Risk Link Groups (SRLGs) to be
    included or excluded.";
                  leaf usage {
                    type identityref {
                      base route-usage-type;
                    }
                    description
                      "Identifies an entry in a list of named Shared Risk Link
    Groups (SRLGs) to either include or exclude.";
                  }
    
                  leaf-list names {
                    type string;
                    description
                      "List of named Shared Risk Link Groups (SRLGs).";
                  }
                }  // list path-srlgs-name
              }  // container path-srlgs-names
    
              leaf disjointness {
                type te-path-disjointness;
                description
                  "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.
    
    When configured for a secondary path, the disjointness
    level overrides the level configured for the primary path.";
              }
            }  // container path-constraints
    
            leaf cos {
              type te-types:te-ds-class;
              description
                "The class of service (COS).";
            }
    
            container optimizations {
              description
                "The objective function container that includes
    attributes to impose when computing a TE path.";
              choice algorithm {
                description
                  "Optimizations algorithm.";
                case metric {
                  if-feature path-optimization-metric;
                  list optimization-metric {
                    key "metric-type";
                    description
                      "TE path metric type.";
                    leaf metric-type {
                      type identityref {
                        base path-metric-optimization-type;
                      }
                      description
                        "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                    }
    
                    leaf weight {
                      type uint8;
                      default "1";
                      description
                        "TE path metric normalization weight.";
                    }
    
                    container explicit-route-exclude-objects {
                      when
                        "../metric-type = 'te-types:path-metric-optimize-excludes'";
                      description
                        "Container for the 'exclude route' object list.";
                      list route-object-exclude-object {
                        key "index";
                        ordered-by user;
                        description
                          "List of Explicit Route Objects to be excluded in the
    path computation.";
                        leaf index {
                          type uint32;
                          description
                            "Route object entry index.
    
      The index is used to identify an entry in the list.
    
      The order of entries is defined by the user without
      relying on key values.";
                        }
    
                        choice type {
                          description
                            "The explicit route entry type.";
                          container numbered-node-hop {
                            must
                              "node-id-uri or node-id" {
                              description
                                "At least one node identifier needs to be present.";
                            }
                            description
                              "Numbered node route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              	  ReSerVation Protocol - Traffic Engineering
                              	  (RSVP-TE)";
    
                            leaf node-id-uri {
                              type nw:node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container numbered-node-hop
                          container numbered-link-hop {
                            description
                              "Numbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              	  ReSerVation Protocol - Traffic Engineering
                              	  (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE Link Termination Point (LTP) identifier.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container numbered-link-hop
                          container unnumbered-link-hop {
                            must
                              "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                              description
                                "At least one node identifier and at least one Link
    Termination Point (LTP) identifier need to be
    present.";
                            }
                            description
                              "Unnumbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              	  ReSerVation Protocol - Traffic Engineering
                              	  (RSVP-TE)";
    
                            leaf link-tp-id-uri {
                              type nt:tp-id;
                              description
                                "Link Termination Point (LTP) identifier.";
                            }
    
                            leaf link-tp-id {
                              type te-tp-id;
                              description
                                "TE LTP identifier.
    
    The combination of the TE link ID and the TE node ID
    is used to identify an unnumbered TE link.";
                            }
    
                            leaf node-id-uri {
                              type nw:node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container unnumbered-link-hop
                          container as-number-hop {
                            description
                              "AS explicit route hop.";
                            leaf as-number {
                              type inet:as-number;
                              mandatory true;
                              description
                                "The Autonomous System (AS) number.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container as-number-hop
    
                          case label {
                            description
                              "The label explicit route hop type.";
                            container label-hop {
                              description
                                "Label hop type.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.
    
    The choices can be augmented for specific data-plane
    technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-hop
                          }  // case label
    
                          case srlg {
                            description
                              "An Shared Risk Link Group (SRLG) value to be
    included or excluded.";
                            container srlg {
                              description
                                "Shared Risk Link Group (SRLG) container.";
                              leaf srlg {
                                type uint32;
                                description
                                  "Shared Risk Link Group (SRLG) value.";
                              }
                            }  // container srlg
                          }  // case srlg
                        }  // choice type
                      }  // list route-object-exclude-object
                    }  // container explicit-route-exclude-objects
    
                    container explicit-route-include-objects {
                      when
                        "../metric-type = 'te-types:path-metric-optimize-includes'";
                      description
                        "Container for the 'include route' object list.";
                      list route-object-include-object {
                        key "index";
                        ordered-by user;
                        description
                          "List of Explicit Route Objects to be included in the
    path computation.";
                        leaf index {
                          type uint32;
                          description
                            "Route object entry index.
    
      The index is used to identify an entry in the list.
    
      The order of entries is defined by the user without
      relying on key values.";
                        }
    
                        choice type {
                          description
                            "The explicit route entry type.";
                          container numbered-node-hop {
                            must
                              "node-id-uri or node-id" {
                              description
                                "At least one node identifier needs to be present.";
                            }
                            description
                              "Numbered node route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              	  ReSerVation Protocol - Traffic Engineering
                              	  (RSVP-TE)";
    
                            leaf node-id-uri {
                              type nw:node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container numbered-node-hop
                          container numbered-link-hop {
                            description
                              "Numbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              	  ReSerVation Protocol - Traffic Engineering
                              	  (RSVP-TE)";
    
                            leaf link-tp-id {
                              type te-tp-id;
                              mandatory true;
                              description
                                "TE Link Termination Point (LTP) identifier.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container numbered-link-hop
                          container unnumbered-link-hop {
                            must
                              "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                              description
                                "At least one node identifier and at least one Link
    Termination Point (LTP) identifier need to be
    present.";
                            }
                            description
                              "Unnumbered link explicit route hop.";
                            reference
                              "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                              	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                               RFC 3477: Signalling Unnumbered Links in Resource
                              	  ReSerVation Protocol - Traffic Engineering
                              	  (RSVP-TE)";
    
                            leaf link-tp-id-uri {
                              type nt:tp-id;
                              description
                                "Link Termination Point (LTP) identifier.";
                            }
    
                            leaf link-tp-id {
                              type te-tp-id;
                              description
                                "TE LTP identifier.
    
    The combination of the TE link ID and the TE node ID
    is used to identify an unnumbered TE link.";
                            }
    
                            leaf node-id-uri {
                              type nw:node-id;
                              description
                                "The identifier of a node in the topology.";
                            }
    
                            leaf node-id {
                              type te-node-id;
                              description
                                "The identifier of a node in the TE topology.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
    
                            leaf direction {
                              type te-link-direction;
                              default "outgoing";
                              description
                                "Link route object direction.";
                            }
                          }  // container unnumbered-link-hop
                          container as-number-hop {
                            description
                              "AS explicit route hop.";
                            leaf as-number {
                              type inet:as-number;
                              mandatory true;
                              description
                                "The Autonomous System (AS) number.";
                            }
    
                            leaf hop-type {
                              type te-hop-type;
                              default "strict";
                              description
                                "Strict or loose hop.";
                            }
                          }  // container as-number-hop
    
                          case label {
                            description
                              "The label explicit route hop type.";
                            container label-hop {
                              description
                                "Label hop type.";
                              container te-label {
                                description
                                  "Container that specifies the TE label.
    
    The choices can be augmented for specific data-plane
    technologies.";
                                choice technology {
                                  default
                                    "generic";
                                  description
                                    "Data-plane technology type.";
                                  leaf generic {
                                    type rt-types:generalized-label;
                                    description
                                      "TE label specified in a generic format.";
                                  }
                                }  // choice technology
    
                                leaf direction {
                                  type te-label-direction;
                                  default
                                    "forward";
                                  description
                                    "Label direction.";
                                }
                              }  // container te-label
                            }  // container label-hop
                          }  // case label
                        }  // choice type
                      }  // list route-object-include-object
                    }  // container explicit-route-include-objects
                  }  // list optimization-metric
    
                  container tiebreakers {
                    status deprecated;
                    description
                      "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                    list tiebreaker {
                      key "tiebreaker-type";
                      status deprecated;
                      description
                        "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                      leaf tiebreaker-type {
                        type identityref {
                          base path-metric-type;
                        }
                        status deprecated;
                        description
                          "Identifies an entry in the list of tiebreakers.";
                      }
                    }  // list tiebreaker
                  }  // container tiebreakers
                }  // case metric
    
                case objective-function {
                  if-feature path-optimization-objective-function;
                  container objective-function {
                    description
                      "The objective function container that includes
    attributes to impose when computing a TE path.";
                    leaf objective-function-type {
                      type identityref {
                        base objective-function-type;
                      }
                      default
                        "te-types:of-minimize-cost-path";
                      description
                        "Objective function entry.";
                    }
                  }  // container objective-function
                }  // case objective-function
              }  // choice algorithm
            }  // container optimizations
    
            leaf tiebreaker {
              type identityref {
                base path-tiebreaker-type;
              }
              default
                "te-types:path-tiebreaker-random";
              description
                "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
            }
    
            list vn-member-list {
              key "id";
              description
                "List of VN members in a VN.";
              leaf id {
                type vnm-id;
                description
                  "A vn-member identifier.";
              }
    
              container src {
                description
                  "The source of VN member.";
                leaf ap {
                  type leafref {
                    path "/access-point/ap/id";
                  }
                  description
                    "A reference to the source AP.";
                }
    
                leaf vn-ap-id {
                  type leafref {
                    path "/access-point/ap[id=current()/../ap]/vn-ap/id";
                  }
                  description
                    "A reference to the source VNAP.";
                }
    
                leaf multi-src {
                  if-feature multi-src-dest;
                  type boolean;
                  default "false";
                  description
                    "Is the source part of a multi-source, where
    only one of the sources is enabled?";
                }
              }  // container src
    
              container dest {
                description
                  "The destination of the VN member.";
                leaf ap {
                  type leafref {
                    path "/access-point/ap/id";
                  }
                  description
                    "A reference to the destination AP.";
                }
    
                leaf vn-ap-id {
                  type leafref {
                    path "/access-point/ap[id=current()/../ap]/vn-ap/id";
                  }
                  description
                    "A reference to the destination VNAP.";
                }
    
                leaf multi-dest {
                  if-feature multi-src-dest;
                  type boolean;
                  default "false";
                  description
                    "Is the destination part of a multi-destination,
    where only one of the destinations is enabled.";
                }
              }  // container dest
    
              leaf connectivity-matrix-id {
                type leafref {
                  path "/nw:networks/nw:network/nw:node/tet:te/tet:te-node-attributes/tet:connectivity-matrices/tet:connectivity-matrix/tet:id";
                }
                description
                  "A reference to the connectivity-matrix.";
                reference
                  "RFC 8795: YANG Data Model for Traffic Engineering (TE)
                  	  Topologies";
    
              }
    
              container underlay {
                description
                  "An empty container that can be augmented with underlay
    technology information not supported by RFC 8795 (for
    example, Segment Routing (SR).";
              }  // container underlay
    
              container path-constraints {
                description
                  "TE named path constraints container.";
                container te-bandwidth {
                  description
                    "Container that specifies TE bandwidth.
    
    The choices can be augmented for specific data-plane
    technologies.";
                  choice technology {
                    default "generic";
                    description
                      "Data-plane technology type.";
                    leaf generic {
                      type te-bandwidth;
                      description
                        "Bandwidth specified in a generic format.";
                    }
                  }  // choice technology
                }  // container te-bandwidth
    
                leaf link-protection {
                  type identityref {
                    base link-protection-type;
                  }
                  default
                    "te-types:link-protection-unprotected";
                  description
                    "Link protection type required for the links included
    in the computed path.";
                  reference
                    "RFC 4202: Routing Extensions in Support of
                    	  Generalized Multi-Protocol Label Switching
                    	  (GMPLS)";
    
                }
    
                leaf setup-priority {
                  type uint8 {
                    range "0..7";
                  }
                  default "7";
                  description
                    "TE LSP requested setup priority.";
                  reference
                    "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                }
    
                leaf hold-priority {
                  type uint8 {
                    range "0..7";
                  }
                  default "7";
                  description
                    "TE LSP requested hold priority.";
                  reference
                    "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels";
    
                }
    
                leaf signaling-type {
                  type identityref {
                    base path-signaling-type;
                  }
                  default
                    "te-types:path-setup-rsvp";
                  description
                    "TE tunnel path signaling type.";
                }
    
                container path-metric-bounds {
                  description
                    "Top-level container for the list of path metric bounds.";
                  list path-metric-bound {
                    key "metric-type";
                    description
                      "List of path metric bounds, which can apply to link and
    path metrics.
    
    TE paths which have at least one path metric which
    exceeds the specified bounds MUST NOT be selected.
    
    TE paths that traverse TE links which have at least one
    link metric which exceeds the specified bounds MUST NOT
    be selected.";
                    leaf metric-type {
                      type identityref {
                        base link-path-metric-type;
                      }
                      description
                        "Identifies an entry in the list of 'metric-type' items
    bound for the TE path.";
                    }
    
                    leaf upper-bound {
                      type uint64;
                      default "0";
                      description
                        "Upper bound on the specified 'metric-type'.
    
    A zero indicates an unbounded upper limit for the
    specified 'metric-type'.
    
    The unit of is interpreted in the context of the
    'metric-type' identity.";
                    }
                  }  // list path-metric-bound
                }  // container path-metric-bounds
    
                container path-affinities-values {
                  description
                    "Path affinities represented as values.";
                  list path-affinities-value {
                    key "usage";
                    description
                      "List of named affinity constraints.";
                    leaf usage {
                      type identityref {
                        base resource-affinities-type;
                      }
                      description
                        "Identifies an entry in the list of value affinity
    constraints.";
                    }
    
                    leaf value {
                      type admin-groups;
                      default "";
                      description
                        "The affinity value.
    
    The default is empty.";
                    }
                  }  // list path-affinities-value
                }  // container path-affinities-values
    
                container path-affinity-names {
                  description
                    "Path affinities represented as names.";
                  list path-affinity-name {
                    key "usage";
                    description
                      "List of named affinity constraints.";
                    leaf usage {
                      type identityref {
                        base resource-affinities-type;
                      }
                      description
                        "Identifies an entry in the list of named affinity
    constraints.";
                    }
    
                    list affinity-name {
                      key "name";
                      description
                        "List of named affinities.";
                      leaf name {
                        type string;
                        description
                          "Identifies a named affinity entry.";
                      }
                    }  // list affinity-name
                  }  // list path-affinity-name
                }  // container path-affinity-names
    
                container path-srlgs-lists {
                  description
                    "Path Shared Risk Link Group (SRLG) properties container.";
                  list path-srlgs-list {
                    key "usage";
                    description
                      "List of Shared Risk Link Group (SRLG) values to be
    included or excluded.";
                    leaf usage {
                      type identityref {
                        base route-usage-type;
                      }
                      description
                        "Identifies an entry in a list of Shared Risk Link Groups
    (SRLGs) to either include or exclude.";
                    }
    
                    leaf-list values {
                      type srlg;
                      description
                        "List of Shared Risk Link Group (SRLG) values.";
                    }
                  }  // list path-srlgs-list
                }  // container path-srlgs-lists
    
                container path-srlgs-names {
                  description
                    "Container for the list of named Shared Risk Link Groups
    (SRLGs).";
                  list path-srlgs-name {
                    key "usage";
                    description
                      "List of named Shared Risk Link Groups (SRLGs) to be
    included or excluded.";
                    leaf usage {
                      type identityref {
                        base route-usage-type;
                      }
                      description
                        "Identifies an entry in a list of named Shared Risk Link
    Groups (SRLGs) to either include or exclude.";
                    }
    
                    leaf-list names {
                      type string;
                      description
                        "List of named Shared Risk Link Groups (SRLGs).";
                    }
                  }  // list path-srlgs-name
                }  // container path-srlgs-names
    
                leaf disjointness {
                  type te-path-disjointness;
                  description
                    "The type of resource disjointness.
    When configured for a primary path, the disjointness level
    applies to all secondary LSPs.
    
    When configured for a secondary path, the disjointness
    level overrides the level configured for the primary path.";
                }
              }  // container path-constraints
    
              leaf cos {
                type te-types:te-ds-class;
                description
                  "The class of service.";
                reference
                  "RFC 4124: Protocol Extensions for Support of
                  Diffserv-aware MPLS Traffic Engineering,
                  Section 4.3.1";
    
              }
    
              container optimizations {
                description
                  "The objective function container that includes
    attributes to impose when computing a TE path.";
                choice algorithm {
                  description
                    "Optimizations algorithm.";
                  case metric {
                    if-feature path-optimization-metric;
                    list optimization-metric {
                      key "metric-type";
                      description
                        "TE path metric type.";
                      leaf metric-type {
                        type identityref {
                          base path-metric-optimization-type;
                        }
                        description
                          "Identifies the 'metric-type' that the path computation
    process uses for optimization.";
                      }
    
                      leaf weight {
                        type uint8;
                        default "1";
                        description
                          "TE path metric normalization weight.";
                      }
    
                      container explicit-route-exclude-objects {
                        when
                          "../metric-type = 'te-types:path-metric-optimize-excludes'";
                        description
                          "Container for the 'exclude route' object list.";
                        list route-object-exclude-object {
                          key "index";
                          ordered-by user;
                          description
                            "List of Explicit Route Objects to be excluded in the
    path computation.";
                          leaf index {
                            type uint32;
                            description
                              "Route object entry index.
    
      The index is used to identify an entry in the list.
    
      The order of entries is defined by the user without
      relying on key values.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier needs to be present.";
                              }
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                	  ReSerVation Protocol - Traffic Engineering
                                	  (RSVP-TE)";
    
                              leaf node-id-uri {
                                type nw:node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                	  ReSerVation Protocol - Traffic Engineering
                                	  (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier need to be
    present.";
                              }
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                	  ReSerVation Protocol - Traffic Engineering
                                	  (RSVP-TE)";
    
                              leaf link-tp-id-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                description
                                  "TE LTP identifier.
    
    The combination of the TE link ID and the TE node ID
    is used to identify an unnumbered TE link.";
                              }
    
                              leaf node-id-uri {
                                type nw:node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.
    
    The choices can be augmented for specific data-plane
    technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
    
                            case srlg {
                              description
                                "An Shared Risk Link Group (SRLG) value to be
    included or excluded.";
                              container srlg {
                                description
                                  "Shared Risk Link Group (SRLG) container.";
                                leaf srlg {
                                  type uint32;
                                  description
                                    "Shared Risk Link Group (SRLG) value.";
                                }
                              }  // container srlg
                            }  // case srlg
                          }  // choice type
                        }  // list route-object-exclude-object
                      }  // container explicit-route-exclude-objects
    
                      container explicit-route-include-objects {
                        when
                          "../metric-type = 'te-types:path-metric-optimize-includes'";
                        description
                          "Container for the 'include route' object list.";
                        list route-object-include-object {
                          key "index";
                          ordered-by user;
                          description
                            "List of Explicit Route Objects to be included in the
    path computation.";
                          leaf index {
                            type uint32;
                            description
                              "Route object entry index.
    
      The index is used to identify an entry in the list.
    
      The order of entries is defined by the user without
      relying on key values.";
                          }
    
                          choice type {
                            description
                              "The explicit route entry type.";
                            container numbered-node-hop {
                              must
                                "node-id-uri or node-id" {
                                description
                                  "At least one node identifier needs to be present.";
                              }
                              description
                                "Numbered node route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                	  ReSerVation Protocol - Traffic Engineering
                                	  (RSVP-TE)";
    
                              leaf node-id-uri {
                                type nw:node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container numbered-node-hop
                            container numbered-link-hop {
                              description
                                "Numbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                	  ReSerVation Protocol - Traffic Engineering
                                	  (RSVP-TE)";
    
                              leaf link-tp-id {
                                type te-tp-id;
                                mandatory true;
                                description
                                  "TE Link Termination Point (LTP) identifier.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container numbered-link-hop
                            container unnumbered-link-hop {
                              must
                                "(link-tp-id-uri or link-tp-id) and (node-id-uri or node-id)" {
                                description
                                  "At least one node identifier and at least one Link
    Termination Point (LTP) identifier need to be
    present.";
                              }
                              description
                                "Unnumbered link explicit route hop.";
                              reference
                                "RFC 3209: RSVP-TE: Extensions to RSVP for LSP Tunnels,
                                	  Section 4.3, EXPLICIT_ROUTE in RSVP-TE
                                 RFC 3477: Signalling Unnumbered Links in Resource
                                	  ReSerVation Protocol - Traffic Engineering
                                	  (RSVP-TE)";
    
                              leaf link-tp-id-uri {
                                type nt:tp-id;
                                description
                                  "Link Termination Point (LTP) identifier.";
                              }
    
                              leaf link-tp-id {
                                type te-tp-id;
                                description
                                  "TE LTP identifier.
    
    The combination of the TE link ID and the TE node ID
    is used to identify an unnumbered TE link.";
                              }
    
                              leaf node-id-uri {
                                type nw:node-id;
                                description
                                  "The identifier of a node in the topology.";
                              }
    
                              leaf node-id {
                                type te-node-id;
                                description
                                  "The identifier of a node in the TE topology.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
    
                              leaf direction {
                                type te-link-direction;
                                default
                                  "outgoing";
                                description
                                  "Link route object direction.";
                              }
                            }  // container unnumbered-link-hop
                            container as-number-hop {
                              description
                                "AS explicit route hop.";
                              leaf as-number {
                                type inet:as-number;
                                mandatory true;
                                description
                                  "The Autonomous System (AS) number.";
                              }
    
                              leaf hop-type {
                                type te-hop-type;
                                default "strict";
                                description
                                  "Strict or loose hop.";
                              }
                            }  // container as-number-hop
    
                            case label {
                              description
                                "The label explicit route hop type.";
                              container label-hop {
                                description
                                  "Label hop type.";
                                container te-label {
                                  description
                                    "Container that specifies the TE label.
    
    The choices can be augmented for specific data-plane
    technologies.";
                                  choice technology {
                                    default
                                      "generic";
                                    description
                                      "Data-plane technology type.";
                                    leaf generic {
                                      type rt-types:generalized-label;
                                      description
                                        "TE label specified in a generic format.";
                                    }
                                  }  // choice technology
    
                                  leaf direction {
                                    type te-label-direction;
                                    default
                                      "forward";
                                    description
                                      "Label direction.";
                                  }
                                }  // container te-label
                              }  // container label-hop
                            }  // case label
                          }  // choice type
                        }  // list route-object-include-object
                      }  // container explicit-route-include-objects
                    }  // list optimization-metric
    
                    container tiebreakers {
                      status deprecated;
                      description
                        "Container for the list of tiebreakers.
    
    This container has been deprecated by the tiebreaker
    leaf.";
                      list tiebreaker {
                        key "tiebreaker-type";
                        status deprecated;
                        description
                          "The list of tiebreaker criteria to apply on an
    equally favored set of paths, in order to pick
    the best.";
                        leaf tiebreaker-type {
                          type identityref {
                            base path-metric-type;
                          }
                          status deprecated;
                          description
                            "Identifies an entry in the list of tiebreakers.";
                        }
                      }  // list tiebreaker
                    }  // container tiebreakers
                  }  // case metric
    
                  case objective-function {
                    if-feature path-optimization-objective-function;
                    container objective-function {
                      description
                        "The objective function container that includes
    attributes to impose when computing a TE path.";
                      leaf objective-function-type {
                        type identityref {
                          base objective-function-type;
                        }
                        default
                          "te-types:of-minimize-cost-path";
                        description
                          "Objective function entry.";
                      }
                    }  // container objective-function
                  }  // case objective-function
                }  // choice algorithm
              }  // container optimizations
    
              leaf tiebreaker {
                type identityref {
                  base path-tiebreaker-type;
                }
                default
                  "te-types:path-tiebreaker-random";
                description
                  "The tiebreaker criteria to apply on an equally favored set
    of paths, in order to pick the best.";
              }
            }  // list vn-member-list
    
            leaf vn-level-diversity {
              type te-types:te-path-disjointness;
              description
                "The type of disjointness on the VN level (i.e., across all
    VN members).";
            }
          }
    
          output {
            container te-topology-identifier {
              description
                "TE topology identifier container.";
              leaf provider-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a provider.
    If omitted, it assumes that the topology provider ID
    value = 0 (the default).";
              }
    
              leaf client-id {
                type te-global-id;
                default "0";
                description
                  "An identifier to uniquely identify a client.
    If omitted, it assumes that the topology client ID
    value = 0 (the default).";
              }
    
              leaf topology-id {
                type te-topology-id;
                default "";
                description
                  "When the datastore contains several topologies,
    'topology-id' distinguishes between them.
    
    If omitted, the default (empty) string for this leaf is
    assumed.";
              }
            }  // container te-topology-identifier
    
            leaf abstract-node {
              type leafref {
                path "/nw:networks/nw:network/nw:node/tet:te-node-id";
              }
              description
                "A reference to the abstract node in TE Topology.";
            }
    
            list vn-member-list {
              key "id";
              description
                "List of VN members in a VN.";
              leaf id {
                type vnm-id;
                description
                  "A vn-member identifier.";
              }
    
              container src {
                description
                  "The source of VN member.";
                leaf ap {
                  type leafref {
                    path "/access-point/ap/id";
                  }
                  description
                    "A reference to the source AP.";
                }
    
                leaf vn-ap-id {
                  type leafref {
                    path "/access-point/ap[id=current()/../ap]/vn-ap/id";
                  }
                  description
                    "A reference to the source VNAP.";
                }
    
                leaf multi-src {
                  if-feature multi-src-dest;
                  type boolean;
                  default "false";
                  description
                    "Is the source part of a multi-source, where
    only one of the sources is enabled?";
                }
              }  // container src
    
              container dest {
                description
                  "The destination of the VN member.";
                leaf ap {
                  type leafref {
                    path "/access-point/ap/id";
                  }
                  description
                    "A reference to the destination AP.";
                }
    
                leaf vn-ap-id {
                  type leafref {
                    path "/access-point/ap[id=current()/../ap]/vn-ap/id";
                  }
                  description
                    "A reference to the destination VNAP.";
                }
    
                leaf multi-dest {
                  if-feature multi-src-dest;
                  type boolean;
                  default "false";
                  description
                    "Is the destination part of a multi-destination,
    where only one of the destinations is enabled.";
                }
              }  // container dest
    
              leaf connectivity-matrix-id {
                type leafref {
                  path "/nw:networks/nw:network/nw:node/tet:te/tet:te-node-attributes/tet:connectivity-matrices/tet:connectivity-matrix/tet:id";
                }
                description
                  "A reference to the connectivity-matrix.";
                reference
                  "RFC 8795: YANG Data Model for Traffic Engineering (TE)
                  	  Topologies";
    
              }
    
              container underlay {
                description
                  "An empty container that can be augmented with underlay
    technology information not supported by RFC 8795 (for
    example, Segment Routing (SR).";
              }  // container underlay
    
              leaf if-selected {
                if-feature multi-src-dest;
                type boolean;
                default "false";
                description
                  "Is the vn-member selected among the multi-source or
                 multi-destination options?";
                reference
                  "RFC 8453: Framework for Abstraction and Control of TE
                  	  Networks (ACTN), Section 7";
    
              }
    
              leaf compute-status {
                type vn-compute-status;
                description
                  "The VN-member compute state.";
              }
    
              container error-info {
                description
                  "Error information related to the VN member.";
                leaf error-description {
                  type string {
                    length "1..max";
                  }
                  description
                    "Textual representation of the error that occurred
                   during VN compute.";
                }
    
                leaf error-timestamp {
                  type yang:date-and-time;
                  description
                    "Timestamp of the attempt.";
                }
    
                leaf error-reason {
                  type identityref {
                    base vn-computation-error-reason;
                  }
                  description
                    "Reason for the VN computation error.";
                }
              }  // container error-info
            }  // list vn-member-list
          }
        }  // rpc vn-compute
      }  // module ietf-vn
    

© 2024 YumaWorks, Inc. All rights reserved.