<?xml version="1.0" encoding="utf-8"?>
<!-- 
     draft-rfcxml-general-template-standard-00
  
     This template includes examples of the most commonly used features of RFCXML with comments 
     explaining how to customise them. This template can be quickly turned into an I-D by editing 
     the examples provided. Look for [REPLACE], [REPLACE/DELETE], [CHECK] and edit accordingly.
     Note - 'DELETE' means delete the element or attribute, not just the contents.
     
     Documentation is at https://authors.ietf.org/en/templates-and-schemas
-->
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->


<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be added to the DOCTYPE above.
     Use of an external entity file is not recommended. -->

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="info"
  docName="draft-perocchio-rtgwg-path-and-placement-00"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  tocInclude="true"
  sortRefs="true"
  symRefs="true"
  version="3">
<!-- [REPLACE] 
       * docName with name of your draft
     [CHECK] 
       * category should be one of std, bcp, info, exp, historic
       * ipr should be one of trust200902, noModificationTrust200902, noDerivativesTrust200902, pre5378Trust200902
       * updates can be an RFC number as NNNN
       * obsoletes can be an RFC number as NNNN 
-->

  <front>
    <title abbrev="TE Path&amp;Placement Computation for cloud">TE and Path &amp; Placement Computation for Cloud Native Applications</title>
    <!--  [REPLACE/DELETE] abbrev. The abbreviated title is required if the full title is longer than 39 characters -->

    <seriesInfo name="Internet-Draft" value="draft-perocchio-rtgwg-path-and-placement-00"/>
   
    <author fullname="Carlo G. Perocchio" initials="C." role="editor" surname="Perocchio">
      <!-- [CHECK]
             * initials should not include an initial for the surname
             * role="editor" is optional -->
    <!-- Can have more than one author -->
      
    <!-- all of the following elements are optional -->
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Via Melen 77</street>
          <city>Genoa</city>
          <region>GE</region>
          <code>16152</code>
          <country>Italy</country>
        </postal>
        <!-- Can have more than one <email> element -->
        <email>carlo.perocchio@ericsson.com</email>
        <uri>www.ericsson.com</uri>
      </address>
    </author>
   
    <date year="2025"/>
    <!-- On draft subbmission:
         * If only the current year is specified, the current day and month will be used.
         * If the month and year are both specified and are the current ones, the current day will
           be used
         * If the year is not the current one, it is necessary to specify at least a month and day="1" will be used.
    -->

    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <!-- "Internet Engineering Task Force" is fine for individual submissions.  If this element is 
          not present, the default is "Network Working Group", which is used by the RFC Editor as 
          a nod to the history of the RFC Series. -->

    <keyword>Traffic Engineering</keyword>
    <keyword>Path Computation Element</keyword>
    <keyword>Cloud Native Application</keyword>
    <keyword>Security</keyword>
    <keyword>Virtual Network Function</keyword>
    <keyword>5G</keyword>
    <!-- [REPLACE/DELETE]. Multiple allowed.  Keywords are incorporated into HTML output files for 
         use by search engines. -->


    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <abstract>

      <t>Currently a path computation is 
         the ability to find the path/s connecting two or 
         more points of the network identified with addresses. 
         The path selection can be driven requiring constraints and 
         metric minimization in traversing the network.
         The computed paths may be used for realizing a network slice providing connectivity to applications 
         that shall be able to reach addresses of the end-points.
      </t>

      <t>A cloud native application (CNA) becomes a network point 
         only when an instance of it has been deployed in a site 
         fulfilling the requirements for resources, scalability, reliability, security and costs...
         The process for identifying where to deploy a CNA is disjoined from path computation 
         that is executed in a following step.
         If the path computation cannot satisfy the request not finding a connectivity solution, 
         the chosen end-points shall be changed restarting the process from the selection of the deployment sites.
      </t>

      <t>The CNA problem can be generalized to all the cases 
         where more end-points can be alternatives for terminating a path.
         For example, an enterprise site may be attached to the ISP backbone 
         via more nodes in risk diversity belonging to different network segments.
         How computing the best connectivity in the ISP network 
         including the selection of the best placement for the end-points in the enterprise sites?
         Where locating end-points of overlay network may be managed as well as an application.
      </t>

    </abstract>
 
  </front>

  <middle>
    

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section>
      <name>Introduction</name>

      <t>Currently the deployment of an application is typically executed 
         only when the clusters/physical locations to use have been already identified. 
         With the introduction of the cloud technology 
         the selected cluster for hosting the application will determine the address of the application. 
         Furthermore with the cluster as a service methodology, 
         at the deployment of the application a new cluster may be created resulting 
         in a new network node with an its own address.
      </t>

      <t>So the endpoints of a slice shall be defined offline 
         for providing them as input for computing the connectivity.
      </t>

      <t>As well it is not possible in a single iteration to identify 
         both the best connectivity and the best placement of the end-points 
         of an overlay networking for a client attached to the ISP backbone 
         via more accesses with different characteristics.
      </t>

      <t>The decoupling of the two decisional processes, 
         the best placement selection in the cloud of the applications and 
         the identification of the best paths across the network, 
         may lead to a complex design flow of the overall slice. 
      </t>

      <t>This can evolve in a more dynamic behavior 
         where the resources for the deployment - clusters and physical locations - 
         can be associated to constraints 
         (costs, resources availability, inclusions and exclusions, security risks, vulnerabilities, privacy, power efficiency...), 
         allowing to find out optimal deployment solutions with the possible alternatives 
         resolving the constraints in the dynamicity of the cloud. 
         Doing so, it can be executed with the path selection for an overall optimization.
      </t>

      <t>This may result in a dynamic and reactive mechanism 
         for identifying alternative deployment solutions in case of a site crash or attack. 
         In fact the security is a raising concern in a cloud centric world. 
         It is important to be sure that a CNA involved in a network slice is secure, 
         without any known vulnerabilities and 
         that it does not violate laws, regulations or local policies. 
         The proposed method can find deployments satisfying security constraints.
      </t>
      

      <!-- ########################################################################### -->
      <!-- ########################################################################### -->

      <section>
        <name>Requirements Language</name>

        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
          "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
          RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
          interpreted as described in BCP 14 <xref target="RFC2119"/>
          <xref target="RFC8174"/> when, and only when, they appear in
          all capitals, as shown here.</t>
      </section>
      <!-- [CHECK] The 'Requirements Language' section is optional -->

      <!-- ########################################################################### -->
      <!-- ########################################################################### -->

      <section anchor="terminology">
        <name>Terminology</name>

	<t>This document uses terms from PCEP 
	   <xref target="RFC5440"/>, 
	   <xref target="RFC5521"/>, 
	   <xref target="RFC5541"/>. 
           The following abbreviations are used in this document:
        </t>

        <dl newline="false" spacing="compact" indent="10">
          <dt>3GPP:</dt><dd>Third Generation Partnership Project</dd>
          <dt>ACTN:</dt><dd>Abstraction and Control of Transport Networks <xref target="RFC8453"/></dd>
          <dt>BGP-LS:</dt><dd>Border Gateway Protocol Link-State <xref target="RFC9552"/></dd>
          <dt>BOM:</dt><dd>Bill of Materials</dd>
          <dt>CNA:</dt><dd>Cloud Native Application</dd>
          <dt>CNF:</dt><dd>Cloud Native Network Function <xref target="CNCF-CNF"/></dd>
          <dt>DC:</dt><dd>Data Center</dd>
          <dt>E2E:</dt><dd>End to End</dd>
          <dt>ERO:</dt><dd>Explicit Route Object <xref target="RFC5440"/></dd>
          <dt>ETSI:</dt><dd>European Telecommunications Standards Institute</dd>
          <dt>FOSS:</dt><dd>Free Open Source Software</dd>
          <dt>GOF:</dt><dd>Global Objective Function <xref target="RFC5557"/></dd>
          <dt>IRO:</dt><dd>Include Route Object <xref target="RFC5440"/></dd>
          <dt>LSDB:</dt><dd>Link State Database </dd>
          <dt>LSP:</dt><dd>Label Switched Path</dd>
          <dt>LSPA:</dt><dd>LSP Attribute <xref target="RFC5440"/></dd>
          <dt>N:</dt><dd>Node</dd>
          <dt>NLRI:</dt><dd>Network Layer Reachability Information <xref target="RFC9552"/></dd>
          <dt>NFV:</dt><dd>Network Function Virtualization</dd>
          <dt>O-CU</dt><dd>O-RAN Centralized Unit defined by O-RAN ALLIANCE</dd>
          <dt>O-DU</dt><dd>O-RAN Distributed Unit defined by O-RAN ALLIANCE</dd>
          <dt>OF:</dt><dd>Objective Function <xref target="RFC5541"/></dd>
          <dt>P2P:</dt><dd>Point-to-Point</dd>
          <dt>PCEP:</dt><dd>Path Computation Element Communication Protocol <xref target="RFC5440"/></dd>
          <dt>R:</dt><dd>Router</dd>
          <dt>S:</dt><dd>Service</dd>
          <dt>SBOM:</dt><dd>Software Bill of Materials</dd>
          <dt>SDN:</dt><dd>Software Define Network</dd>
          <dt>SVEC:</dt><dd>Synchronization Vector <xref target="RFC5440"/></dd>
          <dt>TDB:</dt><dd>Topology Database</dd>
          <dt>TE:</dt><dd>Traffic Engineering</dd>
          <dt>TED:</dt><dd>Traffic Engineering Database</dd>
          <dt>TLV:</dt><dd>Type Length Value</dd>
          <dt>UUID:</dt><dd>Universally Unique Identifier <xref target="RFC9562"/></dd>
          <dt>XRO:</dt><dd>Exclude Route Object <xref target="RFC5521"/></dd>
          <dt>VIM:</dt><dd>Virtual Infrastructure Manager <xref target="ETSI-GR-NFV-MAN-001"/></dd>
          <dt>VNF:</dt><dd>Virtual Network Function <xref target="ETSI-GR-NFV-MAN-001"/></dd>
          <dt>WAN:</dt><dd>Wide Area Network</dd>
          <dt>WIM:</dt><dd>WAN Infrastructure Manager <xref target="ETSI-GS-NFV-IFA-010"/></dd>
        </dl>
      </section>

    </section>
    

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="requirements">
      <name>Requirements</name>
      
      <t>The ingress and egress points of a path computation request may be virtual: 
         as well the nodes of a network slice.
      </t>

      <t>When virtual, 
         the end-points may be described with attributes and constraints: 
         the path computation shall identify the best solution 
         according the specified metric for placing the virtual end-points 
         in the network and for the requested connectivity.
      </t>

      <t>The virtual end-point may be an application: 
         attributes and constraints shall allow representing requirements like resources and security.
      </t>

      <t>If a path and placement computation is requested to initiate a path or a slice 
         involving one or more virtual end-points, 
         it shall identify the placement solution and 
         it shall address an initiate request with 'network' end-points to the relevant network node.
      </t>

      <t>The application may or may not be already deployed in the network node. 
         The application may or may not be shared by more than one path or network slice.
      </t>

      <t>Include or exclude applications, software modules not complying to the required security level.
      </t>

      <t>How a cloud native  application is deployed or shared is out of scope.
      </t>

      <t>The requested network slice may identify requested CNA deployment and reuse existing connectivity.
      </t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="applicability">
      <name>Applicability of a Path and Placement Computation Element</name>

      <t>The cloud is introducing new opportunities for using the virtualization technology 
         not only in few big data centers but also in small nodes at the edge of the network. 
         In this scenario the finding an optimal placement where to deploy a virtual application 
         satisfying constraints both for latency and security may be not an easy job 
         if the design of the overall slice considering network topology, security requirements, 
         cloud resources availability and software choice are done by different teams 
         with different instruments on different tables.
      </t>

      <t>The virtualization defined by ETSI is not limited to the infrastructure provided by data centers, 
         but it includes also network services for providing communication to the virtual network functions. 
         For example, ETSI IFA 032 introduces the multi-site-connectivity and represents network services 
         as in the following picture (reporting a simplified view of the original one):
      </t>

      <figure align="center" anchor="etsiNetworkService">
        <name>ETSI Network Service</name>
        <artwork align="center" type="ascii-art" name="ETSI-SOL017-NetworkService.txt"><![CDATA[
+-----------------------------------------------------------------+
| Network Service                                                 |
|                                                                 |
|        +-----+                                       +-----+    |
|       /     /                                       /     /     |
| vCPE /     o------------( VirtualLink )------------o     / vAPL |
|     /     /:                                      /:    /       |
|    +-----+ :                                     +-:---+        |
|            :                                       :            |
+------------:---------------------------------------:------------+
             :                                       :
+------------:---------------------------------------:------------+
| NFVI       :                                       :            |
|    +-------:----------+                 +----------:-------+    |
|    |       : NFVI-PoP |        _        | NFVI-PoP :       |    |
|    | +-----+          |      _( )_      |          +-----+ |    |
|    | |     |          |    _(     )_    |          |     | |    |
|    | |  R  o----------o---(_  WAN  _)---o----------o  R  | |    |
|    | |     |          |     (_   _)     |          |     | |    |
|    | +-----+          |       (_)       |          +-----+ |    |
|    +------------------+                 +------------------+    |
|            :          :                 :          :            |
|            :<-------->:<--------------->:<-------->:            |
|        Virtualization :  Connectivity   : Virtualization        |
|        Network        :  Service        : Network               |
|        Resource #1    :                 : Resource #3           |
+-----------------------------------------------------------------+
        ]]></artwork>

      </figure>

      <t>The ETSI SOL 017 binds the interface of the WIM (WAN Infrastructure Manager) 
	 to the ACTN (Abstraction and Control of TE Networks) architecture, defined in 
         <xref target="RFC8453"/>, that can use PCEP and BGP-LS, as stated in 
         <xref target="RFC8637"/>.
      </t>

      <t>The O-RAN WG5 in the Transport Specifications demands requirements and 
         definitions for the transport network to the other standardization bodies 
         (that is IETF for IP), 
         as described in the next picture 
         (a summarized view of how O-RAN WG5 Transport envisions the IP connectivity).
      </t>

      <figure align="center" anchor="oranTransport">
        <name>O-RAN O-DU - O-DU IP connectivity</name>

        <artwork align="center" type="ascii-art" name="O-DU-to-O-CU-IP-CONNECTIVITY.txt"><![CDATA[
              +--------------------------------+
              |                                |
+---------+   |       Transport network        |   +---------+
|  O-DU   |   |           IP network           |   |  O-CU   |
|  Node   |   |               _                |   |  Node   |
|         |   |+--------+   _(  _    +--------+|   |         |
|Transport|   ||   PE   |  (  P  )   |   PE   ||   |Transport|
|function |   ||  node  | ( nodes )  |  node  ||   |function |
| +-----+ |   ||        | (        ) |        ||   | +-----+ |
| |IPsec|<---------------------------------------->| |IPsec| |
| +=====+ |   || +----+ | (        ) | +----+ ||   | +=====+ |
| | IP  |<-------- IP ----(--mpls-)----- IP ------>| | IP  | |
| +=====+ |   || +----+ |  (__  _)   | +----+ ||   | +=====+ |
| :     :<------>:    : |     _)     | :    :<------>:     : |
| :     : |   || :    : |            | :    : ||   | :     : |
| +-----+ |   || +----+ |            | +----+ ||   | +-----+ |
|         |   ||        |            |        ||   |         |
+---------+   |+--------+            +--------+|   +---------+
              |                                |
              +--------------------------------+
        ]]></artwork>
      </figure>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="architecture">

      <name>The Architecture</name>

      <t>The architecture proposed in this document requires additions to PCEP and BGP-LS. 
         The proposed changes extend the protocols maintaining them back-compatible with the previous versions, 
         and they should make possible mixed solutions where network slices are required with a fixed endpoint 
         - perhaps the location of the network management center - and 
         a constrained virtual end-point (see <xref target="virtualEndpoint"/>) on the other side with a specific cloud native application to control. 
         The PCEP is extended for supporting constraints across diverse applications domains, 
         including but not limited to FOSS compliance, SBOM, known vulnerabilities, and deployment location.
      </t>

      <t>A network controller collects the node capabilities through the enhanced BGP. 
         The node capability is a list of CNAs that a node can execute. 
         A new network slice is requested using the enhanced PCEP protocol. 
         The receiving controller runs a new algorithm to find a deployment solution satisfying the required constraints, 
         for example regarding security that is a raising concern in a cloud centric world: 
         it is important to be sure that a CNA involved in a network slice is secure without any known vulnerability and 
         that it does not violate any law, regulation or local policy and 
         the proposed method can find deployments satisfying security constraints (but not only).</t>

      <t>If the connectivity of the nodes is already provided, 
         the proposed method will use the provided connections finding a deployment solution according to it and the additional security constraints.</t>

      <t>The figure below describes a typical network scenario: 
         nodes, a network controller, a request for a new network slice connecting some 5G NFV. 
         The controller collects the network status from BGP-LS that carries also which VNFs are available (for sharing or for deployment) on each node of the network. 
         Each node reports the list of the available VNF with the specific version.</t>

      <figure align="center" anchor="archpic">
        <name>A possible architecture</name>
        <artwork align="center" type="ascii-art" name="architecture.txt"><![CDATA[
        +------------------------+
        |Static constraints and  |
        |admin attributes        |
        +-------+--------+-------+
        | Nodes |Security| Other |
        |       | level  | Attrs.|
        +-------+--------+-------+  +------------------------+
        | Node1 | high   |       |  |Static constraints and  |
        | Node2 | high   |       |  |admin attributes        |
        | Node3 | medium |       |  +--------+--------+------+
        | Node4 | low    |       |  |  Apps  |Security|Other |
        +-------+--------+-------+  |        | level  |Attrs.|
+----+-----------------------+  |   +--------+--------+------+
|Node|     Supported CNAs    |  |   |CNA-A v1| medium |      |
|    |      and versions     |  |   |CNA-A v2| high   |      |
+----+-----------------------+  |   |CNA-B v2| low    |      |
| 1  | A v1, D v2, E v1, H v5|  |   |CNA-C v1| medium |      |
| 2  | A v2, C v3, F v2, H v4|  |   |CNA-C v3| medium |      |
| 3  | E v2, F v1, G v6, H v5|  |   |:       |        |      |
| 4  | A v1, B v2, C v1, D v1|  |   |:       |        |      |
+----+-----------------------+  |   +--------+--------+------+
                             \  |   /
                        +------------+
     Network slice      | Controller |
        request    -->  |   +---+    |
                    2   |   |PCE|    |
                        +---+---+----+
                              |
                            ^ | |
                           1| | |3
                            | | v
                              |_       1
                    1      _ (  )_   <-- +------+  CNA-A v1
CNA-A v1  +------+ -->  _ (       )------| Node |  CNA-B v2
CNA-D v2  | Node |-----(  Network _) --> |  4   |  CNA-C v1
CNA-E v1  |  1   | <--  (_      _ )   3  +------+  CNA-D v1
CNA-H v5  +------+  3   |( _  _)  |
                        |         |
                      ^ | |     ^ | |
                     1| | |3   1| | |3
                      | | v     | | v
                        |         |
          CNA-A v2  +------+    +------+  CNA-E v2
          CNA-C v3  | Node |    | Node |  CNA-F v1
          CNA-F v2  |  2   |    |  3   |  CNA-G v6
          CNA-H v4  +------+    +------+  CNA-H v5

        ]]></artwork>
      </figure>

      <t keepWithNext="true">Legend:</t>

      <ol spacing="compact">
        <li>BGP-LS reports the supported and available applications in the network nodes to the controller</li>
        <li>Enhanced PCEP network slice request for path and placement computation</li>
        <li>Realization in the network of the slice eventually using PCEP too</li>
      </ol>

      <t>The administrator of the network controller configures the static constraints and the administrative attributes for the new network slice. 
         The static constraints may define what is the security level of each VNF and the maximum level of security supported by a node. 
         For example, the security level of VNFs may consider different factors like known vulnerabilities, the reliability of the vendors support and others. 
         While the security level supported by a node may consider for instance the place where the node is (restricted area or not), the model version, 
         the security patches applied on the nodes and other factors.</t>

      <t>The network controller looks for a solution to the incoming request using both the dynamic constraints of the node taken from the network and the configured static constraints. 
         The goal is to find a deployment of the requested 5G network slice, the best one according to the requested metric, 
         fulfilling all the constraints, both for applications placement and traffic path routing.</t>

      <t>Every node (physical network element or virtualized cloud native cluster) is assumed to already have onboard a list of versioned CNAs. 
         A versioned CNA is an implementation of a Network Function Virtualization as a specific Virtual Network Function with its version.</t>

      <t>During a setup phase or in a runtime configuration update, 
         the administrator of the network controller provides the administrative attributes and the static constraints for the nodes and the applications, 
         such as the security level supported by the nodes, the security level required by the versioned CNA to run on a specific node.</t>

      <t>The versioned CNAs may be either already available on the nodes in this phase or deployed during the network slice provisioning triggered by the network controller.</t>

      <t>The network controller collects the topology via BGP-LS, as represented in the picture by the flow 1. 
         The protocol is extended for introducing a new specific TLV associated to the node containing the list of versioned CNAs available for running on the node, 
         in this document it is referred as CNA Registry. 
         See 
         <xref target="bgplsRegistry"/> 
         for protocol changes details.</t>

      <t>The network controller collects the capability of the nodes to run all the versioned CNAs.</t>

      <t>At runtime the client of the path and placement computation element requests the network slice computation using PCEP updated for introducing the new concept of the virtual end-point, see <xref target="virtualEndpoint"/>. 
         it only refers to the type of the cloud native application that shall participate to the slice communicating over it and that may be still to be deployed. 
         The path required via PCEP can be between 2 CNAs instead of 2 nodes: 
         the ingress point could be one of the nodes on which the required "from" CNA is present and the egress point is one of the nodes on which the "to" CNA is present.</t>

      <t>The network controller computes the optimal deployment and path 
         by evaluating the service request, network topology, static constraints, 
         and the application registry which provides metadata on available application instances, 
         their deployment options, and associated requirements.
	 The computation element of the network controller uses 
         techniques typical of the routing protocols as explained in the following sections.
      </t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="virtualEndpoint">

      <name>Constrained Virtual End-Point</name>

      <t>As already described in previous sections, 
         the constrained virtual end-point is the enabler of the path and placement computation. 
         A Virtual End-Point may be an end-point not anchored yet to a specific network node: 
         it represents a point of the network not yet identified by addressing that may or may not exist already,
         it can be described in terms of attributes and constraints.
         The path and placement computation element uses requested attributes and constraints for identifying
         where it should be located in the network.
         When not existing yet, the path and placement computation element reports the network node able to host it.
      </t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="appId">
      <name>Cloud Native Application Identifier</name>

      <t>This document introduces the definition of the identifier for the applications but does not provide indications on how the identifiers are assigned 
         because it may depend on objectives of the network administrator.</t>

      <t>The chosen format is a UUID that is an universally unique identifier 128 bits (16 bytes) long, 
         because UUID is a common practice for representing a software component within a SBOM. 
         In the context of this document the UUID value shall be unique in the scope of the path and placement computation.</t>

      <t>An application identifier may represent not only the whole application but also components part of it, like a FOSS. 
         As well the identifier may represent a type of application, 
         for example implementing a network function of the 5G standard. 
         The granularity of the representation in the registry, 
         that is whether representing application components and application types, 
         is a decision of the network administrator.</t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="appInstanceId">
      <name>Cloud Native Application Instance Identifier</name>

      <t>For representing an instance of a cloud native application a 32 bits (4 bytes) value is used. 
         Instance identifiers shall be unique in the scope of the slice: 
         they may be assigned by the client of the path and placement computation element. 
         Since it is they are a client info, they are not included in the registry reported by BGP-LS.</t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="app-registry">
      <name>Application Registry</name>

      <t>In this document the set of the info of applications reported by BGP-LS and the database used for collecting them 
         (in a node or in the network controller) is called Application Registry: 
         how the info are organized in the database is an implementation decision. 
         For example, in 
      <xref target="archpic"/> 
         the application repository of the network controller is integrated with two tables with the static constraints and admin attributes of the nodes and of the applications.</t>
      <t>The cloud native application registry contains at least a unique identifier for each cloud native application. 
         This document does not provide indications whether the registry shall include the used software components and the type of the application. 
         It is a decision of the network administrator.</t>
      <t>This document describes only how application registry info are passed per node via BGP-LS providing a parent-child relationship, 
         see 
         <xref target="bgplsRegistry"/>.</t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="ppce">
      <name>Path and Placement Computation Element</name>

      <t>The path and placement computation element is a classic PCE that supports the feature for identifying a network node fulfilling the constraints of virtual end-points, 
         as defined in this document in 
         <xref target="vep"/>.</t>

      <t>For example, when the controller must deploy a new network slice including NFV (like in case of 5G), 
         it addresses a request for a bundle of path computations specifying as ingress and egress endpoints only the NFVs with the constraints, security included. 
         On successful computation the slice design is returned to the controlled with the selected nodes and paths. 
         The constraints can be defined in a generic way to include application characteristics. 
         Obviously security is very important and a specific claim to identify FOSS to include or to exclude in the CNA to deploy, has been identified.</t>

      <t>In the classic path computation requests ingress and egress nodes (or node interfaces) shall be specified as addresses 
         (IPv4 or IPv6 or Unnumbered) specifying the label limitations (mainly for photonics limitations) with the requested path attributes. 
         Supposing to have to create a network slice connecting 3 services Y-X-Z with latency constraints in the area 10.0.0.0, 
         the nodes shall be identified according to the availability of the requested services X, Y, Z 
         that shall not use FOSS A (for example, the nodes 10.0.0.1, 10.0.0.2 and 10.0.0.3) and then the path computation request shall be issued, 
         for example with two independent path computation requests:</t>

      <sourcecode name="pceClassic" markers="false"><![CDATA[
Request #1: {Compute, from 10.0.0.1, to 10.0.0.2, latency 5}
Request #2: {Compute, from 10.0.0.1, to 10.0.0.3, latency 15}
      ]]></sourcecode>

      <t>or with a bundled request:</t>

      <sourcecode name="pceClassicBundle" markers="false"><![CDATA[
Request: [
  {Compute, from 10.0.0.1, to 10.0.0.2, latency 5},
  {Compute, from 10.0.0.1, to 10.0.0.3, latency 15},
]
      ]]></sourcecode>

      <t>while in case of path and placement computation the ingress and egress addresses can be substituted 
         with the software identifiers of the applications implementing the services, whose selection can be restricted adding constraints like for the exclusion of the FOSS-A:</t>

      <sourcecode name="ppceBundle" markers="false"><![CDATA[
Innovative bundled request: [
  {Compute, from:  CNA-X {include [area: 10.0.0.0] ...}, 
            to:    CNA-Y {include [area: 10.0.0.0], 
                          exclude [FOSS-A], ...}, 
            latency: 5}
  {Compute, from:  CNA-X {include [area: 10.0.0.0] ...}, 
            to:    CNA-Z {include [area: 10.0.0.0], 
                          exclude [FOSS-A], ...}, 
            latency: 15}
]
      ]]></sourcecode>

      <t>The output of the request is the design of the slice with the sites where CNA-X. 
         CNA-Y and CNA-Z can be deployed according to the constraints.</t>

      <t>The path and placement computation element may help in finding the proper CNA involved in the network slice fulfilling the security constraints, 
         that is without known vulnerabilities and that does not violate any law, regulation or local policy.</t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="pcepEnhancements">
      <name>PCEP Enhancements</name>

      <!-- 2 ####################################################################### -->
      <!-- 2 ####################################################################### -->

      <section numbered="true" toc="include" anchor="vep">
        <name>PCEP: Virtual-Endpoint Object Type</name>

        <t></t>

	<t>For representing the endpoints of a path of a network slice as a set of constraints 
	   a new Object Type is introduced in the PCEP Object Class 4 - END-POINTS: 
           this proposal allocates value 6  with the name Virtual-Endpoint.</t>

        <t>Existing object types for END-POINTS specify the requested endpoint with an address or a router-id with an interface-id, 
           identifying it uniquely. Currently it may contain label restrictions too.</t>

        <t>The proposed Virtual-Endpoint contains also other TLVs 
           such as Include Route Object for represent the list of nodes that shall be considered for the deployment, 
           the eXclude Route Object (XRO) for representing the nodes that shall not be used, 
           the SRLG to include or exclude all nodes with links sharing a reported risk, 
           the LSPA to include or exclude all nodes with links associated with the administrative colors (aka affinities).
           Other TLVs can be introduced in the object, 
           but it is up to the receiving Path Computation Element to fulfil them. 
           In this set there could be those representing the required level of security of a node.
           The TLVs present in the Virtual-Endpoint follow the grammar:</t>

        <sourcecode name="virtual endpoint definition" type="rbnf" markers="false"><![CDATA[
<virtual-endpoint-tlvs> ::= <virtual-p2p-endpoints>

<virtual-p2p-endpoints> ::= <endpoint-choice>
                            <endpoint-choice>

<endpoint-choice> ::=
    <IPV4-ADDRESS> | <IPV6-ADDRESS> | <virtual-constrained-endpoint>

<virtual-constrained-endpoint> ::=
    <virtual-endpoint> [<virtual-endpoint-attribute-list>]

<virtual-endpoint-attribute-list> ::= [<LSPA>] 
                                      [<IRO>] 
                                      [<XRO>] 
                                      [<metric-list>] 
                                      [<OF>]
        ]]></sourcecode>

        <t>where:</t>

        <sourcecode name="virtual endpoint definition" type="rbnf" markers="false"><![CDATA[
<virtual-endpoint> ::= <VIRTUAL-ENDPOINT>
        ]]></sourcecode>

        <t>is a new definition while LSPA, IRO, XRO, metric-list, OF, IPV4-ADDRESS and 
           IPV6-ADDRESS are already available in IETF standardization.</t>

        <t>The endpoint-choice has been provided not to supersede existing definitions, 
            but to make possible to request the computation when only one between source and destination is a CNA.</t>

      </section>

      <!-- 2 ####################################################################### -->
      <!-- 2 ####################################################################### -->

      <section numbered="true" toc="include">
        <name>PCEP: VIRTUAL-ENDPOINT TLV</name>

        <t>The VIRTUAL-ENDPOINT TLV (this proposal allocates the type value 80) shall represent the CNA in the network slice. 
           The same CNA may run multiple in multiple instances in the same network slice, 
           like in case of geo-redundancy reasons. The CNA is represented as a UUID (16 bytes), 
           that is generally used to represent software at low level (not for humans) with an optional 32-bits number for the instance.</t>

        <artwork align="center" type="ascii-art" name="VIRTUAL-ENDPOINT-TLV.txt"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                      CNA UUID (16 bytes)                      |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               optional CNA instance (32 bits)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>

        <t>The body of the VIRTUAL-ENDPOINT TLV has the length of 16 bytes of the UUID identifying the CNA plus 4 optional bytes when the instance of the CNA is reported.
           The CNA UUID can be used to represent a specific cloud native application or an its version or its type or a part of the application software: 
           so it may stand for either a VNF or its version or the NFV that the application implements or a FOSS that the application uses. 
           The assignment of the UUID and of the instance and how they are assigned is not part of this proposal.</t>

      </section>

      <!-- 2 ####################################################################### -->
      <!-- 2 ####################################################################### -->

      <section numbered="true" toc="include">
        <name>PCEP: CNA Subobject</name>
        <t>The CNA subobject is a new definition that can be used both in XRO and IRO to include or to exclude a specific software. 
           If a FOSS shall not be used by the applications running on the network slice, 
           the request can be addressed to the PCE with the XRO with this subobject to exclude the undesired software. 
           While, if a FOSS shall be preferred to others, the request can use the IRO with this subobject for including it.
           The CNA subobject for IRO as:</t>

        <artwork align="center" type="ascii-art" name="CNA-Subobject.txt"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|L|    Type     |     Length    |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      CNA UUID (16 bytes)                      |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>

        <t>referring to <xref target="RFC3209"/> for L, Type and Length.
           Similarly, for XRO is defined as:</t>

        <artwork align="center" type="ascii-art" name="XRO.txt"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|X|    Type     |     Length    |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      CNA UUID (16 bytes)                      |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>

        <t>referring to <xref target="RFC5521"/> for the definitions of X and Length.
           This proposal allocates the value 66 for the type to represent the CNA Subobject both in IRO and in XRO.</t>

      </section>

      <!-- 2 ####################################################################### -->
      <!-- 2 ####################################################################### -->

      <section numbered="true" toc="include">
        <name>PCEP: Bundle Request</name>

        <t>In general, the network slice topology is composed of more than two nodes connected by only one link: 
           each single path of the slice may be requested specifying 
           the ASSOCIATION object reporting the Virtual Network Identifier in the VIRTUAL-NETWORK-TLV. 
           The PCE request allows the concatenation of multiple requests for path computations 
           that can be synchronized with SVEC (Synchronization VECtor) object 
           whose svec-list may include the OF (as global-objective function, GOF). 
           The following new objective-functions are introduced by this proposal:</t>

        <table>
          <thead>
            <tr>
              <th>Function Code</th>
              <th>Description</th>
            </tr>
          </thead>
          <tbody>
            <tr><td><t>19</t></td><td><t>Maximize CNA deployment security</t></td></tr>
            <tr><td><t>20</t></td><td><t>Minimize CNA deployment cost</t></td></tr>
            <tr><td><t>21</t></td><td><t>Maximize CNA deployment diversity</t></td></tr>
            <tr><td><t>22</t></td><td><t>Maximize CNA scaling</t></td></tr>
          </tbody>
        </table>

        <t>The OF (Objective Function) List TLV at virtual-endpoint level or at global level, 
           may be included to specify a set of objective functions for choosing a solution: 
           new objective functions may be introduced for new use cases.</t>

      </section>

      <!-- 2 ####################################################################### -->
      <!-- 2 ####################################################################### -->

      <section numbered="true" toc="include">
        <name>PCEP: CNA Errors</name>

        <t>The PCEP-ERROR object is used to report the errors:</t>

        <table>
          <thead>
            <tr>
              <th>Error-Type</th>
              <th>Meaning</th>
              <th>Error-value</th>
            </tr>
          </thead>
          <tbody>
            <tr><td><t>34</t></td><td><t>CNA Error</t></td><td><t>0: Unassigned</t></td></tr>
            <tr><td><t></t></td><td><t></t></td><td><t>1: The PCE cannot satisfy the request, no CNA END-POINTS</t></td></tr>
            <tr><td><t></t></td><td><t></t></td><td><t>2: unknown CNA UUID</t></td></tr>
            <tr><td><t></t></td><td><t></t></td><td><t>3-255: Unassigned</t></td></tr>
          </tbody>
        </table>

      </section>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="bgplsEnhancements">
      <name>BGP-LS Enhancements</name>

      <!-- 2 ####################################################################### -->
      <!-- 2 ####################################################################### -->

      <section numbered="true" toc="include" anchor="bgplsRegistry">

        <name>BGP-LS: Cloud Native Application Registry NLRI</name>

        <t>In this proposal nodes can advertise supported and available applications using BGP. 
           BGP has already been extended for conveying the link-state information stored in the TDB 
           (the topology database either LSDB or TED) 
           of the routers to a controller of the network for feeding a Path Computation Element: 
           the NLRI format has been used. 
           This proposal introduces the Cloud Native Application NLRI.</t>

        <t>The Cloud Native Application Registry NLRI is introduced by this proposal and has the following format:</t>

        <artwork align="center" type="ascii-art" name="CNA-Registry-NLRI.txt"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+
