<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" docName="draft-ietf-teas-actn-vn-yang-15" category="std" ipr="trust200902" obsoletes="" updates="" xml:lang="en" sortRefs="true" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.9.0 -->
  <!-- Generated by id2xml 1.5.0 on 2019-10-29T05:04:27Z -->
	<front>
    <title abbrev="VN YANG Model">A YANG Data Model for Virtual Network (VN) Operations</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-teas-actn-vn-yang-15"/>
    <author fullname="Young Lee" initials="Y" surname="Lee" role="editor">
      <organization>Samsung Electronics</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/> 
          <country/>
        </postal>
        <email>younglee.tx@gmail.com</email>
      </address>
    </author>
    <author initials="D" surname="Dhody" fullname="Dhruv Dhody" role="editor">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Divyashree Techno Park, Whitefield</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560066</code>
          <country>India</country>
        </postal>
        <email>dhruv.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Daniele Ceccarelli" initials="D" surname="Ceccarelli">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Torshamnsgatan,48</street>
          <street>Stockholm, Sweden</street>
        </postal>
        <email>daniele.ceccarelli@ericsson.com</email>
      </address>
    </author>
    <author fullname="Igor Bryskin" initials="I" surname="Bryskin">
      <organization>Individual</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country/>
        </postal>
        <email>i_bryskin@yahoo.com</email>
      </address>
    </author>
    <author fullname="Bin Yeong Yoon" initials="B" surname="Yoon">
      <organization>ETRI</organization>
      <address>
        <postal>
          <street/>
          <city/>
          <region/>
          <code/>
          <country/>
        </postal>
        <email>byyun@etri.re.kr</email>
      </address>
    </author>
    <date year="2022"/>
    <workgroup>TEAS Working Group</workgroup>
    <abstract>
      <t>
   This document provides a YANG data model generally applicable to any
   mode of Virtual Network (VN) operations.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="sect-1" numbered="true" toc="default">
      <name>Introduction</name>
      <t>
   This document provides a YANG <xref target="RFC7950" format="default"/> data model generally applicable to any
   mode of Virtual Network (VN) operation.</t>
      <t>
   The VN model defined in this document is applicable in generic sense
   as an independent model in and of itself. The VN model defined in
   this document can also work together with other customer service
   models such as L3SM <xref target="RFC8299" format="default"/>, L2SM <xref target="RFC8466" format="default"/> and L1CSM <xref target="I-D.ietf-ccamp-l1csm-yang" format="default"/> to
   provide a complete life-cycle service management and operations.</t>
      <t>
   The YANG model discussed in this document basically provides the
   following:</t>
      <ul spacing="normal">
        <li>Characteristics of Access Points (APs) that describe customer's
      end point characteristics;</li>
        <li>Characteristics of Virtual Network Access Points (VNAP) that
      describe how an AP is partitioned for multiple VNs sharing the AP
      and its reference to a Link Termination Point (LTP) of the
      Provider Edge (PE) Node;</li>
        <li>Characteristics of Virtual Networks (VNs) that describe the
      customer's VN in terms of multiple VN Members comprising a VN, multi-
      source and/or multi-destination characteristics of the VN Member, the
      VN's reference to TE-topology's Abstract Node;</li>
      </ul>
      <t>
   The actual VN instantiation and computation is performed with
   Connectivity Matrices sub-module of TE-Topology Model <xref target="RFC8795" format="default"/>
   which provides TE network topology abstraction and management
   operation. Once TE-topology Model is used in triggering VN
   instantiation over the networks, TE-tunnel <xref target="I-D.ietf-teas-yang-te" format="default"/> Model will
   inevitably interact with TE-Topology model for setting up actual
   tunnels and LSPs under the tunnels.</t>
      <t>
   Abstraction and Control of Traffic Engineered Networks (ACTN)
   describes a set of management and control functions used to operate
   one or more TE networks to construct virtual networks that can be
   represented to customers and that are built from abstractions of the
   underlying TE networks <xref target="RFC8453" format="default"/>. ACTN is the primary example of the
   usage of the VN YANG model.</t>
      <t>
   Sections 2 and 3 provide the discussion of how the VN YANG model is
   applicable to the ACTN context where Virtual Network Service (VNS)
   operation is implemented for the Customer Network Controller (CNC)-
   Multi-Domain Service Coordinator (MSDC) interface (CMI).</t>
      <t>
   The YANG model on the CMI is also known as customer service model in
   <xref target="RFC8309" format="default"/>. The YANG model discussed in this document is used to
   operate customer-driven VNs during the VN instantiation, VN
   computation, and its life-cycle service management and operations.</t>
      <t>
   The VN operational state is included in the same tree as the
   configuration consistent with Network Management Datastore
   Architecture (NMDA) <xref target="RFC8342" format="default"/>.  The origin of the data is indicated
   as per the origin metadata annotation.</t>
      <section anchor="sect-1.1" numbered="true" toc="default">
        <name>Terminology</name>
        <t>
   Refer to <xref target="RFC8453" format="default"/>, <xref target="RFC7926" format="default"/>, and <xref target="RFC8309" format="default"/> for the key terms used
   in this document.</t>
        <!--<section toc="default" numbered="true">
          <name>Requirements Language</name>
          <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
      "MAY", and "OPTIONAL" in this document are to be interpreted as
      described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
      appear in all capitals, as shown here.</t>
        </section>-->
      </section>

      <section anchor="sect-1.2" numbered="true" toc="default">
        <name>Tree diagram</name>
        <t>
   A simplified graphical representation of the data model is used in
   Section 5 of this this document.  The meaning of the symbols in
   these diagrams is defined in <xref target="RFC8340" format="default"/>.</t>
      </section>
      <section anchor="sect-1.3" numbered="true" toc="default">
        <name>Prefixes in Data Node Names</name>
        <t>
   In this document, names of data nodes and other data model objects
   are prefixed using the standard prefix associated with the
   corresponding YANG imported modules, as shown in Table 1.</t>
        <table anchor="tab-prefixes-and-corresponding-yang-modules" align="center">
          <name>Prefixes and corresponding YANG modules</name>
          <thead>
            <tr>
              <th align="left"> Prefix</th>
              <th align="left"> YANG module</th>
              <th align="left"> Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">vn</td>
              <td align="left">ietf-vn</td>
              <td align="left">[RFCXXXX]</td>
            </tr>
            <tr>
              <td align="left">yang</td>
              <td align="left">ietf-yang-types</td>
              <td align="left">
                <xref target="RFC6991" format="default"/></td>
            </tr>
            <tr>
              <td align="left">nw</td>
              <td align="left">ietf-network</td>
              <td align="left">
                <xref target="RFC8345" format="default"/></td>
            </tr>
            <tr>
              <td align="left">nt</td>
              <td align="left">ietf-network-topology</td>
              <td align="left">
                <xref target="RFC8345" format="default"/></td>
            </tr>
            <tr>
              <td align="left">te-types</td>
              <td align="left">ietf-te-types</td>
              <td align="left">
                <xref target="RFC8776" format="default"/></td>
            </tr>
            <tr>
              <td align="left">tet</td>
              <td align="left">ietf-te-topology</td>
              <td align="left">
                <xref target="RFC8795" format="default"/></td>
            </tr>
          </tbody>
        </table>
        <t>
   Note: The RFC Editor will replace XXXX with the number assigned to
   the RFC once this draft becomes an RFC.</t>
      </section>
    </section>
    <section anchor="sect-2" numbered="true" toc="default">
      <name>Use-case of VN YANG Model in the ACTN context</name>
      <t>
   In this section, ACTN is being used to illustrate the general usage
   of the VN YANG model. The model presented in this section has the
   following ACTN context.</t>
      <figure anchor="ure-actn-cmi">
        <name>ACTN CMI</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
                          +-------+
                          |  CNC  |
                          +-------+
                              |
                              |    VN YANG + TE-topology YANG
                              |
                   +-----------------------+
                   |         MDSC          |
                   +-----------------------+
]]></artwork>
      </figure>
      <t>
   Both ACTN VN YANG and TE-topology models are used over the CMI to
   establish a VN over TE networks.</t>
      <!--<t>
   In the context of 5G transport application, 5G Traffic Provisioning
   Manager (TPM) that provides slicing requirements to the transport
   networks (i.e., MDSC) can be considered as a type of CNC. The ACTN
   CMI provides the necessary interface functions between 5G and
   transport networks in order to facilitate dynamic VN creation and
   its lifecycle management with proper feedback loop for monitoring.</t>-->

	<section anchor="sect-2.1" numbered="true" toc="default">
        <name>Type 1 VN</name>
        <t>
   As defined in <xref target="RFC8453" format="default"/>, a Virtual Network is a customer view of the
   TE network.  To recapitulate VN types from <xref target="RFC8453" format="default"/>, Type 1 VN is
   defined as follows:</t>
        <t>
   The VN can be seen as a set of edge-to-edge abstract links (a Type 1
   VN).  Each abstract link is referred to as a VN member and is formed
   as an end-to-end tunnel across the underlying networks. Such tunnels
   may be constructed by recursive slicing or abstraction of paths in
   the underlying networks and can encompass edge points of the
   customer's network, access links, intra-domain paths, and inter-
   domain links.</t>
        <dl newline="true" spacing="normal" indent="1">
          <dt>If we were to create a VN where we have four VN-members as follows:</dt>
          <dd/>
        </dl>
        <artwork name="" type="" align="left" alt=""><![CDATA[
               VN-Member 1       L1-L4
               VN-Member 2       L1-L7
               VN-Member 3       L2-L4
               VN-Member 4       L3-L8
]]></artwork>
        <dl newline="false" spacing="normal" indent="7">
          <dt/>
          <dd>
          Where L1, L2, L3, L4, L7 and L8 correspond to a Customer
          End-Point, respectively.</dd>
        </dl>
        <t>
   This VN can be modeled as one abstract node representation as
   follows in Figure 2:</t>
        <figure anchor="ure-abstract-node-one-node-topology">
          <name>Abstract Node (One node topology)</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                     +---------------+
            L1 ------|               |------ L4
            L2 ------|     AN 1      |------ L7
            L3 ------|               |------ L8
                     +---------------+
]]></artwork>
        </figure>
        <t>
   Modeling a VN as one abstract node is the easiest way for customers
   to express their end-to-end connectivity; however, customers are not
   limited to express their VN only with one abstract node. <!--In some
   cases, more than one abstract nodes can be employed to express their
   VN.-->
        </t>
      </section>
      <section anchor="sect-2.2" numbered="true" toc="default">
        <name>Type 2 VN</name>
        <t>
   For some VN members of a VN, the customers are allowed to configure
   the actual path (i.e., detailed virtual nodes and virtual links)
   over the VN/abstract topology agreed mutually between CNC and MDSC
   prior to or a topology created by the MDSC as part of VN
   instantiation. <!--Type 2 VN is always built on top of a Type 1 VN.-->Type 1 VN is a higher abstraction of a Type 2 VN.</t>
        <t>
   If a Type 2 VN is desired for some or all of VN members of a type 1
   VN (see the example in <xref target="sect-2.1" format="default"/>), the TE-topology model can
   provide the following abstract topology (that consists of virtual
   nodes and virtual links) which is built under the Type 1 VN.</t>
        <figure anchor="ure-type-2-topology">
          <name>Type 2 topology</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
           +----------------------------------------------+
           |             S1               S2              |
           |              O---------------O               |
           |     ________/ \______         \              |
           |    /                 \         \             |
           |S3 /                   \ S4      \ S5         |
     L1----|-O----------------------O---------O-----------|------L4
           |   \                     \         \          |
           |    \                     \         \         |
           |     \ S6                  \ S7      \ S8     |
           |      O     ----------------O---------O-------|------L7
           |     / \   /                 \   ____/        |
           |S9  /   \ /S10                \ /             |
    L2-----|---O-----O---------------------O--------------|------L8
           |  /                          S11              |
    L3-----|--                                            |
           |                                              |
           +----------------------------------------------+
]]></artwork>
        </figure>
        <t>
   As you see from Figure 3, the Type 1 abstract node is depicted as a
   Type 1 abstract topology comprising of detailed virtual nodes and
   virtual links.</t>
        <t>
   As an example, if VN-member 1 (L1-L4) is chosen to configure its own
   path over Type 2 topology, it can select, say, a path that consists
   of the ERO {S3,S4,S5} based on the topology and its service
   requirement.  This capability is enacted via TE-topology
   configuration by the customer.</t>
      </section>
    </section>
    <section anchor="sect-3" numbered="true" toc="default">
      <name>High-Level Control Flows with Examples</name>
      <section anchor="sect-3.1" numbered="true" toc="default">
        <name>Type 1 VN Illustration</name>
        <dl newline="true" spacing="normal" indent="1">
          <dt>If we were to create a VN where we have four VN-members as follows:</dt>
          <dd/>
        </dl>
        <artwork name="" type="" align="left" alt=""><![CDATA[
               VN-Member 1       L1-L4
               VN-Member 2       L1-L7
               VN-Member 3       L2-L4
               VN-Member 4       L3-L8
]]></artwork>
        <t>
   Where L1, L2, L3, L4, L7 and L8 correspond to Access Points.</t>
        <t>
   This VN can be modeled as one abstract node representation as
   follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
                     +---------------+
            L1 ------|               |------ L4
            L2 ------|     AN 1      |------ L7
            L3 ------|               |------ L8
                     +---------------+
]]></artwork>
        <t>
   If this VN is Type 1, the following diagram shows the message flow
   between CNC and MDSC to instantiate this VN using VN and TE-Topology
   Models.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
           +--------+                        +--------+
            |  CNC   |                        |  MDSC  |
            +--------+                        +--------+
                 |                                 |
                 |                                 |
