<?xml version="1.0" encoding="UTF-8"?>
<rfc category="info"
     docName="draft-fu-onsen-update-l3sm-service-models-03"
     ipr="trust200902"
     submissionType="IETF"
     xml:lang="en">
  <front>
    <title abbrev="Extensions to L3SM">Extensions to the YANG Data Model for L3VPN Service Delivery</title>
    
    <author fullname="Fengchao Fu" initials="F." surname="Fu">
      <organization>China Telecom</organization>
      <address><email>fufengc@chinatelecom.cn</email></address>
    </author>
    <author fullname="Cancan Huang" initials="C." surname="Huang">
      <organization>China Telecom</organization>
      <address><email>huangcanc@chinatelecom.cn</email></address>
    </author>
    <author fullname="Bo Wu" initials="B." surname="Wu">
      <organization>Huawei</organization>
      <address><email>lana.wubo@huawei.com</email></address>
    </author>


    <date year="2026" month="October" day="31"/>
    <workgroup>ONSEN Working Group</workgroup>
    <abstract>
      <t><xref target="RFC8299"/> defines a YANG data model for L3VPN service delivery. 
      The base L3VPN Service Model (L3SM) has limitations regarding dynamic service features. In addition, emerging technologies including SRv6 and quantum security 
      bring new service capabilities available to customers, which are not natively supported by L3SM.       
      This document defines a set of extensions 
      to address the limitations of L3SM. </t>
      <t>These augmentations are designed to be backward-compatible and do not obsolete <xref target="RFC8299"/>.</t>
    </abstract>
<!--
    <note title="First Submission">
      <t>This is the second submission of this document to the IETF, submitted 
        on February 11, 2026. No pre-RFC5378 disclaimer is required as this 
        submission is post-RFC5378.</t>
    </note>
-->
  </front>

  <middle>
    <section title="Status of This Memo">
      <t>This Internet-Draft is submitted in full conformance with the provisions 
        of BCP 78 and BCP 79. Internet-Drafts are working documents of the 
        Internet Engineering Task Force (IETF). Note that other groups may also 
        distribute working documents. The list of current Internet-Drafts is at 
        https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft 
        documents valid for a maximum of six months and may be updated, replaced, 
        or obsoleted by other documents at any time. It is inappropriate to use 
        Internet-Drafts as reference material or to cite them other than as 
        "work in progress." This Internet-Draft will expire on 4 May 2027.</t>
    </section>

    <section title="Copyright Notice">
      <t>Copyright (c) 2026 IETF Trust and the persons identified as the document 
        authors. All rights reserved. This document is subject to BCP 78 and the 
        IETF Trust's Legal Provisions Relating to IETF Documents 
        (https://trustee.ietf.org/license-info) in effect on the date of 
        publication of this document. Please review these documents carefully, 
        as they describe your rights and restrictions with respect to this 
        document. Code Components extracted from this document must include 
        Revised BSD License text as described in Section 4.e of the Trust Legal 
        Provisions and are provided without warranty as described in the Revised 
        BSD License.</t>
    </section>

    <section anchor="sec-intro" title="Introduction">
      <t>   <xref target="RFC8299"/> defines the Layer 3 VPN Service Model (L3SM), which
   provides a customer-facing abstraction for Layer 3 VPN services.
   L3SM assumes relatively static service characteristics: persistent
   connectivity between fixed sites with bandwidth parameters specified
   at service creation time.</t>
      <t> There are two main drivers for dynamic L3VPN service. </t>
      <t>First, with the rise of compute services, 
      operational experience with transmission service for data-intensive workloads has identified
   requirements not addressed by the base L3SM model. A typical use case is
   large-scale data transfers from customer premises to remote AI compute clusters for training and computing,
    which may involve Tbit-scale bulk data movement. Such workloads require task-oriented high bandwidth: 
    a large bandwidth allocation is provisioned temporarily during data transfer tasks,
     and the connection is either torn down or reverted to a baseline low-bandwidth
      once the task completes.</t>
   <t>Second, SD-WAN solutions natively support dynamic bandwidth and on-demand service adjustments. 
      Customers now expect similar flexible capabilities for their managed traditional VPN services, 
      resulting in operator requirements for dynamic service features within traditional VPN offerings.</t>      
   <t>Customers require two typical types of dynamic L3VPN services (specified in <xref target="sec-terminology"/>), including:</t>
      <list style="symbols">
        <t>Dynamic networking provisioning: The ability to establish and tear
      down connectivity on demand, rather than maintaining persistent
      connections. </t>
        <t>Dynamic bandwidth adjustment: The ability to modify bandwidth
      allocations on demand.</t>
      </list>
      <t>These operational requirements create corresponding gaps in the
service model.</t>
      <t> Furthermore, emerging technologies
including SRv6 and quantum security bring new service capabilities available to customers,
 creating gaps in the original L3SM model.
 Large-scale SRv6 deployments enable 
      operators to offer new value-added services such as network slicing service and 
      on-path telemetry service atop traditional L3VPN. Quantum-security deployments introduce a new value-added quantum-security service. Network slicing is defined in <xref target="RFC9543"/> <xref target="I-D.ietf-spring-sr-policy-nrp"/>
      and on-path telemetry is defined in  <xref target="I-D.ietf-idr-sr-policy-ifit"/> <xref target="I-D.ietf-ippm-on-path-telemetry-yang"/>. </t>
      <t>In summary, the gaps mainly include:</t>
      <list style="symbols">
        <t>L3SM does not support dynamic networking service.</t>
        <t>L3SM does not support dynamic bandwidth adjustment service.</t>
        <t>L3SM lacks integration with network slicing constructs
          to deliver differentiated service tiers.</t>
         <t>L3SM lacks support for flow-oriented on-path telemetry value-added services 
         for L3VPN performance monitoring, limiting end-to-end service quality visibility.</t>
       <t>L3SM does not support quantum-safe encryption service.</t>
       <!--  
       <t>Most of L3SM functional modules
        (eg., qos, security) are configured 
       under site and site-network-access nodes,
        without unified global VPN-service settings. 
        This leads to extensive duplicate configurations across 
        individual sites and increases overall operational complexity.</t>
        -->
      </list>
      <t>This document defines YANG augmentations to <xref target="RFC8299"/> to address these
   gaps. The extensions are designed to be backward compatible:
   implementations that do not require these capabilities can ignore
   the newly added parameters.</t>
      <t>The scope of this document is limited to implementation-agnostic service model extensions. 
      This document focuses on the service characteristics exposed to the customers.
   Implementation details of underlying mechanisms (e.g., signaling
   protocols, encryption algorithms, security mechanisms, on-path telemetry implementation-specific techniques) are out of scope. 
  
  SRv6 serves as one of the drivers for some services, 
  but the underlying transport technology is not restricted to SRv6; MPLS is also applicable.
In addition, SRv6 EVPN-related VPN instantiation mechanisms are treated as underlying 
implementation details and are out of scope for this service model.
 Such mechanisms may be specified in network service models such as the L3NM or device-level YANG models. </t>
    </section>

    <section anchor="sec-terminology" title="Terminology">
      <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 in <xref target="RFC2119"/> and <xref target="RFC8174"/>  when, and only when, they appear in all
   capitals, as shown here.</t>
      <t>This document uses the following acronyms which are defined in other RFC documents:</t>
      <t>AC: Attachment Circuit, as defined in <xref target="RFC9833"/>.</t>     
      <t>CE: Customer Edge, as defined in <xref target="RFC4026"/>.</t>
      <t>COA: Change of Authorization, as defined in <xref target="RFC5176"/>.</t>
      <t>ESP: Encapsulating Security Payload, as defined in <xref target="RFC4303"/>.</t>
      <t>IKE: Internet Key Exchange, as defined in <xref target="RFC5996"/>. </t>
      <t>L3SM: Layer 3 VPN Service Model, as defined in <xref target="RFC8299"/>.</t>
      <t>L3VPN: Layer 3 Virtual Private Network, as defined in <xref target="RFC4026"/>.</t>
      <t>PE: Provider Edge, as defined in <xref target="RFC4026"/>.</t>
      <t>PSK: Pre-Shared Key, as defined in <xref target="RFC5996"/>. </t>
      <t>PQC: Post-Quantum Cryptography. Cryptographic algorithms 
      designed to resist adversarial attacks from cryptographically-relevant 
      quantum computers  as defined in <xref target="RFC9958"/>.</t>
      <t>QKD: Quantum key distribution. A procedure to 
      generate and distribute symmetric cryptographic keys with 
      information-theoretic security leveraging quantum-physical principles, as defined in <xref target="ETSI-GR-QKD-007"/>
      . </t>
      <t>The document defines the following term:</t>
      <t>Dynamic L3VPN:      </t>
      <t>A Layer 3 VPN service that can support short-lived high-bandwidth capabilities. 
      There are two primary service types. The core difference between these two services is whether to establish and tear down a VPN tunnel 
     during the service lifecycle.</t>
      <list style="symbols">
      <t> The first is dynamic networking provisioning. 
      It means on-demand establishment and release of end-to-end VPN tunnels.
      It involves VPN connection establishment and teardown processes during the implementation of 
      this kind of service.
       Once the connection is established, high bandwidth is allocated simultaneously.
      </t>
      <t>The second is dynamic bandwidth adjustment. 
      It means customers have ordered a long-live VPN with a baseline bandwidth 
      and require temporary bandwidth scaling. 
      It does not involve VPN connection establishment and teardown processes, and
       only requires on-demand modification of the bandwidth rate during the implementation of 
      this kind of service. </t>
      </list>
     
     <t> To simplify
      service provisioning for network providers, these two capabilities are mutually exclusive 
      for a given VPN service; only one may be active at any given time.
     Scenarios in which a customer orders both dynamic networking service and dynamic bandwidth adjustment service
     at the same time are out of scope. </t>    
     
    </section>
    <section title="Service Data Model Usage">
       <t>The idea of the L3VPN service model defined in <xref target="RFC8299"/> is to propose an abstracted
interface between customers and network operators to manage
configuration of components of an L3VPN service. 
The extensions in this document follow the same service data model usage
as the base L3SM. </t>
       <t>An example of extended L3VPN service delivery is shown in Figure 1.
       A typical scenario is that customers order an L3VPN service and delivers the service requests 
       to the orchestrator.
The orchestrator is responsible for translating the service models into network models. This layered modeling process 
aligns with the framework specified in <xref target="RFC8969"/>.
 </t>
      <t> The usage of the service model is not limited to this example.
    The extended data model continues to be applicable for any component of management systems
     and northbound consumers, 
    but not directly by network elements.      </t>        
        <figure anchor="fig-extended-l3vpn-arch">
          <name>Extended L3VPN Service Delivery Example</name>
          <artwork align="center"><![CDATA[

     
             +----------------+
             |    Customer    |
             +-------+--------+
                     |
       L3vpn-svc-ext |
                     |
             +-------+-------+
             | Orchestrator  |
             +-------+-------+
                     |
      Network Models |
                     |
             +-------+-------+
             |    Network    |
             |    Controller |
             +-----+-+-+-----+
            Device | | |
     Configuration | | |
            Models | | |
   +---------------+ | +-----------+
   |      +----------+-------+     |  +---------+ 
+--+--+   |                  |     |  |         |
| CE1 +---+ +-----+   +----+ |  +--+--+-+       |
+-----+   | | PE1 |   |PE2 | +--+ DC-GW |  DC   |
+-----+   | +-----+   +----+ |  +-----+-+       |
| CE2 +---+                  |        |         |
+-----+   +------------------+        +---------+                                   
          ]]></artwork> 
        </figure>
    </section>
    <section title="L3SM Augmentations Description ">
      
      <section title="Overall Tree Structure">
        <t>The extensions are defined in the module
   ietf-l3vpn-svc-ext, which augments the base L3SM module
   (ietf-l3vpn-svc) at the following locations:</t>
          <list style="symbols">
            <t>/l3vpn-svc/vpn-profiles: Adds three profiles, including bandwidth adjustment
      ranges, provisioning delay SLOs and performance 
      monitoring policies. These profiles are predefined 
      and standardized by the provider and 
      the provider can propose these profiles to the customers.</t>       
            <t>/l3vpn-svc/sites/site:  
              <list style="symbols">
                <t>Adds a site-level unified traffic classification-policy container that
           defines a set of ordered rules to classify customer traffic
           and generates a set of 
          "class-id" values.  The "class-id" can be reused across various service functions modules including 
          "qos", "security".
           Different modules shall use identical "class-id" values 
           for traffic matching when handling the same traffic flows, 
           and different "class-id" values when handling distinct traffic flows. </t>
                <t>Adds a new container ("oam"), 
            and augments the existing containers ("qos", "security") .</t>
               </list>
            </t>
            <t>/l3vpn-svc/sites/site/site-network-accesses/site-network-access: Adds a new container ("dynamic-l3vpn"), a site-network-access-level unified traffic classification-policy container
            and augments the existing containers ("qos", "security").           </t>         
          </list>
        <t>The parameter inheritance mechanism defined in <xref target="RFC8299"/> 
        for site-level and site-network-access-level
         nodes also applies to this document.</t>      
        <t>The detailed parameters will be described later in this document.</t>

        <t>Figure 2 illustrates the overall module augmentation tree structure.</t>
        <figure anchor="fig-tree">
          <name>Overall Augmentation Tree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
module: ietf-l3vpn-svc-ext

augment /l3vpn-svc:l3vpn-svc
        /l3vpn-svc:vpn-profiles
        /l3vpn-svc:valid-provider-identifiers:
  +--rw bandwidth-adjustment-identifier* [id]
  |  +--rw id string
  +--rw provisioning-latency-identifier* [id]
  |  +--rw id string
  +--rw perf-mon-identifier* [id]
     +--rw id string

augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site:
  +--rw classification-policy* [rule-id]
  |  ...
  +--rw qos {qos}?
  |  ...
  +--rw oam?
     +--rw perf-mon {perf-mon}?
  |  ...
  +--rw security
  |  ...

 
augment /l3vpn-svc:l3vpn-svc
        /l3vpn-svc:sites/l3vpn-svc:site
        /l3vpn-svc:site-network-accesses
        /l3vpn-svc:site-network-access:
  +--rw classification-policy* [rule-id]
  |  ...
  +--rw dynamic-l3vpn {dynamic-l3vpn}?
  |  ...
  +--rw qos {qos}?
  |  ...
  +--rw security
  |  ...
          ]]></artwork>
        </figure>
  
      </section>
         <section title="Dynamic L3VPN">
                   <t>Figure 3 illustrates the module augmentation subtree structure of dynamic L3VPN.</t>
        <figure anchor="fig-dynamic-L3VPN-subtree">
          <name>Augmentation Dynamic L3VPN Subtree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites
        /l3vpn-svc:site
        /l3vpn-svc:site-network-accesses
        /l3vpn-svc:site-network-access:
