<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" submissionType="IETF" docName="draft-ietf-teas-actn-vn-yang-29" number="9731" category="std" ipr="trust200902" obsoletes="" updates="" xml:lang="en" sortRefs="true" symRefs="true" tocInclude="true" consensus="true" prepTime="2025-03-27T15:49:03" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-teas-actn-vn-yang-29" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9731" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="VN YANG Data Model">A YANG Data Model for Virtual Network (VN) Operations</title>
    <seriesInfo name="RFC" value="9731" stream="IETF"/>
    <author fullname="Young Lee" initials="Y" surname="Lee" role="editor">
      <organization showOnFrontPage="true">Samsung Electronics</organization>
      <address>
        <email>younglee.tx@gmail.com</email>
      </address>
    </author>
    <author initials="D" surname="Dhody" fullname="Dhruv Dhody" role="editor">
      <organization showOnFrontPage="true">Huawei</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>dhruv.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Daniele Ceccarelli" initials="D" surname="Ceccarelli">
      <organization showOnFrontPage="true">Cisco</organization>
      <address>
        <email>daniele.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Igor Bryskin" initials="I" surname="Bryskin">
      <organization showOnFrontPage="true">Individual</organization>
      <address>
        <email>i_bryskin@yahoo.com</email>
      </address>
    </author>
    <author fullname="Bin Yeong Yoon" initials="B" surname="Yoon">
      <organization showOnFrontPage="true">ETRI</organization>
      <address>
        <email>byyun@etri.re.kr</email>
      </address>
    </author>
    <date month="03" year="2025"/>
    <area>RTG</area>
    <workgroup>teas</workgroup>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
      A Virtual Network (VN) is a network provided by a service provider to a
      customer for the customer to use in any way it wants as though it were a
      physical network.  This document provides a YANG data model generally
      applicable to any mode of VN operations. This includes VN operations as
      per the Abstraction and Control of TE Networks (ACTN) framework (RFC 8453).</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9731" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2025 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology-and-conventions">Terminology and Conventions</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tree-diagram">Tree Diagram</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.3">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.3.1"><xref derivedContent="1.3" format="counter" sectionFormat="of" target="section-1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-prefixes-in-data-node-names">Prefixes in Data Node Names</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-case-of-vn-yang-data-mo">Use Case of VN YANG Data Model in the ACTN Context</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-type-1-vn">Type 1 VN</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-type-2-vn">Type 2 VN</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-high-level-control-flows-wi">High-Level Control Flows with Examples</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-type-1-vn-illustration">Type 1 VN Illustration</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-type-2-vn-illustration">Type 2 VN Illustration</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.2.2">
                  <li pn="section-toc.1-1.3.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.1.1"><xref derivedContent="3.2.1" format="counter" sectionFormat="of" target="section-3.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-vn-and-ap-usage">VN and AP Usage</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-vn-yang-data-model-usage">VN YANG Data Model Usage</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-customer-view-of-vn">Customer View of VN</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-auto-creation-of-vn-by-mdsc">Auto-creation of VN by MDSC</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-innovative-services">Innovative Services</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.3.2">
                  <li pn="section-toc.1-1.4.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.1.1"><xref derivedContent="4.3.1" format="counter" sectionFormat="of" target="section-4.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-vn-compute">VN Compute</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.2.1"><xref derivedContent="4.3.2" format="counter" sectionFormat="of" target="section-4.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-multiple-sources-and-multip">Multiple Sources and Multiple Destinations</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-others">Others</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.5">
                <t indent="0" pn="section-toc.1-1.4.2.5.1"><xref derivedContent="4.5" format="counter" sectionFormat="of" target="section-4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-summary">Summary</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-vn-yang-data-model-tree-str">VN YANG Data Model (Tree Structure)</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-vn-yang-data-model">VN YANG Data Model</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-performance-constraints">Performance Constraints</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="Appendix B" format="default" sectionFormat="of" target="section-appendix.b"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-json-example">JSON Example</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2">
              <li pn="section-toc.1-1.11.2.1">
                <t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent="B.1" format="counter" sectionFormat="of" target="section-appendix.b.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-vn-json">VN JSON</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.2">
                <t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent="B.2" format="counter" sectionFormat="of" target="section-appendix.b.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-te-topology-json">TE Topology JSON</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.14">
            <t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.e"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="sect-1" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">
   Abstraction and Control of TE Networks (ACTN)
   describes a set of management and control functions used to operate
   one or more Traffic Engineered (TE) networks to construct a Virtual Network (VN). A VN
   is represented to customers and is built from the abstractions of the
   underlying TE networks <xref target="RFC8453" format="default" sectionFormat="of" derivedContent="RFC8453"/>. This document provides a YANG data model <xref target="RFC7950" format="default" sectionFormat="of" derivedContent="RFC7950"/> generally applicable to any
   mode of VN operation. ACTN is the primary example of the usage of the VN YANG data model, but VN is not limited to it.</t>
      <t indent="0" pn="section-1-2">
   The VN model defined in this document is applicable in a generic sense
   as an independent model in and of itself.  It can also work together with other customer service models such as the L3VPN Service Model (L3SM) <xref target="RFC8299" format="default" sectionFormat="of" derivedContent="RFC8299"/>, the L2VPN Service Model (L2SM) <xref target="RFC8466" format="default" sectionFormat="of" derivedContent="RFC8466"/>, and the L1 Connectivity Service Model (L1CSM) <xref target="I-D.ietf-ccamp-l1csm-yang" format="default" sectionFormat="of" derivedContent="L1CSM-YANG"/> to
   provide complete life-cycle service management and operations.</t>
      <t indent="0" pn="section-1-3">
   The YANG data model discussed in this document basically provides the
   following:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-1-4">
        <li pn="section-1-4.1">Characteristics of Access Points (APs) that describe customer's
      endpoint characteristics;</li>
        <li pn="section-1-4.2">Characteristics of Virtual Network Access Points (VNAPs) 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 pn="section-1-4.3">Characteristics of 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 indent="0" pn="section-1-5">An abstract TE topology is a topology that contains abstract topological elements (nodes, links) created and customized based on customer preference <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/>.
   The actual VN instantiation and computation is performed with
   connectivity matrices of the TE Topology model <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/>,
   which provides a TE network topology abstraction and management
   operation. As per <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/>, a TE node connectivity matrix is the TE node's switching limitations in the form of valid switching combinations of the TE node's LTPs and potential TE paths. The VN representation relies on a single abstract TE node with a connectivity matrix. The VN can be abstracted as a set of edge-to-edge links (a Type 1 VN).  Each link is the VN member that is mapped to the connectivity matrix entry (<xref target="sect-2.1" format="default" sectionFormat="of" derivedContent="Section 2.1"/>). The VN can also be abstracted as a topology of virtual nodes
and virtual links (a Type 2 VN). Alongside the mapping of VN members to a connectivity matrix entry, an underlay path can also be specified (<xref target="sect-2.2" format="default" sectionFormat="of" derivedContent="Section 2.2"/>).
</t>
      <t indent="0" pn="section-1-6">Once the TE Topology model is used in triggering VN
   instantiation over the networks, the TE model <xref target="I-D.ietf-teas-yang-te" format="default" sectionFormat="of" derivedContent="YANG-TE"/> will
   inevitably interact with the TE Topology model when setting up actual
   tunnels and Label Switched Paths (LSPs) under the tunnels.</t>
      <t indent="0" pn="section-1-7">
   Sections <xref target="sect-2" format="counter" sectionFormat="of" derivedContent="2"/> and <xref target="sect-3" format="counter" sectionFormat="of" derivedContent="3"/> provide a discussion of how the VN YANG data model is
   applicable to the ACTN context where a Virtual Network Service (VNS)
   operation is implemented for the interface of the Customer Network Controller (CNC) and the
   Multi-Domain Service Coordinator (MDSC).</t>
      <t indent="0" pn="section-1-8">
   The YANG data model for the CNC-MDSC Interface (CMI) is also known as the "customer service model" in
   <xref target="RFC8309" format="default" sectionFormat="of" derivedContent="RFC8309"/>. The YANG data model discussed in this document is used to
   operate customer-driven VNs during the VN instantiation and computation as well as its life-cycle service management and operations.</t>
      <t indent="0" pn="section-1-9">
   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" sectionFormat="of" derivedContent="RFC8342"/>.




      </t>
      <section anchor="sect-1.1" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-terminology-and-conventions">Terminology and Conventions</name>
        <t indent="0" pn="section-1.1-1">This document borrows the following abbreviations from <xref target="RFC8453" format="default" sectionFormat="of" derivedContent="RFC8453"/> and/or <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/>:</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-1.1-2">
          <dt pn="section-1.1-2.1">VN:</dt>
          <dd pn="section-1.1-2.2">Virtual Network</dd>
          <dt pn="section-1.1-2.3">AP:</dt>
          <dd pn="section-1.1-2.4">Access Point</dd>
          <dt pn="section-1.1-2.5">VNAP:</dt>
          <dd pn="section-1.1-2.6">VN Access Point</dd>
          <dt pn="section-1.1-2.7">ACTN:</dt>
          <dd pn="section-1.1-2.8">Abstraction and Control of TE Networks</dd>
          <dt pn="section-1.1-2.9">CNC:</dt>
          <dd pn="section-1.1-2.10">Customer Network Controller</dd>
          <dt pn="section-1.1-2.11">MDSC:</dt>
          <dd pn="section-1.1-2.12">Multi-Domain Service Coordinator</dd>
          <dt pn="section-1.1-2.13">CMI:</dt>
          <dd pn="section-1.1-2.14">CNC-MDSC Interface</dd>
          <dt pn="section-1.1-2.15">LTP:</dt>
          <dd pn="section-1.1-2.16">Link Termination Point</dd>
        </dl>
        <t indent="0" pn="section-1.1-3">This document borrows the terminology in <xref target="RFC7926" sectionFormat="of" section="1.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7926#section-1.1" derivedContent="RFC7926"/>, the term "Service Model" from <xref target="RFC8309" format="default" sectionFormat="of" derivedContent="RFC8309"/>, and the term "Connectivity Matrix" from <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/>.</t>
        <t indent="0" pn="section-1.1-4">Various examples in this document contain long lines that may be folded, as described in <xref target="RFC8792" format="default" sectionFormat="of" derivedContent="RFC8792"/>.</t>
      </section>
      <section anchor="sect-1.2" numbered="true" toc="include" removeInRFC="false" pn="section-1.2">
        <name slugifiedName="name-tree-diagram">Tree Diagram</name>
        <t indent="0" pn="section-1.2-1">
   A simplified graphical representation of the data model is used in
   <xref target="sect-5" format="default" sectionFormat="of" derivedContent="Section 5"/> of this document.  The meaning of the symbols in
   these diagrams is defined in <xref target="RFC8340" format="default" sectionFormat="of" derivedContent="RFC8340"/>.</t>
      </section>
      <section anchor="sect-1.3" numbered="true" toc="include" removeInRFC="false" pn="section-1.3">
        <name slugifiedName="name-prefixes-in-data-node-names">Prefixes in Data Node Names</name>
        <t indent="0" pn="section-1.3-1">
   In this document, the 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 <xref target="tab-prefixes-and-corresponding-yang-modules" format="default" sectionFormat="of" derivedContent="Table 1"/>.</t>
        <table anchor="tab-prefixes-and-corresponding-yang-modules" align="center" pn="table-1">
          <name slugifiedName="name-prefixes-and-corresponding-">Prefixes and Corresponding YANG Modules</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Prefix</th>
              <th align="left" colspan="1" rowspan="1">YANG Module</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">vn</td>
              <td align="left" colspan="1" rowspan="1">ietf-vn</td>
              <td align="left" colspan="1" rowspan="1">RFC 9731</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">yang</td>
              <td align="left" colspan="1" rowspan="1">ietf-yang-types</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC6991" format="default" sectionFormat="of" derivedContent="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">nw</td>
              <td align="left" colspan="1" rowspan="1">ietf-network</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8345" format="default" sectionFormat="of" derivedContent="RFC8345"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">nt</td>
              <td align="left" colspan="1" rowspan="1">ietf-network-topology</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8345" format="default" sectionFormat="of" derivedContent="RFC8345"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">te-types</td>
              <td align="left" colspan="1" rowspan="1">ietf-te-types</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8776" format="default" sectionFormat="of" derivedContent="RFC8776"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">tet</td>
              <td align="left" colspan="1" rowspan="1">ietf-te-topology</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="sect-2" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-use-case-of-vn-yang-data-mo">Use Case of VN YANG Data Model in the ACTN Context</name>
      <t indent="0" pn="section-2-1">
   In this section, ACTN is being used to illustrate the general usage
   of the VN YANG data model. The model presented in this section has the
   following ACTN context.</t>
      <figure anchor="ure-actn-cmi" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-actn-cmi">ACTN CMI</name>
        <artwork name="" type="" align="left" alt="" pn="section-2-2.1">
       +-------+
       |  CNC  |
       +-------+
           |
           |    VN + TE Topology 
           |