CNC POST TE-topo |  POST /nw:networks/nw:network/  |
model(with Conn. |  nw:node/te-node-id/            |
Matrix on one    |  tet:connectivity-matrices/     |
Abstract node    |  tet:connectivity-matrix        |
                 |-------------------------------->|
                 |                   HTTP 200      |
                 |<--------------------------------|
                 |                                 |
CNC POST the     |  POST /virtual-network          |
VN identifying   |-------------------------------->| If there is
AP, VNAP and VN- |                                 | multi-src/dest
Members and maps |                                 | then MDSC 
to the TE-topo   |                 HTTP 200        | selects a
                 |<--------------------------------| src or dest
                 |                                 | and update
                 |                                 | VN YANG
CNC GET the      |  GET /virtual-network           |
VN YANG status   |-------------------------------->|
                 |                                 |
                 |  HTTP 200 (VN with status:      |
                 |  selected VN-members            |
                 |  in case of multi s-d)          |
                 |<--------------------------------|
                 |                                 |
]]></artwork>
      </section>
      <section anchor="sect-3.2" numbered="true" toc="default">
        <name>Type 2 VN Illustration</name>
        <t>
   For some VN members, the customer may want to "configure" explicit
   routes over the path that connects its two end-points. Let us
   consider the following example.</t>
        <ul empty="true" spacing="normal">
          <li>
            <dl newline="false" spacing="normal" indent="1">
              <dt>VN-Member 1</dt>
              <dd>
                <t>
	L1-L4 (via S3, S4, and S5)
                </t>
                <t/>
              </dd>
              <dt>VN-Member 2</dt>
              <dd>
                <t>
	L1-L7 (via S3, S4, S7 and S8)
                </t>
                <t/>
              </dd>
              <dt>VN-Member 3</dt>
              <dd>
                <t>
	L2-L7 (via S9, S10, and S11)
                </t>
                <t/>
              </dd>
              <dt>VN-Member 4</dt>
              <dd>
                <t>
	L3-L8 (via S9, S10 and S11)
                </t>
                <t/>
              </dd>
            </dl>
          </li>
        </ul>
        <t>
   Where the following topology is the underlay for Abstraction Node 1
   (AN1).</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
                                AN1
           ............................................
           .             S1               S2          .
           .              O---------------O           .
           .     ________/ \______         \          .
           .    /                 \         \         .
           . S3/                   \ S4      \ S5     .
     L1----.-O----------------------O---------O-------.----------L4
           .  \                      \         \      .
           .   \                      \         \     .
           .    \ S6                   \ S7      \ S8 .
           .      O     ----------------O---------O---.----------L5
           .     / \   /                 \   ____/ \__.__________L6
           .S9  /   \ /S10                \ /         .
    L2-----.---O-----O---------------------O----------.----------L7
           .  /                          S11\_________.__________L8
    L3-----.--                                        .
           ............................................
]]></artwork>
        <t>
   There are two options depending on whether CNC or MDSC creates the
   single abstract node topology.</t>
        <t>
   Case 1:</t>
        <t>
   If CNC creates the single abstract node topology, the following
   diagram shows the message flow between CNC and MDSC to instantiate
   this VN using VN and TE-Topology Model.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
            +--------+                                +--------+
            |  CNC   |                                |  MDSC  |
            +--------+                                +--------+
                 |                                         |
                 |                                         |