+--rw service
       +--rw dynamic-l3vpn {dynamic-l3vpn}?
          +--rw max-adjustment-bandwidth-range?     ->
             |        /l3vpn-svc:l3vpn-svc/vpn-profiles
             |        /valid-provider-identifiers
             |        /l3vpn-svc-ext:bandwidth-adjustment-profile-identifier
             |        /id       
          +--rw (dynamic-type)?
             +--:(dynamic-networking)
             |     ...
             +--:(dynamic-bandwidth-adjustment)
             |     ...
   
          ]]></artwork>
        </figure>
         <t> A dynamic-L3VPN service has the following common data nodes, applicable to both dynamic service types:</t>
          <list style="symbols">
            <t>"dynamic-l3vpn": Provides the container to group all parameters associated with 
           dynamic service provisioning.
           This parameter is 
      configurable only when the "dynamic-l3vpn" feature is enabled. </t>
                 <t>"max-adjustment-bandwidth-range": Indicates 
           the maximum allowed adjustment bandwidth value for this dynamic L3VPN.
 This parameter is a factor that operators need to consider 
      when selecting appropriate bearer solution for physical access links.
  As an illustration, operators may deploy GE links between CE and PE when the maximum bandwidth is less than 1Gbps. 
      If the required bandwidth exceeds 10Gbps, 50G or 100G links can be adopted as the access medium instead.
      The exact bearer solution is implementation-specific and determined by the actual deployment. </t>
            <t>"dynamic-type": Indicates the type of dynamic L3VPN service and is a YANG choice node. 
              The dynamic-networking type and dynamic-bandwidth-adjustment type are defined so far.</t>  
              </list> 
          <section title="Dynamic networking provisioning">
            <section title="Requirements"> 
              <t>Customers require task-based and short-lived connections.
          VPN tunnels are set up only when transmission tasks start and torn down upon the transmission 
          task completion.</t>
          <t>Typical scenarios include but are not limited to data computation offloading from local sites to remote cloud DCs,
          and data circulation services among different organizations or enterprises. 
          Task-based connections are driven by two main factors: security and cost. 
          For security considerations, some customers prefer to remain unreachable when the data transmission task is finished.
          From the cost perspective,  task-based connections
          improve the cost efficiency for customers, since they do not
           need to occupy network resources continuously.  
          </t>
              <t>Given the short-lived nature of higher-bandwidth allocations, these connections make customers more sensitive to provisioning 
          latency relative to conventional L3VPN services. Customers require connection 
 provisioning latency to be provided as an SLO attribute, 
 which quantifies the time offset between the requested-start and actual-start timestamps.</t>  
              <t>Note that provisioning latency here excludes physical device deployment time; 
          it refers only to the time required to logically establish or tear down the VPN tunnels via configurations.</t>
          </section>
          <section title="Gaps"> 
            <t>Gaps in <xref target="RFC8299"/>: L3SM assumes persistent connectivity; it doesn't provide
   parameters to specify the requested-start time and requested-stop time of AC connections or activation time
   constraints.</t>
            <t>Gaps in <xref target="RFC9834"/>: The "ietf-bearer-svc" data YANG model defined in <xref target="RFC9834"/> 
             provides the "requested-start" and "requested-stop" nodes
             to specify the expected activation and deactivation date and time of a bearer; 
         but it lacks support for diverse dynamic networking provisioning capabilities, such as 
         specifying recurring schedules within a single configuration. Operators may offer discounted bandwidth during 
         off-peak hours. Consequently, customers may want to use this temporary high-bandwidth 
         networking service only during these daily off-peak periods. This means that the customer subscription may be recurring.</t>
          </section>
          <section anchor="sec-6.2.3" title="Extensions"> 
            <t>This YANG data model defines the data structure for on-demand establishment and release of VPN
   connectivity, with specified provisioning delay constraints.
   The detailed implementation mechanisms for fast activation and deactivation of L3VPN 
   connections are implementation-specific and out of scope of this document.</t>
           
           <t>Figure 4 illustrates the module augmentation subtree structure of dynamic networking.</t>
        <figure anchor="fig-dynamic-networking-subtree">
          <name>Augmentation Dynamic Networking Subtree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites
        /l3vpn-svc:site
        /l3vpn-svc:site-network-accesses
        /l3vpn-svc:site-network-access:
+--rw service
       +--rw dynamic-l3vpn {dynamic-l3vpn}?
          | ...
          +--rw (dynamic-type)?
             +--:(dynamic-networking)
             |  +--rw connection-provisioning-latency?     ->
             |        /l3vpn-svc:l3vpn-svc/vpn-profiles
             |        /valid-provider-identifiers
             |        /l3vpn-svc-ext:provisioning-delay-profile-identifier
             |        /id
             |  +--rw networking-schedule
             |     +--rw schedule* [schedule-id]
             |        +--rw schedule-id                   string
             |        +--rw (schedule-type)?
             |        |  +--:(period)
             |        |  |  +--rw period
             |        |  |     +--rw period-description?     string
             |        |  |     +--rw period-start?           
             |        |  |        yang:date-and-time
             |        |  |     +--rw time-zone-identifier?   
             |        |  |        sys:timezone-name
             |        |  |     +--rw (period-type)?
             |        |  |        +--:(explicit)
             |        |  |        |  +--rw period-end?       
             |        |  |        |     yang:date-and-time
             |        |  |        +--:(duration)
             |        |  |           +--rw duration?         duration
             |        |  +--:(daily-recurrence)
             |        |     +--rw daily-recurrence
             |        |        +--rw recurrence-first
             |        |        |  +--rw start-time?   
             |        |        |     yang:date-and-time
             |        |        |  +--rw duration?     duration
             |        |        +--rw time-zone-identifier?   
             |        |           sys:timezone-name
             |        |        +--rw (recurrence-end)?
             |        |        |  +--:(until)
             |        |        |  |  +--rw until?            
             |        |        |  |     yang:date-and-time
             |        |        |  +--:(count)
             |        |        |     +--rw count?            uint32
             |        |        +--rw frequency?              identityref
             |        |        +--rw interval?               uint32
             |        +--ro actual-start-time?           yang:date-and-time
             |        +--ro actual-stop-time?            yang:date-and-time
             +--:(dynamic-bandwidth-adjustment)
   
          ]]></artwork>
        </figure>
          <t> A dynamic networking provisioning service has the following main data nodes:</t>
          <list style="symbols">                    
            <t>"connection-provisioning-latency": Specifies the SLO for
            the time offset between requested-start and actual-start timestamps of the VPN connection. 
            This SLO applies only to connection activation.
            The latency for connection teardown (between requested-stop and actual-stop timestamps) 
            is out of scope for this attribute.
            Network operators may predefine a set of latency-related templates, 
     and customers can select a template that matches their service requirements. 
      The connection-provisioning-latency attribute MAY reference such a predefined latency template. </t>
            <t>"schedule": Specifies exact time slots for dynamic networking service. 
            The schedule constructs used in this document is aligned with <xref target="RFC9922"/>.
                 Two types of schedules are supported: period-based schedules,
and recurrence-with-time-zone schedules.       
            <list style="symbols">     
            <t> "period": Is used for a period-based schedule and is imported from "period-of-time" of
                <xref target="RFC9922"/>. Two types of period-based schedules are supported.
                 <list style="symbols">
                   <t>Immediate order: If "period-start" is omitted, 
                   the service becomes active immediately upon configuration commit. A non-negative time duration ("duration")
                   specifies the provisioned duration of the VPN service and
                   defines how long the service remains active after activation.</t>
                   <t>Future reservation: "period-start" and "period-end" are set to a future timestamp, and the start of the period 
 be no later than the end of the period. This indicates a service order scheduled for a future time.
                   Multiple "period-of-time" entries MAY exist within a single schedule with the "schedule-id" as the key.</t>
                </list> 
              </t>           
              <t>"recurrence": Is used for a recurrence-based schedule and  is imported from "recurrence-with-time-zone" of
                <xref target="RFC9922"/>.  It supports daily recurrence, which is also one of the most typical subscription models.
                </t>  
             </list>
            </t> 
            <t> "actual-start-time" and "actual-end-time": Report
             the actual date and time when the bearer was enabled/ disabled. 
             They are read-only parameters. The time offset between the actual 
             timestamps and the expected  timestamps  represents the actual service provisioning delay.
             This value is used by customers to validate whether the service meets the connection-provisioning-latency SLO constraints.</t>
          </list> 
          <!--
        <t>Note that, from the service-layer perspective, establishing or tearing down VPN connectivity
merely represents a logical site (or AC) joining or leaving the VPN service.
From underlying network implementation perspective, these lifecycle operations
may trigger configuration updates on remote peer sites; 
such cross-site behaviors are outside the scope of this YANG service model.  </t>-->
 <t> Note that  "requested-site-start/stop" under "sites" node and scheduled requested start/stop time under "dynamic-l3vpn" node are different,
 and they are often used together to form a complete service subscription. 
           As an illustration, the site subscription charge is determined by factors such as "requested-site-start"
           and "requested-site-stop", while the dynamic networking charge depends on the duration 
           of the dynamic service subscription.  In other words, the customer typically incurs two separate charges.  
           The dynamic-networking capability
   described in this document applies to end-to-end VPN tunnel lifecycles
   and does not imply dynamic creation or deletion of physical site and physical devices.
   In conventional L3VPN, a site refers to a physical location and associated customer premises equipment. The
   "requested-site-start" and "requested-site-stop" under "sites" node still represent the requested start/stop time of the physical site. 
          When customers use dynamic networking service,
       sites are typically still static and seldom rebuilt or dismantled from operational practice,
           while the logical end-to-end tunnels among sites may be established or torn down on demand. 
           Dynamic networking scheduled activation SHALL NOT extend beyond the active time window of the associated site; 
           dynamic networking may only be initiated when the associated site is active.
      
            </t>
          </section>
        </section>
 
        <section title="Dynamic bandwidth adjustment">
            <section title="Requirements"> 
              <t> Some customers require a persistent connection
          for regular service use with a baseline bandwidth.
           When special requirements arise, for example large-data-transmission workloads, 
           higher-bandwidth SHALL be provisioned temporarily on top of the existing persistent VPN. 
           After the completion of the workload, the temporary higher-bandwidth setting is revoked,
and the service reverts back to its baseline bandwidth while keeping the persistent VPN connection intact.  </t>
              <t>Given their short-lived nature of higher-bandwidth, customers may be concerned about 
               bandwidth adjustment
 provisioning latency  and may require such latency to be exposed as an SLO attribute.
 This attribute quantifies the time offset between requested-start and actual-start timestamps