+-----------------------+
|         MDSC          |
+-----------------------+</artwork>
      </figure>
      <t indent="0" pn="section-2-3">
   Both ACTN VN and TE Topology YANG data models are used over the CMI to
   establish a VN over TE networks, as shown in <xref target="ure-actn-cmi" format="default" sectionFormat="of" derivedContent="Figure 1"/>.</t>
      <section anchor="sect-2.1" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-type-1-vn">Type 1 VN</name>
        <t indent="0" pn="section-2.1-1">
   As defined in <xref target="RFC8453" format="default" sectionFormat="of" derivedContent="RFC8453"/>, a VN is a customer view of the
   TE network.  To recapitulate VN types from <xref target="RFC8453" format="default" sectionFormat="of" derivedContent="RFC8453"/>, a Type 1 VN is
   defined as follows:</t>
        <t indent="0" pn="section-2.1-2">
   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>
        <t indent="0" pn="section-2.1-3">If we were to create a VN where we have four VN members as follows:</t>
        <figure align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-vn-members-type-1-vn">VN Members (Type 1 VN)</name>
          <artwork name="" type="" align="left" alt="" pn="section-2.1-4.1">
VN member 1       L1-L4
VN member 2       L1-L7
VN member 3       L2-L4
VN member 4       L3-L8
	</artwork>
        </figure>
        <t indent="0" pn="section-2.1-5">Where L1, L2, L3, L4, L7, and L8 correspond to a Customer
          Endpoint (or AP).</t>
        <t indent="0" pn="section-2.1-6">This VN can be modeled as one abstract node representation as
        follows in <xref target="ure-abstract-node-one-node-topology" format="default" sectionFormat="of" derivedContent="Figure 3"/>:</t>
        <figure anchor="ure-abstract-node-one-node-topology" align="left" suppress-title="false" pn="figure-3">
          <name slugifiedName="name-abstract-node-type-1-topolo">Abstract Node (Type 1 Topology)</name>
          <artwork name="" type="" align="left" alt="" pn="section-2.1-7.1">
       +----------------------------------------------+
       |                                              |
 L1----|..............................................|------L4
       |   .                                       .  |
       |    .                AN1                  .   |
       |     .                                   .    |
       |      ..................................*.....|------L7
       |                                       .      |
L2-----|.......................................       |
       |                                              |
L3-----|..............................................|------L8
       |                                              |
       +----------------------------------------------+</artwork>
        </figure>
        <t indent="0" pn="section-2.1-8">
   Modeling a VN as one abstract node is the easiest way for customers
   to express their end-to-end connectivity as shown in <xref target="ure-abstract-node-one-node-topology" format="default" sectionFormat="of" derivedContent="Figure 3"/>.
        </t>
      </section>
      <section anchor="sect-2.2" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-type-2-vn">Type 2 VN</name>
        <t indent="0" pn="section-2.2-1">
   For some VN members, the customers are allowed to configure
   the intended path. To achieve this, alongside the single
   node abstract topology, an underlay topology is also needed.
   The underlay topology could be native TE topology or
   an abstract TE topology. The intended path is set based on
   the nodes and links of the underlay topology. A Type 1 VN
   can be viewed as a higher-level abstraction of a Type 2 VN, which represents a single node abstract topology over the underlay topology and includes a mechanism to specify intended paths.  These topologies
   could be mutually agreed upon between the CNC and the MDSC
   prior to VN creation or they could be created as part of VN
   instantiation.</t>
        <t indent="0" pn="section-2.2-2">
   If a Type 2 VN is desired for some or all of the VN members of a Type 1
   VN (see the example in <xref target="sect-2.1" format="default" sectionFormat="of" derivedContent="Section 2.1"/>), the TE Topology model can provide the following abstract topologies (a single node topology AN1 and an underlay topology (with nodes S1 to S11 and corresponding links)).</t>
        <figure anchor="ure-type-2-topology" align="left" suppress-title="false" pn="figure-4">
          <name slugifiedName="name-type-2-topology">Type 2 Topology</name>
          <artwork name="" type="" align="left" alt="" pn="section-2.2-3.1">
       +----------------------------------------------+
       |             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-----|..                                            |
       |                                          AN1 |
       +----------------------------------------------+</artwork>
        </figure>
        <t indent="0" pn="section-2.2-4">
   As shown in <xref target="ure-type-2-topology" format="default" sectionFormat="of" derivedContent="Figure 4"/>, the abstract node is AN1 and an underlay topology is depicted with nodes and links (S1 to S11).</t>
        <t indent="0" pn="section-2.2-5">
   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 explicit path {S3,S4,S5} based on the underlay 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="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-high-level-control-flows-wi">High-Level Control Flows with Examples</name>
      <section anchor="sect-3.1" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-type-1-vn-illustration">Type 1 VN Illustration</name>
        <t indent="0" pn="section-3.1-1">
   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
   YANG data models.</t>
        <figure anchor="type1" align="left" suppress-title="false" pn="figure-5">
          <name slugifiedName="name-type-1-vn-illustration-2">Type 1 VN Illustration</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.1-2.1">
            +--------+                        +--------+
            |  CNC   |                        |  MDSC  |
            +--------+                        +--------+
                 |                                 |
                 |                                 |
CNC POST TE Topo |  POST /nw:networks/nw:network/  |
model (w/ Conn.  |  nw:node/te-node-id/            |
Matrix on one    |  tet:connectivity-matrices/     |
abstract node)   |  tet:connectivity-matrix        |
                 |--------------------------------&gt;|
                 |                   HTTP 200      |
                 |&lt;--------------------------------|
                 |                                 |
CNC POST the     |  POST /virtual-network          |
VN identifying   |--------------------------------&gt;| If there is
AP, VNAP, and VN |                                 | multi-src/dest,
members and maps |                                 | then MDSC
to the TE Topo   |                 HTTP 200        | selects an
model            |&lt;--------------------------------| src or dest
                 |                                 | and updates
                 |                                 | VN YANG
CNC GET the      |  GET /virtual-network           |
VN YANG status   |--------------------------------&gt;|
                 |                                 |
                 |  HTTP 200 (VN with status:      |
                 |  selected VN members            |
                 |  in case of multi-s/d)          |
                 |&lt;--------------------------------|
                 |                                 |</artwork>
        </figure>
      </section>
      <section anchor="sect-3.2" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-type-2-vn-illustration">Type 2 VN Illustration</name>
        <t indent="0" pn="section-3.2-1">
   For some VN members, the customer may want to "configure" an explicit
   path that connects its two endpoints. Let us
   consider the following example:</t>
        <figure align="left" suppress-title="false" pn="figure-6">
          <name slugifiedName="name-vn-members-type-2-vn">VN Members (Type 2 VN)</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.2-2.1">
VN member 1	L1-L4 (via S3, S4, and S5)
VN member 2	L1-L7 (via S3, S4, S7, and S8)
VN member 3	L2-L7 (via S9, S10, and S11)
VN member 4	L3-L8 (via S9, S10, and S11)</artwork>
        </figure>
        <t indent="0" pn="section-3.2-3">There are two options depending on whether CNC or MDSC creates the
   single abstract node topology.</t>
        <t indent="0" pn="section-3.2-4">Case 1:</t>
        <t indent="0" pn="section-3.2-5">
   If the CNC creates the single abstract node topology, the message flow between the CNC and MDSC to instantiate
   this VN using a VN and TE Topology YANG data model would be as shown in the following diagram:</t>
        <figure anchor="type2_case1" align="left" suppress-title="false" pn="figure-7">
          <name slugifiedName="name-type-2-vn-illustration-case">Type 2 VN Illustration: Case 1</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.2-6.1">
            +--------+                                +--------+
            |  CNC   |                                |  MDSC  |
            +--------+                                +--------+
                 |                                         |
                 |                                         |
CNC POST TE Topo |  POST /nw:networks/nw:network/          |
model (w/ Conn.  |  nw:node/te-node-id/tet:connectivity-   |
Matrix on one    |  matrices/tet:connectivity-matrix       |
abstract node and|----------------------------------------&gt;|
explicit paths in|                                         |
the Conn. Matrix)|                       HTTP 200          |
                 |&lt;----------------------------------------|
                 |                                         |
CNC POST the     |  POST /virtual-network                  |
VN identifying   |----------------------------------------&gt;|
AP, VNAP, and VN |                                         |
members and maps |                                         |
to the TE Topo   |                         HTTP 200        |
model            |&lt;----------------------------------------|
                 |                                         |
                 |                                         |
CNC GET the      |  GET /virtual-network                   |
VN YANG status   |----------------------------------------&gt;|
                 |                                         |
                 |  HTTP 200 (VN with status)              |
                 |&lt;----------------------------------------|
                 |                                         |</artwork>
        </figure>
        <t indent="0" pn="section-3.2-7">Case 2:</t>
        <t indent="0" pn="section-3.2-8">
   On the other hand, if MDSC create the single abstract node topology
   based on 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 YANG data models.</t>
        <figure anchor="type2_case2" align="left" suppress-title="false" pn="figure-8">
          <name slugifiedName="name-type-2-vn-illustration-case-">Type 2 VN Illustration: Case 2</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.2-9.1">
            +--------+                        +--------+
            |  CNC   |                        |  MDSC  |
            +--------+                        +--------+
                 |                                 |
                 |                                 |