CNC POST TE-topo |  POST /nw:networks/nw:network/          |
model(with Conn. |  nw:node/te-node-id/tet:connectivity-   |
Matrix on one    |  matrices/tet:connectivity-matrix       |
Abstract node and|---------------------------------------->|
Explicit paths in|                                         |
the conn. matrix)|                       HTTP 200          |
                 |<----------------------------------------|
                 |                                         |
CNC POST the     |  POST /virtual-network                  |
VN identifying   |---------------------------------------->|
AP, VNAP and VN- |                                         |
Members and maps |                                         |
to the TE-topo   |                         HTTP 200        |
                 |<----------------------------------------|
                 |                                         |
                 |                                         |
CNC GET the      |  GET /virtual-network                   |
VN YANG status   |---------------------------------------->|
                 |                                         |
                 |  HTTP 200 (VN with status)              |
                 |<----------------------------------------|
                 |                                         |


]]></artwork>
<t>Case 2:</t>
        <t>
   On the other hand, if MDSC create the single abstract node topology
   based VN YANG posted by the CNC, the following diagram shows the
   message flow between CNC and MDSC to instantiate this VN using VN
   and TE-Topology Models.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[

            +--------+                        +--------+
            |  CNC   |                        |  MDSC  |
            +--------+                        +--------+
                 |                                 |
                 |                                 |
CNC POST VN      |                                 |
Identifying AP,  |                                 |
VNAP and VN-     |  POST /virtual-network          | MDSC populates
Members          |-------------------------------->| a single Abst.
                 |                 HTTP 200        | node topology
                 |<--------------------------------| by itself
                 |                                 |
CNC GET VN &     |  GET /virtual-network  &        |
POST TE-Topo     |  POST /nw:networks/nw:network/  |
Models (with     |  nw:node/te-node-id/tet:        |
Conn. Matrix     |  connectivity-matrices/         |
on the           |  tet:connectivity-matrix        |
Abstract Node    |-------------------------------->|
and explicit     |                                 |
paths in the     |                                 |
conn. matrix)    |                                 |
                 |                 HTTP 200        |
                 |<--------------------------------|
                 |                                 |
                 |                                 |
CNC GET the      |  GET /virtual-network           |
VN YANG status   |-------------------------------->|
                 |                                 |
                 |  HTTP 200 (VN with status)      |
                 |<--------------------------------|
                 |                                 |
]]></artwork>
        <t>
   <xref target="sect-7" format="default"/> provides JSON examples for both VN model and TE-topology
   Connectivity Matrix sub-model to illustrate how a VN can be created
   by the CNC making use of the VN module as well as the TE-topology
   Connectivity Matrix module.</t>
        <section anchor="sect-3.3" numbered="true" toc="default">
          <name>VN and AP Usage</name>
          <t>The customer access information may be known at the time of VN creation. A shared logical AP identifier is used between the customer and the operator to identify the access link between Customer Edge (CE) and Provider Edge (PE) . This is described in Section 6 of <xref target="RFC8453" format="default"/>.</t>
          <t>In some VN operations, the customer access may not be known at the initial VN creation. The VN operation allow a creation of VN with only PE identifier as well. The customer access information could be added later.</t>
          <t>To achieve this the 'ap' container has a leaf for 'pe' node that allows AP to be created with PE information. The vn-member (and vn) could use APs that only have PE information initially.</t>
        </section>
      </section>
    </section>
    <section anchor="sect-4" numbered="true" toc="default">
      <name>VN Model Usage</name>
      <section anchor="sect-4.1" numbered="true" toc="default">
        <name>Customer view of VN</name>
        <t>
   The VN-YANG model allows to define a customer view, and allows the
   customer to communicate using the VN constructs as described in the
   <xref target="RFC8454" format="default"/>. It also allows to group the set of edge-to-edge links
   (i.e., VN members) under a common umbrella of VN. This allows the
   customer to instantiate and view the VN as one entity, making it
   easier for some customers to work on VN without worrying about the
   details of the provider based YANG models.</t>
        <t>
   This is similar to the benefits of having a separate YANG model for
   the customer services as described in <xref target="RFC8309" format="default"/>, which states that
   service models do not make any assumption of how a service is
   actually engineered and delivered for a customer.</t>
      </section>
      <section anchor="sect-4.2" numbered="true" toc="default">
        <name>Auto-creation of VN by MDSC</name>
        <t>
   The VN could be configured at the MDSC explicitly by the CNC using
   the VN YANG model. In some other cases, the VN is not explicitly
   configured, but created automatically by the MDSC based on the
   customer service model and local policy, even in these case the VN
   YANG model can be used by the CNC to learn details of the underlying
   VN created to meet the requirements of customer service model.</t>
      </section>
      <section anchor="sect-4.3" numbered="true" toc="default">
        <name>Innovative Services</name>
        <section anchor="sect-4.3.1" numbered="true" toc="default">
          <name>VN Compute</name>
          <t>
   VN Model supports VN compute (pre-instantiation mode) to view the
   full VN as a single entity before instantiation. Achieving this via
   path computation or "compute only" tunnel setup does not provide the
   same functionality.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
            +--------+                                +--------+
            |  CNC   |                                |  MDSC  |
            +--------+                                +--------+
                 |                                         |
                 |                                         |
CNC POST TE-topo |  POST /nw:networks/nw:network/          |
model(with Conn. |  nw:node/te-node-id/tet:connectivity-   |
Matrix on one    |  matrices/tet:connectivity-matrix       |
Abstract node and|---------------------------------------->|
constraints in   |                                         |
the conn. matrix)|                       HTTP 200          |
                 |<----------------------------------------|            
                 |                                         |
                 |                                         |
CNC calls RPC to |  RPC /vn-compute                        |
compute the VN   |---------------------------------------->|
as per the       |                                         |
refered TE-Topo  |                                         |
                 |                                         |
                 |           HTTP 200 (Computed VN)        |
                 |<----------------------------------------|
                 |                                         |

]]></artwork>
          <t>The VN compute RPC allow you to optionally include the constraints and the optimization criteria at the VN as well as at the individual VN-member level. Thus, the RPC can be used independently to get the computed VN result
   without creating an abstract topology first.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
            +--------+                                +--------+
            |  CNC   |                                |  MDSC  |
            +--------+                                +--------+
                 |                                         |
                 |                                         |