for bandwidth increase operation.</t>
           </section>
           <section title="Gaps"> 
            <t> Gaps in <xref target="RFC8299"/>: The base L3SM specifies static bandwidth parameters
   ("svc-input-bandwidth", "svc-output-bandwidth") without support for elastic bandwidth
   adjustment for temporary higher-bandwidth and bandwidth adjustment provisioning latency constraints.</t>
           </section>  
           <section title="Extensions">           
             <t>This YANG data model defines the data structures to support dynamic bandwidth adjustments.
             Figure 5 illustrates the module augmentation subtree structure.</t>
        <figure anchor="fig-dynamic-bandwidth-subtree">
          <name>Augmentation Dynamic Bandwidth Adjustment Subtree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
augment /l3vpn-svc:l3vpn-svc
        /l3vpn-svc:sites/l3vpn-svc:site
        /l3vpn-svc:site-network-accesses
        /l3vpn-svc:site-network-access:
+--rw service
       +--rw dynamic-l3vpn {dynamic-l3vpn}?
          |...
          +--rw (dynamic-type)?
             +--:(dynamic-bandwidth-adjustment)
                +--rw bandwidth-adjustment-provisioning-latency?   -> 
                      /l3vpn-svc:l3vpn-svc/vpn-profiles
                      /valid-provider-identifiers
                      /l3vpn-svc-ext:provisioning-delay-profile-identifier
                      /id
                +--rw temporary-input-bandwidth?         uint64
                +--rw temporary-output-bandwidth?        uint64
                +--rw bandwidth-adjustment-schedule
                   +--rw schedule* [schedule-id]
                      +--rw schedule-id                   string
                      +--rw (schedule-type)?
                      |  +--:(period)
                      |  |  +--rw period
                      |  |     +--rw period-description?     string
                      |  |     +--rw period-start?           
                      |  |           yang:date-and-time
                      |  |     +--rw time-zone-identifier?   
                      |  |           sys:timezone-name
                      |  |     +--rw (period-type)?
                      |  |        +--:(explicit)
                      |  |        |  +--rw period-end?       
                      |  |        |        yang:date-and-time
                      |  |        +--:(duration)
                      |  |           +--rw duration?         duration
                      |  +--:(daily-recurrence)
                      |     +--rw daily-recurrence
                      |        +--rw recurrence-first
                      |        |  +--rw start-time?   
                      |        |     yang:date-and-time
                      |        |  +--rw duration?     duration
                      |        +--rw time-zone-identifier?   
                      |           sys:timezone-name
                      |        +--rw (recurrence-end)?
                      |        |  +--:(until)
                      |        |  |  +--rw until?            
                      |        |  |     yang:date-and-time
                      |        |  +--:(count)
                      |        |     +--rw count?            uint32
                      |        +--rw frequency?              identityref
                      |        +--rw interval?               uint32
                      +--ro actual-start-time?           yang:date-and-time
                      +--ro actual-stop-time?            yang:date-and-time


          ]]></artwork>
        </figure>
        <t> A dynamic bandwidth adjustment service has the following main data nodes:</t>
          <list style="symbols">
          <!--
           <t>"requested-start" and "requested-stop": Indicates the start or stop time of the persisent connection with
           baseline bandwidth.</t>-->

           <t>bandwidth-adjustment-provisioning-latency:  Specifies the SLO for
            the time offset between expected-start (specified in the "schedule") and actual-start timestamps of the bandwidth after adjustment. 
      This attribute MAY reference a predefined latency template.</t>
           <t>"temporary-svc-input-bandwidth" and "temporary-svc-output-bandwidth": Indicate 
           the desired temporary input and output bandwidth after bandwidth adjustment. These two parameters
            are absolute values, 
           not delta offsets from the baseline bandwidth.
            The existing "svc-input-bandwidth" and "svc-output-bandwidth" in <xref target="RFC8299"/> represent the baseline 
            bandwidth.
            When combined with the baseline service bandwidth, 
            the temporary bandwidth parameters allow customers to perform flexible on-demand bandwidth adjustments 
            for the VPN service.</t>
            <t>"actual-start-time" and "actual-stop-time": 
            Reports the actual timestamps when the bandwidth adjustment takes effect. 
             These are read-only status values. The time offset between the actual 
             timestamps and the expected timestamps  represents the actual bandwidth adjustment provisioning latency.
             This value is used by customers to validate whether the service meets the bandwidth-adjustment-provisioning-latency SLO constraints. </t>
            <t> "schedule": Specifies exact time slots for dynamic bandwidth adjustment service. The data structure follows the same 
            pattern as the "schedule" described in <xref target="sec-6.2.3"/>; details are not repeated here.  </t>         
            </list>
          </section>
        </section>
        </section>

        <section title="Extensions for &quot;qos&quot;">
          <section title="Requirements">
            <t>With the widespread deployment of network slicing service, L3SM shall support network slicing-specific SLO/SLE parameters including isolation.</t>
            <t> Customers expect QoS flow classification policies to be reusable across other functional modules in the same L3VPN service, 
          such as "security", to reduce the complexity of flow classification definitions.</t>   
           <!--
           <t>Customers require a globally applicable QoS policy to eliminate the high complexity of separate configurations per "site"
             and per "site-network-access".  </t>-->
          </section>
          <section title="Gaps">
            <t>L3SM defined in <xref target="RFC8299"/> provides basic QoS profiles but lacks
   integration with network slicing constructs and parameterized SLO/SLE
   specifications.</t>
            <t>Traffic classification policies reside under the "qos" container, making them inconvenient
            for reuse by other functional modules.</t>
            <!--
            <t><xref target="RFC8299"/> defines QoS policies at the "site" and "site-network-access" levels,
           without support for global "vpn-service" level. This results in extensive duplicated configurations 
           across individual sites and increases operational complexity. </t>    -->       
           </section>
           <section title="Extensions">
             <t>This YANG data model defines extensions for "qos". Figure 6 illustrates the module augmentation subtree structure.</t>
        <figure anchor="fig-qos-subtree">
          <name>Augmentation QoS Subtree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
    +--rw qos
    |  +--rw (qos-profile)?
    |     +--:(custom)
    |        +--rw classes
    |           +--rw class* [class-id]
    |              +--rw class-id                 string
    |              +--rw isolation*               identityref

          ]]></artwork>
        </figure>
       <t> This document augments the following data node:</t>
          <list style="symbols">
            <t>"isolation": Specifies the requirement that the L3VPN service is not impacted
       by the existence of other customers or services in the same
       network. The definition of "isolation" aligns with
   [I-D.ietf-teas-ietf-network-slice-nbi-yang], enabling consistent
   policy application across VPN and slice services. </t>
          </list>
        <t> Traffic-classification subtree structure is shown in Figure 7.</t>
          <t>The "classification-policy" defined in this document reuses the definition of
  "classification-policy" from <xref target="RFC8299"/>.
  The difference is its placement: it is located under "site" and
  "site-network-access", rather than the original location defined in <xref target="RFC8299"/>.</t>

             <figure anchor="fig-classID-subtree">
          <name>Traffic-classification Subtree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
  
  +--rw classification-policy* [policy-id]
  |  +--rw policy-id                  string
  |  +--rw (match-type)?
  |  |  +--:(match-flow)
  |  |  |  +--rw match-flow
  |  |  |     +--rw dscp?                inet:dscp
  |  |  |     +--rw dot1p?               uint8
  |  |  |     +--rw ipv4-src-prefix?     inet:ipv4-prefix
  |  |  |     +--rw ipv6-src-prefix?     inet:ipv6-prefix
  |  |  |     +--rw ipv4-dst-prefix?     inet:ipv4-prefix
  |  |  |     +--rw ipv6-dst-prefix?     inet:ipv6-prefix
  |  |  |     +--rw l4-src-port?         inet:port-number
  |  |  |     +--rw l4-src-port-range
  |  |  |     |  +--rw lower-port?   inet:port-number
  |  |  |     |  +--rw upper-port?   inet:port-number
  |  |  |     +--rw l4-dst-port?         inet:port-number
  |  |  |     +--rw l4-dst-port-range
  |  |  |     |  +--rw lower-port?   inet:port-number
  |  |  |     |  +--rw upper-port?   inet:port-number
  |  |  |     +--rw protocol-field?      union
  |  |  |     +--rw target-sites* [site-id]
  |  |  |        +--rw site-id    l3vpn-svc:svc-id
  |  |  +--:(match-application)
  |  |     +--rw match-application?   string
  |  +--rw target-class-id?           string
  +--rw security
  |     +--rw class* [class-id]  
  |              ...   
  +--rw service  
  |     +--rw (qos-profile)
  |        +--:(custom)
  |           +--rw classes {qos-custom}?
  |              +--rw class* [class-id]
  |              ...   

          ]]></artwork>
        </figure>         
          </section>
        </section>

        
        <section title="Extensions for &quot;security&quot;">
          <section title="Requirements">
            <t>Customers require quantum-safe encryption for high-security data
   transmission scenarios, defending data against potential cracking threats brought by future cryptographically relevant quantum computers 
   and providing long-term transmission confidentiality.</t>
            <t> Customers require encryption service to safeguard security throughout the full data transmission process.
            </t>
            <t>Driven by encryption service charges or forwarding 
          performance constraints of the CE or PE equipment, customers or network operators require fine-grained traffic encryption for
           designated flows instead of full traffic on the access circuits. </t>
          </section>  
          <section title="Gaps">
             <t>L3SM in <xref target="RFC8299"/> defines basic encryption enablement,
           including specifying the encryption algorithm applied to ESP payloads and 
         specifying PSK applied for peer authentication during the IKE negotiation phase.
         But L3SM lacks support for quantum key distribution (QKD) and post-quantum
   cryptography (PQC) integration.</t>
            <t>The encryption mechanism defined in <xref target="RFC8299"/> only applies to full traffic on access circuits
             and operates at a relatively coarse granularity. </t>
          </section>
          <section title="Extensions"> 
          <t>Figure 8 illustrates the module augmentation subtree structure of enhanced security. </t>
        <figure anchor="fig-secutiry-subtree">
          <name>Augmentation Security Subtree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
  augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site
          /l3vpn-svc:site-network-accesses
          /l3vpn-svc:site-network-access
          /l3vpn-svc:security:
    +--rw encryption-profile
       +--rw (profile)?
          +--:(provider-profile)
          |  +--rw profile-name?   -> 
          |       /l3vpn-svc:l3vpn-svc/vpn-profiles
          |       /valid-provider-identifiers
          |       /encryption-profile-identifier/id
          +--:(customer-profile)
             +--rw classes
                +--rw class* [class-id]
                   +--rw class-id                   string
                   +--rw algorithm?                 string
                   +--rw (key-type)?
                   |  +--:(psk)
                   |     +--rw pre-shared-key?      string
                   +--rw post-quantum-encryption {post-quantum-encryption}?
                      +--rw post-quantum-policy
                      |  +--rw pqc-only-acceptable?   boolean
                      |  +--rw qkd-only-acceptable?   boolean
                      |  +--rw failure-action?        identityref
                      +--rw pqc {pqc}?
                      |  +--rw enable?       boolean
                      |  +--rw algorithm?    string
                      |  +--ro pqc-status?   identityref
                      +--rw qkd {qkd}?
                         +--rw enable?                 boolean
                         +--rw qkd-key-pool-id?        string
                         +--rw key-refresh-interval?   uint32
                         +--ro qkd-status?             identityref                         

          ]]></artwork>
        </figure>
          <t> The extended security service has the following main data
   nodes:</t>
          <list style="symbols">
            <t>"class-id": Distinguishes different traffic classification rules for customers.
      The customer-profile container is defined as a list with "class-id" serving as its list key.
             Each entry  defines the mapping between a class-id and its associated
             encryption policy.</t> 
             <t>"post-quantum-encryption": Aggregates all configuration items 
             associated with post-quantum-encryption and is gated by the "post-quantum-encryption" feature.
             It includes two primary categories of quantum-resistant security services: 
             PQC and QKD.</t>
             <t>"post-quantum-policy": Specifies the availability and failover policy for post-quantum 
             encryption.