CNC POST VN      |                                 |
identifying AP,  |                                 |
VNAP and VN      |  POST /virtual-network          | MDSC populates
members          |--------------------------------&gt;| a single abst.
                 |                 HTTP 200        | node topology
                 |&lt;--------------------------------| by itself
                 |                                 |
CNC GET VN &amp;     |  GET /virtual-network  &amp;        |
POST TE Topo     |  POST /nw:networks/nw:network/  |
models (w/       |  nw:node/te-node-id/tet:        |
Conn. Matrix     |  connectivity-matrices/         |
on the           |  tet:connectivity-matrix        |
abstract node    |--------------------------------&gt;|
and explicit     |                                 |
paths in the     |                                 |
Conn. Matrix)    |                                 |
                 |                 HTTP 200        |
                 |&lt;--------------------------------|
                 |                                 |
                 |                                 |
CNC GET the      |  GET /virtual-network           |
VN YANG status   |--------------------------------&gt;|
                 |                                 |
                 |  HTTP 200 (VN with status)      |
                 |&lt;--------------------------------|
                 |                                 |</artwork>
        </figure>
        <t indent="0" pn="section-3.2-10">Note that the underlay topology (which is referred to by the single abstract node topology) could be a Native/White topology or a Grey topology (<xref target="RFC8453" format="default" sectionFormat="of" derivedContent="RFC8453"/>) that is further customized based on the requirements of the customer and configured at the MDSC.</t>
        <t indent="0" pn="section-3.2-11">
   <xref target="sect-7" format="default" sectionFormat="of" derivedContent="Appendix B"/> provides JSON examples for both the VN model and the TE Topology
   Connectivity Matrix sub-model to illustrate how a VN can be created
   by the CNC making use of the VN model as well as the TE Topology
   Connectivity Matrix module.</t>
        <section anchor="sect-3.3" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1">
          <name slugifiedName="name-vn-and-ap-usage">VN and AP Usage</name>
          <t indent="0" pn="section-3.2.1-1">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 <xref target="RFC8453" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8453#section-6" derivedContent="RFC8453"/>.</t>
          <t indent="0" pn="section-3.2.1-2">In some VN operations, the customer access may not be known at the initial VN creation. The VN operation allows the creation of a VN with only a PE identifier. The customer access information could be added later.</t>
          <t indent="0" pn="section-3.2.1-3">To achieve this, the 'ap' container has a leaf for the 'pe' node that allows the AP to be created with PE information. The VN member (and VN) could use APs that initially only have PE information.</t>
        </section>
      </section>
    </section>
    <section anchor="sect-4" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-vn-yang-data-model-usage">VN YANG Data Model Usage</name>
      <section anchor="sect-4.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-customer-view-of-vn">Customer View of VN</name>
        <t indent="0" pn="section-4.1-1">
   The VN YANG data model allows the definition of a customer view and allows the
   customer to communicate using the VN constructs as described in 
   <xref target="RFC8454" format="default" sectionFormat="of" derivedContent="RFC8454"/>. It allows the grouping 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 data models.</t>
        <t indent="0" pn="section-4.1-2">
   This is similar to the benefits offered by a separate YANG data model for
   customer services described in <xref target="RFC8309" format="default" sectionFormat="of" derivedContent="RFC8309"/>, which states that
   service models do not make any assumptions about how a service is
   actually engineered and delivered for a customer.</t>
      </section>
      <section anchor="sect-4.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-auto-creation-of-vn-by-mdsc">Auto-creation of VN by MDSC</name>
        <t indent="0" pn="section-4.2-1">
   The VN could be configured at the MDSC explicitly by the CNC using
   the VN YANG data model. In some other cases, the VN is not explicitly
   configured but is instead created automatically by the MDSC based on the
   customer service model and local policy; even in these cases, the VN
   YANG data model can be used by the CNC to learn details of the underlying
   VN, created to meet the requirements of the customer service model.</t>
      </section>
      <section anchor="sect-4.3" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-innovative-services">Innovative Services</name>
        <section anchor="sect-4.3.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.3.1">
          <name slugifiedName="name-vn-compute">VN Compute</name>
          <t indent="0" pn="section-4.3.1-1">
   The 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 (<xref target="I-D.ietf-teas-yang-te" format="default" sectionFormat="of" derivedContent="YANG-TE"/>) does not provide the
   same functionality.</t>
          <figure anchor="VN_Compute1" align="left" suppress-title="false" pn="figure-9">
            <name slugifiedName="name-vn-compute-with-reference-t">VN Compute with Reference to TE Topology YANG Data Model</name>
            <artwork name="" type="" align="left" alt="" pn="section-4.3.1-2.1">
            +--------+                                +--------+
            |  CNC   |                                |  MDSC  |
            +--------+                                +--------+
                 |                                         |
                 |                                         |
CNC POST TE Topo |  POST /nw:networks/nw:network/          |
model (w/ Conn.  |  nw:node/te-node-id/tet:connectivity-   |
Matrix on one    |  matrices/tet:connectivity-matrix       |
abstract node and|----------------------------------------&gt;|
constraints in   |                                         |
the conn. matrix)|                       HTTP 200          |
                 |&lt;----------------------------------------|
                 |                                         |
                 |                                         |
CNC calls RPC to |  RPC /vn compute                        |
compute the VN   |----------------------------------------&gt;|
as per the       |                                         |
referred TE-Topo |                                         |
                 |                                         |
                 |           HTTP 200 (Computed VN)        |
                 |&lt;----------------------------------------|
                 |                                         |</artwork>
          </figure>
          <t indent="0" pn="section-4.3.1-3">The VN compute RPC allows the optional inclusion of 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>
          <figure anchor="VN_Compute2" align="left" suppress-title="false" pn="figure-10">
            <name slugifiedName="name-vn-compute-2">VN Compute</name>
            <artwork name="" type="" align="left" alt="" pn="section-4.3.1-4.1">
            +--------+                                +--------+
            |  CNC   |                                |  MDSC  |
            +--------+                                +--------+
                 |                                         |
                 |                                         |