CNC calls RPC to |  RPC /vn-compute                        |
compute the VN   |---------------------------------------->|
as per the       |                                         |
constraints and  |                                         |
VN-Members       |                                         |
                 |           HTTP 200 (Computed VN)        |
                 |<----------------------------------------|
                 |                                         |

]]></artwork>
          <t>In either case 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. </t>
          <t>To achieve this the VN-compute RPC reuses the following common groupings:
          </t>
          <ul spacing="normal">
            <li>te-types:generic-path-constraints: This is used optionally in the RPC input at the VN and/or VN-member level. The VN-member level overrides the VN-level data. This also overrides any constraints in the referred abstract node in the TE topology.</li>
            <li>te-types:generic-path-optimization: This is used optionally in the RPC input at the VN and/or VN-member level. The VN-member level overrides the VN-level data. This also overrides any optimization in the referred abstract node in the TE topology.</li>
            <li>vn-member: This identifies the VN member in both RPC input and output.</li>
            <li>vn-policy: This is used optionally in the RPC input to apply any VN level policies.</li>
          </ul>
          <t>When MDSC receives this RPC it computes the VN based on the input provided in the RPC call. This computation does not create a VN or reserve any resources in the system, it simply computes the resulting VN based on information at the MDSC or in coordination with the CNC. A single node abstract topology is used to convey the result of the each VN member as a reference to the connectivity-matrix-id. In case of error, the error information is included.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[

  rpcs:
    +---x vn-compute
       +---w input
       |  +---w te-topology-identifier
       |  |  +---w provider-id?   te-global-id
       |  |  +---w client-id?     te-global-id
       |  |  +---w topology-id?   te-topology-id
       |  +---w abstract-node?
       |  |       -> /nw:networks/network/node/tet:te-node-id
       |  +---w path-constraints
       |  |  +---w te-bandwidth
       |  |  |  +---w (technology)?
       |  |  |        ...
       |  |  +---w link-protection?          identityref
       |  |  +---w setup-priority?           uint8
       |  |  +---w hold-priority?            uint8
       |  |  +---w signaling-type?           identityref
       |  |  +---w path-metric-bounds
       |  |  |  +---w path-metric-bound* [metric-type]
       |  |  |        ...
       |  |  +---w path-affinities-values
       |  |  |  +---w path-affinities-value* [usage]
       |  |  |        ...
       |  |  +---w path-affinity-names
       |  |  |  +---w path-affinity-name* [usage]
       |  |  |        ...
       |  |  +---w path-srlgs-lists
       |  |  |  +---w path-srlgs-list* [usage]
       |  |  |        ...
       |  |  +---w path-srlgs-names
       |  |  |  +---w path-srlgs-name* [usage]
       |  |  |        ...
       |  |  +---w disjointness?             te-path-disjointness
       |  +---w cos?                      te-types:te-ds-class
       |  +---w optimizations
       |  |  +---w (algorithm)?
       |  |     +--:(metric) {path-optimization-metric}?
       |  |     |     ...
       |  |     +--:(objective-function)
       |  |              {path-optimization-objective-function}?
       |  |           ...
       |  +---w vn-member-list* [vnm-id]
       |  |  +---w vnm-id                    vnm-id
       |  |  +---w src
       |  |  |  +---w src?            -> /access-point/ap/ap-id
       |  |  |  +---w src-vn-ap-id?
       |  |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
       |  |  |  +---w multi-src?      boolean {multi-src-dest}?
       |  |  +---w dest
       |  |  |  +---w dest?            -> /access-point/ap/ap-id
       |  |  |  +---w dest-vn-ap-id?
       |  |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
       |  |  |  +---w multi-dest?      boolean {multi-src-dest}?
       |  |  +---w connectivity-matrix-id?   leafref
       |  |  +---w underlay
       |  |  +---w path-constraints
       |  |  |  +---w te-bandwidth
       |  |  |  |     ...
       |  |  |  +---w link-protection?          identityref
       |  |  |  +---w setup-priority?           uint8
       |  |  |  +---w hold-priority?            uint8
       |  |  |  +---w signaling-type?           identityref
       |  |  |  +---w path-metric-bounds
       |  |  |  |     ...
       |  |  |  +---w path-affinities-values
       |  |  |  |     ...
       |  |  |  +---w path-affinity-names
       |  |  |  |     ...
       |  |  |  +---w path-srlgs-lists
       |  |  |  |     ...
       |  |  |  +---w path-srlgs-names
       |  |  |  |     ...
       |  |  |  +---w disjointness?             te-path-disjointness
       |  |  +---w cos?                      te-types:te-ds-class
       |  |  +---w optimizations
       |  |     +---w (algorithm)?
       |  |           ...
       |  +---w vn-level-diversity?
       |          te-types:te-path-disjointness
       +--ro output
          +--ro te-topology-identifier
          |  +--ro provider-id?   te-global-id
          |  +--ro client-id?     te-global-id
          |  +--ro topology-id?   te-topology-id
          +--ro abstract-node?
          |       -> /nw:networks/network/node/tet:te-node-id
          +--ro vn-member-list* [vnm-id]
             +--ro vnm-id                    vnm-id
             +--ro src
             |  +--ro src?            -> /access-point/ap/ap-id
             |  +--ro src-vn-ap-id?
             |  |       -> /access-point/ap/vn-ap/vn-ap-id
             |  +--ro multi-src?      boolean {multi-src-dest}?
             +--ro dest
             |  +--ro dest?            -> /access-point/ap/ap-id
             |  +--ro dest-vn-ap-id?
             |  |       -> /access-point/ap/vn-ap/vn-ap-id
             |  +--ro multi-dest?      boolean {multi-src-dest}?
             +--ro connectivity-matrix-id?   leafref
             +--ro underlay
             +--ro if-selected?              boolean
             |       {multi-src-dest}?
             +--ro compute-status?           vn-compute-status
             +--ro error-info
                +--ro error-description?   string
                +--ro error-timestamp?     yang:date-and-time
                +--ro error-reason?        identityref

]]></artwork>
        </section>
        <section anchor="sect-4.3.2" numbered="true" toc="default">
          <name>Multi-sources and Multi-destinations</name>
          <t>
   In creating a virtual network, the list of sources or destinations
   or both may not be pre-determined by the customer. For instance, for
   a given source, there may be a list of multiple-destinations to
   which the optimal destination may be chosen depending on the network
   resource situations. Likewise, for a given destination, there may
   also be multiple-sources from which the optimal source may be
   chosen. In some cases, there may be a pool of multiple sources and
   destinations from which the optimal source-destination may be
   chosen. The following YANG module is shown for describing source
   container and destination container. The following YANG tree shows
   how to model multi-sources and multi-destinations.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
  