This policy controls the behavior of the encryption service when PQC, QKD, or both experience failures.
Depending on the configured policy, the service may continue using post-quantum-based 
encryption when only one of PQC or QKD remains operational, or it may fall back to 
conventional cryptography or terminate upon such partial or total failure.
 Detailed policy combination examples for the following  nodes are provided in <xref target="sec-post-quantum-policy"/>.
                <list style="symbols">
                  <t> "pqc-only-acceptable": Indicates whether the customer wants to maintain 
                  post-quantum communication when QKD-derived keys are not used. This applies to scenarios 
                  where only PQC is available, QKD is unavailable, or QKD has not been ordered by the customer.
                  If true, continue to use post-quantum encryption. If false, execute the "failure-action".
                  
                  </t>
                  <t> "qkd-only-acceptable":Indicates whether the customer wants to maintain
                  post-quantum communication when PQC is not used. This applies to scenarios 
                  where only QKD is available and PQC is unavailable or PQC has not been ordered by the customer.
                       If true, continue to use post-quantum encryption. If false, execute the "failure-action".
                       </t>
                  <t> "failure-action": Specifies the action to be executed uniformly for all scenarios
                   where the validity conditions for post-quantum are not met.
                   Typical actions include fallback to conventional crypto or terminate.</t>

                </list> 
             </t>
             <t>"pqc": Aggregates all items associated with PQC.
                <list style="symbols">
                  <t> "algorithm": Specifies PQC algorithm.</t>
                  <t> "pqc-status": Reports the current operational state of PQC encryption.</t>
                </list> 
              </t>
              <t>"qkd": Aggregates all items associated with QKD-based encryption.  
               <list style="symbols">
                 <t>"key-refresh-interval": Specifies the time interval for automatic refresh of quantum keys stored within the quantum key pool.</t>
                 <t>"qkd-key-pool-id": Specifies the identifier of a QKD key pool managed by the QKD key management entity (KME).
  A QKD key pool stores pre-generated symmetric quantum keys shared between paired QKD endpoints. Identical qkd-key-pool-id values 
  shall be configured on both endpoints of any QKD link.
For QKD-based encryption deployed over either the CE-to-PE,  CE-to-CE segment,  or PE-to-PE segment
the paired endpoints (CE and PE, PE and PE or CE and CE) shall use the same qkd-key-pool-id.</t>
                 <t>"qkd-status": Reports the current operational state of qkd encryption.</t>
                </list>
                </t>           
          </list>
          <t>The selection of encryption boundaries is recommended to depend on CE ownership,
          while staying as close as practicable to the operator's administrative boundary.
When CEs are operator-owned, the encryption may be applied for CE-to-CE protection.
When CEs are customer-owned, PE-to-PE protection is the recommended deployment option.</t>
          <t>Note: these are deployment recommendations only; 
          the service model does not mandate specific encryption termination points.</t>
          <t>Note that if a customer requires both QKD and PQC services simultaneously,
              operators need to integrate these two quantum-resistant mechanisms.
A typical implementation leverages PQC during the IKE negotiation phase, and combines key material derived from PQC with QKD keys to produce 
the final session symmetric key.
This is  merely  an illustrative example and imposes no restrictions on operator-specific implementations.
The detailed deployment approach is left to the network operators.</t>
           </section>
        </section>
<section title="Performance Monitoring">
          <section title="Requirement">
            <t>Customers require end-to-end performance monitoring 
            for fast fault detection and service quality observability.</t>
          </section>
          <section title="Gaps">
            <t>Gaps in <xref target="RFC8299"/>:The base L3SM lacks native monitoring
configuration options and service-level performance metrics.</t>
          </section>
          <section title="Extensions">
            <t>Figure 9 illustrates the module augmentation subtree structure of "perf-mon".      </t>
        <figure anchor="fig-pf-subtree">
          <name>Augmentation Performance Monitoring Subtree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
  augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site:
  +--rw oam
       +--rw perf-mon {perf-mon}?
          +--rw enable?       boolean
          +--rw monitoring
             +--rw monitor* [target-site-id]
                +--rw target-site-id         l3vpn-svc:svc-id
                +--rw measurement-profile
                |  +--rw (profile-type)?
                |     +--:(standard)
                |     |  +--rw profile-id?             -> 
                |     |        /l3vpn-svc:l3vpn-svc/vpn-profiles
                |     |        /valid-provider-identifiers
                |     |        /l3vpn-svc-ext:perf-mon-profile-identifier
                |     |        /id
                |     +--:(custom) {perf-mon-custom}?
                |        +--rw measurement-interval?   uint32
                +--ro status?                identityref
                +--ro metrics
                   +--ro one-way-min-delay?         yang:gauge64
                   +--ro one-way-max-delay?         yang:gauge64
                   +--ro one-way-delay-variation?   yang:gauge64
                   +--ro one-way-packet-loss?       decimal64
                   +--ro two-way-min-delay?         yang:gauge64
                   +--ro two-way-max-delay?         yang:gauge64
                   +--ro two-way-delay-variation?   yang:gauge64
                   +--ro two-way-packet-loss?       decimal64

          ]]></artwork>
        </figure>
         <t> The perf-mon service has the following main data
   nodes:</t>
          <list style="symbols">
            <t>"enable": Enables performance
monitoring for the L3VPN service (default false).</t>
            <t>"monitoring": Contains configuration and read-only state 
            parameters for VPN service monitoring. The sub-items below 
            describe the reporting granularity, aggregation rules, 
            and target-site selection constraints.
            <list style="symbols">
            <t>Customer requirements are centered on end-to-end performance monitoring from a local site to specified target sites, 
            rather than details such as low-level per-access-circuit metrics.
            Therefore, performance monitoring parameters are reported using the "target-site-id" as the key and the reporting granularity.
The model outputs one set of performance metrics and monitoring configuration parameters for each local site to each designated target site.</t>
<t>For a site with dual access (such as access to two PEs), only one aggregated set of parameters is recommended to be exposed.
The operator determines the aggregation method (e.g., average, maximum) for metrics collected from the two PEs to the target site.
The specific aggregation method is implementation-specific and out scope of this document. </t>
<t>In addition, the set of selectable target-sites is governed by service logic.
For a spoke site, only hub sites may be selected as target sites.
For hub sites or any-to-any service topologies, all other sites may be selected as target sites.</t>
            </list>
            </t>

            
            <t>"perf-mon-profile": Defines two mutually-exclusive options
for performance monitoring configuration:
              <list style="numbers">
                <t> The "standard" case references a pre-provisioned performance-monitoring
    profile defined under "valid-provider-identifiers".</t>
                <t>The "custom" case enables service-specific custom performance monitoring. It includes
                "measurement-interval", which specifies the performance measurement interval, and is
            aligned with <xref target="RFC9375"/>.</t>
              </list>
              </t>
            <t>"status": Indicates the operational status of this monitoring session 
            and whether monitoring is functioning normally.</t>
            <t>"pm-metrics": Specifies a set of operational state and service-level performance
metrics, including delay, packet loss and jitter, to enrich
operational state data and enhance end-to-end quality visibility.
 Monitoring parameters are aligned with those defined in 
 <xref target="I-D.ietf-teas-ietf-network-slice-nbi-yang"/>.
 It specifies an end-to-end slice service YANG model,