|  Protocol-ID  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Identifier                          |
|                           (8 octets)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//            Local Node Descriptors TLV (variable)            //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                CNA Descriptors TLVs (variable)              //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>

        <t>If BGP uses local information, the Protocol-ID shall be 'Static' 
           (protocol-id value 5, <xref target="RFC9552"/>) 
           as in already available in IETF definitions. 
           The Identifier is the BGP-LS Instance Identifier (Instance-ID), as already defined.</t>

        <t>For the local node descriptor <xref target="RFC9552"/>, a new sub-TLV code point is introduced:</t>

        <table>
          <thead>
            <tr>
              <th>Sub TLV Code Point</th>
              <th>Description</th>
              <th>Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><t>519</t></td>
              <td><t>Cluster VIM Address</t></td>
              <td>
                <t>Variable</t>
                <ul spacing="compact">
                  <li>4 bytes for IPv4</li>
                  <li>16 bytes for IPv6</li>
                </ul>
              </td>
            </tr>
          </tbody>
        </table>

        <t>The CNA Descriptor TLV is here defined as:</t>

        <artwork align="center" type="ascii-art" name="CNA-Registry-NLRI.txt"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Type             |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                        PARENT CNA UUID                        |
|                          (16 bytes)                           |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                 CHILD CNA UUID List (variable)              //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>

        <t>The CNA UUID may represent a specific application or an its version or its type. 
           A CNA type (like an NFV) may have more than one implementation in the network, 
           and each implementation may have more versions of it: 
           the relationship parent-child is used for the purpose. 
           The child list can be empty.</t>

      </section>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="yangModels">
      <name>YANG Models</name>

      <t>For supporting the case when a network controller is used, as described in 
         <xref target="architecture"/>, the relevant YANG models should be updated 
         for reflecting the info and the operations necessary for a Path and Placement Computation.</t>

      <t>The PCEP proposed updates may require augmentation to the following YANG models:</t>

      <ul spacing="compact">
        <li>for requesting path and placement computation for <xref target="I-D.ietf-teas-yang-path-computation"/></li>
        <li>for including placement computation capabilities, the protocol updates and the LSP representation for <xref target="I-D.ietf-pce-pcep-yang"/></li>
        <li>for representing applications in tunnels and LSPs for <xref target="I-D.ietf-teas-yang-te"/></li>
        <li>for eventual new TE data types for <xref target="RFC8776"/></li>
      </ul>

      <t>while the te-topology <xref target="RFC8795"/> may host a per node view of the application repository information collected by BGP-LS.</t>

      <t>The opportunity to augment the models reported in this paragraph shall be evaluated with the relevant design teams.</t>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="feasibility">
      <name>Feasibility Considerations: an Algorithm</name>

      <t>This proposal reports in short a simple algorithm for adding the placement capability to a path computation element. 
         This algorithm example is meant to demonstrate the feasibility of a path and placement computation element. 
         Its implementation is not requested since developers can identify more efficient alternatives.</t>
      
      <t>The example algorithm can be summarized in 5 steps:</t>

      <t>Step 1: the constraints specified for each CNA of the slice is resolved in a set of nodes of the network fulfilling them, 
         here we call them "deployment options of the CNA".</t>

      <t>Step 2: the connectivity matrix of the slice reports the connections between CNAs, 
         each row can be substituted with the combinations of the of the deployment options of the 2 CNAs; 
         in this phase a full mesh connectivity can be considered between nodes assuming that any connectivity can be realized, 
         otherwise the full mesh can be reduced removing unfeasible or unavailable connectivity.</t>

      <t>Step 3: for each node "eligible" to be a "deployment option" a tree is considered 
         where it is the root and all other "eligible" nodes are the leaves: 
         the tree has a single level of depth.</t>

      <t>Step 4: the connectivity matrix of the slice is applied to the tree of the "eligible" node.
         Only the matrix rows that connect the root to the leaves are considered.
         The matrix rows representing the connections between leaves are discarded (to avoid loops).</t>

      <t>Step 5: the remaining rows in each connectivity matrix of the trees can be used to check whether a deployment option is possible.</t>

      <t>The above algorithm finds the motivation in how L2 networks of bridges work using 
         Spanning Tree, Multiple Spanning Tree, Generic Attribute Registration Protocol and multihoming. 
         The Spanning Tree cuts loops in the network blocking ports. 
         The Multiple Spanning Tree allows to use more than one tree at a time. 
         The Generic Attribute Registration Protocol allows to identify the connectivity between two edge ports of the Spanning Tree. 
         Multihoming allows a client to be connected to more edge ports of the bridged network: only one of them will be open at a time.</t>

      <t>In Step 1 the provided constraints for each end-point of the slice can be used to filter and 
         to identify a set of nodes matching the constraints.</t>

      <t>In Step 2 the "eligible" nodes are the bridges of the network. 
         Each CNA can be considered as a client of the bridged network attached to one edge port of each "eligible" node: 
         when there is more than one "eligible" node, the CNA can be viewed as a client in multihoming scenario. 
         The actual connectivity of the network allows considering the bridged network as a full mesh.</t>

      <t>In Step 3 the full mesh bridged network can be "drawn" as a polygon, convex and regular, 
         where the vertices are the "eligible" nodes and the edges together with the diagonals are the links: 
         on this representation of the bridged network a multiple spanning tree 
         that is configured to run as many instances as the "eligible" nodes are and play the root bridge role 
         with all the others are directly connected designated bridges, that is its leaves. 
         This means that each tree has as active links only the 2 edges and 
         the diagonals of the polygon starting from the vertex standing for the "eligible" node playing the root bridge role.</t>

      <t>Step 4 applies some protocol well known mechanism to the network slices deployment scenario: 
         each node announces the CNAs that is connected to on the slice, 
         as in traditional bridged networks an edge port would announce the configured VLAN via GVRP (GARP for VLAN).
         In an actual bridged network, the GARP message used for the announcement is multicast and 
         it is forwarded over root and designated ports: 
         when a port of the tree is crossed in both direction by announcements for the same configuration, 
         the port is opened for the connectivity.
         In the network slice scenario, all the communication work aligned to the described mechanism with an exception: 
         the traffic cannot be forwarded from one tunnel to another tunnel 
         so the announcement will not work for edge-edge communication, aka leaf-leaf communication in the new context.</t>

      <t>In Step 5 the connections identified by the multiple spanning tree shall be considered in the perspective requiring only one access point 
         to the bridged network for each client at a time (as in the well-known multihoming use case).</t>

      <!-- ######################################################################### -->
      <!-- ######################################################################### -->

      <section anchor="algo-explained-by-use-case">
        <name>The Algorithm Explained by Use Case</name>

        <t>Considering the example where the endpoints of the following slice:</t>

        <figure align="center" anchor="example-applications-network">
          <name>Example of a network of cloud native applications</name>
          <artwork align="center" type="ascii-art" name="example-applications-network.txt">
            <![CDATA[
     +---------------------------+                                
     |                           |                                
+----+---+    +--------+    +----+---+    +--------+    +--------+
|        |    |        |    |        |    |        |    |        |
|   S1   +----+   S2   +----+   S3   +----+   S4   +----+   S5   |
|        |    |        |    |        |    |        |    |        |
+--------+    +--------+    +--------+    +--------+    +--------+
          ]]></artwork>
        </figure>

        <t>shall be located and deployed in the following network:</t>

        <figure align="center" anchor="example-network">
          <name>The network providing connectivity to the cloud native applications</name>
          <artwork align="center" type="ascii-art" name="example-network.txt">
            <![CDATA[
         +-----+                                                   
         | DC  |                                                   
         |   9 |                                                   
         |     |                                                   
         +--+--+     +--------------------------------+            
            |        |     +-----------------+        |            
            |        |     |                 |        |            
+-----+  +--+--+  +--+--+  |     +-----+  +--+--+  +--+--+  +-----+
|     |  |     |  |     |  |     |     |  |     |  |     |  | DC  |
| R 1 +--+ R 2 +--+ R 3 +--+  +--+ R 4 +--+ R 5 +--+ R 6 +--+   8 |
|     |  |     |  |     |     |  |     |  |     |  |     |  |     |
+--+--+  +-----+  +-----+     |  +--+--+  +--+--+  +-----+  +-----+
   |                          |     |        |                     
   +--------------------------+     |        |                     
                                 +--+--+  +--+--+                  
                                 | DC  |  | DC  |                  
                                 |  10 |  |   7 |                  
                                 |     |  |     |                  
                                 +-----+  +-----+                  
          ]]></artwork>
        </figure>

        <t>with the following constraints (Step 1):</t>

        <ul>
          <li>CNA S1 can be only on node DC-7 or DC-8.</li>
          <li>CNA S3 only on node DC-10.</li>
          <li>CNA S5 only on node DC-9.</li>
          <li>CNAs S2 and S4 have no constraints.</li>
        </ul>

        <t>Not all nodes support CNAs deployment, in the considered case only DC nodes (7, 8, 9, 10) that are data centers.</t>

        <t>The following table reports a summary of the scenario:</t>

        <table align="center">
          <name>Resources of the use case</name>
          <thead>
            <tr>
              <th>------NETWORK------</th>
              <th>-------SLICE-------</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>
                <ul indent="2">
                  <li>Router</li>
                </ul>
                <ul bare="true" empty="true" spacing="compact">
                  <li>R1</li>
                  <li>R2</li>
                  <li>R3</li>
                  <li>R4</li>
                  <li>R5</li>
                  <li>R6</li>
                </ul>

                <ul indent="2">
                  <li>Data Centers</li>
                </ul>
                <ul bare="true" empty="true" spacing="compact">
                  <li>DC7</li>
                  <li>DC8</li>
                  <li>DC9</li>
                  <li>DC10</li>
                </ul>

                <ul indent="2">
                  <li>Network Links</li>
                </ul>
                <ul bare="true" empty="true" spacing="compact">
                  <li>R1-R2</li>
                  <li>R1-R4</li>
                  <li>R2-R3</li>
                  <li>R2-DC9</li>
                  <li>R3-R5</li>
                  <li>R3-R6</li>
                  <li>R4-R5</li>
                  <li>R4-DC10</li>
                  <li>R5-R6</li>
                  <li>R5-DC7</li>
                  <li>R6-DC8</li>
                </ul>
              </td>
              <td>
                <ul indent="2">
                  <li>Services</li>
                </ul>
                <ul bare="true" empty="true" spacing="compact">
                  <li>S1</li>
                  <li>S2</li>
                  <li>S3</li>
                  <li>S4</li>
                  <li>S5</li>
                </ul>

                <ul indent="2">
                  <li>Connectivity          </li>
                </ul>
                <ul bare="true" empty="true" spacing="compact">
                  <li>S1-S2</li>
                  <li>S2-S3</li>
                  <li>S1-S3</li>
                  <li>S3-S4</li>
                  <li>S4-S5</li>
                </ul>

                <ul indent="2">
                  <li>Deployment Constraints</li>
                </ul>
                <ul bare="true" empty="true" spacing="compact">
                  <li>S1 -> DC7 or DC8</li>
                  <li>S2 -> any node</li>
                  <li>S3 -> DC10</li>
                  <li>S4 -> any node</li>
                  <li>S5 -> DC9</li>
                </ul>
              </td>
            </tr>
          </tbody>
        </table>

        <t>The resulting connectivity matrix of the network slice can be represented as:</t>

        <artwork align="center" type="ascii-art" name="example-connectivity-matrix.txt"><![CDATA[
            S1...........S2...........S3...........S4...........S5
S1-S2:    DC-7 or 8    any DC          -            -            -
S1-S3:    DC-7 or 8       -          DC-10          -            -
S2-S3:       -         any DC        DC-10          -            -
S3-S4:       -            -          DC-10       any DC          -
S4-S5:       -            -            -         any DC        DC-9
        ]]></artwork>

        <t>and the slice representation on the actual network including deployment constraints as:</t>

        <figure align="center" anchor="example-network-with-app-deployment-alternatives">
          <name>App deployment alternatives in the example network</name>
          <artwork align="center" type="ascii-art" name="example-network-with-app-deployment-alternatives.txt"><![CDATA[

        +--+ +--+
        |S4| |S5|
        | 9| | 9|
        +--+ +--+
   +--+   :   :
   |S2|  +-----+
   | 9|..| DC  |
   +--+  |  9  |                                           +--+ +--+
         |     |                                           |S2| |S4|
         +--+--+     +--------------------------------+    | 8| | 8|
            |        |     +-----------------+        |    +--+ +--+
            |        |     |                 |        |      :   :
+-----+  +--+--+  +--+--+  |     +-----+  +--+--+  +--+--+  +-----+
|     |  |     |  |     |  |     |     |  |     |  |     |  | DC  |
| R 1 +--+ R 2 +--+ R 3 +--+  +--+ R 4 +--+ R 5 +--+ R 6 +--+   8 |
|     |  |     |  |     |     |  |     |  |     |  |     |  |     |
+--+--+  +-----+  +-----+     |  +--+--+  +--+--+  +-----+  +-----+
   |                          |     |        |                   :
   +--------------------------+     |        |                  +--+
                                 +--+--+  +--+--+               |S1|
                                 | DC  |  | DC  |               | 8|
                           +--+  |  10 |  |   7 |  +--+         +--+
                           |S2|..|     |  |     |..|S4|
                           |10|  +-----+  +-----+  | 7|
                           +--+  :    :    :    :  +--+
                               +--+ +--+  +--+ +--+
                               |S3| |S4|  |S1| |S2|
                               |10| |10|  | 7| | 7|
                               +--+ +--+  +--+ +--+

          ]]></artwork>
        </figure>

        <t>In Step 2 the algorithm focuses on slice connectivity and 
         the slice in the network can be represented ignoring the complexity of the network and 
         including only "eligible" nodes, slice connectivity and services of the slice with their accesses point as:</t>

        <figure align="center" anchor="summarized-deployment-alternatives">
          <name>Summarization of the network with app deployment alternatives</name>
          <artwork align="center" type="ascii-art" name="summarized-example-network-with-app-deployment-alternatives.txt"><![CDATA[

     +--+ +--+      +--+ +--+
     |S4| |S5|      |S2| |S4|
     | 9| | 9|      | 8| | 8|
     +--+ +--+      +--+ +--+
+--+   :   :         :   :
|S2|  +-----+       +-----+
| 9|..| DC  |       | DC  |
+--+  |  9  +-------+   8 |
      |     |       |     |
      +---+-+       +-+---+
          |  \     /  |  :
          |   \   /   | +--+
          |    \ /    | |S1|
          |     X     | | 8|
          |    / \    | +--+
          |   /   \   |
          |  /     \  |
      +---+-+       +-+---+
      | DC  |       | DC  |
+--+  |  10 +-------+   7 |  +--+
|S2|..|     |       |     |..|S4|
|10|  +-----+       +-----+  | 7|
+--+  :    :         :    :  +--+
    +--+ +--+       +--+ +--+
    |S3| |S4|       |S1| |S2|
    |10| |10|       | 7| | 7|
    +--+ +--+       +--+ +--+

          ]]></artwork>
        </figure>

        <t>Each link of the slice can be considered as follow:</t>

        <figure align="center" anchor="per-path-summarized-deployment-alternatives">
          <name>Per slice path the summarization of the network with app deployment alternatives</name>
          <artwork align="center" type="ascii-art" name="summarized-view-per-connectivity-3a.txt"><![CDATA[

-------------------------------+-------------------------------
S1-S2                          |  S2-S3
                               |
               +--+            |                 +--+
               |S2|            |                 |S2|
               | 8|            |                 | 8|
               +--+            |                 +--+
+--+             :       +--+  |  +--+             :
|S2|  +-----+   +-----+  |S1|  |  |S2|  +-----+   +-----+
| 9|..| DC9 |---| DC8 |..| 8|  |  | 9|..| DC9 |---| DC8 |
+--+  +-----+   +-----+  +--+  |  +--+  +-----+   +-----+
          |  \ /  |            |            |  \ /  |
          |   X   |            |            |   X   |
          |  / \  |            |            |  / \  |
+--+  +-----+   +-----+        |  +--+  +-----+   +-----+
|S2|..| DC10|---| DC7 |        |  |S2|..| DC10|---| DC7 |
|10|  +-----+   +-----+        |  |10|  +-----+   +-----+
+--+             :   :         |  +--+   :             :
               +--+ +--+       |       +--+           +--+
               |S1| |S2|       |       |S3|           |S2|
               | 7| | 7|       |       |10|           | 7|
               +--+ +--+       |       +--+           +--+
                               |
-------------------------------+-------------------------------
          ]]></artwork>
          <artwork align="center" type="ascii-art" name="summarized-view-per-connectivity-3b.txt"><![CDATA[
S1-S3                          |  S3-S4
                               |
                               |       +--+           +--+
                               |       |S4|           |S4|
                               |       | 9|           | 8|
                               |       +--+           +--+
                         +--+  |         :             :
      +-----+   +-----+  |S1|  |        +-----+   +-----+
      | DC9 |---| DC8 |..| 8|  |        | DC9 |---| DC8 |
      +-----+   +-----+  +--+  |        +-----+   +-----+
          |  \ /  |            |            |  \ /  |
          |   X   |            |            |   X   |
          |  / \  |            |            |  / \  |
      +-----+   +-----+        |        +-----+   +-----+  +--+
      | DC10|---| DC7 |        |        | DC10|---| DC7 |..|S4|
      +-----+   +-----+        |        +-----+   +-----+  | 7|
       :         :             |         :   :             +--+
     +--+      +--+            |       +--+ +--+
     |S3|      |S1|            |       |S3| |S4|
     |10|      | 7|            |       |10| |10|
     +--+      +--+            |       +--+ +--+
                               |
-------------------------------+-------------------------------
          ]]></artwork>
          <artwork align="center" type="ascii-art" name="summarized-view-per-connectivity-3c.txt"><![CDATA[
-------------------------------+-------------------------------
S4-S5                          |
                               |
     +--+ +--+      +--+       |
     |S4| |S5|      |S4|       |
     | 9| | 9|      | 8|       |
     +--+ +--+      +--+       |
       :   :         :         |
      +-----+   +-----+        |
      | DC9 |---| DC8 |        |
      +-----+   +-----+        |
          |  \ /  |            |
          |   X   |            |
          |  / \  |            |
      +-----+   +-----+  +--+  |
      | DC10|---| DC7 |..|S4|  |
      +-----+   +-----+  | 7|  |
       :   :             +--+  |
     +--+ +--+                 |
     |S3| |S4|                 |
     |10| |10|                 |
     +--+ +--+                 |
                               |
-------------------------------+

          ]]></artwork>
        </figure>

        <t>In Step 3 "eligible" nodes shall be considered as root of a spanning tree, here in case of node 7 as root:</t>

        <figure align="center" anchor="step-4">
          <name>Node 7 root of the tree network with app deployment alternatives</name>
          <artwork align="center" type="ascii-art" name="step-4.txt"><![CDATA[

     +--+ +--+ +--+ +--+
     |S4| |S5| |S2| |S4|
     | 9| | 9| | 8| | 8|
     +--+ +--+ +--+ +--+
+--+   :   :     :   :   +--+
|S2|  +-----+   +-----+  |S1|
| 9|..| DC9 |   | DC8 |..| 8|
+--+  +-----+   +-----+  +--+
             \    |
              \   |
               \  |
+--+  +-----+   +-----+  +--+
|S2|..| DC10|---| DC7 |..|S4|
|10|  +-----+   +-----+  | 7|
+--+   :   :     :   :   +--+
     +--+ +--+ +--+ +--+
     |S3| |S4| |S1| |S2|
     |10| |10| | 7| | 7|
     +--+ +--+ +--+ +--+

          ]]></artwork>
        </figure>

        <t>obtaining in Step 4 the following connectivity matrix with all deployment options for each application:</t>

        <sourcecode name="step-4" markers="false"><![CDATA[

       ..S1.....S2.....S3.....S4.....S5
S1-S2:  DC7    DC7      -      -      -   root-root -> ok
        DC7    DC8      -      -      -   root-leaf -> ok
        DC7    DC9      -      -      -   root-leaf -> ok
        DC7    DC10     -      -      -   root-leaf -> ok
        DC8    DC7      -      -      -   leaf-root -> ok
        DC8    DC8      -      -      -   same leaf -> ok
        DC8    DC9      -      -      -   leaf-leaf -> pruning
        DC8    DC10     -      -      -   leaf-leaf -> pruning
S1-S3:  DC7      -    DC10     -      -   root-leaf -> ok
        DC8      -    DC10     -      -   leaf-leaf -> pruning
S2-S3:    -    DC7    DC10     -      -   root-leaf -> ok
          -    DC8    DC10     -      -   leaf-leaf -> pruning
          -    DC9    DC10     -      -   leaf-leaf -> pruning
          -    DC10   DC10     -      -   same leaf -> ok
S3-S4:    -      -    DC10   DC7      -   leaf-root -> ok
          -      -    DC10   DC8      -   leaf-leaf -> pruning
          -      -    DC10   DC9      -   leaf-leaf -> pruning
          -      -    DC10   DC10     -   same leaf -> ok
S4-S5:    -      -      -    DC7     DC9  root-leaf -> ok
          -      -      -    DC8     DC9  leaf-leaf -> pruning
          -      -      -    DC9     DC9  same leaf -> ok
          -      -      -    DC10    DC9  leaf-leaf -> pruning

        ]]></sourcecode>

        <t>In Step 5 each connectivity information is combined with the others, 
           so in this phase each topology with its connectivity matrix is compared for checking common nodes:</t>

        <artwork align="center" type="ascii-art" name="step-5aa.txt"><![CDATA[
-------------------------------+-------------------------------
S1-S2                          |
               +--+            |
               |S2|            |
               | 8|            |         S1...S2...S3...S4...S5
               +--+            | S1-S2: DC7  DC7    -    -    -
+--+             :       +--+  |        DC7  DC8    -    -    -
|S2|  +-----+   +-----+  |S1|  |        DC7  DC9    -    -    -
| 9|..| DC9 |   | DC8 |..| 8|  |        DC7  DC10   -    -    -
+--+  +-----+   +-----+  +--+  |        DC8  DC7    -    -    -
             \    |            |        DC8  DC8    -    -    -
              \   |            |
               \  |            |
+--+  +-----+   +-----+        |
|S2|..| DC10|---| DC7 |        |
|10|  +-----+   +-----+        |
+--+             :   :         |
               +--+ +--+       |
               |S1| |S2|       |
               | 7| | 7|       |
               +--+ +--+       |
                               |
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5ab.txt"><![CDATA[
-------------------------------+-------------------------------
S2-S3                          |
               +--+            |
               |S2|            |
               | 8|            |         S1...S2...S3...S4...S5
               +--+            | S2-S3:   -  DC7  DC10   -    -
+--+             :             |          -  DC10 DC10   -    -
|S2|  +-----+   +-----+        |
| 9|..| DC9 |   | DC8 |        |
+--+  +-----+   +-----+        |
             \    |            |
              \   |            |
               \  |            |
+--+  +-----+   +-----+        |
|S2|..| DC10|---| DC7 |        |
|10|  +-----+   +-----+        |
+--+   :             :         |
     +--+           +--+       |
     |S3|           |S2|       |
     |10|           | 7|       |
     +--+           +--+       |
                               |
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5ac.txt"><![CDATA[
-------------------------------+-------------------------------
S1-S3                          |
                               |
                         +--+  |
      +-----+   +-----+  |S1|  |         S1...S2...S3...S4...S5
      | DC9 |   | DC8 |..| 8|  | S1-S3: DC7    -  DC10   -    -
      +-----+   +-----+  +--+  |
             \    |            |
              \   |            |
               \  |            |
      +-----+   +-----+        |
      | DC10|---| DC7 |        |
      +-----+   +-----+        |
       :         :             |
     +--+      +--+            |
     |S3|      |S1|            |
     |10|      | 7|            |
     +--+      +--+            |
                               |
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5ad.txt"><![CDATA[
-------------------------------+-------------------------------
S3-S4                          |
     +--+           +--+       |
     |S4|           |S4|       |
     | 9|           | 8|       |         S1...S2...S3...S4...S5
     +--+           +--+       | S3-S4:   -    -  DC10 DC7    -
       :             :         |          -    -  DC10 DC10   -
      +-----+   +-----+        |
      | DC9 |   | DC8 |        |
      +-----+   +-----+        |
             \    |            |
              \   |            |
               \  |            |
      +-----+   +-----+  +--+  |
      | DC10|---| DC7 |..|S4|  |
      +-----+   +-----+  | 7|  |
       :   :             +--+  |
     +--+ +--+                 |
     |S3| |S4|                 |
     |10| |10|                 |
     +--+ +--+                 |
                               |
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5ae.txt"><![CDATA[
-------------------------------+-------------------------------
S4-S5                          |
     +--+ +--+      +--+       |
     |S4| |S5|      |S4|       |
     | 9| | 9|      | 8|       |         S1...S2...S3...S4...S5
     +--+ +--+      +--+       | S4-S5:   -    -    -  DC7  DC9
       :   :         :         |          -    -    -  DC9  DC9
      +-----+   +-----+        |
      | DC9 |   | DC8 |        |
      +-----+   +-----+        |
             \    |            |
              \   |            |
               \  |            |
      +-----+   +-----+  +--+  |
      | DC10|---| DC7 |..|S4|  |
      +-----+   +-----+  | 7|  |
       :   :             +--+  |
     +--+ +--+                 |
     |S3| |S4|                 |
     |10| |10|                 |
     +--+ +--+                 |
                               |
-------------------------------+-------------------------------
        ]]></artwork>

        <t>And then combining the matrices, 
           common services (a column in both matrices with non-zero values) are considered keeping only common values 
           while other columns (with zero values in at least one of the two matrices) are 'indifferent'. 
           Considering at the beginning S1-S2 and S2-S3 matrices S2 is the only one in common, 
           so "eligible" nodes for S2 shall be present in both matrices:</t>

        <artwork align="center" type="ascii-art" name="step-5ba.txt"><![CDATA[
-------------------------------+-------------------------------
                               |
        S1...S2...S3...S4...S5 |         S1...S2...S3...S4...S5
S1-S2: DC7  DC7    -    -    - | S2-S3:   -  DC7  DC10   -    -
       DC7  DC8    -    -    - |          -  DC10 DC10   -    -
       DC7  DC9    -    -    - | 
       DC7  DC10   -    -    - | 
       DC8  DC7    -    -    - | 
       DC8  DC8    -    -    - | 
                               V
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5bb.txt"><![CDATA[

                  S1....S2....S3....S4....S5
          S1-S2: DC7   DC7     -     -     - 
                 DC7   DC10    -     -     - 
                 DC8   DC7     -     -     - 
          S2-S3:   -   DC7   DC10    -     - 
                   -   DC10  DC10    -     -

---------------------------------------------------------------
        ]]></artwork>

        <t>Combining the previous result S1-S3 matrices, S1 and S3 services are present in both matrices, so only common "eligible" nodes shall be considered.</t>

        <t>For example, DC8 as deployment option for service S1 is discarded because not present in S1-S3 matrix</t>

        <artwork align="center" type="ascii-art" name="step-5bc.txt"><![CDATA[
-------------------------------+-------------------------------
                               |
 from the previous combination |         S1...S2...S3...S4...S5
                               | S1-S3: DC7    -  DC10   -    - 
                               V
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5bd.txt"><![CDATA[

                  S1....S2....S3....S4....S5
          S1-S2: DC7   DC7     -     -     - 
                 DC7   DC10    -     -     - 
          S2-S3:   -   DC7   DC10    -     - 
                   -   DC10  DC10    -     - 
          S1-S3: DC7    -    DC10    -     -

---------------------------------------------------------------
        ]]></artwork>

        <t>Going on combining with S3-S4:</t>

        <artwork align="center" type="ascii-art" name="step-5be.txt"><![CDATA[
-------------------------------+-------------------------------
                               |
 from the previous combination |         S1...S2...S3...S4...S5
                               | S3-S4:   -    -  DC10 DC7    -
                               |          -    -  DC10 DC10   -
                               V
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5bf.txt"><![CDATA[

                  S1....S2....S3....S4....S5
          S1-S2: DC7   DC7     -     -     - 
                 DC7   DC10    -     -     - 
          S2-S3:   -   DC7   DC10    -     - 
                   -   DC10  DC10    -     - 
          S1-S3: DC7     -   DC10    -     -
          S3-S4:   -     -   DC10  DC7     - 
                   -     -   DC10  DC10    - 

---------------------------------------------------------------
        ]]></artwork>

        <t>And finally, with S4-S5</t>

        <artwork align="center" type="ascii-art" name="step-5bg.txt"><![CDATA[
-------------------------------+-------------------------------
                               | 
 from the previous combination |         S1...S2...S3...S4...S5
                               | S4-S5:   -    -    -  DC7  DC9
                               |          -    -    -  DC9  DC9
                               V
        ]]></artwork>
        <artwork align="center" type="ascii-art" name="step-5bh.txt"><![CDATA[

                  S1....S2....S3....S4....S5
          S1-S2: DC7   DC7     -     -     - 
                 DC7   DC10    -     -     - 
          S2-S3:   -   DC7   DC10    -     - 
                   -   DC10  DC10    -     - 
          S1-S3: DC7     -   DC10    -     -
          S3-S4:   -     -   DC10  DC7     - 
          S4-S5:   -     -     -   DC7   DC9 

---------------------------------------------------------------
        ]]></artwork>

        <t>The combination of the matrices produces the results in case of tree topology with "eligible" node 7 as root:</t>

        <artwork align="center" type="ascii-art" name="step-5ca.txt"><![CDATA[
 S1....S2....S3....S4....S5
DC7   DC7   DC10  DC7   DC9 
DC7   DC10  DC10  DC7   DC9 
        ]]></artwork>

        <t>that is requiring network connectivity between DC-7 and DC-9 and between DC-7 and DC10, with the attributes and constraints according to hosted services:</t>

        <figure align="center" anchor="step-5cb">
          <name>Deployment solutions for node 7 as root of the tree network</name>
          <artwork align="center" type="ascii-art" name="step-5cb.txt"><![CDATA[
          +--+ 
          |S5| 
          | 9| 
          +--+
           :   
      +-----+  
      | DC9 |  
      +-----+  
             \ 
              \
               \ 
+--+  +-----+   +-----+  +--+
|S2|..| DC10|---| DC7 |..|S4|
|10|  +-----+   +-----+  | 7|
+--+             :   :   +--+
               +--+ +--+ 
               |S1| |S2| 
               | 7| | 7| 
               +--+ +--+ 
          ]]></artwork>
          <artwork align="center" type="ascii-art" name="step-5cd.txt"><![CDATA[
-------------------------------
          ]]></artwork>
          <artwork align="center" type="ascii-art" name="step-5ce.txt"><![CDATA[
          +--+ 
          |S5| 
          | 9| 
          +--+ 
           :    
      +-----+   
      | DC9 |   
      +-----+   
             \  
              \ 
               \
+--+  +-----+   +-----+  +--+
|S2|..| DC10|---| DC7 |..|S4|
|10|  +-----+   +-----+  | 7|
+--+   :         :       +--+
     +--+      +--+     
     |S3|      |S1|     
     |10|      | 7|     
     +--+      +--+     
          ]]></artwork>
        </figure>

        <t>A tree may produce no solution.</t>

        <t>The solutions found for each tree can be combined as per multiple spanning tree.</t>

        <t>A requested metric or an objective function may drive the selection of the best deployment option 
           privileging the deployment or the network metrics, or combining them.</t>

      </section>

      <!-- ######################################################################### -->
      <!-- ######################################################################### -->

      <section anchor="algo-confirmation-by-use-case">
        <name>The Algorithm Confirmation by Use Case</name>

        <t>Considering a new use case where a network slice is requested with services connected in ring topology and with strict deployment constraints, 
           each single tree topology cannot provide a solution to the problem, 
           but using the multiple spanning tree final combination the only one possible solution can be found by the algorithm.</t>

        <figure align="center" anchor="another-example-applications-network">
          <name>Another example of a network of cloud native applications</name>
          <artwork align="center" type="ascii-art" name="another-example-applications-network.txt">
            <![CDATA[
     +---------------------------+                                
     |                           |                                
+----+---+    +--------+    +----+---+
|        |    |        |    |        |
|   SA   +----+   SB   +----+   SC   |
|        |    |        |    |        |
+--------+    +--------+    +--------+
          ]]></artwork>
        </figure>

        <t>The deployment constraints are:</t>

        <ul bare="false" empty="false" spacing="compact">
          <li>the application S-A deployable only on N1 node</li>
          <li>S-B available only on N2 node</li>
          <li>S-C only on N3</li>
        </ul>

        <t>and the network view is:</t>

        <figure align="center" anchor="another-example-summarized-deployment-alternatives">
          <name>The network with apps single deployment option</name>
          <artwork align="center" type="ascii-art" name="another-example-summarized-example-network-with-app-deployment-altenatives.txt"><![CDATA[
     +----+ 
     |SB-2|
     +----+
        : 
     +----+ 
     | N2 |
     +----+
     /    \ 
    /      \ 
+----+    +----+
| N1 |----| N3 |
+----+    +----+
  :          :
+----+    +----+
|SA-1|    |SC-3|
+----+    +----+
          ]]></artwork>
        </figure>

        <t>so the slice requires the following paths:</t>

        <figure align="center" anchor="per-path-summarized-deployment-alternatives-uc2">
          <name>Paths of the slice in the network between apps single deployment option</name>
          <artwork align="center" type="ascii-art" name="slice-connectivity-uc2.txt"><![CDATA[
--------------------+--------------------+--------------------
SA-SB               | SB-SC              | SA-SC  
       +----+       |       +----+       |                  
       |SB-2|       |       |SB-2|       |          
       +----+       |       +----+       |           
         :          |         :          |            
       +----+       |       +----+       |       +----+ 
       | N2 |       |       | N2 |       |       | N2 |
       +----+       |       +----+       |       +----+
       /    \       |       /    \       |       /    \ 
      /      \      |      /      \      |      /      \ 
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
  | N1 |----| N3 |  |  | N1 |----| N3 |  |  | N1 |----| N3 |
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
   :                |                :   |   :            :
  +----+            |            +----+  |  +----+    +----+
  |SA-1|            |            |SC-3|  |  |SA-1|    |SC-3|
  +----+            |            +----+  |  +----+    +----+
                    |                    |
--------------------+--------------------+--------------------
          ]]></artwork>
        </figure>

	<t>N1 as root topology is not suitable for fulfilling SB-SC connectivity:</t>

        <figure align="center" anchor="uc2-n1-root">
          <name>N1 as root of the tree network</name>
          <artwork align="center" type="ascii-art" name="uc2-n1-root.txt"><![CDATA[
--------------------+--------------------+--------------------
SA-SB               | SB-SC              | SA-SC  
       +----+       |       +----+       |                  
       |SB-2|       |       |SB-2|       |          
       +----+       |       +----+       |           
         :          |         :          |            
       +----+       |       +----+       |       +----+ 
       | N2 |       |       | N2 |       |       | N2 |
       +----+       |       +----+       |       +----+
       /            |       /            |       /      
      /             |      /             |      /        
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
  | N1 |----| N3 |  |  | N1 |----| N3 |  |  | N1 |----| N3 |
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
   :                |                :   |   :            :
  +----+            |            +----+  |  +----+    +----+
  |SA-1|            |            |SC-3|  |  |SA-1|    |SC-3|
  +----+            |            +----+  |  +----+    +----+
                    |                    |
  root-leaf -> ok   | leaf-leaf->pruning |  root-leaf -> ok
--------------------+--------------------+--------------------
          ]]></artwork>
        </figure>

        <t>as well N2 for SA-SC:</t>

        <figure align="center" anchor="uc2-n2-root">
          <name>N2 as root of the tree network</name>
          <artwork align="center" type="ascii-art" name="uc2-n2-root.txt"><![CDATA[
--------------------+--------------------+--------------------
SA-SB               | SB-SC              | SA-SC  
       +----+       |       +----+       |                  
       |SB-2|       |       |SB-2|       |          
       +----+       |       +----+       |           
         :          |         :          |            
       +----+       |       +----+       |       +----+ 
       | N2 |       |       | N2 |       |       | N2 |
       +----+       |       +----+       |       +----+
       /    \       |       /    \       |       /    \ 
      /      \      |      /      \      |      /      \ 
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
  | N1 |    | N3 |  |  | N1 |    | N3 |  |  | N1 |    | N3 |
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
   :                |                :   |   :            :
  +----+            |            +----+  |  +----+    +----+
  |SA-1|            |            |SC-3|  |  |SA-1|    |SC-3|
  +----+            |            +----+  |  +----+    +----+
                    |                    |
  root-leaf -> ok   |  root-leaf -> ok   | leaf-leaf->pruning
--------------------+--------------------+--------------------
          ]]></artwork>
        </figure>

        <t>and the same in case of N3 as root of the tree network for SA-SB:</t>

        <figure align="center" anchor="uc2-n3-root">
          <name>N3 as root of the tree network</name>
          <artwork align="center" type="ascii-art" name="uc2-n3-root.txt"><![CDATA[
--------------------+--------------------+--------------------
SA-SB               | SB-SC              | SA-SC  
       +----+       |       +----+       |                  
       |SB-2|       |       |SB-2|       |          
       +----+       |       +----+       |           
         :          |         :          |            
       +----+       |       +----+       |       +----+ 
       | N2 |       |       | N2 |       |       | N2 |
       +----+       |       +----+       |       +----+
            \       |            \       |            \ 
             \      |             \      |             \ 
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
  | N1 |----| N3 |  |  | N1 |----| N3 |  |  | N1 |----| N3 |
  +----+    +----+  |  +----+    +----+  |  +----+    +----+
   :                |                :   |   :            :
  +----+            |            +----+  |  +----+    +----+
  |SA-1|            |            |SC-3|  |  |SA-1|    |SC-3|
  +----+            |            +----+  |  +----+    +----+
                    |                    |
 leaf-leaf->pruning |  root-leaf -> ok   |  root-leaf -> ok  
--------------------+--------------------+--------------------
          ]]></artwork>
        </figure>

        <t>Only combining all matrices as in the previous use case, it is possible to find the only one apps deployment solution.</t>

      </section>

      <!-- ######################################################################### -->
      <!-- ######################################################################### -->

      <section anchor="multiple-solutions">
        <name>Multiple Solutions</name>

	<t>The proposed algorithm could provide multiple solutions: 
           using the Objective Functions defined in PCEP protocol is possible to select the best one among them. 
           If the Objective Functions are not provided in the PCEP request, 
           in case of multiple deployment solutions, 
           a default mechanism would select the first one.</t>

      </section>

    </section>

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="IANA">
    <!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
      <name>IANA Considerations</name>
      <t>IANA is asked to register the following entries:</t>
      <section anchor="IANA_PCEP_OBJECT_CLASS">
        <name>PCEP: New Object Type</name>

        <table>
          <thead>
            <tr>
              <th>Object Class Value</th>
              <th>Name</th>
              <th>Object-Type</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><t>4</t></td>
              <td><t>END-POINTS</t></td>
              <td><t>6: Virtual-Endpoint</t></td>
              <td><t>this document</t></td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="IANA_PCEP_TLV">
        <name>New PCEP TLV Type Indicators</name>

        <table>
          <thead>
            <tr>
              <th>Value</th>
              <th>Description</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><t>80</t></td>
              <td><t>VIRTUAL-ENDPOINT</t></td>
              <td><t>this document</t></td>
            </tr>
          </tbody>
        </table>

      </section>

      <section anchor="IANA_PCEP_IRO_Subobject">
        <name>New PCEP IRO Subobject</name>

        <table>
          <thead>
            <tr>
              <th>Value</th>
              <th>Description</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><t>66</t></td>
              <td><t>CNA</t></td>
              <td><t>this document</t></td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="IANA_PCEP_XRO_Subobject">
        <name>New PCEP XRO Subobject</name>

        <table>
          <thead>
            <tr>
              <th>Value</th>
              <th>Description</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><t>66</t></td>
              <td><t>CNA</t></td>
              <td><t>this document</t></td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="IANA_PCEP_Objective_Function">
        <name>New PCEP Objective Functions</name>

        <table>
          <thead>
            <tr>
              <th>Code Point</th>
              <th>Name</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr><td><t>19</t></td><td><t>Maximize CNA deployment security</t></td><td><t>this document</t></td></tr>
            <tr><td><t>20</t></td><td><t>Minimize CNA deployment cost</t></td><td><t>this document</t></td></tr>
            <tr><td><t>21</t></td><td><t>Maximize CNA deployment diversity</t></td><td><t>this document</t></td></tr>
            <tr><td><t>22</t></td><td><t>Maximize CNA scaling</t></td><td><t>this document</t></td></tr>
          </tbody>
        </table>
      </section>

      <section anchor="IANA_PCEP_Error">
        <name>New PCEP-ERROR Object Error Types and Values</name>

        <table>
          <thead>
            <tr>
              <th>Error-Type</th>
              <th>Meaning</th>
              <th>Error-value</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr><td><t>34</t></td><td><t>CNA Error</t></td><td><t>0: Unassigned</t></td><td><t>this document</t></td></tr>
            <tr><td><t></t></td><td><t></t></td><td><t>1: The PCE cannot satisfy the request, no CNA END-POINTS</t></td><td><t>this document</t></td></tr>
            <tr><td><t></t></td><td><t></t></td><td><t>2: unknown CNA UUID</t></td><td><t>this document</t></td></tr>
            <tr><td><t></t></td><td><t></t></td><td><t>3-255: Unassigned</t></td><td><t>this document</t></td></tr>
          </tbody>
        </table>

      </section>


      <section anchor="IANA_BGPLS_NLRI_AND_Attribute_TLV">
        <name>New BGP-LS NLRI and Attribute TLV</name>

        <table>
          <thead>
            <tr>
              <th>TLV Code Point</th>
              <th>Description</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><t>519</t></td>
              <td><t>Cluster VIM Address</t></td>
              <td><t>this document</t></td>
            </tr>
          </tbody>
        </table>
      </section>

    </section>
    

    <!-- ########################################################################### -->
    <!-- ########################################################################### -->

    <section anchor="Security">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Security Considerations</name>
      <t>This document should not affect the security of the Internet. [CHECK]</t>
    </section>
    
    <!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <!-- The recommended and simplest way to include a well known reference -->
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3209.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5440.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5521.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5541.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5557.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8453.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8637.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9552.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9562.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8776.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8795.xml"/>


        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-teas-yang-path-computation.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-pce-pcep-yang.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-teas-yang-te.xml"/>


        
      </references>
 
      <references>
        <name>Informative References</name>

        <reference anchor="CNCF-CNF" target="https://github.com/cncf/telecom-user-group/blob/master/whitepaper/cloud_native_thinking_for_telecommunications.md">
          <front>
            <title>Cloud Native Thinking for Telecommunications</title>
            <author>
              <organization>Cloud Native Computing Foundation</organization>
            </author>
            <date year="2020"/>
          </front>
        </reference>       

        <reference anchor="ETSI-GR-NFV-MAN-001" target="https://www.etsi.org/deliver/etsi_gr/NFV-MAN/001_099/001/01.02.01_60/gr_nfv-man001v010201p.pdf">
          <front>
            <title>Network Functions Virtualisation (NFV); Management and Orchestration; Report on Management and Orchestration Framework</title>
            <author>
              <organization>ETSI</organization>
            </author>
            <date year="2021"/>
          </front>
        </reference>       

        <reference anchor="ETSI-GS-NFV-IFA-010" target="https://www.etsi.org/deliver/etsi_gs/nfv-ifa/001_099/010/04.05.01_60/gs_nfv-ifa010v040501p.pdf">
          <front>
            <title>Network Functions Virtualisation (NFV) Release 4; Management and Orchestration; Functional requirements specification</title>
            <author>
              <organization>ETSI</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>       

      </references>
    </references>
    
    <section anchor="Acknowledgements" numbered="false">

      <name>Acknowledgements</name>
  
      <t>To the projects PAROMA-MED (founded by the European Horizon 2020 Program for research, 
         technological development and demonstration under grant agreement n° 101070222) and
         6Green (founded by the European Union's Horizon Europe, grant agreement No 101096925)
         for setting communication requirements that contributed to originate and to generalize the solution.</t>
      <t>To Francesco Lazzeri (former Ericsson, now retired) for identifying the terms of the problem.</t>
      <t>To Orazio Toscano (Ericsson), Rosario Colica (Ericsson), Luca Piccinini (Ericsson), Joel Halpern (Ericsson) for the support.</t>

    </section>
    
    <section anchor="Contributors" numbered="false" toc="include" removeInRFC="false">

      <name>Contributors</name>

      <contact fullname="Manuela Scarella" initials="M." surname="Scarella">
        <organization>Ericsson</organization>
        <address>
          <postal>
            <street>Via Melen 77</street>
            <city>Genoa</city>
            <region>GE</region>
            <code>16152</code>
            <country>Italy</country>
          </postal>
          <email>manuela.scarella@ericsson.com</email>
          <uri>www.ericsson.com</uri>
        </address>
      </contact>
      <contact fullname="Domenico Cotroneo" initials="D." surname="Cotroneo">
        <organization>Ericsson</organization>
        <address>
          <postal>
            <street>Via Melen 77</street>
            <city>Genoa</city>
            <region>GE</region>
            <code>16152</code>
            <country>Italy</country>
          </postal>
          <email>domenico.cotroneo@ericsson.com</email>
          <uri>www.ericsson.com</uri>
        </address>
      </contact>
    </section>
    
 </back>
</rfc>