module: ietf-vn
  +--rw virtual-network
     +--rw vn* [vn-id]
        +--rw vn-id                     vn-id
        +--rw te-topology-identifier
        |  +--rw provider-id?   te-global-id
        |  +--rw client-id?     te-global-id
        |  +--rw topology-id?   te-topology-id
        +--rw abstract-node?
        |       -> /nw:networks/network/node/tet:te-node-id
        +--rw vn-member* [vnm-id]
        |  +--rw vnm-id                    vnm-id
        |  +--rw src
        |  |  +--rw src?            -> /access-point/ap/ap-id
        |  |  +--rw src-vn-ap-id?
        |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
        |  |  +--rw multi-src?      boolean {multi-src-dest}?
        |  +--rw dest
        |  |  +--rw dest?            -> /access-point/ap/ap-id
        |  |  +--rw dest-vn-ap-id?
        |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
        |  |  +--rw multi-dest?      boolean {multi-src-dest}?
        |  +--rw connectivity-matrix-id?   leafref
        |  +--rw underlay
        |  +--ro oper-status?              te-types:te-oper-status
        |  +--ro if-selected?              boolean {multi-src-dest}?
        +--rw admin-status?             te-types:te-admin-status
        +--ro oper-status?              te-types:te-oper-status
        +--rw vn-level-diversity?       te-types:te-path-disjointness


]]></artwork>
        </section>
        <section anchor="sect-4.3.3" numbered="true" toc="default">
          <name>Others</name>
          <t>
   The VN YANG model can be easily augmented to support the mapping of
   VN to the Services such as L3SM and L2SM as described in <xref target="I-D.ietf-teas-te-service-mapping-yang" format="default"/>.</t>
          <t>
   The VN YANG model can be extended to support telemetry, performance
   monitoring and network autonomics as described in <xref target="I-D.ietf-teas-actn-pm-telemetry-autonomics" format="default"/>.</t>
          <t>Note that the YANG model is tightly coupled with the TE Topology model <xref target="RFC8795" format="default"/>. Any underlay technology not supported by <xref target="RFC8795" format="default"/> is also not supported by this model. The model does include an empty container called "underlay" that can be augmented. For example the SR-policy information can be augmented for the SR underlay by a future model.</t>

        <t>Apart from the te-types:generic-path-constraints and te-types:generic-path-optimization, an additional leaf cos for class of service <xref target="RFC4124"/> is added to represent the  Class-Type of traffic to be used as one of the path constraints.</t>  
        </section>
        <section anchor="sect-4.3.4" numbered="true" toc="default">
          <name>Summary</name>
          <t>
   This section summarizes the innovative service features of the VN
   YANG.</t>
          <ul spacing="normal">
            <li>Maintenance of AP and VNAP along with VN</li>
            <li>VN construct to group of edge-to-edge links</li>
            <li>VN Compute (pre-instantiate)</li>
            <li>Multi-Source / Multi-Destination</li>
            <li>
              <t>Ability to support various VN and VNS Types
              </t>
              <ul spacing="normal">
                <li>VN Type 1: Customer configures the VN as a set of VN
             Members.
             No other details need to be set by customer, making for a
             simplified operations for the customer.</li>
                <li>VN Type 2: Along with VN Members, the customer could also
             provide an abstract topology, this topology is provided by
             the Abstract TE Topology YANG Model.</li>
              </ul>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sect-5" numbered="true" toc="default">
      <name>VN YANG Model (Tree Structure)</name>
      <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-vn
  +--rw access-point
  |  +--rw ap* [ap-id]
  |     +--rw ap-id            ap-id
  |     +--rw pe?
  |     |       -> /nw:networks/network/node/tet:te-node-id
  |     +--rw max-bandwidth?   te-types:te-bandwidth
  |     +--rw avl-bandwidth?   te-types:te-bandwidth
  |     +--rw vn-ap* [vn-ap-id]
  |        +--rw vn-ap-id         ap-id
  |        +--rw vn?              -> /virtual-network/vn/vn-id
  |        +--rw abstract-node?
  |        |       -> /nw:networks/network/node/tet:te-node-id
  |        +--rw ltp?             leafref
  |        +--ro max-bandwidth?   te-types:te-bandwidth
  +--rw virtual-network
     +--rw vn* [vn-id]
        +--rw vn-id                     vn-id
        +--rw te-topology-identifier
        |  +--rw provider-id?   te-global-id
        |  +--rw client-id?     te-global-id
        |  +--rw topology-id?   te-topology-id
        +--rw abstract-node?
        |       -> /nw:networks/network/node/tet:te-node-id
        +--rw vn-member* [vnm-id]
        |  +--rw vnm-id                    vnm-id
        |  +--rw src
        |  |  +--rw src?            -> /access-point/ap/ap-id
        |  |  +--rw src-vn-ap-id?
        |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
        |  |  +--rw multi-src?      boolean {multi-src-dest}?
        |  +--rw dest
        |  |  +--rw dest?            -> /access-point/ap/ap-id
        |  |  +--rw dest-vn-ap-id?
        |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
        |  |  +--rw multi-dest?      boolean {multi-src-dest}?
        |  +--rw connectivity-matrix-id?   leafref
        |  +--rw underlay
        |  +--ro oper-status?              te-types:te-oper-status
        |  +--ro if-selected?              boolean {multi-src-dest}?
        +--rw admin-status?             te-types:te-admin-status
        +--ro oper-status?              te-types:te-oper-status
        +--rw vn-level-diversity?       te-types:te-path-disjointness

  rpcs:
    +---x vn-compute
       +---w input
       |  +---w te-topology-identifier
       |  |  +---w provider-id?   te-global-id
       |  |  +---w client-id?     te-global-id
       |  |  +---w topology-id?   te-topology-id
       |  +---w abstract-node?
       |  |       -> /nw:networks/network/node/tet:te-node-id
       |  +---w path-constraints
       |  |  +---w te-bandwidth
       |  |  |  +---w (technology)?
       |  |  |        ...
       |  |  +---w link-protection?          identityref
       |  |  +---w setup-priority?           uint8
       |  |  +---w hold-priority?            uint8
       |  |  +---w signaling-type?           identityref
       |  |  +---w path-metric-bounds
       |  |  |  +---w path-metric-bound* [metric-type]
       |  |  |        ...
       |  |  +---w path-affinities-values
       |  |  |  +---w path-affinities-value* [usage]
       |  |  |        ...
       |  |  +---w path-affinity-names
       |  |  |  +---w path-affinity-name* [usage]
       |  |  |        ...
       |  |  +---w path-srlgs-lists
       |  |  |  +---w path-srlgs-list* [usage]
       |  |  |        ...
       |  |  +---w path-srlgs-names
       |  |  |  +---w path-srlgs-name* [usage]
       |  |  |        ...
       |  |  +---w disjointness?             te-path-disjointness
       |  +---w cos?                      te-types:te-ds-class
       |  +---w optimizations
       |  |  +---w (algorithm)?
       |  |     +--:(metric) {path-optimization-metric}?
       |  |     |     ...
       |  |     +--:(objective-function)
       |  |              {path-optimization-objective-function}?
       |  |           ...
       |  +---w vn-member-list* [vnm-id]
       |  |  +---w vnm-id                    vnm-id
       |  |  +---w src
       |  |  |  +---w src?            -> /access-point/ap/ap-id
       |  |  |  +---w src-vn-ap-id?
       |  |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
       |  |  |  +---w multi-src?      boolean {multi-src-dest}?
       |  |  +---w dest
       |  |  |  +---w dest?            -> /access-point/ap/ap-id
       |  |  |  +---w dest-vn-ap-id?
       |  |  |  |       -> /access-point/ap/vn-ap/vn-ap-id
       |  |  |  +---w multi-dest?      boolean {multi-src-dest}?
       |  |  +---w connectivity-matrix-id?   leafref
       |  |  +---w underlay
       |  |  +---w path-constraints
       |  |  |  +---w te-bandwidth
       |  |  |  |     ...
       |  |  |  +---w link-protection?          identityref
       |  |  |  +---w setup-priority?           uint8
       |  |  |  +---w hold-priority?            uint8
       |  |  |  +---w signaling-type?           identityref
       |  |  |  +---w path-metric-bounds
       |  |  |  |     ...
       |  |  |  +---w path-affinities-values
       |  |  |  |     ...
       |  |  |  +---w path-affinity-names
       |  |  |  |     ...
       |  |  |  +---w path-srlgs-lists
       |  |  |  |     ...
       |  |  |  +---w path-srlgs-names
       |  |  |  |     ...
       |  |  |  +---w disjointness?             te-path-disjointness
       |  |  +---w cos?                      te-types:te-ds-class
       |  |  +---w optimizations
       |  |     +---w (algorithm)?
       |  |           ...
       |  +---w vn-level-diversity?
       |          te-types:te-path-disjointness
       +--ro output
          +--ro te-topology-identifier
          |  +--ro provider-id?   te-global-id
          |  +--ro client-id?     te-global-id
          |  +--ro topology-id?   te-topology-id
          +--ro abstract-node?
          |       -> /nw:networks/network/node/tet:te-node-id
          +--ro vn-member-list* [vnm-id]
             +--ro vnm-id                    vnm-id
             +--ro src
             |  +--ro src?            -> /access-point/ap/ap-id
             |  +--ro src-vn-ap-id?
             |  |       -> /access-point/ap/vn-ap/vn-ap-id
             |  +--ro multi-src?      boolean {multi-src-dest}?
             +--ro dest
             |  +--ro dest?            -> /access-point/ap/ap-id
             |  +--ro dest-vn-ap-id?
             |  |       -> /access-point/ap/vn-ap/vn-ap-id
             |  +--ro multi-dest?      boolean {multi-src-dest}?
             +--ro connectivity-matrix-id?   leafref
             +--ro underlay
             +--ro if-selected?              boolean
             |       {multi-src-dest}?
             +--ro compute-status?           vn-compute-status
             +--ro error-info
                +--ro error-description?   string
                +--ro error-timestamp?     yang:date-and-time
                +--ro error-reason?        identityref


]]></artwork>
    </section>
    <section anchor="sect-6" numbered="true" toc="default">
      <name>VN YANG Model</name>
      <t>
   The YANG model is as follows:</t>
      <sourcecode name="ietf-vn@2022-07-11.yang" type="" markers="true"><![CDATA[
module ietf-vn {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-vn";
  prefix vn;

  /* Import network */

  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 network topology */

  import ietf-network-topology {
    prefix nt;
    reference
      "RFC 8345: A YANG Data Model for Network Topologies";
  }

  /* Import TE Common types */

  import ietf-te-types {
    prefix te-types;
    reference
      "RFC 8776: Common YANG Data Types for Traffic Engineering";
  }

  /* Import TE Topology */

  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>
           : Dhruv Dhody <dhruv.ietf@gmail.com>";
  description
    "This module contains a YANG module for the Virtual Network
     (VN). It describes a VN operation module that takes place
     in the context of the Customer Network Controller (CNC)-
     Multi-Domain Service Coordinator (MSDC) interface (CMI) of
     the Abstraction and Control of Traffic Engineered Networks
     (ACTN) architecture where the CNC is the actor of a VN
     Instantiation/modification/deletion as per RFC 8453.

     Copyright (c) 2022 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 XXXX; see the
     RFC itself for full legal notices.";

  revision 2022-07-11 {
    description
      "initial version.";
    reference
      "RFC XXXX: A YANG Data Model for VN Operation";
  }

  /* Features */

  feature multi-src-dest {
    description
      "Support for selection of one src or destination
       among multiple.";
    reference
      "RFC 8453: Framework for Abstraction and Control of TE
       Networks (ACTN)";
  }

  /* Typedef */

  typedef vn-id {
    type string;
    description
      "Defines a type of Virtual Network (VN) identifier.";
  }

  typedef ap-id {
    type string;
    description
      "Defines a type of Access Point (AP) identifier.";
  }

  typedef vnm-id {
    type string;
    description
      "Defines a type of VN member identifier.";
  }

  typedef vn-compute-status {
    type te-types:te-common-status;
    description
      "Defines a type representing the VN compute status. Note
       that all status apart from up and down are considered as
       unknown.";
  }

  /* identities */

  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
       CNC 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 source or destination AP not
       known.";
  }

  /* Groupings */

  grouping vn-ap {
    description
      "Virtual Network Access Points (VNAP) related information";
    leaf vn-ap-id {
      type ap-id;
      description
        "A unique identifier for the referred VNAP";
    }
    leaf vn {
      type leafref {
        path "/virtual-network/vn/vn-id";
      }
      description
        "A reference to the VN";
    }
    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 that
         represent the VN";
    }
    leaf ltp {
      type leafref {
        path "/nw:networks/nw:network/nw:node/"
           + "nt:termination-point/tet:te-tp-id";
      }
      description
        "A reference to Link Termination Point (LTP) in the
         TE-topology";
      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";
    }
    reference
      "RFC 8453: Framework for Abstraction and Control of TE
       Networks (ACTN), Section 6";
  } //vn-ap

  grouping access-point {
    description
      "AP related information";
    leaf ap-id {
      type ap-id;
      description
        "A unique identifier for the referred access point";
    }
    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 "vn-ap-id";
      uses vn-ap;
      description
        "List of VNAP in this AP";
    }
    reference
      "RFC 8453: Framework for Abstraction and Control of TE
       Networks (ACTN), Section 6";
  } //access-point

  grouping vn-member {
    description
      "The vn-member is described by this grouping";
    leaf vnm-id {
      type vnm-id;
      description
        "A vn-member identifier";
    }
    container src {
      description
        "The source of VN Member";
      leaf src {
        type leafref {
          path "/access-point/ap/ap-id";
        }
        description
          "A reference to source AP";
      }
      leaf src-vn-ap-id {
        type leafref {
          path "/access-point/ap/vn-ap/vn-ap-id";
        }
        description
          "A reference to source VNAP";
      }
      leaf multi-src {
        if-feature "multi-src-dest";
        type boolean;
        default "false";
        description
          "Is the source part of multi-source, where
           only one of the source is enabled";
      }
    }
    container dest {
      description
        "the destination of VN Member";
      leaf dest {
        type leafref {
          path "/access-point/ap/ap-id";
        }
        description
          "A reference to destination AP";
      }
      leaf dest-vn-ap-id {
        type leafref {
          path "/access-point/ap/vn-ap/vn-ap-id";
        }
        description
          "A reference to dest VNAP";
      }
      leaf multi-dest {
        if-feature "multi-src-dest";
        type boolean;
        default "false";
        description
          "Is destination part of multi-destination, where only one
           of the destination is enabled";
      }
    }
    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 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 - Segement Routing (SR). ";
    }
    reference
      "RFC 8454: Information Model for Abstraction and Control of TE
       Networks (ACTN)";
  } //vn-member

  grouping vn-policy {
    description
      "policy for VN-level diverisity";
    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)";
    }
  }

  /* Configuration data nodes */

  container access-point {
    description
      "AP configurations";
    list ap {
      key "ap-id";
      description
        "access-point identifier";
      uses access-point {
        description
          "The access-point information";
      }
    }
    reference
      "RFC 8453: Framework for Abstraction and Control of TE
       Networks (ACTN), Section 6";
  }
  container virtual-network {
    description
      "VN configurations";
    list vn {
      key "vn-id";
      description
        "A virtual network is identified by a vn-id";
      leaf vn-id {
        type vn-id;
        description
          "A unique VN identifier";
      }
      /*An optional identifier to the TE Topology Model
        where the abstract nodes and links of the Topology
        can be found for Type 2 VNS*/
      uses te-types: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 "vnm-id";
        description
          "List of vn-members in a VN";
        uses vn-member;
        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 is selected among the multi-src/dest
             options";
        }        
      }
      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.";
      }
      uses vn-policy;
    } //vn
    reference
      "RFC 8453: Framework for Abstraction and Control of TE
       Networks (ACTN)";
  } //vn

  /* RPC */

  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 {
      uses te-types: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";
      }
      uses te-types:generic-path-constraints;
      leaf cos {
        type te-types:te-ds-class;
        description
          "The class of service";
      }
      uses te-types:generic-path-optimization;
      list vn-member-list {
        key "vnm-id";
        description
          "List of VN-members in a VN";
        uses vn-member;
        uses te-types:generic-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";
        }
        uses te-types:generic-path-optimization;
      }
      uses vn-policy;
    }
    output {
      uses te-types: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 "vnm-id";
        description
          "List of VN-members in a VN";
        uses vn-member;
        leaf if-selected {
          if-feature "multi-src-dest";
          type boolean;
          default "false";
          description
            "Is the vn-member is selected among the multi-src/dest
             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;
            description
              "Textual representation of the error 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.";
          }
        }
      }
    }
  } //vn-compute

}


]]></sourcecode>
    </section>
    <section anchor="sect-7" numbered="true" toc="default">
      <name>JSON Example</name>
      <t>
   This section provides json implementation examples as to how VN YANG
   model and TE topology model are used together to instantiate virtual
   networks.</t>
      <t>
   The example in this section includes following VN</t>
      <ul spacing="normal">
        <li>VN1 (Type 1): Which maps to the single node topology abstract1
      (node D1) and consist of VN Members 104 (L1 to L4), 107 (L1 to
      L7), 204 (L2 to L4), 308 (L3 to L8) and 108 (L1 to L8). We also
      show how disjointness (node, link, srlg) is supported in the
      example on the global level (i.e., connectivity matrices level).</li>
        <li>VN2 (Type 2): Which maps to the single node topology abstract2
      (node D2), this topology has an underlay topology (absolute) (see
      figure in section 3.2). This VN has a single VN member 105 (L1 to
      L5) and an underlay path (S4 and S7) has been set in the
      connectivity matrix of abstract2 topology;</li>
        <li>VN3 (Type 1): This VN has a multi-source, multi-destination
      feature enable for VN Member 104 (L1 to L4)/107 (L1 to L7)
      {multi-dest} and VN Member 204 (L2 to L4)/304 (L3 to L4) {multi-src} usecase. The selected VN-member is known via the field "if-selected" and the corresponding connectivity-matrix-id.</li>
      </ul>
      <t>
   Note that the VN YANG model also include the AP and VNAP which shows
   various VN using the same AP.</t>
      <section anchor="sect-7-1" numbered="true" toc="default">
        <name>VN JSON</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
{
  "ietf-vn:access-point": {
    "ap": [
      {
        "ap-id": "101",
        "vn-ap": [
          {
            "vn-ap-id": "10101",
            "vn": "1",
            "abstract-node": "1.1.1.1",
            "ltp": "10.0.0.1"
          },
          {
            "vn-ap-id": "10102",
            "vn": "2",
            "abstract-node": "2.2.2.2",
            "ltp": "10.0.0.1"
          },
          {
            "vn-ap-id": "10103",
            "vn": "3",
            "abstract-node": "3.3.3.3",
            "ltp": "10.0.0.1"
          }
        ]
      },
      {
        "ap-id": "202",
        "vn-ap": [
          {
            "vn-ap-id": "20202",
            "vn": "1",
            "abstract-node": "1.1.1.1",
            "ltp": "20.0.0.2"
          }
        ]
      },
      {
        "ap-id": "303",
        "vn-ap": [
          {
            "vn-ap-id": "30301",
            "vn": "1",
            "abstract-node": "1.1.1.1",
            "ltp": "30.0.0.3"
          },
          {
            "vn-ap-id": "30303",
            "vn": "3",
            "abstract-node": "3.3.3.3",
            "ltp": "30.0.0.3"
          }
        ]
      },
      {
        "ap-id": "404",
        "vn-ap": [
          {
            "vn-ap-id": "40401",
            "vn": "1",
            "abstract-node": "1.1.1.1",
            "ltp": "40.0.0.4"
          }
        ]
      },
      {
        "ap-id": "505",
        "vn-ap": [
          {
            "vn-ap-id": "50502",
            "vn": "2",
            "abstract-node": "2.2.2.2",
            "ltp": "50.0.0.5"
          }
        ]
      },
      {
        "ap-id": "707",
        "vn-ap": [
          {
            "vn-ap-id": "70701",
            "vn": "1",
            "abstract-node": "1.1.1.1",
            "ltp": "70.0.0.7"
          },
          {
            "vn-ap-id": "77003",
            "vn": "3",
            "abstract-node": "3.3.3.3",
            "ltp": "70.0.0.7"
          }
        ]
      },
      {
        "ap-id": "808",
        "vn-ap": [
          {
            "vn-ap-id": "80801",
            "vn": "1",
            "abstract-node": "1.1.1.1",
            "ltp": "80.0.0.8"
          },
          {
            "vn-ap-id": "80803",
            "vn": "3",
            "abstract-node": "3.3.3.3",
            "ltp": "80.0.0.8"
          }
        ]
      }
    ]
  },
  "ietf-vn:virtual-network": {
    "vn": [
      {
        "vn-id": "1",
        "te-topology-identifier": {
          "topology-id": "abstract1"
        },
        "abstract-node": "1.1.1.1",
        "vn-member": [
          {
            "vnm-id": "104",
            "src": {
              "src": "101",
              "src-vn-ap-id": "10101"
            },
            "dest": {
              "dest": "404",
              "dest-vn-ap-id": "40401"
            },
            "connectivity-matrix-id": "104"
          },
          {
            "vnm-id": "107",
            "src": {
              "src": "101",
              "src-vn-ap-id": "10101"
            },
            "dest": {
              "dest": "707",
              "dest-vn-ap-id": "70701"
            },
            "connectivity-matrix-id": "107"
          },
          {
            "vnm-id": "204",
            "src": {
              "src": "202",
              "src-vn-ap-id": "20201"
            },
            "dest": {
              "dest": "404",
              "dest-vn-ap-id": "40401"
            },
            "connectivity-matrix-id": "204"
          },
          {
            "vnm-id": "308",
            "src": {
              "src": "303",
              "src-vn-ap-id": "30301"
            },
            "dest": {
              "dest": "808",
              "dest-vn-ap-id": "80801"
            },
            "connectivity-matrix-id": "308"
          },
          {
            "vnm-id": "108",
            "src": {
              "src": "101",
              "src-vn-ap-id": "10101"
            },
            "dest": {
              "dest": "808",
              "dest-vn-ap-id": "80801"
            },
            "connectivity-matrix-id": "108"
          }
        ]
      },
      {
        "vn-id": "2",
        "te-topology-identifier": {
          "topology-id": "abstract2"
        },
        "abstract-node": "2.2.2.2",
        "vn-member": [
          {
            "vnm-id": "105",
            "src": {
              "src": "101",
              "src-vn-ap-id": "10102"
            },
            "dest": {
              "dest": "505",
              "dest-vn-ap-id": "50502"
            },
            "connectivity-matrix-id": "105"
          }
        ]
      },
      {
        "vn-id": "3",
        "te-topology-identifier": {
          "topology-id": "abstract3"
        },
        "abstract-node": "3.3.3.3",
        "vn-member": [
          {
            "vnm-id": "104",
            "src": {
              "src": "101",
              "src-vn-ap-id": "10103"
            },
            "dest": {
              "dest": "404",
              "dest-vn-ap-id": "40403",
              "multi-dest": true
            },
            "connectivity-matrix-id": "104"
          },
          {
            "vnm-id": "107",
            "src": {
              "src": "101",
              "src-vn-ap-id": "10103"
            },
            "dest": {
              "dest": "707",
              "dest-vn-ap-id": "70703",
              "multi-dest": true
            },
            "connectivity-matrix-id": "107"
          },
          {
            "vnm-id": "204",
            "src": {
              "src": "202",
              "src-vn-ap-id": "20203",
              "multi-src": true
            },
            "dest": {
              "dest": "404",
              "dest-vn-ap-id": "40403"
            },
            "connectivity-matrix-id": "204"
          },
          {
            "vnm-id": "304",
            "src": {
              "src": "303",
              "src-vn-ap-id": "30303",
              "multi-src": true
            },
            "dest": {
              "dest": "404",
              "dest-vn-ap-id": "40403"
            },
            "connectivity-matrix-id": "304"
          }
        ]
      }
    ]
  }
}
]]></artwork>
      </section>
      <section anchor="sect-7-2" numbered="true" toc="default">
        <name>TE-topology JSON</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[

{
  "ietf-network:networks": {
    "network": [
      {
        "network-types": {
          "ietf-te-topology:te-topology": {}
        },
        "network-id": "abstract1",
        "ietf-te-topology:te-topology-identifier": {
          "provider-id": 0,
          "client-id": 0,
          "topology-id": "abstract1"
        },
        "node": [
          {
            "node-id": "1.1.1.1",
            "ietf-te-topology:te-node-id": "1.1.1.1",
            "ietf-te-topology:te": {
              "te-node-attributes": {
                "domain-id": 1,
                "is-abstract": [null],
                "connectivity-matrices": {
                  "is-allowed": true,
                  "path-constraints": {
                    "te-bandwidth": {
                      "generic": "0x1p10"
                    },
                    "disjointness": "node link srlg"
                  },
                  "connectivity-matrix": [
                    {
                      "id": 104,
                      "from": {
                        "tp-ref": "1-0-1"
                      },
                      "to": {
                        "tp-ref": "4-0-4"
                      }
                    },
                    {
                      "id": 107,
                      "from": {
                        "tp-ref": "1-0-1"
                      },
                      "to": {
                        "tp-ref": "7-0-7"
                      }
                    },
                    {
                      "id": 204,
                      "from": {
                        "tp-ref": "2-0-2"
                      },
                      "to": {
                        "tp-ref": "4-0-4"
                      }
                    },
                    {
                      "id": 308,
                      "from": {
                        "tp-ref": "3-0-3"
                      },
                      "to": {
                        "tp-ref": "8-0-8"
                      }
                    },
                    {
                      "id": 108,
                      "from": {
                        "tp-ref": "1-0-1"
                      },
                      "to": {
                        "tp-ref": "8-0-8"
                      }
                    }
                  ]
                }
              },
              "ietf-network-topology:termination-point": [
              {
                "tp-id":"1-0-1",
                "ietf-te-topology:te-tp-id":"10.0.0.1"
              },
              {
                "tp-id":"2-0-2",
                "ietf-te-topology:te-tp-id":"20.0.0.2"
              },
              {
                "tp-id":"3-0-3",
                "ietf-te-topology:te-tp-id":"30.0.0.3"
              },  
              {
                "tp-id":"4-0-4",
                "ietf-te-topology:te-tp-id":"40.0.0.4"
              },
              {
                "tp-id":"7-0-7",
                "ietf-te-topology:te-tp-id":"70.0.0.7"
              },
              {
                "tp-id":"8-0-8",
                "ietf-te-topology:te-tp-id":"80.0.0.8"
              }              
            ]              
            }
          }
        ]
      },
      {
        "network-types": {
          "ietf-te-topology:te-topology": {}
        },
        "network-id": "abstract2",
        "ietf-te-topology:te-topology-identifier": {
          "provider-id": 0,
          "client-id": 0,
          "topology-id": "abstract2"
        },
        "node": [
          {
            "node-id": "2.2.2.2",
            "ietf-te-topology:te-node-id": "2.2.2.2",
            "ietf-te-topology:te": {
              "te-node-attributes": {
                "domain-id": 1,
                "is-abstract": [null],
                "connectivity-matrices": {
                  "is-allowed": true,
                  "underlay": {
                    "enabled": true
                  },
                  "path-constraints": {
                    "te-bandwidth": {
                      "generic": "0x1p10"
                    }
                  },
                  "optimizations": {
                    "objective-function": {
                      "objective-function-type": "of-maximize-residual-bandwidth"
                    }
                  },
                  "connectivity-matrix": [
                    {
                      "id": 105,
                      "from": {
                        "tp-ref": "1-0-1"
                      },
                      "to": {
                        "tp-ref": "5-0-5"
                      },
                      "underlay": {
                        "enabled": true,
                        "primary-path": {
                          "network-ref": "absolute",
                          "path-element": [
                            {
                              "path-element-id": 1,
                              "numbered-node-hop": {
                                "node-id": "44.44.44.44",
                                "hop-type": "strict"
                              }
                            },
                            {
                              "path-element-id": 2,
                              "numbered-hop": {
                                "node-id": "77.77.77.77",
                                "hop-type": "strict"
                              }
                            }
                          ]
                        }
                      }
                    }
                  ]
                }
              },
              "ietf-network-topology:termination-point": [
              {
                "tp-id":"1-0-1",
                "ietf-te-topology:te-tp-id":"10.0.0.1"
              },
              {
                "tp-id":"5-0-5",
                "ietf-te-topology:te-tp-id":"50.0.0.5"
              }              
            ]
            }
          }
        ]
      },
      {
        "network-types": {
          "ietf-te-topology:te-topology": {}
        },
        "network-id": "abstract3",
        "ietf-te-topology:te-topology-identifier": {
          "provider-id": 0,
          "client-id": 0,
          "topology-id": "abstract3"
        },
        "node": [
          {
            "node-id": "3.3.3.3",
            "ietf-te-topology:te-node-id": "3.3.3.3",
            "ietf-te-topology:te": {
              "te-node-attributes": {
                "domain-id": 3,
                "is-abstract": [
                  null
                ],
                "connectivity-matrices": {
                  "is-allowed": true,
                  "path-constraints": {
                    "te-bandwidth": {
                      "generic": "0x1p10"
                    }
                  },
                  "connectivity-matrix": [
                    {
                      "id": 107,
                      "from": {
                        "tp-ref": "1-0-1"
                      },
                      "to": {
                        "tp-ref": "7-0-7"
                      }
                    },
                    {
                      "id": 308,
                      "from": {
                        "tp-ref": "3-0-3"
                      },
                      "to": {
                        "tp-ref": "8-0-8"
                      }
                    }
                  ]
                }
              },
              "ietf-network-topology:termination-point": [
              {
                "tp-id":"1-0-1",
                "ietf-te-topology:te-tp-id":"10.0.0.1"
              },
              {
                "tp-id":"3-0-3",
                "ietf-te-topology:te-tp-id":"30.0.0.3"
              },  
              {
                "tp-id":"7-0-7",
                "ietf-te-topology:te-tp-id":"70.0.0.7"
              },
              {
                "tp-id":"8-0-8",
                "ietf-te-topology:te-tp-id":"80.0.0.8"
              }              
            ]
            }
          }
        ]
      }
    ]
  }
}
]]></artwork>
      </section>
    </section>
    <section anchor="sect-8" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
   The configuration, state, and action data defined in this document
   are designed to be accessed via a management protocol with a secure
   transport layer, such as NETCONF <xref target="RFC6241" format="default"/> or RESTCONF <xref target="RFC8040" format="default"/>.
   The lowest NETCONF layer is the secure transport layer, and the
   mandatory-to-implement secure transport is Secure Shell (SSH)
   <xref target="RFC6242" format="default"/>.  The lowest RESTCONF layer is HTTPS, and the mandatory-
   to-implement secure transport is TLS <xref target="RFC8446" format="default"/>.</t>
      <t>
   The NETCONF access control model <xref target="RFC8341" format="default"/> provides the means to
   restrict access for particular NETCONF users to a preconfigured
   subset of all available NETCONF protocol operations and content.</t>
      <t>
   The model presented in this document is used in the interface
   between the Customer Network Controller (CNC) and Multi-Domain
   Service Coordinator (MDSC), which is referred to as CNC-MDSC
   Interface (CMI). Therefore, many security risks such as malicious
   attack and rogue elements attempting to connect to various ACTN
   components.  Furthermore, some ACTN components (e.g., MSDC)
   represent a single point of failure and threat vector and must also
   manage policy conflicts and eavesdropping of communication between
   different ACTN components.</t>
      <t>
   A number of configuration data nodes defined in this document are
   writable/deletable (i.e., "config true") These data nodes may be
   considered sensitive or vulnerable in some network environments.</t>
      <t>
   These are the subtrees and data nodes and their
   sensitivity/vulnerability:</t>
      <ul spacing="normal">
        <li>
          <t>ap:</t>
          <ul spacing="normal">
            <li>ap-id</li>
            <li>max-bandwidth</li>
            <li>avl-bandwidth</li>
          </ul>
        </li>
        <li>
          <t>vn-ap:</t>
          <ul spacing="normal">
            <li>vn-ap-id</li>
            <li>vn</li>
            <li>abstract-node</li>
            <li>ltp</li>
          </ul>
        </li>
        <li>
          <t>vn</t>
          <ul spacing="normal">
            <li>vn-id</li>
            <li>vn-topology-id</li>
            <li>abstract-node</li>
          </ul>
        </li>
        <li>
          <t>vnm-id</t>
          <ul spacing="normal">
            <li>src</li>
            <li>src-vn-ap-id</li>
            <li>dest</li>
            <li>dest-vn-ap-id</li>
            <li>connectivity-matrix-id</li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="sect-9" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>
   IANA is requested to make the following allocation for the URIs in the "ns" subregistry
   within the "IETF XML Registry" <xref target="RFC3688" format="default"/>:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