CNC calls RPC to |  RPC /vn compute                        |
compute the VN   |----------------------------------------&gt;|
as per the       |                                         |
constraints and  |                                         |
VN members       |                                         |
                 |           HTTP 200 (Computed VN)        |
                 |&lt;----------------------------------------|
                 |                                         |</artwork>
          </figure>
          <t indent="0" pn="section-4.3.1-5">Regardless of whether the TE Topology model is referenced, the RPC 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 indent="0" pn="section-4.3.1-6">To achieve this, the VN compute RPC reuses the following common groupings:
          </t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3.1-7">
            <li pn="section-4.3.1-7.1">te-types:generic-path-constraints: is used optionally in the RPC input at the VN-level and/or VN-member level. The VN-member level overrides the VN-level data including any constraints in the referenced abstract node in the TE topology.</li>
            <li pn="section-4.3.1-7.2">te-types:generic-path-optimization: is used optionally in the RPC input at the VN-level and/or VN-member level. The VN-member level overrides the VN-level data including any optimization in the referenced abstract node in the TE topology.</li>
            <li pn="section-4.3.1-7.3">vn member: identifies the VN member in both RPC input and output.</li>
            <li pn="section-4.3.1-7.4">vn-policy: is used optionally in the RPC input to apply any VN-level policies.</li>
          </ul>
          <t indent="0" pn="section-4.3.1-8">When MDSC receives this RPC, it computes the VN based on the input provided in the RPC. 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 each VN member as a reference to the connectivity-matrix-id. In case of an error, the error information is included.</t>
          <sourcecode name="" type="yangtree" markers="false" pn="section-4.3.1-9">
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?
     |  |       -&gt; /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* [id]
     |  |  +---w id                        vnm-id
     |  |  +---w src
     |  |  |  +---w ap?          -&gt; /access-point/ap/id
     |  |  |  +---w vn-ap-id?
     |  |  |  |       -&gt; /access-point/ap[id=current()/../ap]/vn-ap/\
 id
     |  |  |  +---w multi-src?   boolean {multi-src-dest}?
     |  |  +---w dest
     |  |  |  +---w ap?           -&gt; /access-point/ap/id
     |  |  |  +---w vn-ap-id?
     |  |  |  |       -&gt; /access-point/ap[id=current()/../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?
        |       -&gt; /nw:networks/network/node/tet:te-node-id
        +--ro vn-member-list* [id]
           +--ro id                        vnm-id
           +--ro src
           |  +--ro ap?          -&gt; /access-point/ap/id
           |  +--ro vn-ap-id?
           |  |       -&gt; /access-point/ap[id=current()/../ap]/vn-ap/\
id
           |  +--ro multi-src?   boolean {multi-src-dest}?
           +--ro dest
           |  +--ro ap?           -&gt; /access-point/ap/id
           |  +--ro vn-ap-id?
           |  |       -&gt; /access-point/ap[id=current()/../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</sourcecode>
        </section>
        <section anchor="sect-4.3.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.3.2">
          <name slugifiedName="name-multiple-sources-and-multip">Multiple Sources and Multiple Destinations</name>
          <t indent="0" pn="section-4.3.2-1">
   In creating a VN, the list of sources or destinations
   or both may not be predetermined 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 tree shows
   how to model multiple sources and multiple destinations.</t>
          <sourcecode name="" type="yangtree" markers="false" pn="section-4.3.2-2">
module: ietf-vn
  +--rw virtual-network
     +--rw vn* [id]
        +--rw 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?
        |       -&gt; /nw:networks/network/node/tet:te-node-id
        +--rw vn-member* [id]
        |  +--rw id                        vnm-id
        |  +--rw src
        |  |  +--rw ap?          -&gt; /access-point/ap/id
        |  |  +--rw vn-ap-id?
        |  |  |       -&gt; /access-point/ap[id=current()/../ap]/vn-ap/\
id
        |  |  +--rw multi-src?   boolean {multi-src-dest}?
        |  +--rw dest
        |  |  +--rw ap?           -&gt; /access-point/ap/id
        |  |  +--rw vn-ap-id?
        |  |  |       -&gt; /access-point/ap[id=current()/../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</sourcecode>
        </section>
      </section>
      <section anchor="sect-4.4" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-others">Others</name>
        <t indent="0" pn="section-4.4-1">
   The VN YANG data model can easily be 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" sectionFormat="of" derivedContent="TE-SERVICE-MAPPING"/>.</t>
        <t indent="0" pn="section-4.4-2">
   The VN YANG data 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" sectionFormat="of" derivedContent="TEAS-ACTN-PM"/>.</t>
        <t indent="0" pn="section-4.4-3">Note that the VN YANG data model is tightly coupled with the TE Topology model <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/>. Any underlay technology not supported by the TE Topology model in <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/> is also not supported by the VN model. However, the VN model does include an empty container called "underlay" that can be augmented. For example, the Segment Routing (SR) Policy <xref target="RFC9256" format="default" sectionFormat="of" derivedContent="RFC9256"/> information can be augmented for the SR underlay by a future model.</t>
        <t indent="0" pn="section-4.4-4">Apart from the te-types:generic-path-constraints and te-types:generic-path-optimization, an additional leaf called "cos" for the class of service is added to represent the  Class-Type of traffic <xref target="RFC4124" format="default" sectionFormat="of" derivedContent="RFC4124"/> to be used as one of the path constraints.</t>
      </section>
      <section anchor="sect-4.5" numbered="true" toc="include" removeInRFC="false" pn="section-4.5">
        <name slugifiedName="name-summary">Summary</name>
        <t indent="0" pn="section-4.5-1">
   This section summarizes the features of the VN
   YANG data model.</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.5-2">
          <li pn="section-4.5-2.1">Maintenance of APs and VNAPs along with the VN</li>
          <li pn="section-4.5-2.2">VN construct to group of edge-to-edge links</li>
          <li pn="section-4.5-2.3">
            <t indent="0" pn="section-4.5-2.3.1">Ability to support various VN and VNS types</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.5-2.3.2">
              <li pn="section-4.5-2.3.2.1">VN Type 1: Customer configures the VN as a set of VN
                members.  No other details need to be set by the customer,
                making for a simplified operation for the customer.</li>
              <li pn="section-4.5-2.3.2.2">
                <t indent="0" pn="section-4.5-2.3.2.2.1">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 data model.</t>
                <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.5-2.3.2.2.2">
                  <li pn="section-4.5-2.3.2.2.2.1">Note that the VN type is not explicitly identified in
		  the VN YANG data model, as the VN YANG data model is exactly the same for
		  both VN Type 1 and VN Type 2. The VN type can be implicitly known
		  based on the referenced TE topology and whether the
		  connectivity matrix includes the underlay path (Type 2) or
		  not (Type 1).</li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-4.5-2.4">VN Compute (pre-instantiate)</li>
          <li pn="section-4.5-2.5">Multi-Source / Multi-Destination</li>
        </ul>
      </section>
    </section>
    <section anchor="sect-5" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-vn-yang-data-model-tree-str">VN YANG Data Model (Tree Structure)</name>
      <sourcecode name="" type="yangtree" markers="false" pn="section-5-1">
module: ietf-vn
  +--rw access-point
  |  +--rw ap* [id]
  |     +--rw id               ap-id
  |     +--rw pe?
  |     |       -&gt; /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* [id]
  |        +--rw id               ap-id
  |        +--rw vn?              -&gt; /virtual-network/vn/id
  |        +--rw abstract-node?   -&gt; /nw:networks/network/node/\
node-id
  |        +--rw ltp?             leafref
  |        +--ro max-bandwidth?   te-types:te-bandwidth
  +--rw virtual-network
     +--rw vn* [id]
        +--rw 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?
        |       -&gt; /nw:networks/network/node/tet:te-node-id
        +--rw vn-member* [id]
        |  +--rw id                        vnm-id
        |  +--rw src
        |  |  +--rw ap?          -&gt; /access-point/ap/id
        |  |  +--rw vn-ap-id?
        |  |  |       -&gt; /access-point/ap[id=current()/../ap]/\
vn-ap/id
        |  |  +--rw multi-src?   boolean {multi-src-dest}?
        |  +--rw dest
        |  |  +--rw ap?           -&gt; /access-point/ap/id
        |  |  +--rw vn-ap-id?
        |  |  |       -&gt; /access-point/ap[id=current()/../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?
       |  |       -&gt; /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* [id]
       |  |  +---w id                        vnm-id
       |  |  +---w src
       |  |  |  +---w ap?          -&gt; /access-point/ap/id
       |  |  |  +---w vn-ap-id?
       |  |  |  |       -&gt; /access-point/ap[id=current()/../ap]/\
vn-ap/id
       |  |  |  +---w multi-src?   boolean {multi-src-dest}?
       |  |  +---w dest
       |  |  |  +---w ap?           -&gt; /access-point/ap/id
       |  |  |  +---w vn-ap-id?
       |  |  |  |       -&gt; /access-point/ap[id=current()/../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?
          |       -&gt; /nw:networks/network/node/tet:te-node-id
          +--ro vn-member-list* [id]
             +--ro id                        vnm-id
             +--ro src
             |  +--ro ap?          -&gt; /access-point/ap/id
             |  +--ro vn-ap-id?
             |  |       -&gt; /access-point/ap[id=current()/../ap]/\
vn-ap/id
             |  +--ro multi-src?   boolean {multi-src-dest}?
             +--ro dest
             |  +--ro ap?           -&gt; /access-point/ap/id
             |  +--ro vn-ap-id?
             |  |       -&gt; /access-point/ap[id=current()/../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</sourcecode>
    </section>
    <section anchor="sect-6" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-vn-yang-data-model">VN YANG Data Model</name>
      <t indent="0" pn="section-6-1">The VN YANG data model is as follows:</t>
      <sourcecode name="ietf-vn@2025-03-27.yang" type="yang" markers="true" pn="section-6-2">
module ietf-vn {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-vn";
  prefix vn;

  /* Import common YANG types */

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }

  /* Import network */

  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:  &lt;https://datatracker.ietf.org/wg/teas/&gt;
     WG List:  &lt;mailto:teas@ietf.org&gt;

     Editor:  Young Lee &lt;younglee.tx@gmail.com&gt;
     Editor:  Dhruv Dhody &lt;dhruv.ietf@gmail.com&gt;";
  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";
  }

  /* Features */

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

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

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

  /* Groupings */

  grouping vn-member {
    description
      "The vn-member is described by this grouping.";
    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 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.";
      }
    }
    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).";
    }
    reference
      "RFC 8454: Information Model for Abstraction and Control of TE
                 Networks (ACTN)
       RFC 8795: YANG Data Model for Traffic Engineering (TE)
                 Topologies";
  }

  grouping vn-policy {
    description
      "policy for VN-level diversity";
    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 "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";
        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.";
        }
        description
          "List of VNAPs in this AP.";
      }
    }
    reference
      "RFC 8453: Framework for Abstraction and Control of TE
                 Networks (ACTN), Section 6";
  }
  container virtual-network {
    description
      "VN configurations.";
    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.";
      }
      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 "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 selected among the multi-source
             or multi-destination 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;
    }
    reference
      "RFC 8453: Framework for Abstraction and Control of TE
       Networks (ACTN)";
  }

  /* 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 (COS).";
      }
      uses te-types:generic-path-optimization;
      list vn-member-list {
        key "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 "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 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.";
          }
        }
      }
    }
  }
}
</sourcecode>
    </section>
    <section anchor="sect-8" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-7-1">

	
      The YANG module specified in this document defines a schema for data
   that is designed to be accessed via network management protocols such
   as NETCONF <xref target="RFC6241" format="default" sectionFormat="of" derivedContent="RFC6241"/> or RESTCONF <xref target="RFC8040" format="default" sectionFormat="of" derivedContent="RFC8040"/>.
   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" sectionFormat="of" derivedContent="RFC6242"/>.  The lowest RESTCONF layer
   is HTTPS, and the mandatory-to-implement secure transport is TLS <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>.</t>
      <t indent="0" pn="section-7-2">
   The Network Configuration Access Control Model (NACM) <xref target="RFC8341" format="default" sectionFormat="of" derivedContent="RFC8341"/> provides the means to
   restrict access for particular NETCONF or RESTCONF users to a
   preconfigured subset of all available NETCONF or RESTCONF protocol
      operations and content.</t>
      <t indent="0" pn="section-7-3">
   The model presented in this document is used in the interface
   between the CNC and MDSC, which is referred to as CNC-MDSC
   Interface (CMI). Security risks, such as malicious
   attack and rogue elements attempting to connect to the various ACTN
   components, are possible.  Furthermore, some ACTN components (e.g., MDSC)
   represent a single point of failure and threat vector. Also, there is a need to
   manage policy conflicts and eavesdropping on communication between
   different ACTN components.</t>
      <t indent="0" pn="section-7-4">

     
   There are a number of data nodes defined in this YANG module that are
   writable/creatable/deletable (i.e., "config true", which is the
   default).  These data nodes may be considered sensitive or vulnerable
   in some network environments.  Write operations (e.g., edit-config)
   to these data nodes without proper protection can have a negative
   effect on network operations.  These are the subtrees and data nodes
   and their sensitivity/vulnerability:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7-5">
        <li pn="section-7-5.1">
          <t indent="0" pn="section-7-5.1.1">ap: This list includes a set of sensitive data that influences how the APs in the VN service are attached. By accessing the following data nodes, an attacker may be able to manipulate the VN.</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7-5.1.2">
            <li pn="section-7-5.1.2.1">id</li>
            <li pn="section-7-5.1.2.2">pe</li>
            <li pn="section-7-5.1.2.3">max-bandwidth</li>
            <li pn="section-7-5.1.2.4">avl-bandwidth</li>
          </ul>
        </li>
        <li pn="section-7-5.2">
          <t indent="0" pn="section-7-5.2.1">vn-ap: This list includes a set of sensitive data that influences how the VN service is delivered. By accessing the following data nodes, an attacker may be able
          to manipulate the VN.</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7-5.2.2">
            <li pn="section-7-5.2.2.1">id</li>
            <li pn="section-7-5.2.2.2">vn</li>
            <li pn="section-7-5.2.2.3">abstract-node</li>
            <li pn="section-7-5.2.2.4">ltp</li>
            <li pn="section-7-5.2.2.5">max-bandwidth</li>
          </ul>
        </li>
        <li pn="section-7-5.3">
          <t indent="0" pn="section-7-5.3.1">vn: This list includes a set of sensitive data that influences how the VN service is delivered. By accessing the following data nodes, an attacker may be able
          to manipulate the VN.</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7-5.3.2">
            <li pn="section-7-5.3.2.1">id</li>
            <li pn="section-7-5.3.2.2">te-topology-identifier</li>
            <li pn="section-7-5.3.2.3">abstract-node</li>
          </ul>
        </li>
        <li pn="section-7-5.4">
          <t indent="0" pn="section-7-5.4.1">vn-member: This list includes a set of sensitive data that influences how the VN member in the VN service is delivered. By accessing the following data nodes, an attacker may be able to manipulate the VN member.</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7-5.4.2">
            <li pn="section-7-5.4.2.1">id</li>
            <li pn="section-7-5.4.2.2">src/ap</li>
            <li pn="section-7-5.4.2.3">src/vn-ap-id</li>
            <li pn="section-7-5.4.2.4">dest/ap</li>
            <li pn="section-7-5.4.2.5">dest/vn-ap-id</li>
            <li pn="section-7-5.4.2.6">connectivity-matrix-id</li>
          </ul>
        </li>
      </ul>
      <t indent="0" pn="section-7-6">Some of the readable data nodes in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control read access (e.g., via get, get-config, or
   notification) to these data nodes.  These are the subtrees and data
      nodes and their sensitivity/vulnerability:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7-7">
        <li pn="section-7-7.1">oper-status: This leaf can reveal the current operational state of the VN.</li>
        <li pn="section-7-7.2">if-selected: This leaf can reveal which vn-member is selected among the various multi-source / multi-destination options.</li>
      </ul>
      <t indent="0" pn="section-7-8">Some of the RPC operations in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control access to these operations.  These are the
	  operations and their sensitivity/vulnerability:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7-9">
        <li pn="section-7-9.1">vn-compute: This RPC triggers the VN computation at the MDSC, which can reveal the VN information.
        </li>
      </ul>
    </section>
    <section anchor="sect-9" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-8-1">IANA has made the following allocation for a URI in
      the "ns" registry within the "IETF XML Registry" registry group <xref target="RFC3688" format="default" sectionFormat="of" derivedContent="RFC3688"/>:</t>
      <dl spacing="compact" newline="false" indent="3" pn="section-8-2">
        <dt pn="section-8-2.1">URI:</dt>
        <dd pn="section-8-2.2">urn:ietf:params:xml:ns:yang:ietf-vn</dd>
        <dt pn="section-8-2.3">Registrant Contact:</dt>
        <dd pn="section-8-2.4">The IESG.</dd>
        <dt pn="section-8-2.5">XML:</dt>
        <dd pn="section-8-2.6">N/A, the requested URI is an XML namespace.</dd>
      </dl>
      <t indent="0" pn="section-8-3">IANA has made the following allocation for the VN YANG
      data model (see <xref target="sect-5" format="default" sectionFormat="of" derivedContent="Section 5"/> in the "YANG Module Names" registry <xref target="RFC6020" format="default" sectionFormat="of" derivedContent="RFC6020"/>:</t>
      <dl spacing="compact" newline="false" indent="3" pn="section-8-4">
        <dt pn="section-8-4.1">name:</dt>
        <dd pn="section-8-4.2">ietf-vn</dd>
        <dt pn="section-8-4.3">namespace:</dt>
        <dd pn="section-8-4.4">urn:ietf:params:xml:ns:yang:ietf-vn</dd>
        <dt pn="section-8-4.5">prefix:</dt>
        <dd pn="section-8-4.6">vn</dd>
        <dt pn="section-8-4.7">reference:</dt>
        <dd pn="section-8-4.8">RFC 9731</dd>
      </dl>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-teas-te-service-mapping-yang" to="TE-SERVICE-MAPPING"/>
    <displayreference target="I-D.ietf-teas-actn-pm-telemetry-autonomics" to="TEAS-ACTN-PM"/>
    <displayreference target="I-D.ietf-ccamp-l1csm-yang" to="L1CSM-YANG"/>
    <displayreference target="I-D.ietf-teas-yang-te" to="YANG-TE"/>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC3688" target="https://www.rfc-editor.org/info/rfc3688" quoteTitle="true" derivedAnchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t indent="0">This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC4124" target="https://www.rfc-editor.org/info/rfc4124" quoteTitle="true" derivedAnchor="RFC4124">
          <front>
            <title>Protocol Extensions for Support of Diffserv-aware MPLS Traffic Engineering</title>
            <author fullname="F. Le Faucheur" initials="F." role="editor" surname="Le Faucheur"/>
            <date month="June" year="2005"/>
            <abstract>
              <t indent="0">This document specifies the protocol extensions for support of Diffserv-aware MPLS Traffic Engineering (DS-TE). This includes generalization of the semantics of a number of Interior Gateway Protocol (IGP) extensions already defined for existing MPLS Traffic Engineering in RFC 3630, RFC 3784, and additional IGP extensions beyond those. This also includes extensions to RSVP-TE signaling beyond those already specified in RFC 3209 for existing MPLS Traffic Engineering. These extensions address the requirements for DS-TE spelled out in RFC 3564. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4124"/>
          <seriesInfo name="DOI" value="10.17487/RFC4124"/>
        </reference>
        <reference anchor="RFC6020" target="https://www.rfc-editor.org/info/rfc6020" quoteTitle="true" derivedAnchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t indent="0">YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6241" target="https://www.rfc-editor.org/info/rfc6241" quoteTitle="true" derivedAnchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t indent="0">The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6242" target="https://www.rfc-editor.org/info/rfc6242" quoteTitle="true" derivedAnchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t indent="0">This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC6991" target="https://www.rfc-editor.org/info/rfc6991" quoteTitle="true" derivedAnchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t indent="0">This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7950" quoteTitle="true" derivedAnchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t indent="0">YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC8040" target="https://www.rfc-editor.org/info/rfc8040" quoteTitle="true" derivedAnchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t indent="0">This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8340" target="https://www.rfc-editor.org/info/rfc8340" quoteTitle="true" derivedAnchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t indent="0">This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8341" target="https://www.rfc-editor.org/info/rfc8341" quoteTitle="true" derivedAnchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t indent="0">The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t indent="0">This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342" target="https://www.rfc-editor.org/info/rfc8342" quoteTitle="true" derivedAnchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t indent="0">Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8345" target="https://www.rfc-editor.org/info/rfc8345" quoteTitle="true" derivedAnchor="RFC8345">
          <front>
            <title>A YANG Data Model for Network Topologies</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="J. Medved" initials="J." surname="Medved"/>
            <author fullname="R. Varga" initials="R." surname="Varga"/>
            <author fullname="N. Bahadur" initials="N." surname="Bahadur"/>
            <author fullname="H. Ananthakrishnan" initials="H." surname="Ananthakrishnan"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <date month="March" year="2018"/>
            <abstract>
              <t indent="0">This document defines an abstract (generic, or base) YANG data model for network/service topologies and inventories. The data model serves as a base model that is augmented with technology-specific details in other, more specific topology and inventory data models.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8345"/>
          <seriesInfo name="DOI" value="10.17487/RFC8345"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8776" target="https://www.rfc-editor.org/info/rfc8776" quoteTitle="true" derivedAnchor="RFC8776">
          <front>
            <title>Common YANG Data Types for Traffic Engineering</title>
            <author fullname="T. Saad" initials="T." surname="Saad"/>
            <author fullname="R. Gandhi" initials="R." surname="Gandhi"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="V. Beeram" initials="V." surname="Beeram"/>
            <author fullname="I. Bryskin" initials="I." surname="Bryskin"/>
            <date month="June" year="2020"/>
            <abstract>
              <t indent="0">This document defines a collection of common data types and groupings in YANG data modeling language. These derived common types and groupings are intended to be imported by modules that model Traffic Engineering (TE) configuration and state capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8776"/>
          <seriesInfo name="DOI" value="10.17487/RFC8776"/>
        </reference>
        <reference anchor="RFC8795" target="https://www.rfc-editor.org/info/rfc8795" quoteTitle="true" derivedAnchor="RFC8795">
          <front>
            <title>YANG Data Model for Traffic Engineering (TE) Topologies</title>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="I. Bryskin" initials="I." surname="Bryskin"/>
            <author fullname="V. Beeram" initials="V." surname="Beeram"/>
            <author fullname="T. Saad" initials="T." surname="Saad"/>
            <author fullname="H. Shah" initials="H." surname="Shah"/>
            <author fullname="O. Gonzalez de Dios" initials="O." surname="Gonzalez de Dios"/>
            <date month="August" year="2020"/>
            <abstract>
              <t indent="0">This document defines a YANG data model for representing, retrieving, and manipulating Traffic Engineering (TE) Topologies. The model serves as a base model that other technology-specific TE topology models can augment.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8795"/>
          <seriesInfo name="DOI" value="10.17487/RFC8795"/>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-ccamp-l1csm-yang" target="https://datatracker.ietf.org/doc/html/draft-ietf-ccamp-l1csm-yang-26" quoteTitle="true" derivedAnchor="L1CSM-YANG">
          <front>
            <title>A YANG Data Model for L1 Connectivity Service Model (L1CSM)</title>
            <author initials="Y." surname="Lee" fullname="Young Lee">
              <organization showOnFrontPage="true">Samsung</organization>
            </author>
            <author initials="K." surname="Lee" fullname="Kwang-koog Lee">
              <organization showOnFrontPage="true">Korea Telecom</organization>
            </author>
            <author initials="H." surname="Zheng" fullname="Haomian Zheng">
              <organization showOnFrontPage="true">Huawei Technologies</organization>
            </author>
            <author initials="O." surname="Gonzalez de Dios" fullname="Oscar Gonzalez de Dios">
              <organization showOnFrontPage="true">Telefonica</organization>
            </author>
            <author initials="D." surname="Ceccarelli" fullname="Daniele Ceccarelli">
              <organization showOnFrontPage="true">Cisco</organization>
            </author>
            <date month="April" day="11" year="2024"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ccamp-l1csm-yang-26"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC7926" target="https://www.rfc-editor.org/info/rfc7926" quoteTitle="true" derivedAnchor="RFC7926">
          <front>
            <title>Problem Statement and Architecture for Information Exchange between Interconnected Traffic-Engineered Networks</title>
            <author fullname="A. Farrel" initials="A." role="editor" surname="Farrel"/>
            <author fullname="J. Drake" initials="J." surname="Drake"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="G. Swallow" initials="G." surname="Swallow"/>
            <author fullname="D. Ceccarelli" initials="D." surname="Ceccarelli"/>
            <author fullname="X. Zhang" initials="X." surname="Zhang"/>
            <date month="July" year="2016"/>
            <abstract>
              <t indent="0">In Traffic-Engineered (TE) systems, it is sometimes desirable to establish an end-to-end TE path with a set of constraints (such as bandwidth) across one or more networks from a source to a destination. TE information is the data relating to nodes and TE links that is used in the process of selecting a TE path. TE information is usually only available within a network. We call such a zone of visibility of TE information a domain. An example of a domain may be an IGP area or an Autonomous System.</t>
              <t indent="0">In order to determine the potential to establish a TE path through a series of connected networks, it is necessary to have available a certain amount of TE information about each network. This need not be the full set of TE information available within each network but does need to express the potential of providing TE connectivity. This subset of TE information is called TE reachability information.</t>
              <t indent="0">This document sets out the problem statement for the exchange of TE information between interconnected TE networks in support of end-to-end TE path establishment and describes the best current practice architecture to meet this problem statement. For reasons that are explained in this document, this work is limited to simple TE constraints and information that determine TE reachability.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="206"/>
          <seriesInfo name="RFC" value="7926"/>
          <seriesInfo name="DOI" value="10.17487/RFC7926"/>
        </reference>
        <reference anchor="RFC8299" target="https://www.rfc-editor.org/info/rfc8299" quoteTitle="true" derivedAnchor="RFC8299">
          <front>
            <title>YANG Data Model for L3VPN Service Delivery</title>
            <author fullname="Q. Wu" initials="Q." role="editor" surname="Wu"/>
            <author fullname="S. Litkowski" initials="S." surname="Litkowski"/>
            <author fullname="L. Tomotaki" initials="L." surname="Tomotaki"/>
            <author fullname="K. Ogaki" initials="K." surname="Ogaki"/>
            <date month="January" year="2018"/>
            <abstract>
              <t indent="0">This document defines a YANG data model that can be used for communication between customers and network operators and to deliver a Layer 3 provider-provisioned VPN service. This document is limited to BGP PE-based VPNs as described in RFCs 4026, 4110, and 4364. This model is intended to be instantiated at the management system to deliver the overall service. It is not a configuration model to be used directly on network elements. This model provides an abstracted view of the Layer 3 IP VPN service configuration components. It will be up to the management system to take this model as input and use specific configuration models to configure the different network elements to deliver the service. How the configuration of network elements is done is out of scope for this document.</t>
              <t indent="0">This document obsoletes RFC 8049; it replaces the unimplementable module in that RFC with a new module with the same name that is not backward compatible. The changes are a series of small fixes to the YANG module and some clarifications to the text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8299"/>
          <seriesInfo name="DOI" value="10.17487/RFC8299"/>
        </reference>
        <reference anchor="RFC8309" target="https://www.rfc-editor.org/info/rfc8309" quoteTitle="true" derivedAnchor="RFC8309">
          <front>
            <title>Service Models Explained</title>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <author fullname="W. Liu" initials="W." surname="Liu"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="January" year="2018"/>
            <abstract>
              <t indent="0">The IETF has produced many modules in the YANG modeling language. The majority of these modules are used to construct data models to model devices or monolithic functions.</t>
              <t indent="0">A small number of YANG modules have been defined to model services (for example, the Layer 3 Virtual Private Network Service Model (L3SM) produced by the L3SM working group and documented in RFC 8049).</t>
              <t indent="0">This document describes service models as used within the IETF and also shows where a service model might fit into a software-defined networking architecture. Note that service models do not make any assumption of how a service is actually engineered and delivered for a customer; details of how network protocols and devices are engineered to deliver a service are captured in other modules that are not exposed through the interface between the customer and the provider.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8309"/>
          <seriesInfo name="DOI" value="10.17487/RFC8309"/>
        </reference>
        <reference anchor="RFC8453" target="https://www.rfc-editor.org/info/rfc8453" quoteTitle="true" derivedAnchor="RFC8453">
          <front>
            <title>Framework for Abstraction and Control of TE Networks (ACTN)</title>
            <author fullname="D. Ceccarelli" initials="D." role="editor" surname="Ceccarelli"/>
            <author fullname="Y. Lee" initials="Y." role="editor" surname="Lee"/>
            <date month="August" year="2018"/>
            <abstract>
              <t indent="0">Traffic Engineered (TE) networks have a variety of mechanisms to facilitate the separation of the data plane and control plane. They also have a range of management and provisioning protocols to configure and activate network resources. These mechanisms represent key technologies for enabling flexible and dynamic networking. The term "Traffic Engineered network" refers to a network that uses any connection-oriented technology under the control of a distributed or centralized control plane to support dynamic provisioning of end-to- end connectivity.</t>
              <t indent="0">Abstraction of network resources is a technique that can be applied to a single network domain or across multiple domains to create a single virtualized network that is under the control of a network operator or the customer of the operator that actually owns the network resources.</t>
              <t indent="0">This document provides a framework for Abstraction and Control of TE Networks (ACTN) to support virtual network services and connectivity services.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8453"/>
          <seriesInfo name="DOI" value="10.17487/RFC8453"/>
        </reference>
        <reference anchor="RFC8454" target="https://www.rfc-editor.org/info/rfc8454" quoteTitle="true" derivedAnchor="RFC8454">
          <front>
            <title>Information Model for Abstraction and Control of TE Networks (ACTN)</title>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="S. Belotti" initials="S." surname="Belotti"/>
            <author fullname="D. Dhody" initials="D." surname="Dhody"/>
            <author fullname="D. Ceccarelli" initials="D." surname="Ceccarelli"/>
            <author fullname="B. Yoon" initials="B." surname="Yoon"/>
            <date month="September" year="2018"/>
            <abstract>
              <t indent="0">This document provides an information model for Abstraction and Control of TE Networks (ACTN).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8454"/>
          <seriesInfo name="DOI" value="10.17487/RFC8454"/>
        </reference>
        <reference anchor="RFC8466" target="https://www.rfc-editor.org/info/rfc8466" quoteTitle="true" derivedAnchor="RFC8466">
          <front>
            <title>A YANG Data Model for Layer 2 Virtual Private Network (L2VPN) Service Delivery</title>
            <author fullname="B. Wen" initials="B." surname="Wen"/>
            <author fullname="G. Fioccola" initials="G." role="editor" surname="Fioccola"/>
            <author fullname="C. Xie" initials="C." surname="Xie"/>
            <author fullname="L. Jalil" initials="L." surname="Jalil"/>
            <date month="October" year="2018"/>
            <abstract>
              <t indent="0">This document defines a YANG data model that can be used to configure a Layer 2 provider-provisioned VPN service. It is up to a management system to take this as an input and generate specific configuration models to configure the different network elements to deliver the service. How this configuration of network elements is done is out of scope for this document.</t>
              <t indent="0">The YANG data model defined in this document includes support for point-to-point Virtual Private Wire Services (VPWSs) and multipoint Virtual Private LAN Services (VPLSs) that use Pseudowires signaled using the Label Distribution Protocol (LDP) and the Border Gateway Protocol (BGP) as described in RFCs 4761 and 6624.</t>
              <t indent="0">The YANG data model defined in this document conforms to the Network Management Datastore Architecture defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8466"/>
          <seriesInfo name="DOI" value="10.17487/RFC8466"/>
        </reference>
        <reference anchor="RFC8792" target="https://www.rfc-editor.org/info/rfc8792" quoteTitle="true" derivedAnchor="RFC8792">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="June" year="2020"/>
            <abstract>
              <t indent="0">This document defines two strategies for handling long lines in width-bounded text content. One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line. The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy. Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8792"/>
          <seriesInfo name="DOI" value="10.17487/RFC8792"/>
        </reference>
        <reference anchor="RFC9256" target="https://www.rfc-editor.org/info/rfc9256" quoteTitle="true" derivedAnchor="RFC9256">
          <front>
            <title>Segment Routing Policy Architecture</title>
            <author fullname="C. Filsfils" initials="C." surname="Filsfils"/>
            <author fullname="K. Talaulikar" initials="K." role="editor" surname="Talaulikar"/>
            <author fullname="D. Voyer" initials="D." surname="Voyer"/>
            <author fullname="A. Bogdanov" initials="A." surname="Bogdanov"/>
            <author fullname="P. Mattes" initials="P." surname="Mattes"/>
            <date month="July" year="2022"/>
            <abstract>
              <t indent="0">Segment Routing (SR) allows a node to steer a packet flow along any path. Intermediate per-path states are eliminated thanks to source routing. SR Policy is an ordered list of segments (i.e., instructions) that represent a source-routed policy. Packet flows are steered into an SR Policy on a node where it is instantiated called a headend node. The packets steered into an SR Policy carry an ordered list of segments associated with that SR Policy.</t>
              <t indent="0">This document updates RFC 8402 as it details the concepts of SR Policy and steering into an SR Policy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9256"/>
          <seriesInfo name="DOI" value="10.17487/RFC9256"/>
        </reference>
        <reference anchor="I-D.ietf-teas-te-service-mapping-yang" target="https://datatracker.ietf.org/doc/html/draft-ietf-teas-te-service-mapping-yang-17" quoteTitle="true" derivedAnchor="TE-SERVICE-MAPPING">
          <front>
            <title>Traffic Engineering (TE) and Service Mapping YANG Data Model</title>
            <author initials="Y." surname="Lee" fullname="Young Lee">
              <organization showOnFrontPage="true">Samsung Electronics</organization>
            </author>
            <author initials="D." surname="Dhody" fullname="Dhruv Dhody">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <author initials="G." surname="Fioccola" fullname="Giuseppe Fioccola">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <author initials="Q." surname="Wu" fullname="Qin Wu">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <author initials="D." surname="Ceccarelli" fullname="Daniele Ceccarelli">
              <organization showOnFrontPage="true">Cisco</organization>
            </author>
            <author initials="J." surname="Tantsura" fullname="Jeff Tantsura">
              <organization showOnFrontPage="true">Nvidia</organization>
            </author>
            <date month="January" day="29" year="2025"/>
            <abstract>
              <t indent="0">   This document provides a YANG data model to map customer service
   models (e.g., L3VPN Service Delivery model) to Traffic Engineering
   (TE) models (e.g., the TE Tunnel or the Virtual Network (VN) model).
   These models are referred to as the TE Service Mapping Model and are
   applicable generically to the operator's need for seamless control
   and management of their VPN services with underlying TE support.

   The models are principally used for monitoring and diagnostics of the
   management systems to show how the service requests are mapped onto
   underlying network resources and TE models.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teas-te-service-mapping-yang-17"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-teas-actn-pm-telemetry-autonomics" target="https://datatracker.ietf.org/doc/html/draft-ietf-teas-actn-pm-telemetry-autonomics-14" quoteTitle="true" derivedAnchor="TEAS-ACTN-PM">
          <front>
            <title>YANG models for Virtual Network (VN)/TE Performance Monitoring Telemetry and Scaling Intent Autonomics</title>
            <author initials="Y." surname="Lee" fullname="Young Lee">
              <organization showOnFrontPage="true">Samsung Electronics</organization>
            </author>
            <author initials="D." surname="Dhody" fullname="Dhruv Dhody">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <author initials="R." surname="Vilalta" fullname="Ricard Vilalta">
              <organization showOnFrontPage="true">CTTC</organization>
            </author>
            <author initials="D." surname="King" fullname="Daniel King">
              <organization showOnFrontPage="true">Lancaster University</organization>
            </author>
            <author initials="D." surname="Ceccarelli" fullname="Daniele Ceccarelli">
              <organization showOnFrontPage="true">Cisco</organization>
            </author>
            <date month="October" day="19" year="2024"/>
            <abstract>
              <t indent="0">   This document provides YANG data models that describe the performance
   monitoring parameters and scaling intent mechanisms for TE-tunnels
   and Virtual Networks (VNs).  Their performance monitoring parameters
   are exposed as the key telemetry data for tunnels and VN.

   The models presented in this document allow customers to subscribe to
   and monitor the key performance data of the TE-tunnel or the VN.  The
   models also provide customers with the ability to program autonomic
   scaling intent mechanisms on the level of TE-tunnel as well as VN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teas-actn-pm-telemetry-autonomics-14"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-teas-yang-te" target="https://datatracker.ietf.org/doc/html/draft-ietf-teas-yang-te-37" quoteTitle="true" derivedAnchor="YANG-TE">
          <front>
            <title>A YANG Data Model for Traffic Engineering Tunnels, Label Switched Paths and Interfaces</title>
            <author initials="T." surname="Saad" fullname="Tarek Saad">
              <organization showOnFrontPage="true">Cisco Systems Inc</organization>
            </author>
            <author initials="R." surname="Gandhi" fullname="Rakesh Gandhi">
              <organization showOnFrontPage="true">Cisco Systems Inc</organization>
            </author>
            <author initials="X." surname="Liu" fullname="Xufeng Liu">
              <organization showOnFrontPage="true">Alef Edge</organization>
            </author>
            <author initials="V. P." surname="Beeram" fullname="Vishnu Pavan Beeram">
              <organization showOnFrontPage="true">Juniper Networks</organization>
            </author>
            <author initials="I." surname="Bryskin" fullname="Igor Bryskin">
              <organization showOnFrontPage="true">Individual</organization>
            </author>
            <date month="October" day="9" year="2024"/>
            <abstract>
              <t indent="0">   This document defines a YANG data model for the provisioning and
   management of Traffic Engineering (TE) tunnels, Label Switched Paths
   (LSPs), and interfaces.  The model covers data that is independent of
   any technology or dataplane encapsulation and is divided into two
   YANG modules that cover device-specific, and device independent data.

   This model covers data for configuration, operational state, remote
   procedural calls, and event notifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teas-yang-te-37"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="sect-constraints" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-performance-constraints">Performance Constraints</name>
      <t indent="0" pn="section-appendix.a-1">At the creation of a VN, it is natural to provide VN-level constraints and optimization criteria. It should be noted that the VN YANG data model described in this document relies on the TE Topology model in <xref target="RFC8795" format="default" sectionFormat="of" derivedContent="RFC8795"/> by using a reference to an abstract node to provide VN-level constraints and optimization criteria.  Further, the connectivity-matrix structure is used to assign the constraints and optimization criteria including delay, jitter, etc. <xref target="RFC8776" format="default" sectionFormat="of" derivedContent="RFC8776"/> defines some of the metric-types; future documents are meant to augment it.</t>
      <t indent="0" pn="section-appendix.a-2">Note that the VN compute allows the inclusion of the constraints and the optimization criteria directly in the RPC to allow it to be used independently.</t>
    </section>
    <section anchor="sect-7" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-json-example">JSON Example</name>
      <section anchor="sect-7-1" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.b.1">
        <name slugifiedName="name-vn-json">VN JSON</name>
        <t indent="0" pn="section-appendix.b.1-1">
   This section provides JSON examples of how the VN YANG
   data model and TE Topology YANG data model are used together to instantiate a VN.</t>
        <t indent="0" pn="section-appendix.b.1-2">
   The example in this section includes the following VNs:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.b.1-3">
          <li pn="section-appendix.b.1-3.1">VN1 (Type 1): This VN maps to the single node topology abstract1
      and consists of VN members 104 (L1 to L4), 107 (L1 to
      L7), 204 (L2 to L4), 308 (L3 to L8), and 108 (L1 to L8).</li>
          <li pn="section-appendix.b.1-3.2">VN2 (Type 2): This VN maps to the single node topology abstract2;
        this topology has an underlay topology (called underlay).
        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 the abstract2 topology;</li>
          <li pn="section-appendix.b.1-3.3">VN3 (Type 1): This VN has a multi-source and multi-destination
      feature enabled. VN member 106 (L1 to L6) and 107 (L1 to L7)
      showcase multi-dest and VN member 108 (L1 to L8) and 308 (L3 to L8) showcase the multi-src feature. The selected VN member is known via the field "if-selected" and the corresponding connectivity-matrix-id.</li>
        </ul>
        <figure align="left" suppress-title="false" pn="figure-11">
          <name slugifiedName="name-example">Example</name>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.b.1-4.1">
L1---104---L4             L1---105---L5             L1---106---L6(md)
L1---107---L7             Underlay Path:            L1---107---L7(md)
L2---204---L4                (S4 and S7)            L1---108---L8(ms)
L3---308---L8                                       L3---308---L8(ms)
L1---108---L8

     ---                       ---                       ---
     VN1                       VN2                       VN3
     ---                       ---                       ---</artwork>
        </figure>
        <t indent="0" pn="section-appendix.b.1-5">
   Note that the VN YANG data model also includes the AP and VNAP, which shows
   various VNs using the same AP.</t>
        <sourcecode name="" type="json" markers="false" pn="section-appendix.b.1-6">
{
  "ietf-vn:access-point": {
    "ap": [
      {
        "id": "101",
        "vn-ap": [
          {
            "id": "10101",
            "vn": "1",
            "abstract-node": "192.0.2.1",
            "ltp": "203.0.113.11"
          },
          {
            "id": "10102",
            "vn": "2",
            "abstract-node": "192.0.2.2",
            "ltp": "203.0.113.12"
          },
          {
            "id": "10103",
            "vn": "3",
            "abstract-node": "192.0.2.3",
            "ltp": "203.0.113.13"
          }
        ]
      },
      {
        "id": "202",
        "vn-ap": [
          {
            "id": "20201",
            "vn": "1",
            "abstract-node": "192.0.2.1",
            "ltp": "203.0.113.21"
          }
        ]
      },
      {
        "id": "303",
        "vn-ap": [
          {
            "id": "30301",
            "vn": "1",
            "abstract-node": "192.0.2.1",
            "ltp": "203.0.113.31"
          },
          {
            "id": "30303",
            "vn": "3",
            "abstract-node": "192.0.2.3",
            "ltp": "203.0.113.33"
          }
        ]
      },
      {
        "id": "404",
        "vn-ap": [
          {
            "id": "40401",
            "vn": "1",
            "abstract-node": "192.0.2.1",
            "ltp": "203.0.113.41"
          }
        ]
      },
      {
        "id": "505",
        "vn-ap": [
          {
            "id": "50502",
            "vn": "2",
            "abstract-node": "192.0.2.2",
            "ltp": "203.0.113.52"
          }
        ]
      },
      {
        "id": "606",
        "vn-ap": [
          {
            "id": "60603",
            "vn": "3",
            "abstract-node": "192.0.2.3",
            "ltp": "203.0.113.63"
          }
        ]
      },
      {
        "id": "707",
        "vn-ap": [
          {
            "id": "70701",
            "vn": "1",
            "abstract-node": "192.0.2.1",
            "ltp": "203.0.113.71"
          },
          {
            "id": "70703",
            "vn": "3",
            "abstract-node": "192.0.2.3",
            "ltp": "203.0.113.73"
          }
        ]
      },
      {
        "id": "808",
        "vn-ap": [
          {
            "id": "80801",
            "vn": "1",
            "abstract-node": "192.0.2.1",
            "ltp": "203.0.113.81"
          },
          {
            "id": "80803",
            "vn": "3",
            "abstract-node": "192.0.2.3",
            "ltp": "203.0.113.83"
          }
        ]
      }
    ]
  },
  "ietf-vn:virtual-network": {
    "vn": [
      {
        "id": "1",
        "te-topology-identifier": {
          "topology-id": "abstract1"
        },
        "abstract-node": "192.0.2.1",
        "vn-member": [
          {
            "id": "104",
            "src": {
              "ap": "101",
              "vn-ap-id": "10101"
            },
            "dest": {
              "ap": "404",
              "vn-ap-id": "40401"
            },
            "connectivity-matrix-id": 10104
          },
          {
            "id": "107",
            "src": {
              "ap": "101",
              "vn-ap-id": "10101"
            },
            "dest": {
              "ap": "707",
              "vn-ap-id": "70701"
            },
            "connectivity-matrix-id": 10107
          },
          {
            "id": "204",
            "src": {
              "ap": "202",
              "vn-ap-id": "20201"
            },
            "dest": {
              "ap": "404",
              "vn-ap-id": "40401"
            },
            "connectivity-matrix-id": 10204
          },
          {
            "id": "308",
            "src": {
              "ap": "303",
              "vn-ap-id": "30301"
            },
            "dest": {
              "ap": "808",
              "vn-ap-id": "80801"
            },
            "connectivity-matrix-id": 10308
          },
          {
            "id": "108",
            "src": {
              "ap": "101",
              "vn-ap-id": "10101"
            },
            "dest": {
              "ap": "808",
              "vn-ap-id": "80801"
            },
            "connectivity-matrix-id": 10108
          }
        ]
      },
      {
        "id": "2",
        "te-topology-identifier": {
          "topology-id": "abstract2"
        },
        "abstract-node": "192.0.2.2",
        "vn-member": [
          {
            "id": "105",
            "src": {
              "ap": "101",
              "vn-ap-id": "10102"
            },
            "dest": {
              "ap": "505",
              "vn-ap-id": "50502"
            },
            "connectivity-matrix-id": 20105
          }
        ]
      },
      {
        "id": "3",
        "te-topology-identifier": {
          "topology-id": "abstract3"
        },
        "abstract-node": "192.0.2.3",
        "vn-member": [
          {
            "id": "106",
            "src": {
              "ap": "101",
              "vn-ap-id": "10103"
            },
            "dest": {
              "ap": "606",
              "vn-ap-id": "60603",
              "multi-dest": true
            },
            "connectivity-matrix-id": 30106,
            "if-selected": false
          },
          {
            "id": "107",
            "src": {
              "ap": "101",
              "vn-ap-id": "10103"
            },
            "dest": {
              "ap": "707",
              "vn-ap-id": "70703",
              "multi-dest": true
            },
            "connectivity-matrix-id": 30107,
            "if-selected": true
          },
          {
            "id": "108",
            "src": {
              "ap": "101",
              "vn-ap-id": "10103",
              "multi-src": true
            },
            "dest": {
              "ap": "808",
              "vn-ap-id": "80803",
            },
            "connectivity-matrix-id": 30108,
            "if-selected": false
          },
          {
            "id": "308",
            "src": {
              "ap": "303",
              "vn-ap-id": "30303",
              "multi-src": true
            },
            "dest": {
              "ap": "808",
              "vn-ap-id": "80803"
            },
            "connectivity-matrix-id": 30308,
            "if-selected": true
          }
        ]
      }
    ]
  }
}</sourcecode>
      </section>
      <section anchor="sect-7-2" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.b.2">
        <name slugifiedName="name-te-topology-json">TE Topology JSON</name>
        <t indent="0" pn="section-appendix.b.2-1">
   This section provides JSON examples of the various TE topology instances.</t>
        <t indent="0" pn="section-appendix.b.2-2">
   The example in this section includes the following TE Topologies:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.b.2-3">
          <li pn="section-appendix.b.2-3.1">abstract1: a single node TE topology referenced by VN1.  We also
      show how disjointness (node, link, Shared Risk Link Group (SRLG)) is supported in the example on the connectivity matrices.</li>
          <li pn="section-appendix.b.2-3.2">abstract2: a single node TE topology referenced by VN2 with an underlay path.</li>
          <li pn="section-appendix.b.2-3.3">underlay: the topology with multiple nodes (in the underlay path of abstract2). For brevity, the example includes only the node: other parameters are not included.</li>
          <li pn="section-appendix.b.2-3.4">abstract3: a single node TE topology referenced by VN3.</li>
        </ul>
        <sourcecode name="" type="json" markers="false" pn="section-appendix.b.2-4">
{
  "ietf-network:networks": {
    "network": [
      {
        "network-types": {
          "ietf-te-topology:te-topology": {}
        },
        "network-id": "example:abstract1",
        "ietf-te-topology:te-topology-identifier": {
          "provider-id": 0,
          "client-id": 0,
          "topology-id": "example:abstract1"
        },
        "node": [
          {
            "node-id": "example:192.0.2.1",
            "ietf-network-topology:termination-point": [
              {
                "tp-id": "example:1-0-1",
                "ietf-te-topology:te-tp-id": "203.0.113.11"
              },
              {
                "tp-id": "example:1-0-2",
                "ietf-te-topology:te-tp-id": "203.0.113.21"
              },
              {
                "tp-id": "example:1-0-3",
                "ietf-te-topology:te-tp-id": "203.0.113.31"
              },
              {
                "tp-id": "example:1-0-4",
                "ietf-te-topology:te-tp-id": "203.0.113.41"
              },
              {
                "tp-id": "example:1-0-7",
                "ietf-te-topology:te-tp-id": "203.0.113.71"
              },
              {
                "tp-id": "example:1-0-8",
                "ietf-te-topology:te-tp-id": "203.0.113.81"
              }
            ],
            "ietf-te-topology:te-node-id": "192.0.2.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": 10104,
                      "from": {
                        "tp-ref": "example:1-0-1"
                      },
                      "to": {
                        "tp-ref": "example:1-0-4"
                      }
                    },
                    {
                      "id": 10107,
                      "from": {
                        "tp-ref": "example:1-0-1"
                      },
                      "to": {
                        "tp-ref": "example:1-0-7"
                      }
                    },
                    {
                      "id": 10204,
                      "from": {
                        "tp-ref": "example:1-0-2"
                      },
                      "to": {
                        "tp-ref": "example:1-0-4"
                      }
                    },
                    {
                      "id": 10308,
                      "from": {
                        "tp-ref": "example:1-0-3"
                      },
                      "to": {
                        "tp-ref": "example:1-0-8"
                      }
                    },
                    {
                      "id": 10108,
                      "from": {
                        "tp-ref": "example:1-0-1"
                      },
                      "to": {
                        "tp-ref": "example:1-0-8"
                      }
                    }
                  ]
                }
              }
            }
          }
        ]
      },
      {
        "network-types": {
          "ietf-te-topology:te-topology": {}
        },
        "network-id": "example:abstract2",
        "ietf-te-topology:te-topology-identifier": {
          "provider-id": 0,
          "client-id": 0,
          "topology-id": "example:abstract2"
        },
        "node": [
          {
            "node-id": "example:192.0.2.2",
            "ietf-network-topology:termination-point": [
              {
                "tp-id": "example:2-0-1",
                "ietf-te-topology:te-tp-id": "203.0.113.12"
              },
              {
                "tp-id": "example:2-0-5",
                "ietf-te-topology:te-tp-id": "203.0.113.52"
              }
            ],
            "ietf-te-topology:te-node-id": "192.0.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":
                       "ietf-te-types:of-maximize-residual-bandwidth"
                    }
                  },
                  "ietf-te-topology:connectivity-matrix": [
                    {
                      "id": 20105,
                      "from": {
                        "tp-ref": "example:2-0-1"
                      },
                      "to": {
                        "tp-ref": "example:2-0-5"
                      },
                      "underlay": {
                        "enabled": true,
                        "primary-path": {
                          "network-ref": "example:underlay",
                          "path-element": [
                            {
                              "path-element-id": 1,
                              "numbered-node-hop": {
                                "node-id": "198.51.100.44",
                                "hop-type": "strict"
                              }
                            },
                            {
                              "path-element-id": 2,
                              "numbered-node-hop": {
                                "node-id": "198.51.100.77",
                                "hop-type": "strict"
                              }
                            }
                          ]
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        ]
      },
      {
        "network-types": {
          "ietf-te-topology:te-topology": {}
        },
        "network-id": "example:underlay",
        "ietf-te-topology:te-topology-identifier": {
          "provider-id": 0,
          "client-id": 0,
          "topology-id": "example:underlay"
        },
        "node": [
          {
            "node-id": "example:198.51.100.11",
            "ietf-te-topology:te-node-id": "198.51.100.11"
          },
          {
            "node-id": "example:198.51.100.22",
            "ietf-te-topology:te-node-id": "198.51.100.22"
          },
          {
            "node-id": "example:198.51.100.33",
            "ietf-te-topology:te-node-id": "198.51.100.33"
          },
          {
            "node-id": "example:198.51.100.44",
            "ietf-te-topology:te-node-id": "198.51.100.44"
          },
          {
            "node-id": "example:198.51.100.55",
            "ietf-te-topology:te-node-id": "198.51.100.55"
          },
          {
            "node-id": "example:198.51.100.66",
            "ietf-te-topology:te-node-id": "198.51.100.66"
          },
          {
            "node-id": "example:198.51.100.77",
            "ietf-te-topology:te-node-id": "198.51.100.77"
          },
          {
            "node-id": "example:198.51.100.88",
            "ietf-te-topology:te-node-id": "198.51.100.88"
          },
          {
            "node-id": "example:198.51.100.99",
            "ietf-te-topology:te-node-id": "198.51.100.99"
          }
        ]
      },
      {
        "network-types": {
          "ietf-te-topology:te-topology": {}
        },
        "network-id": "example:abstract3",
        "ietf-te-topology:te-topology-identifier": {
          "provider-id": 0,
          "client-id": 0,
          "topology-id": "example:abstract3"
        },
        "node": [
          {
            "node-id": "example:192.0.2.3",
            "ietf-network-topology:termination-point": [
              {
                "tp-id": "example:3-0-1",
                "ietf-te-topology:te-tp-id": "203.0.113.13"
              },
              {
                "tp-id": "example:3-0-3",
                "ietf-te-topology:te-tp-id": "203.0.113.33"
              },
              {
                "tp-id": "example:3-0-6",
                "ietf-te-topology:te-tp-id": "203.0.113.63"
              },
              {
                "tp-id": "example:3-0-7",
                "ietf-te-topology:te-tp-id": "203.0.113.73"
              },
              {
                "tp-id": "example:3-0-8",
                "ietf-te-topology:te-tp-id": "203.0.113.83"
              }
            ],
            "ietf-te-topology:te-node-id": "192.0.2.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": 30107,
                      "from": {
                        "tp-ref": "example:3-0-1"
                      },
                      "to": {
                        "tp-ref": "example:3-0-7"
                      }
                    },
                    {
                      "id": 30106,
                      "from": {
                        "tp-ref": "example:3-0-1"
                      },
                      "to": {
                        "tp-ref": "example:3-0-6"
                      }
                    },
                    {
                      "id": 30108,
                      "from": {
                        "tp-ref": "example:3-0-1"
                      },
                      "to": {
                        "tp-ref": "example:3-0-8"
                      }
                    },
                    {
                      "id": 30308,
                      "from": {
                        "tp-ref": "example:3-0-3"
                      },
                      "to": {
                        "tp-ref": "example:3-0-8"
                      }
                    }
                  ]
                }
              }
            }
          }
        ]
      }
    ]
  }
}</sourcecode>
      </section>
    </section>
    <section anchor="sect-10" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.c">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.c-1">The authors would like to thank <contact fullname="Xufeng Liu"/>,
      <contact fullname="Adrian Farrel"/>, <contact fullname="Tom Petch"/>,
      <contact fullname="Mohamed Boucadair"/>, <contact fullname="Italo       Busi"/>, <contact fullname="Bo Wu"/>, and <contact fullname="Daniel       King"/> for their helpful comments and valuable suggestions.</t>
      <t indent="0" pn="section-appendix.c-2">Thanks to:</t>
      <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-appendix.c-3">
        <li pn="section-appendix.c-3.1">
          <t indent="0" pn="section-appendix.c-3.1.1"><contact fullname="Andy Bierman"/> for the YANGDIR
	review.</t>
        </li>
        <li pn="section-appendix.c-3.2">
          <t indent="0" pn="section-appendix.c-3.2.1"><contact fullname="Darren Dukes"/> and <contact fullname="Susan Hares"/> for the RTGDIR
	review.</t>
        </li>
        <li pn="section-appendix.c-3.3">
          <t indent="0" pn="section-appendix.c-3.3.1"><contact fullname="Behcet Sarikaya"/> for the GENART
	review.</t>
        </li>
        <li pn="section-appendix.c-3.4">
          <t indent="0" pn="section-appendix.c-3.4.1"><contact fullname="Bo Wu"/> for the OPSDIR review.</t>
        </li>
        <li pn="section-appendix.c-3.5">
          <t indent="0" pn="section-appendix.c-3.5.1"><contact fullname="Shivan Sahib"/> for the SECDIR review.</t>
        </li>
        <li pn="section-appendix.c-3.6">
          <t indent="0" pn="section-appendix.c-3.6.1"><contact fullname="Deb Cooley"/>, <contact fullname="Francesca Palombini"/>, <contact fullname="Gunter Van de       Velde"/>, and <contact fullname="Mahesh Jethanandani"/> for the IESG
	review.</t>
        </li>
      </ul>
    </section>
    <section anchor="sect-contributors" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.d">
      <name slugifiedName="name-contributors">Contributors</name>
      <contact fullname="Qin Wu">
        <organization showOnFrontPage="true">Huawei Technologies</organization>
        <address>
          <email>bill.wu@huawei.com</email>
        </address>
      </contact>
      <contact fullname="Peter Park">
        <organization showOnFrontPage="true">KT</organization>
        <address>
          <email>peter.park@kt.com</email>
        </address>
      </contact>
      <contact fullname="Haomian Zheng">
        <organization showOnFrontPage="true">Huawei Technologies</organization>
        <address>
          <email>zhenghaomian@huawei.com</email>
        </address>
      </contact>
      <contact fullname="Xian Zhang">
        <organization showOnFrontPage="true">Huawei Technologies</organization>
        <address>
          <email>zhang.xian@huawei.com</email>
        </address>
      </contact>
      <contact fullname="Sergio Belotti">
        <organization showOnFrontPage="true">Nokia</organization>
        <address>
          <email>sergio.belotti@nokia.com</email>
        </address>
      </contact>
      <contact fullname="Takuya Miyasaka">
        <organization showOnFrontPage="true">KDDI</organization>
        <address>
          <email>ta-miyasaka@kddi.com</email>
        </address>
      </contact>
      <contact fullname="Kenichi Ogaki">
        <organization showOnFrontPage="true">KDDI</organization>
        <address>
          <email>ke-oogaki@kddi.com</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.e">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Young Lee" initials="Y" surname="Lee" role="editor">
        <organization showOnFrontPage="true">Samsung Electronics</organization>
        <address>
          <email>younglee.tx@gmail.com</email>
        </address>
      </author>
      <author initials="D" surname="Dhody" fullname="Dhruv Dhody" role="editor">
        <organization showOnFrontPage="true">Huawei</organization>
        <address>
          <postal>
            <country>India</country>
          </postal>
          <email>dhruv.ietf@gmail.com</email>
        </address>
      </author>
      <author fullname="Daniele Ceccarelli" initials="D" surname="Ceccarelli">
        <organization showOnFrontPage="true">Cisco</organization>
        <address>
          <email>daniele.ietf@gmail.com</email>
        </address>
      </author>
      <author fullname="Igor Bryskin" initials="I" surname="Bryskin">
        <organization showOnFrontPage="true">Individual</organization>
        <address>
          <email>i_bryskin@yahoo.com</email>
        </address>
      </author>
      <author fullname="Bin Yeong Yoon" initials="B" surname="Yoon">
        <organization showOnFrontPage="true">ETRI</organization>
        <address>
          <email>byyun@etri.re.kr</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