and includes performance monitoring related requirements similar to this document.
 </t>
          </list>
          </section>
        </section>

    </section>

    <section title="L3SM Augmentation YANG Module">

         <t>This modules augments the L3SM. This module uses references defined in 
        <xref target="RFC8299"/>. </t>
      <sourcecode type="yang" name="ietf-l3vpn-svc-dynamic-ext.yang">
  module ietf-l3vpn-svc-ext {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc-ext";
  prefix "l3vpn-svc-ext";

  import ietf-l3vpn-svc {
    prefix "l3vpn-svc";
    reference "RFC 8299: YANG Data Model for L3VPN Service Delivery";
  }
  import ietf-schedule {
    prefix "schedule";
    reference "RFC 9922: YANG Data Model for Scheduling";
  }
  import ietf-yang-types {
    prefix "yang";
    reference "RFC 6991: Common YANG Data Types";
  }
  import ietf-inet-types {
    prefix "inet";
    reference "RFC 6991: Common YANG Data Types";
  }

  organization
    "IETF ONSEN Working Group";
  contact
     WG List: &lt;onsen@ietf.org&gt;
  description
    "This module defines extensions to the ietf-l3vpn-svc YANG module
     for dynamic L3VPN service capabilities, including dynamic bandwidth
     adjustment, scheduled activation, end-to-end performance monitoring,
     enhanced QoS, and class-based security policies with post-quantum
     encryption support.";
  reference
    "RFC 8299, RFC 9922";

  identity service-isolation-type {
    description
      "Base identity for L3VPN service isolation types.";
  }

  identity traffic-isolation {
    base service-isolation-type;
    description
      "Isolation requirement for separating customer L3VPN traffic
       from other services or tenants, enforced via forwarding
       plane separation.";
  }

  identity failure-action-type {
    description
      "Base identity for post-quantum encryption failure actions.";
  }

  identity fallback-classic {
    base failure-action-type;
    description
      "Fall back to conventional cryptographic algorithms
       when post-quantum encryption is unavailable.";
  }

  identity block-traffic {
    base failure-action-type;
    description
      "Block traffic when post-quantum encryption is unavailable.";
  }

  identity crypto-status-type {
    description
      "Base identity for cryptographic component operational status.";
  }

  identity crypto-up {
    base crypto-status-type;
    description "Cryptographic component is fully operational.";
  }

  identity crypto-down {
    base crypto-status-type;
    description "Cryptographic component is not operational.";
  }

  identity crypto-degraded {
    base crypto-status-type;
    description "Cryptographic component is operating in degraded mode.";
  }

  identity perf-mon-status-type {
    description
      "Base identity for performance monitoring session status.";
  }

  identity perf-mon-active {
    base perf-mon-status-type;
    description "Monitoring session is active and collecting metrics.";
  }

  identity perf-mon-inactive {
    base perf-mon-status-type;
    description "Monitoring session is administratively disabled.";
  }

  identity perf-mon-error {
    base perf-mon-status-type;
    description "Monitoring session is in error state.";
  }

  feature dynamic-l3vpn {
    description
      "Support time-scheduled dynamic L3VPN service activation and adjustment.";
  }

  feature perf-mon {
    description
      "Support end-to-end performance monitoring for L3VPN service endpoints.";
  }

  feature perf-mon-custom {
    description
      "Support custom performance monitoring parameters.";
    if-feature perf-mon;
  }

  feature post-quantum-encryption {
    description
      "Support post-quantum encryption capabilities.";
  }

  feature pqc {
    description
      "Support Post-Quantum Cryptography (PQC) algorithm suite.";
    if-feature post-quantum-encryption;
  }

  feature qkd {
    description
      "Support Quantum Key Distribution (QKD) key supply.";
    if-feature post-quantum-encryption;
  }

  grouping schedule-entry-grouping {
    description
      "Reusable schedule entry structure, encapsulating standard
       ietf-schedule groupings. ";
    leaf schedule-id {
      type string;
      description
        "Unique identifier for this schedule entry. The identifier
         is unique within the parent list scope.";
    }
    choice schedule-type {
      description
        "Select the schedule time specification model.
         The two cases are mutually exclusive.";
      case period {
        container period {
          description
            "A schedule defined by an start and end time window.";
          uses schedule:period-of-time;
        }
      }
      case daily-recurrence {
        container daily-recurrence {
          description
            "A recurring schedule based on the standard recurrence
             grouping with associated time zone information.";
          uses schedule:recurrence-with-time-zone;
        }
      }
    }
    leaf actual-start-time {
      type yang:date-and-time;
      config false;
      description
        "UTC timestamp of the actual start time for the most recently activated
         schedule instance. ";
    }
    leaf actual-stop-time {
      type yang:date-and-time;
      config false;
      description
        "UTC timestamp of the actual stop time for the most recently activated
         schedule instance.";
    }
  }

  grouping classification-policy-grouping {
    description
      "Reusable traffic classification policy aligned with RFC 8299 structure.
       This grouping may be applied at site or site-network-access level.";
    list classification-policy {
      key "policy-id";
      description
        "Traffic classification policy entry. Each policy defines a set of
         match rules and a target QoS class for matched flows.";
      leaf policy-id {
        type string;
        description "Identifier for classification policy.";
      }
      choice match-type {
        description
          "Select the category of traffic match criteria.
           Cases are mutually exclusive.";
        case match-flow {
          description "Match based on packet header fields.";
          container match-flow {
            description "Flow-based match criteria from packet headers.";
            leaf dscp {
              type inet:dscp;
              description "Match DSCP value.";
            }
            leaf dot1p {
              type uint8;
              description "Match 802.1p priority value.";
            }
            leaf ipv4-src-prefix {
              type inet:ipv4-prefix;
              description "Match IPv4 source prefix.";
            }
            leaf ipv6-src-prefix {
              type inet:ipv6-prefix;
              description "Match IPv6 source prefix.";
            }
            leaf ipv4-dst-prefix {
              type inet:ipv4-prefix;
              description "Match IPv4 destination prefix.";
            }
            leaf ipv6-dst-prefix {
              type inet:ipv6-prefix;
              description "Match IPv6 destination prefix.";
            }
            leaf l4-src-port {
              type inet:port-number;
              description "Match L4 source port.";
            }
            container l4-src-port-range {
              description "Match L4 source port within a contiguous range.";
              leaf lower-port {
                type inet:port-number;
                description "Lower bound of the source port range.";
              }
              leaf upper-port {
                type inet:port-number;
                description "Upper bound of the source port range.";
              }
            }
            leaf l4-dst-port {
              type inet:port-number;
              description "Match L4 destination port.";
            }
            container l4-dst-port-range {
              description "Match L4 destination port within a contiguous range.";
              leaf lower-port {
                type inet:port-number;
                description "Lower bound of the destination port range.";
              }
              leaf upper-port {
                type inet:port-number;
                description "Upper bound of the destination port range.";
              }
            }
            leaf protocol-field {
              type union {
                type inet:protocol-number;
                type string;
              }
              description "Match IP protocol field value.";
            }
            list target-sites {
              key "site-id";
              description "Match traffic destined to the listed target sites.";
              leaf site-id {
                type l3vpn-svc:svc-id;
                description "Target site identifier.";
              }
            }
          }
        }
        case match-application {
          description "Match based on application identifier.";
          leaf match-application {
            type string;
            description "Identifier of the application to match.";
          }
        }
      }
      leaf target-class-id {
        type string;
        description "Identifier of target QoS class for matching traffic.";
      }
    }
  }

  grouping extended-qos-grouping {
    description
      "Extended QoS configuration with class-based policies,
       applicable at site and site-network-access level.";
    container qos {
      description "QoS configuration parameters.";
      choice qos-profile {
        description
          "Select the source of QoS profile definition.
           Cases are mutually exclusive.";
        case custom {
          description "User-defined custom QoS classes.";
          container classes {
            description "List of QoS treatment classes.";
            list class {
              key "class-id";
              description "Single QoS class entry.";
              leaf class-id {
                type string;
                description "QoS class identifier.";
              }
              leaf direction {
                type identityref {
                  base l3vpn-svc:qos-profile-direction;
                }
                description "Traffic direction this QoS class applies to.";
              }
              leaf rate-limit {
                type decimal64 {
                  fraction-digits 2;
                }
                description "Rate-limit value.";
              }
              leaf guaranteed-bw-percent {
                type decimal64 {
                  fraction-digits 2;
                }
                description "Guaranteed bandwidth percentage relative to the access capacity.";
              }
              leaf end-to-end {
                type empty;
                description "End-to-end QoS treatment flag.";
              }
              leaf-list isolation {
                type identityref {
                  base service-isolation-type;
                }
                description "Reference to isolation policies applied to this QoS class.";
              }
              container latency {
                description "Latency objective configuration.";
                choice flavor {
                  description
                    "Select latency objective mode. Cases are mutually exclusive.";
                  case lowest {
                    leaf use-lowest-latency {
                      type empty;
                      description "Request lowest achievable latency.";
                    }
                  }
                  case boundary {
                    leaf latency-boundary {
                      type uint16;
                      description "Latency boundary threshold in milliseconds.";
                    }
                  }
                }
              }
              container jitter {
                description "Jitter objective configuration.";
                choice flavor {
                  description
                    "Select jitter objective mode. Cases are mutually exclusive.";
                  case lowest {
                    leaf use-lowest-jitter {
                      type empty;
                      description "Request lowest achievable jitter.";
                    }
                  }
                  case boundary {
                    leaf jitter-boundary {
                      type uint16;
                      description "Jitter boundary threshold in milliseconds.";
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  grouping site-perf-mon-grouping {
    description
      "Site-level end-to-end performance monitoring configuration.";
    container oam {
      description
        "Operations, Administration and Maintenance functions.";
      container perf-mon {
        if-feature perf-mon;
        description
          "Performance monitoring configuration.";
        leaf enable {
          type boolean;
          default false;
          description
            "Enable performance monitoring function.";
        }
        container monitoring {
          description
            "Container holding performance monitoring session entries.";
          list monitor {
            key "target-site-id";
            description
              "Performance monitoring session to a remote target site.";
            leaf target-site-id {
              type l3vpn-svc:svc-id;
              description
                "Identifier of the target site to monitor.";
            }
            container measurement-profile {
              description
                "Measurement profile configuration.";
              choice profile-type {
                description
                  "Type of measurement profile. Cases are mutually exclusive.";
                case standard {
                  description
                    "Standard provider-defined measurement profile.";
                  leaf profile-id {
                    type leafref {
                      path "/l3vpn-svc:l3vpn-svc/l3vpn-svc:vpn-profiles/l3vpn-svc:valid-provider-identifiers/l3vpn-svc-ext:perf-mon-profile-identifier/l3vpn-svc-ext:id";
                    }
                    description
                      "Reference to the provider-defined perf-mon profile.
                       Profiles are defined by the service provider;
                       customers may only reference existing identifiers.";
                  }
                }
                case custom {
                  if-feature perf-mon-custom;
                  description
                    "Custom measurement parameters defined locally on this site.";
                  leaf measurement-interval {
                    type uint32;
                    units "seconds";
                    description
                      "Measurement polling interval in seconds.";
                  }
                }
              }
            }
            leaf status {
              type identityref {
                base perf-mon-status-type;
              }
              config false;
              description
                "Operational status of this monitoring session.";
            }
            container metrics {
              config false;
              description
                "Collected performance metrics, updated by the monitoring agent.";
              leaf one-way-min-delay {
                type yang:gauge64;
                units "microseconds";
                description
                  "One-way minimum delay.";
              }
              leaf one-way-max-delay {
                type yang:gauge64;
                units "microseconds";
                description
                  "One-way maximum delay.";
              }
              leaf one-way-delay-variation {
                type yang:gauge64;
                units "microseconds";
                description
                  "One-way delay variation (jitter).";
              }
              leaf one-way-packet-loss {
                type decimal64 {
                  fraction-digits 4;
                }
                description
                  "One-way packet loss ratio.";
              }
              leaf two-way-min-delay {
                type yang:gauge64;
                units "microseconds";
                description
                  "Two-way minimum round-trip delay.";
              }
              leaf two-way-max-delay {
                type yang:gauge64;
                units "microseconds";
                description
                  "Two-way maximum round-trip delay.";
              }
              leaf two-way-delay-variation {
                type yang:gauge64;
                units "microseconds";
                description
                  "Two-way round-trip delay variation (jitter).";
              }
              leaf two-way-packet-loss {
                type decimal64 {
                  fraction-digits 4;
                }
                description
                  "Two-way round-trip packet loss ratio.";
              }
            }
          }
        }
      }
    }
  }

  grouping extended-security-grouping {
    description
      "Extended security configuration with encryption profile
       and class-based custom policies, aligned with the QoS
       class design pattern. Applicable at site or site-network-access level.";
    container encryption-profile {
      description
        "Encryption profile selection and parameters.";
      choice profile {
        description
          "Select between provider-managed or customer-defined profile.
           Cases are mutually exclusive.";
        case provider-profile {
          description
            "Reference to provider-defined encryption profile.";
          leaf profile-name {
            type leafref {
              path "/l3vpn-svc:l3vpn-svc/l3vpn-svc:vpn-profiles/l3vpn-svc:valid-provider-identifiers/l3vpn-svc:encryption-profile-identifier/l3vpn-svc:id";
            }
            description
              "Name of the provider-defined encryption profile.
               Profiles are managed by the service provider.";
          }
        }
        case customer-profile {
          description
            "Customer-defined local encryption profile with
             class-based policies. This case permits direct specification
             of cryptographic parameters on this site or site-network-access,
             as an alternative to referencing a provider template.";
          container classes {
            description
              "List of custom security classes.";
            list class {
              key "class-id";
              description
                "Single security class entry.";
              leaf class-id {
                type string;
                description
                  "Security class identifier.";
              }
              leaf algorithm {
                type string;
                description
                  "Conventional cryptographic algorithm name.";
              }
              choice key-type {
                description
                  "Key delivery type. Cases are mutually exclusive.";
                case psk {
                  leaf pre-shared-key {
                    type string;
                    description
                      "Pre-shared key material.";
                  }
                }
              }
              container post-quantum-encryption {
                if-feature post-quantum-encryption;
                description
                  "Post-quantum encryption configuration for this security class.";
                container post-quantum-policy {
                  description
                    "Availability and failover policy for post-quantum encryption.
                     The boolean flags control acceptable combinations of PQC and QKD.";
                  leaf pqc-only-acceptable {
                    type boolean;
                    default false;
                    description
                      "When true, a post-quantum security association is acceptable if
                       PQC is operational, even when QKD is unavailable or disabled.
                       If both pqc-only-acceptable and qkd-only-acceptable are false,
                       both PQC and QKD are required for a valid post-quantum session.";
                  }
                  leaf qkd-only-acceptable {
                    type boolean;
                    default false;
                    description
                      "When true, a post-quantum security association is acceptable if
                       QKD is operational, even when PQC is unavailable or disabled.
                       If both pqc-only-acceptable and qkd-only-acceptable are false,
                       both PQC and QKD are required for a valid post-quantum session.";
                  }
                  leaf failure-action {
                    type identityref {
                      base failure-action-type;
                    }
                    default fallback-classic;
                    description
                      "Action to take when post-quantum encryption
                       does not meet the minimum availability requirements.";
                  }
                }
                container pqc {
                  if-feature pqc;
                  description
                    "PQC specific configuration and status.";
                  leaf enable {
                    type boolean;
                    default false;
                    description
                      "Enable PQC algorithm suite.";
                  }
                  leaf algorithm {
                    type string;
                    description
                      "Post-quantum cryptographic algorithm or algorithm suite name.
                       Common values include 'kyber-768', 'kyber-1024',
                       'dilithium-3', 'dilithium-5', etc.";
                  }
                  leaf pqc-status {
                    type identityref {
                      base crypto-status-type;
                    }
                    config false;
                    description
                      "Operational status of PQC, reported by the local crypto stack.";
                  }
                }
                container qkd {
                  if-feature qkd;
                  description
                    "QKD key-supply configuration and status.";
                  leaf enable {
                    type boolean;
                    default false;
                    description
                      "Enable QKD key delivery.";
                  }
                  leaf qkd-key-pool-id {
                    type string;
                    description
                      "Identifier for the QKD key pool.";
                  }
                  leaf key-refresh-interval {
                    type uint32;
                    units "seconds";
                    description
                      "QKD key refresh interval in seconds.";
                  }
                  leaf qkd-status {
                    type identityref {
                      base crypto-status-type;
                    }
                    config false;
                    description
                      "Operational status of QKD key supply, reported by the QKD integration.";
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  augment "/l3vpn-svc:l3vpn-svc/l3vpn-svc:vpn-profiles/l3vpn-svc:valid-provider-identifiers" {
    description
      "Add provider-defined profile identifiers for dynamic L3VPN extensions,
       aligned with RFC 8299 naming and structure conventions.
       These identifiers are managed by the service provider and referenced
       from site and site-network-access configuration.";
    list bandwidth-adjustment-profile-identifier {
      key "id";
      description "Identifier for a provider-defined bandwidth adjustment profile.";
      leaf id {
        type string;
        description "Unique identifier for the bandwidth adjustment profile.";
      }
    }
    list provisioning-delay-profile-identifier {
      key "id";
      description "Identifier for a provider-defined provisioning delay profile.";
      leaf id {
        type string;
        description "Unique identifier for the provisioning delay profile.";
      }
    }
    list perf-mon-profile-identifier {
      key "id";
      description "Identifier for a provider-defined performance monitoring profile.";
      leaf id {
        type string;
        description "Unique identifier for the performance monitoring profile.";
      }
    }
  }

  augment "/l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site" {
    description
      "Add site-level classification, QoS and OAM performance monitoring extensions.";
    uses classification-policy-grouping;
    uses extended-qos-grouping;
    uses site-perf-mon-grouping;
  }

  augment "/l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site/l3vpn-svc:security" {
    description
      "Augment site-level security with encryption profile extension.";
    uses extended-security-grouping;
  }

  augment "/l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site/l3vpn-svc:site-network-accesses/l3vpn-svc:site-network-access" {
    description
      "Augment site-network-access for dynamic service, bandwidth adjustment,
       classification and QoS extensions.";
    uses classification-policy-grouping;
    uses extended-qos-grouping;
    container service {
      description "Dynamic-l3vpn service parameters at access level.";
      container dynamic-l3vpn {
        if-feature dynamic-l3vpn;
        description "Dynamic scheduled bandwidth-adjustment configuration.";
        leaf max-adjustment-bandwidth-range {
          type leafref {
            path "/l3vpn-svc:l3vpn-svc/l3vpn-svc:vpn-profiles/l3vpn-svc:valid-provider-identifiers/l3vpn-svc-ext:bandwidth-adjustment-profile-identifier/l3vpn-svc-ext:id";
          }
          description
            "Reference to bandwidth-adjustment profile identifier.
             Profiles are provider-managed and define bounds for dynamic bandwidth changes.";
        }
        choice dynamic-type {
          description
            "Selection of the dynamic L3VPN service capability.
             The cases are mutually exclusive; only one dynamic capability
             may be configured on a single site-network-access entry.";
          case dynamic-networking {
            description
              "Dynamic networking capability, for scheduled activation
               of connectivity between L3VPN sites.";
            leaf connection-provisioning-latency {
              type leafref {
                path "/l3vpn-svc:l3vpn-svc/l3vpn-svc:vpn-profiles/l3vpn-svc:valid-provider-identifiers/l3vpn-svc-ext:provisioning-delay-profile-identifier/l3vpn-svc-ext:id";
              }
              description
                "Reference to provisioning-delay profile identifier.
                 Profiles are provider-managed and define the provisioning latency
                 expectation for dynamic networking setup.";
            }
            container networking-schedule {
              description "Scheduled activation for dynamic networking service.";
              list schedule {
                key "schedule-id";
                description "One schedule entry for dynamic networking service.";
                uses schedule-entry-grouping;
              }
            }
          }
          case dynamic-bandwidth-adjustment {
            description
              "Dynamic bandwidth adjustment capability.
               When activated by the associated schedule, the access bandwidth
               temporarily switches to the configured temporary-input-bandwidth
               and temporary-output-bandwidth values.";
            leaf bandwidth-adjustment-provisioning-latency {
              type leafref {
                path "/l3vpn-svc:l3vpn-svc/l3vpn-svc:vpn-profiles/l3vpn-svc:valid-provider-identifiers/l3vpn-svc-ext:provisioning-delay-profile-identifier/l3vpn-svc-ext:id";
              }
              description
                "Reference to provisioning-delay profile identifier.
                 Profiles are provider-managed and define the provisioning latency
                 expectation for bandwidth adjustment changes.";
            }
            leaf temporary-input-bandwidth {
              type uint64;
              units "bits-per-second";
              description "Temporary burst input bandwidth applied during schedule activation.";
            }
            leaf temporary-output-bandwidth {
              type uint64;
              units "bits-per-second";
              description "Temporary burst output bandwidth applied during schedule activation.";
            }
            container bandwidth-adjustment-schedule {
              description "Scheduled adjustment for dynamic bandwidth service.";
              list schedule {
                key "schedule-id";
                description "One schedule entry for dynamic bandwidth service.";
                uses schedule-entry-grouping;
              }
            }
          }
        }
      }
    }
  }

  augment "/l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site/l3vpn-svc:site-network-accesses/l3vpn-svc:site-network-access/l3vpn-svc:security" {
    description
      "Augment site-network-access-level security with encryption profile extension.";
    uses extended-security-grouping;
  }
}


  
      </sourcecode>

    </section>
  


    <section title="IANA Considerations">
      <t>This document requests IANA to register the following URI in the
   "IETF XML Registry":</t>
      <t>URI: urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc-ext
   Registrant Contact: The IESG
   XML: N/A; the requested URI is an XML namespace.</t>
      <t> This document requests IANA to register the following YANG module in
   the "YANG Module Names" registry:</t>
      <t>Name: ietf-l3vpn-svc-ext
   Namespace: urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc-ext
   Prefix: l3vpn-svc-ext
   Reference: RFC XXXX</t>
    </section>

    <section title="Security Considerations">
      <t>The extensions defined in this document inherit the security
   considerations of <xref target="RFC8299"/>.</t>
      <t>Additional considerations:</t>
      <list style="symbols">
        <t>Dynamic provisioning mechanisms (e.g., RADIUS COA) MUST be
      secured using mutual authentication and integrity protection.</t>
        <t>Quantum encryption parameters are sensitive; access to these
      configuration nodes SHOULD be restricted to authorized
      administrators.</t>
        <t>Communication between customers and service orchestrators SHOULD
      use TLS 1.3 or equivalent encryption.</t>     
        <t>Dynamic L3VPN networking capabilities allow on-demand establishment 
        of VPN connectivity. Implementations MUST enforce authorization checks to prevent 
        customers from establishing L3VPN connectivity to untrusted or unauthorized peers. 
        Detailed trust and authorization mechanisms are implementation-specific and out-of-scope
         for this document.</t>
        <!--
        <t> The extent of dynamic operations should be limited to the session level rather than the
   device level, so as to reduce the risk of failures caused by frequent
   configurations or signaling.  The specific implementation details are  out of scope.</t>
        -->
      </list>  
    </section>
  </middle>

  <back>
    <references title="Normative References">
       <reference anchor="RFC2119" target="https://www.rfc-editor.org/rfc/rfc2119.txt">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="Scott Bradner">
            <organization>Harvard University</organization>
          </author>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/> 
      </reference>

      <reference anchor="RFC4026">
        <front>
          <title>BGP/MPLS VPN Terminology</title>
          <author initials="E." surname="Rosen" role="editor"/>
          <author initials="Y." surname="Rekhter" role="editor"/>
          <date month="June" year="2005"/>
        </front>
        <seriesInfo name="RFC" value="4026"/>
      </reference>

    <reference anchor="RFC4303" target="https://www.rfc-editor.org/rfc/rfc4303">
  <front>
    <title>IP Encapsulating Security Payload (ESP)</title>
    <author initials="S." surname="Kent">
      <organization/>
    </author>
    <date month="December" year="2005"/>
  </front>
  <seriesInfo name="RFC" value="4303"/>
</reference>

      <reference anchor="RFC5176">
        <front>
          <title>Dynamic Authorization Extensions to RADIUS</title>
          <author initials="G." surname="Zorn" role="editor"/>
          <author initials="B." surname="Aboba" role="editor"/>
          <date month="January" year="2008"/>
        </front>
        <seriesInfo name="RFC" value="5176"/>
      </reference>
      
      <reference anchor="RFC5996" target="https://www.rfc-editor.org/rfc/rfc5996">
  <front>
    <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
    <author initials="C." surname="Kaufman">
      <organization/>
    </author>
    <author initials="P." surname="Hoffman">
      <organization/>
    </author>
    <author initials="Y." surname="Nir">
      <organization/>
    </author>
    <author initials="P." surname="Eronen">
      <organization/>
    </author>
    <date month="September" year="2010"/>
  </front>
  <seriesInfo name="RFC" value="5996"/>
</reference>

      <reference anchor="RFC8174" target="https://www.rfc-editor.org/rfc/rfc8174.txt">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="Barry Leiba">
            <organization>IBM</organization>
          </author>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>

      <reference anchor="RFC8299">
        <front>
          <title>A YANG Data Model for Layer 3 VPN Services (L3SM)</title>
          <author initials="M." surname="Bjorklund" role="editor"/>
          <author initials="J." surname="Medved" role="editor"/>
          <author initials="S." surname="Vissicchio" role="editor"/>
          <date month="November" year="2017"/>
        </front>
        <seriesInfo name="RFC" value="8299"/>
      </reference>

      <reference anchor="RFC8969" target="https://datatracker.ietf.org/doc/html/rfc8969">
       <front>
         <title>A Framework for Automating Service and Network Management with YANG</title>
         <author initials="J." surname="Clarke"/>
         <author initials="M." surname="Bjorklund"/>
         <author initials="D." surname="Bogdanovic"/>
         <date month="September" year="2020"/>
       </front>
       <seriesInfo name="RFC" value="8969"/>
      </reference>

      <reference anchor="RFC9375" target="https://www.rfc-editor.org/rfc/rfc9375">
       <front>
         <title>A YANG Data Model for Network and VPN Service Performance Monitoring</title>
         <author initials="B." surname="Wu"/>
         <author initials="Q." surname="Wu"/>
         <author initials="M." surname="Boucadair"/>
         <author initials="O." surname="Gonzalez de Dios"/>   
         <author initials="B." surname="Wen"/>
         <date month="April" year="2023"/>
       </front>
       <seriesInfo name="RFC" value="9375"/>
      </reference>

      <reference anchor="RFC9543" target="https://www.rfc-editor.org/rfc/rfc9543">
  <front>
    <title>A Framework for Network Slices in Networks Built from IETF Technologies</title>
    <author initials="A." surname="Farrel" fullname="Adrian Farrel"/>
    <author initials="J." surname="Drake" fullname="John Drake"/>
    <author initials="R." surname="Rokui" fullname="Reza Rokui"/>
    <date month="March" year="2024"/>
  </front>
  <seriesInfo name="RFC" value="9543"/>
</reference>

      <reference anchor="RFC9833">
        <front>
          <title>A Common YANG Data Model for Attachment Circuits</title>
          <author initials="M." surname="Boucadair" role="editor"/>
          <date month="September" year="2025"/>
        </front>
        <seriesInfo name="RFC" value="9833"/>
      </reference>

      <reference anchor="RFC9834">
        <front>
          <title>A YANG Data Model for Ethernet Transport Bearer Services</title>
          <author initials="M." surname="Boucadair" role="editor"/>
          <date month="October" year="2025"/>
        </front>
        <seriesInfo name="RFC" value="9834"/>
      </reference>

      <reference anchor="RFC9922" target="https://www.rfc-editor.org/info/rfc9922">
        <front>
          <title>A Common YANG Data Model for Scheduling</title>
          <author initials="B." surname="Ma"/>
          <author initials="Y." surname="Yang"/>
          <author initials="R." surname="Rahman"/>
          <author initials="J." surname="Schoenwaelder"/>
          <date year="2026" month="March"/>
        </front>
        <seriesInfo name="RFC" value="9922"/>
      </reference>

      <reference anchor="RFC9958" target="https://datatracker.ietf.org/doc/html/rfc9958">
        <front>
          <title>Post-Quantum Cryptography for Engineers</title>
          <author initials="A." surname="Banerjee"/>
          <author initials="T." surname="Reddy.K"/>
          <author initials="D." surname="Schoinianakis"/>
          <author initials="T." surname="Hollebeek"/>
          <author initials="M." surname="Ounsworth"/>
          <date month="June" year="2026"/>
       </front>
       <seriesInfo name="RFC" value="9958"/>
      </reference>

      <reference anchor="I-D.ietf-teas-ietf-network-slice-nbi-yang"
                 target="https://datatracker.ietf.org/doc/html/draft-ietf-teas-ietf-network-slice-nbi-yang">
        <front>
          <title>A YANG Data Model for the RFC 9543 Network Slice Service</title>
          <author initials="B." surname="Wu" fullname="Bo Wu"/>
          <author initials="D." surname="Dhody" fullname="Dhruv Dhody"/>
          <author initials="R." surname="Rokui" fullname="Reza Rokui"/>
          <author initials="T." surname="Saad" fullname="Tarek Saad"/>
          <author initials="J." surname="Mullooly" fullname="John Mullooly"/>
          <date year="2026"/>          
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-teas-ietf-network-slice-nbi-yang"/>
      </reference>

      <reference anchor="I-D.ietf-idr-sr-policy-ifit" target="https://datatracker.ietf.org/doc/html/draft-ietf-idr-sr-policy-ifit-13">
  <front>
    <title>BGP SR Policy Extensions to Enable IFIT</title>
    <author initials="F." surname="Qin"/>
    <author initials="H." surname="Yuan"/>
    <author initials="S." surname="Yang"/>
    <author initials="T." surname="Zhou"/>
    <author initials="G." surname="Fioccola"/>
    <date/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-idr-sr-policy-ifit-13"/>
</reference>

<reference anchor="I-D.ietf-spring-sr-policy-nrp" target="https://datatracker.ietf.org/doc/html/draft-ietf-spring-sr-policy-nrp-02">
  <front>
    <title>Segment Routing Policy Extension for Network Resource Partition</title>
    <author/>
    <date/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-spring-sr-policy-nrp-02"/>
</reference>

<reference anchor="I-D.ietf-ippm-on-path-telemetry-yang"
            target="https://datatracker.ietf.org/doc/html/draft-ietf-ippm-on-path-telemetry-yang-07">
  <front>
    <title>On-Path Telemetry YANG Data Model</title>
    <author initials="G." surname="Fioccola"/>
    <author initials="T." surname="Zhou"/>
    <author initials="Y." surname="Zhu"/>
    <author initials="W." surname="Zhang"/>
    <author initials="K." surname="Zhu"/>
    <date/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-ippm-on-path-telemetry-yang-07"/>
</reference>

    </references>

    <references title="Informative References">




      <reference anchor="ETSI-GR-QKD-007" target="https://www.etsi.org/deliver/etsi_gr/QKD/001_099/007/">
        <front>
          <title>Quantum Key Distribution (QKD); Vocabulary</title>
          <author>
            <organization>ETSI</organization>
          </author>
          <date year="2021"/>
       </front>
       <seriesInfo name="ETSI GR" value="QKD 007"/>
      </reference>  

    </references>
   
    <section anchor="appendix-a" pn="section-appendix.a" title="Complete Model Tree Structure">
      <figure anchor="fig-complete-tree">
          <name>Complete Tree Structure </name>
          <artwork type="yang" align="left" ><![CDATA[
  module: ietf-l3vpn-svc-ext
augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:vpn-profiles
          /l3vpn-svc:valid-provider-identifiers:
    +--rw bandwidth-adjustment-profile-identifier* [id]
    |  +--rw id    string
    +--rw provisioning-delay-profile-identifier* [id]
    |  +--rw id    string
    +--rw perf-mon-profile-identifier* [id]
       +--rw id    string

  augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site:
    +--rw classification-policy* [policy-id]
    |  +--rw policy-id                  string
    |  +--rw (match-type)?
    |  |  +--:(match-flow)
    |  |  |  +--rw match-flow
    |  |  |     +--rw dscp?                inet:dscp
    |  |  |     +--rw dot1p?               uint8
    |  |  |     +--rw ipv4-src-prefix?     inet:ipv4-prefix
    |  |  |     +--rw ipv6-src-prefix?     inet:ipv6-prefix
    |  |  |     +--rw ipv4-dst-prefix?     inet:ipv4-prefix
    |  |  |     +--rw ipv6-dst-prefix?     inet:ipv6-prefix
    |  |  |     +--rw l4-src-port?         inet:port-number
    |  |  |     +--rw l4-src-port-range
    |  |  |     |  +--rw lower-port?   inet:port-number
    |  |  |     |  +--rw upper-port?   inet:port-number
    |  |  |     +--rw l4-dst-port?         inet:port-number
    |  |  |     +--rw l4-dst-port-range
    |  |  |     |  +--rw lower-port?   inet:port-number
    |  |  |     |  +--rw upper-port?   inet:port-number
    |  |  |     +--rw protocol-field?      union
    |  |  |     +--rw target-sites* [site-id]
    |  |  |        +--rw site-id    l3vpn-svc:svc-id
    |  |  +--:(match-application)
    |  |     +--rw match-application?   string
    |  +--rw target-class-id?           string
    +--rw qos
    |  +--rw (qos-profile)?
    |     +--:(custom)
    |        +--rw classes
    |           +--rw class* [class-id]
    |              +--rw class-id                 string
    |              +--rw direction?               identityref
    |              +--rw rate-limit?              decimal64
    |              +--rw guaranteed-bw-percent?   decimal64
    |              +--rw end-to-end?              empty
    |              +--rw isolation*               identityref
    |              +--rw latency
    |              |  +--rw (flavor)?
    |              |     +--:(lowest)
    |              |     |  +--rw use-lowest-latency?   empty
    |              |     +--:(boundary)
    |              |        +--rw latency-boundary?     uint16
    |              +--rw jitter
    |                 +--rw (flavor)?
    |                    +--:(lowest)
    |                    |  +--rw use-lowest-jitter?   empty
    |                    +--:(boundary)
    |                       +--rw jitter-boundary?     uint16
    +--rw oam
       +--rw perf-mon {perf-mon}?
          +--rw enable?       boolean
          +--rw monitoring
             +--rw monitor* [target-site-id]
                +--rw target-site-id         l3vpn-svc:svc-id
                +--rw measurement-profile
                |  +--rw (profile-type)?
                |     +--:(standard)
                |     |  +--rw profile-id?             -> 
                |     |     /l3vpn-svc:l3vpn-svc/vpn-profiles
                |     |     /valid-provider-identifiers
                |     |     /l3vpn-svc-ext:perf-mon-profile-identifier/id
                |     +--:(custom) {perf-mon-custom}?
                |        +--rw measurement-interval?   uint32
                +--ro status?                identityref
                +--ro metrics
                   +--ro one-way-min-delay?         yang:gauge64
                   +--ro one-way-max-delay?         yang:gauge64
                   +--ro one-way-delay-variation?   yang:gauge64
                   +--ro one-way-packet-loss?       decimal64
                   +--ro two-way-min-delay?         yang:gauge64
                   +--ro two-way-max-delay?         yang:gauge64
                   +--ro two-way-delay-variation?   yang:gauge64
                   +--ro two-way-packet-loss?       decimal64

  augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites
          /l3vpn-svc:site/l3vpn-svc:security:
    +--rw encryption-profile
       +--rw (profile)?
          +--:(provider-profile)
          |  +--rw profile-name?   -> 
          |     /l3vpn-svc:l3vpn-svc/vpn-profiles
          |     /valid-provider-identifiers
          |     /encryption-profile-identifier/id
          +--:(customer-profile)
             +--rw classes
                +--rw class* [class-id]
                   +--rw class-id                   string
                   +--rw algorithm?                 string
                   +--rw (key-type)?
                   |  +--:(psk)
                   |     +--rw pre-shared-key?      string
                   +--rw post-quantum-encryption {post-quantum-encryption}?
                      +--rw post-quantum-policy
                      |  +--rw pqc-only-acceptable?   boolean
                      |  +--rw qkd-only-acceptable?   boolean
                      |  +--rw failure-action?        identityref
                      +--rw pqc {pqc}?
                      |  +--rw enable?       boolean
                      |  +--rw algorithm?    string
                      |  +--ro pqc-status?   identityref
                      +--rw qkd {qkd}?
                         +--rw enable?                 boolean
                         +--rw qkd-key-pool-id?        string
                         +--rw key-refresh-interval?   uint32
                         +--ro qkd-status?             identityref                         

  augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites
          /l3vpn-svc:site/l3vpn-svc:site-network-accesses
          /l3vpn-svc:site-network-access:
    +--rw classification-policy* [policy-id]
    |  +--rw policy-id                  string
    |  +--rw (match-type)?
    |  |  +--:(match-flow)
    |  |  |  +--rw match-flow
    |  |  |     +--rw dscp?                inet:dscp
    |  |  |     +--rw dot1p?               uint8
    |  |  |     +--rw ipv4-src-prefix?     inet:ipv4-prefix
    |  |  |     +--rw ipv6-src-prefix?     inet:ipv6-prefix
    |  |  |     +--rw ipv4-dst-prefix?     inet:ipv4-prefix
    |  |  |     +--rw ipv6-dst-prefix?     inet:ipv6-prefix
    |  |  |     +--rw l4-src-port?         inet:port-number
    |  |  |     +--rw l4-src-port-range
    |  |  |     |  +--rw lower-port?   inet:port-number
    |  |  |     |  +--rw upper-port?   inet:port-number
    |  |  |     +--rw l4-dst-port?         inet:port-number
    |  |  |     +--rw l4-dst-port-range
    |  |  |     |  +--rw lower-port?   inet:port-number
    |  |  |     |  +--rw upper-port?   inet:port-number
    |  |  |     +--rw protocol-field?      union
    |  |  |     +--rw target-sites* [site-id]
    |  |  |        +--rw site-id    l3vpn-svc:svc-id
    |  |  +--:(match-application)
    |  |     +--rw match-application?   string
    |  +--rw target-class-id?           string
    +--rw qos
    |  +--rw (qos-profile)?
    |     +--:(custom)
    |        +--rw classes
    |           +--rw class* [class-id]
    |              +--rw class-id                 string
    |              +--rw direction?               identityref
    |              +--rw rate-limit?              decimal64
    |              +--rw guaranteed-bw-percent?   decimal64
    |              +--rw end-to-end?              empty
    |              +--rw isolation*               identityref
    |              +--rw latency
    |              |  +--rw (flavor)?
    |              |     +--:(lowest)
    |              |     |  +--rw use-lowest-latency?   empty
    |              |     +--:(boundary)
    |              |        +--rw latency-boundary?     uint16
    |              +--rw jitter
    |                 +--rw (flavor)?
    |                    +--:(lowest)
    |                    |  +--rw use-lowest-jitter?   empty
    |                    +--:(boundary)
    |                       +--rw jitter-boundary?     uint16
    +--rw service
       +--rw dynamic-l3vpn {dynamic-l3vpn}?
          +--rw bandwidth-adjustment-profile-id?   -> 
          |      /l3vpn-svc:l3vpn-svc/vpn-profiles
          |      /valid-provider-identifiers
          |      /l3vpn-svc-ext:bandwidth-adjustment-profile-identifier
          |      /id       
          +--rw (dynamic-type)?
             +--:(dynamic-networking)
             |  +--rw connection-provisioning-latency?     -> 
             |     /l3vpn-svc:l3vpn-svc/vpn-profiles
             |     /valid-provider-identifiers
             |     /l3vpn-svc-ext:provisioning-delay-profile-identifier
             |     /id
             |  +--rw networking-schedule
             |     +--rw schedule* [schedule-id]
             |        +--rw schedule-id                   string
             |        +--rw (schedule-type)?
             |        |  +--:(period)
             |        |  |  +--rw period
             |        |  |     +--rw period-description?     string
             |        |  |     +--rw period-start?           yang:date-and-time
             |        |  |     +--rw time-zone-identifier?   sys:timezone-name
             |        |  |     +--rw (period-type)?
             |        |  |        +--:(explicit)
             |        |  |        |  +--rw period-end?       yang:date-and-time
             |        |  |        +--:(duration)
             |        |  |           +--rw duration?         duration
             |        |  +--:(daily-recurrence)
             |        |     +--rw daily-recurrence
             |        |        +--rw recurrence-first
             |        |        |  +--rw start-time?   yang:date-and-time
             |        |        |  +--rw duration?     duration
             |        |        +--rw time-zone-identifier?   sys:timezone-name
             |        |        +--rw (recurrence-end)?
             |        |        |  +--:(until)
             |        |        |  |  +--rw until?            yang:date-and-time
             |        |        |  +--:(count)
             |        |        |     +--rw count?            uint32
             |        |        +--rw frequency?              identityref
             |        |        +--rw interval?               uint32
             |        +--ro actual-start-time?           yang:date-and-time
             |        +--ro actual-stop-time?            yang:date-and-time
             +--:(dynamic-bandwidth-adjustment)
                +--rw connection-provisioning-latency?     -> 
                |     /l3vpn-svc:l3vpn-svc/vpn-profiles
                |     /valid-provider-identifiers
                |     /l3vpn-svc-ext:provisioning-delay-profile-identifier
                |     /id
                +--rw temporary-input-bandwidth?         uint64
                +--rw temporary-output-bandwidth?        uint64
                +--rw bandwidth-adjustment-schedule
                   +--rw schedule* [schedule-id]
                      +--rw schedule-id                   string
                      +--rw (schedule-type)?
                      |  +--:(period)
                      |  |  +--rw period
                      |  |     +--rw period-description?     string
                      |  |     +--rw period-start?           yang:date-and-time
                      |  |     +--rw time-zone-identifier?   sys:timezone-name
                      |  |     +--rw (period-type)?
                      |  |        +--:(explicit)
                      |  |        |  +--rw period-end?       yang:date-and-time
                      |  |        +--:(duration)
                      |  |           +--rw duration?         duration
                      |  +--:(daily-recurrence)
                      |     +--rw daily-recurrence
                      |        +--rw recurrence-first
                      |        |  +--rw start-time?   yang:date-and-time
                      |        |  +--rw duration?     duration
                      |        +--rw time-zone-identifier?   sys:timezone-name
                      |        +--rw (recurrence-end)?
                      |        |  +--:(until)
                      |        |  |  +--rw until?            yang:date-and-time
                      |        |  +--:(count)
                      |        |     +--rw count?            uint32
                      |        +--rw frequency?              identityref
                      |        +--rw interval?               uint32
                      +--ro actual-start-time?           yang:date-and-time
                      +--ro actual-stop-time?            yang:date-and-time

  augment /l3vpn-svc:l3vpn-svc/l3vpn-svc:sites/l3vpn-svc:site
          /l3vpn-svc:site-network-accesses
          /l3vpn-svc:site-network-access/l3vpn-svc:security:
    +--rw encryption-profile
       +--rw (profile)?
          +--:(provider-profile)
          |  +--rw profile-name?   -> 
          |     /l3vpn-svc:l3vpn-svc/vpn-profiles
          |     /valid-provider-identifiers
          |     /encryption-profile-identifier/id
          +--:(customer-profile)
             +--rw classes
                +--rw class* [class-id]
                   +--rw class-id                   string
                   +--rw algorithm?                 string
                   +--rw (key-type)?
                   |  +--:(psk)
                   |     +--rw pre-shared-key?      string
                   +--rw post-quantum-encryption {post-quantum-encryption}?
                      +--rw post-quantum-policy
                      |  +--rw pqc-only-acceptable?   boolean
                      |  +--rw qkd-only-acceptable?   boolean
                      |  +--rw failure-action?        identityref
                      +--rw pqc {pqc}?
                      |  +--rw enable?       boolean
                      |  +--rw algorithm?    string
                      |  +--ro pqc-status?   identityref
                      +--rw qkd {qkd}?
                         +--rw enable?                 boolean
                         +--rw qkd-key-pool-id?        string
                         +--rw key-refresh-interval?   uint32
                         +--ro qkd-status?             identityref                         

          ]]></artwork>
        </figure>    
      
    </section>   

    <section anchor="appendix-b" pn="section-appendix.b" title=" Data Model Examples">
      <section  title="  Configuration of dynamic networking service">
        <t>This example illustrates the configuration for an immediately activated dynamic networking service.
By omitting period-start, activation takes place when the configuration is applied.
The PT2H duration defines a service lifetime of two hours, after which the service is automatically terminated. </t>
        <sourcecode type="xml" markers="false"><![CDATA[ 
<?xml version="1.0" encoding="utf-8"?>
<l3vpn-svc xmlns="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc"
           xmlns:ext="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc-ext"
           xmlns:sch="urn:ietf:params:xml:ns:yang:ietf-schedule">
 <ext:dynamic-l3vpn>
  <ext:max-adjustment-bandwidth-range>ban-prof-01</ext:max-adjustment-bandwidth-range>
  <ext:dynamic-type>dynamic-networking</ext:dynamic-type>
  <ext:connection-provisioning-latency>lat-prof-01</ext:connection-provisioning-latency>
  <ext:networking-schedule>
    <ext:schedule>
      <ext:schedule-id>sch-001</ext:schedule-id>
      <ext:schedule-type>
        <ext:period>
          <ext:period-type>
            <ext:duration>
              <ext:duration>PT2H</ext:duration>
            </ext:duration>
          </ext:period-type>
        </ext:period>
      </ext:schedule-type>
    </ext:schedule>
  </ext:networking-schedule>
</ext:dynamic-l3vpn>

</l3vpn-svc>
]]>
        </sourcecode>


      </section>
      <section  title="Configuration of dynamic bandwidth adjustment service">
        <t>This example illustrates the configuration for a recurring dynamic bandwidth adjustment service.
        The baseline bandwidth is 1 Gbps, and the temporary bursted bandwidth is 2 Gbps.
        Bandwidth is temporarily increased every day from 02:00 to 04:00 UTC, for a total of thirty occurrences.
        </t>
<t>During each window, the service operates at the configured temporary bandwidth values (2 Gbps).
After a window ends, bandwidth automatically reverts to the baseline bandwidth values (1 Gbps).
The recurring activation stops once thirty matching events have taken place. </t>
        <sourcecode type="xml" markers="false"><![CDATA[ 
<?xml version="1.0" encoding="utf-8"?>
<l3vpn-svc xmlns="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc"
           xmlns:ext="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc-ext"
           xmlns:sch="urn:ietf:params:xml:ns:yang:ietf-schedule">
 <ext:dynamic-l3vpn>
  <ext:bandwidth-adjustment-provisioning-latency>lat-prof-02</ext:bandwidth-adjustment-provisioning-latency>
  <ext:temporary-input-bandwidth>2000000</ext:temporary-input-bandwidth>
  <ext:temporary-output-bandwidth>2000000</ext:temporary-output-bandwidth>
  <ext:bandwidth-adjustment-schedule>
    <ext:schedule>
      <ext:schedule-id>sch-002</ext:schedule-id>
      <ext:schedule-type>
        <ext:daily-recurrence>
          <ext:recurrence-first>
            <ext:start-time>2026-11-01T02:00:00Z</ext:start-time>
            <ext:duration>PT2H</ext:duration>
          </ext:recurrence-first>
          <ext:time-zone-identifier>Asia/Shanghai</ext:time-zone-identifier>
          <ext:recurrence-end>
            <ext:count>30</ext:count>
          </ext:recurrence-end>
          <ext:frequency>ext:daily</ext:frequency>
          <ext:interval>1</ext:interval>
        </ext:daily-recurrence>
      </ext:schedule-type>
    </ext:schedule>
  </ext:bandwidth-adjustment-schedule>
</ext:dynamic-l3vpn>

</l3vpn-svc>
]]>
        </sourcecode>  


      </section>

      <section  title="Configuration of security service">
            <section anchor="sec-post-quantum-policy" title="Configuration of post-quantum policy ">
        <t>This section provides illustrative configuration examples for combining the post-quantum policy parameters.
        These policy combinations are illustrative; operators may further constrain allowed policy combinations on their deployment.
 </t>
        <list style="symbols">
          <t>High security strict mode:
Quantum-based security is used only when both PQC and QKD are available.
The service is blocked if either mechanism fails. </t>
        </list>
        <figure>
<artwork align="center">
<![CDATA[
  accept-pqc-only = false
  accept-qkd-only = false
  failure-action  = block-traffic
]]>
</artwork>
</figure>

   <list style="symbols">
      <t>Availability-First Mode: Quantum-based security is enabled if at least one of PQC or QKD is available.
If both become unavailable, the encryption mechanism falls back to conventional cryptography. </t>
   </list>
   <figure>
<artwork align="center">
<![CDATA[
  accept-pqc-only = true
  accept-qkd-only = true
  failure-action  = fallback-classic
]]>
</artwork>
</figure>

   <list style="symbols">
      <t>PQC as baseline, QKD as enhancement: Quantum-based security is allowed when PQC is available (QKD alone is insufficient).
If PQC is unavailable, the encryption  mechanism falls back to conventional cryptography. </t>
   </list>
      <figure>
<artwork align="center">
<![CDATA[
  accept-pqc-only = true
  accept-qkd-only = false
  failure-action  = fallback-classic
]]>
</artwork>
</figure>

   <list style="symbols">
    <t>QKD as baseline, PQC as enhancement: Quantum-based security is allowed when QKD is available (PQC alone is insufficient).
If QKD is unavailable, the encryption  mechanism falls back to conventional cryptography.</t>
   </list>
         <figure>
<artwork align="center">
<![CDATA[
  accept-pqc-only = false
  accept-qkd-only = true
  failure-action  = fallback-classic
]]>
</artwork>
</figure>
     </section>
     <section  title="Configuration of post-quantum service">
  <t>This example illustrates site-level security configuration
for the L3VPN service extension using a customer-specific security profile that
   enables PQC,  QKD  and  conventional encryption capabilities. Key configuration elements are as follows: 
   <list style="symbols">
     <t>A security class with identifier "high-security-flow" is defined
under the customer-profile branch.</t>
     <t>Conventional encryption uses the AES-256-GCM algorithm.</t>
     <t>The post-quantum encryption policy accepts PQC-only availability,
does not accept QKD-only availability, and falls back to
conventional encryption when no post-quantum technology
meets the availability requirements.</t>
     <t>PQC is enabled with the kyber-768 algorithm suite.</t>
     <t>QKD key delivery is enabled, associated with key pool
"qkd-pool-core-01", with a key refresh interval of 3600 seconds.</t>
    </list>
    </t>
  <t>The same encryption profile structure applies to the
site-network-access level security node, differing only in the
augmentation path.</t>
        <sourcecode type="xml" markers="false"><![CDATA[ 
<l3vpn-svc:l3vpn-svc
  xmlns:l3vpn-svc="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc"
  xmlns:l3vpn-svc-ext="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc-ext">
  <l3vpn-svc:sites>
    <l3vpn-svc:site>
      <l3vpn-svc:site-id>site-01</l3vpn-svc:site-id>
      <l3vpn-svc:security>
        <l3vpn-svc-ext:encryption-profile>
          <l3vpn-svc-ext:profile>
            <l3vpn-svc-ext:customer-profile>
              <l3vpn-svc-ext:classes>
                <l3vpn-svc-ext:class>
                  <l3vpn-svc-ext:class-id>high-security-flow</l3vpn-svc-ext:class-id>
                  <l3vpn-svc-ext:algorithm>aes-256-gcm</l3vpn-svc-ext:algorithm>
                  <l3vpn-svc-ext:post-quantum-encryption>
                    <l3vpn-svc-ext:post-quantum-policy>
                      <l3vpn-svc-ext:pqc-only-acceptable>true</l3vpn-svc-ext:pqc-only-acceptable>
                      <l3vpn-svc-ext:qkd-only-acceptable>false</l3vpn-svc-ext:qkd-only-acceptable>
                      <l3vpn-svc-ext:failure-action>l3vpn-svc-ext:fallback-classic</l3vpn-svc-ext:failure-action>
                    </l3vpn-svc-ext:post-quantum-policy>
                    <l3vpn-svc-ext:pqc>
                      <l3vpn-svc-ext:enable>true</l3vpn-svc-ext:enable>
                      <l3vpn-svc-ext:algorithm>kyber-768</l3vpn-svc-ext:algorithm>
                    </l3vpn-svc-ext:pqc>
                    <l3vpn-svc-ext:qkd>
                      <l3vpn-svc-ext:enable>true</l3vpn-svc-ext:enable>
                      <l3vpn-svc-ext:qkd-key-pool-id>qkd-pool-core-01</l3vpn-svc-ext:qkd-key-pool-id>
                      <l3vpn-svc-ext:key-refresh-interval>3600</l3vpn-svc-ext:key-refresh-interval>
                    </l3vpn-svc-ext:qkd>
                  </l3vpn-svc-ext:post-quantum-encryption>
                </l3vpn-svc-ext:class>
              </l3vpn-svc-ext:classes>
            </l3vpn-svc-ext:customer-profile>
          </l3vpn-svc-ext:profile>
        </l3vpn-svc-ext:encryption-profile>
      </l3vpn-svc:security>
    </l3vpn-svc:site>
  </l3vpn-svc:sites>
</l3vpn-svc:l3vpn-svc>
]]>

        </sourcecode>  
        </section>
      </section>
      <section  title="Performance monitoring">
        <t> This section provides an example of site-level end-to-end performance
monitoring configuration and metrics for the L3VPN service extension.
The example includes two performance monitoring sessions to
different remote target sites, illustrating both the standard
provider-defined profile mode and the customized mode.
Key configuration elements are as follows:</t>
         <list style="symbols">
           <t>A monitoring session targeting site "site-02" uses a
standard provider-defined measurement profile, referenced by
the profile identifier "perf-mon-standard-1".</t>
           <t>A monitoring session targeting site "site-03" uses
customized measurement parameters, with a measurement interval
of 30 seconds.</t>
           </list>



<sourcecode type="xml" markers="false"><![CDATA[ 
<l3vpn-svc:l3vpn-svc
  xmlns:l3vpn-svc="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc"
  xmlns:l3vpn-svc-ext="urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc-ext">
  <l3vpn-svc:sites>
    <l3vpn-svc:site>
      <l3vpn-svc:site-id>site-01</l3vpn-svc:site-id>
      <l3vpn-svc-ext:oam>
        <l3vpn-svc-ext:perf-mon>
          <l3vpn-svc-ext:enable>true</l3vpn-svc-ext:enable>
          <l3vpn-svc-ext:monitoring>
            <l3vpn-svc-ext:monitor>
              <l3vpn-svc-ext:target-site-id>site-02</l3vpn-svc-ext:target-site-id>
              <l3vpn-svc-ext:measurement-profile>
                <l3vpn-svc-ext:profile-id>perf-mon-standard-1</l3vpn-svc-ext:profile-id>
              </l3vpn-svc-ext:measurement-profile>
            </l3vpn-svc-ext:monitor>
            <l3vpn-svc-ext:monitor>
              <l3vpn-svc-ext:target-site-id>site-03</l3vpn-svc-ext:target-site-id>
              <l3vpn-svc-ext:measurement-profile>
                <l3vpn-svc-ext:measurement-interval>30</l3vpn-svc-ext:measurement-interval>
              </l3vpn-svc-ext:measurement-profile>
            </l3vpn-svc-ext:monitor>
          </l3vpn-svc-ext:monitoring>
        </l3vpn-svc-ext:perf-mon>
      </l3vpn-svc-ext:oam>
    </l3vpn-svc:site>
  </l3vpn-svc:sites>
</l3vpn-svc:l3vpn-svc>

]]>
        </sourcecode>  
       </section>

    </section>  

  

    <section title="Acknowledgments" numbered="false">
      <t>The authors wish to thank Mingjiang Fu,  Zhenlin Tan, 
        Wenkuan Qu of China Telecom for their contributions to the
   dynamic L3VPN operational experiences.</t>
    </section>


    <section title="Contributors" numbered="false">
      <t>The following authors contributed significantly to this document.</t>    
      <figure>
<artwork>
<![CDATA[ 
Chongfeng Xie 
China Telecom 
Email: xiechf@chinatelecom.cn  ]]>
</artwork>
</figure>
    </section>
  </back>
</rfc>