--------------------------------------------------------------------
URI: urn:ietf:params:xml:ns:yang:ietf-vn
Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace.
--------------------------------------------------------------------
]]></artwork>
      <t>
    IANA is requested to make the following allocation for the YANG module in the "YANG Module Names"
   registry <xref target="RFC6020" format="default"/>:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
   

--------------------------------------------------------------------
name:         ietf-vn                                       
namespace:    urn:ietf:params:xml:ns:yang:ietf-vn    
prefix:       vn  
reference:    RFC XXXX 
--------------------------------------------------------------------
]]></artwork>
    </section>
    <section anchor="sect-10" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>
   The authors would like to thank Xufeng Liu, Adrian Farrel, and Tom Petch for
   their helpful comments and valuable suggestions.</t>
      <t>Thanks to Andy Bierman for YANGDIR review.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4124.xml"/>        
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6020.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6241.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6242.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8040.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8340.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8341.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8342.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8345.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8776.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7950.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6991.xml"/>
        <!--<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>-->
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8795.xml"/>
        
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7926.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8453.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8454.xml"/>

        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8466.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8299.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8309.xml"/>

        <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-teas-te-service-mapping-yang.xml"/>
        <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-teas-actn-pm-telemetry-autonomics.xml"/>
        <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-ccamp-l1csm-yang.xml"/>
        <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-teas-yang-te.xml"/>
      </references>
    </references>
    <section anchor="sect-constraints" numbered="true" toc="default">
      <name>Performance Constraints</name>
      <t>At the time of creation of VN, it is natural to provide VN level constraints and optimization criteria. It should be noted that this YANG model rely on the TE-Topology Model <xref target="RFC8795" format="default"/> by using a reference to an abstract node to achieve this. Further, connectivity-matrix structure is used to assign the constraints and optimization criteria include delay, jitter etc. <xref target="RFC8776" format="default"/> define some of the metric-types already and future documents are meant to augment it.</t>
      <t>Note that the VN compute allows inclusion of the constraints and the optimization criteria directly in the RPC to allow it to be used independently.</t>
    </section>
    <section anchor="sect-contributors" numbered="true" toc="default">
      <name>Contributors Addresses</name>
      <artwork name="" type="" align="left" alt=""><![CDATA[
Qin Wu
Huawei Technologies
Email: bill.wu@huawei.com

Peter Park
KT
Email: peter.park@kt.com

Haomian Zheng
Huawei Technologies
Email: zhenghaomian@huawei.com

Xian Zhang
Huawei Technologies
Email: zhang.xian@huawei.com

Sergio Belotti
Nokia
Email: sergio.belotti@nokia.com

Takuya Miyasaka
KDDI
Email: ta-miyasaka@kddi.com

Kenichi Ogaki
KDDI
Email: ke-oogaki@kddi.com
]]></artwork>
    </section>
  </back>
</rfc>
