<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,               
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.             
    There has to be one entity for each item to be referenced.                    
    An alternate method (rfc include) is described in the references.-->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2697 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2697.xml">
<!ENTITY RFC2698 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2698.xml">
<!ENTITY RFC6020 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6020.xml">
]>
<rfc category="std" docName="draft-sun-opsawg-sdwan-service-model-02"
     ipr="trust200902">
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

  <!-- used by XSLT processors -->

  <!-- For a complete list and description of processing instructions (PIs),        
    please see http://xml.resource.org/authoring/README.html. -->

  <!-- Below are generally applicable Processing Instructions (PIs) that
    most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc
    v1.32) -->

  <?rfc strict="yes" ?>

  <!-- give errors regarding ID-nits and DTD validation -->

  <!-- control the table of contents (ToC) -->

  <?rfc toc="yes"?>

  <!-- generate a ToC -->

  <?rfc tocdepth="4"?>

  <?rfc compact="yes" ?>

  <front>
    <title abbrev="SD-WAN Service YANG Model ">A YANG Data Model for SD-WAN
    VPN Service Delivery</title>

    <author fullname="Qiong Sun" initials="Q." surname="Sun">
      <organization>China Telecom</organization>

      <address>
        <postal>
          <street/>

          <city>Beijing</city>

          <country>China</country>
        </postal>

        <email>sunqiong.bri@chinatelecom.cn</email>
      </address>
    </author>

    <author fullname="Honglei Xu" initials="H." surname="Xu">
      <organization>China Telecom</organization>

      <address>
        <postal>
          <street/>

          <city>Beijing</city>

          <country>China</country>
        </postal>

        <email>sunqiong.bri@chinatelecom.cn</email>
      </address>
    </author>

    <author fullname="Bo Wu" initials="B." surname="Wu">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street/>

          <city>Nanjing</city>

          <country>China</country>
        </postal>

        <email>lana.wubo@huawei.com</email>
      </address>
    </author>

    <author fullname="Qin Wu" initials="Q." surname="Wu">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street/>

          <city>Nanjing</city>

          <country>China</country>
        </postal>

        <email>bill.wu@huawei.com</email>
      </address>
    </author>

    <date year="2019"/>

    <workgroup>Operations and Management Area Working Group</workgroup>

    <abstract>
      <t>This document provides a YANG data model for SD-WAN VPN service. A
      SD-WAN VPN service is a service offered by a Service Provider network to
      provide an overlay connectivity between different locations of a
      customer network or between a customer network and an external network,
      such as Internet or Private Cloud network. The model can be utilized by
      an service orchestrator of a Service Provider to initiate a connectivity
      request.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>By comparison with conventional PE-based VPN service defined in <xref
      target="RFC8299"/> and <xref target="RFC8446"/>, the SD-WAN VPN is a
      type of CE-based VPN which uses the Internet or a PE based VPN as
      underlay connectivity service. SD-WAN uses an overlay-based approach to
      provide the flexibility of adding, removing, or moving services without
      dependence of the underlay network.</t>

      <t>Besides being a CE-based overlay service, a SD-WAN VPN Service has
      the following characteristics:</t>

      <t><list style="symbols">
          <t>Hybrid WAN accesses: The CE could connect to variety of Internet
          access, including fiber, cable, DSL-based, WiFi, or 4G/Long Term
          Evolution (LTE) access, which implies wider reachability and shorter
          provisioning cycles. It can also use private VPN connectivity
          defined in [RFC4364] or [RFC4664] to take advantage of better
          performance.</t>

          <t>Policy based traffic forwarding: SD-WAN VPN can provide
          optimizing forwarding from a network scope and deploy service as
          needed. Specifically, it can apply policies to prioritize traffic
          for diverse applications used in enterprises, such as VoIP calling,
          videoconferencing, streaming media etc. depending different business
          needs.</t>

          <t>Centralized service management and orchestration: The CE router
          is usually managed by the provider; in addition, the SP allows
          customers to access the CE for configuration/monitoring purposes, so
          a portal can enable the customer to modify the SD-WAN VPN service
          such as configuring application policies or adding a new site.</t>
        </list></t>

      <t>This draft specifies the SD-WAN VPN service YANG model which is
      modeled from a customer perspective and have been aligned with the
      objects identified in MEF SD-WAN service attributes <xref
      target="MEF70">draft document</xref>. The model parameters can be used
      as a input to automated control and configuration applications to manage
      SD-WAN VPN services.</t>

      <section title="Terminology">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
        document are to be interpreted as described in <xref
        target="RFC2119">RFC2119</xref>.</t>
      </section>

      <section title="Definitions">
        <t>CE Device: Customer Edge Device , as per <xref
        target="RFC4026">Provider Provisioned VPN Terminology</xref> .</t>

        <t>PE Device: Provider Edge Device, as per <xref
        target="RFC4026">Provider Provisioned VPN Terminology</xref></t>

        <t>CE-based VPN: Refers to <xref target="RFC4026">Provider Provisioned
        VPN Terminology</xref></t>

        <t>PE-Based VPNs: Refers to <xref target="RFC4026">Provider
        Provisioned VPN Terminology</xref></t>

        <t>SD-WAN:An automated, programmatic approach to managing enterprise
        network connectivity and circuit usage. It extends software-defined
        networking (SDN) into an application that businesses can use to
        quickly create a smart "hybrid WAN"- a WAN that comprises
        business-grade IP VPN, broadband Internet, and wireless services.
        SD-WAN is also deemed as extended CE-based VPN.</t>

        <t>Underlay network: The network that provides the connectivity among
        SD-WAN VPN sites and that the customer network packets are tunneled
        over. The underlay network does not need to be aware that it is
        carrying overlay customer network packets. Addresses on the underlay
        network appear as "outer addresses" in encapsulated overlay packets.
        In general, the underlay network can use a completely different
        protocol (and address family) from that of the overlay network.</t>

        <t>Overlay network: A virtual network in which the separation of
        customer networks is hidden from the underlying physical
        infrastructure. That is, the underlying transport network does not
        need to know about customer separation to correctly forward traffic.
        IPsec tunnels [RFC6071] is an example of an L3 overlay network.</t>
      </section>
    </section>

    <section title="High Level Overview of SD-WAN VPN Service">
      <t>From a customer perspective, an example of SD-WAN VPN network is
      shown in figure 1.<figure align="center" title="figure 1">
          <artwork>                         +-------------+
    +------------+       |    +---+    |
    | Controller +----+  |    |CN |    |   Legend:Customer Network
    +------------+    |  |    +---+    |
                      |  |      | site3|
                      |  |   +--+--+   |
                      +--|---|CE 4 |   |
                      |  |   +--+--+   |
                      |  +-------------+
                      |         |
                      +------------------- ----+
                      |        -----           |
        +---------------+   /  MPLS   \   +-----------------+
        |             | |  |   WAN     |__|    |            |
        |             | |  /\         /\  \ +--+--+         |
        |             | | /   +-----+   \ |\|CE 1 +-+       |
        | +---+  +----++|/               \|/+--+--+ |  +---+|
        | |CN +--+ CE 3||                 \         +--+CN ||
        | +---+  +-----+|      ------    /|\+--+--+ |  +---+|
        |             | |\   /Internet\ / |/|CE 2 +-+       |
        |             | | --|   WAN    |__/ +--+--+         |
        |       site 2| |    \        /   |  site 1         |
        +---------------+      ------     +-----------------+
                      |           |
                      |    +-------------+
                      |    |   +----+    |
                      +----|---+ CE5|    |
                           |   +----+    |
                           |site 4|      |
                           |      |      |
                           |    +---+    |
                           |    |CN |    |
                           |    +---+    |
                           +-------------+   
                                                </artwork>
        </figure></t>

      <t>As shown in figure 1, the SD-WAN network is composed of a set of
      sites, which are connected through Internet or MPLS VPN.</t>

      <t>Within each site, a CE is connected with customer's network on one
      side, and is also connected to Internet or private WAN or both on the
      other side. The customer networks could be L2 or L3 network. For the WAN
      side, Internet provides ubiquitous IP connectivity via access network
      like Broadband access or LTE access, while MPLS WAN, like conventional
      VPN, provides secure and committed connectivity while attached. The
      demarcation point (i.e., UNI) between the customer and the SP is placed
      between customer nodes and the CE device.</t>

      <t>Additionally, a site could deploy one or more CEs to improve
      availability.</t>

      <t>The establishment of the SD-WAN VPN is done at each CE device, with
      various IP tunneling options (e.g., <xref target="RFC2784">Generic
      Routing Encapsulation (GRE)</xref> , and <xref
      target="RFC6071">IPSec</xref> could be used, and the specific definition
      is out of scope of this document. Either Internet or private WAN is
      regarded as underlay of the tunneling, the communication between
      Customer Network of the four sites, known as the overlay network, is
      agnostic of the underlying network infrastructure within the SP.</t>

      <t>Besides connectivity between the sites, the subset of sites could
      also provide direct Internet connectivity, cloud network connectivity or
      conventional MPLS VPN connectivity.</t>
    </section>

    <section title="Service Data Model Usage">
      <t>The SD-WAN VPN service model provides an abstracted interface to
      request, configure, and manage the components of an SD-WAN VPN service.
      The model is used by a customer to request connectivity and other
      services from an SP.</t>

      <t>A typical usage for this model is as an input to an orchestration
      layer that is responsible for service management. The Metro Ethernet
      Forum (MEF)<xref target="MEF55"/> has developed a LSO(Lifecycle Service
      Orchestration) Reference Architecture and Framework architecture to
      automate network management and operations for service provider with a
      SP's SOF (Service Orchestration Functionality) , which are used for
      orchestrating/automating the lifecycle of end-to-end service. The SD-WAN
      Managed service is one of the services that LSO will support.</t>

      <t><figure align="center"
          title="Reference Architecture for the Use of SD-WAN Service Model Usage">
          <artwork>                 ----------------------------
                | Customer Service Requester |
                 ----------------------------
                              |
                      SD-WAN  |
                      Service |
                      Model   |
                              |
                   -----------------------
                  | Service Orchestration |
                   -----------+-----------
                              |
                              |
                   -----------------------
                  |   SD-WAN  Controller  |
                   -+-------------------+-
                    |                   |
                    |                   |
  ------------------+-------------------+--------------------------

                           /---\
                          /     \
         ++++++++        |  MPLS |          ++++++++
         + CE A +         \  VPN/           + CE B +
         ++++++++          \---/            ++++++++
                           /---\
            Site A        /     \          Site B
                         |Internet
                          \     /
                           \---/
</artwork>
        </figure></t>

      <t>For a SD-WAN VPN to be established under the SP's control, the
      customer informs the Service Provider of which sites should become part
      of the requested VPN VPN and what types of services the VPN will
      provide. And then the SP configures and updates the service base on the
      service model and the available resources derived from the SD-WAN
      controller, and then provisions and manages the customer's VPN through
      the SD-WAN controller. How the SD-WAN controller to control and manage
      the CEs is out of scope of the document.</t>
    </section>

    <section title="Design of the Data Model">
      <!-- overview -->

      <t>The elements of the SD-WAN VPN YANG model in this document have been
      aligned with the objects identified in <xref target="MEF70">MEF SD-WAN
      service attributes</xref>, but with IETF compliant terminology. The
      SD-WAN VPN Services are specified by three major nodes:<list
          style="numbers">
          <t>vpn: Each list node represents an end-to-end connection between
          two or more customer locations, which is an association of
          vpn-endpoints reference to site nodes.</t>

          <t>sites: This list is used to indicate sites that are involved to
          join the SD-WAN VPN service in different geographic locations of a
          customer network.</t>

          <t>vpn-endpoint: The endpoint list is under the vpn list, which
          indicates per site policy parameters pertaining to VPN are
          added.</t>
        </list></t>

      <!-- next section -->

      <section title="SD-WAN VPN">
        <t>The "sdwpn-vpn" list item contains service parameters that apply to
        a SD-WAN VPN, which is further specified by the following ones:<list
            style="symbols">
            <t>The "vpn-id" leaf is under the vpn-service list, which refers
            to an internal reference for this VPN service.</t>

            <t>The "performance-objectives" container refers the
            performance-related properties of a SD-WAN VPN that can be
            measured. System uptime is the only one performance objective
            currently, which indicates the proportion of time, during a given
            time period, that the service is working from the customer
            perspective. Three parameters are defined, including the start
            time of the evaluation, the time interval of the evaluation, and
            the service uptime defined by the percentage.</t>

            <t>The "reserved-ipaddress" container refers to the IP Prefixes
            need to be agreed for Service Provider management purposes, such
            as diagnostics so as to ensure they are not overlapping with IP
            Prefixes used by the customer network.</t>
          </list></t>

        <section title="VPN Endpoint">
          <t>The SD-WAN VPN End Point is the logical point associated with a
          particular site. The two main functions of the endpoint are:<list
              style="symbols">
              <t>The association of a VPN with a Site.</t>

              <t>Per site application based policy can be enforced.</t>
            </list></t>
        </section>

        <section title="Application Classification and Policy Map">
          <t>The model has defined the following components to describe
          application based policy.<list style="symbols">
              <t>"Application flow: an order list for IP packets from site or
              to the site to match. Three parameters are further specified
              which are application ID, application criteria list and
              application group.<list style="symbols">
                  <t>"application-id": is under the vpn-service list, which
                  refers to an internal reference for this application
                  service.</t>

                  <t>"application-criteria": is under the "application list",
                  which describes a set of characteristics of the packet
                  stream that can be identified at the site, including
                  standard layer 2 and layer 3 fields such as addresses,
                  ports, and protocols.</t>
                </list></t>

              <t>"application-group": "app-group-id" refers to an internal
              reference for this application group service, which describes
              the application categories, e.g. VOIP, email, games etc.</t>

              <t>"policy": is a rule list. At present, path selection policy,
              QoS bandwidth policy and Internet local break out policy have
              been defined. A policy can be assigned to an application group
              or an application. <list style="symbols">
                  <t>path selection policies: primary-backup, billing-policy
                  and encription policy can be applied to the application.</t>

                  <t>The "internet-access" container internet access option,
                  which include local break-out for Internet access or
                  alternative route for the traffic.</t>

                  <t>The "qos-bandwidth" policy container is used to describe
                  parameter to guarantee bandwidth for specific traffic
                  flowing through a VPN connection. It has two categories
                  parameters, including traffic rate limit and time for
                  evaluation.</t>
                </list></t>

              <t>"application-group-policy-map": the list specifies the
              mapping of application group names and their associated policy
              names. The policy assignment to application group serves two
              purposes: first, a policy can be applied to all members of the
              application flow group; second, it allows application flows in
              the group to share bandwidth resources.</t>

              <t>"endpoint-policy-map": the policy assignment is under
              "endpoints" list, which specifies the mapping of application
              names and their associated policy names. Each Application Flow
              can have an explicit policy assignment that supersedes the group
              policy.</t>
            </list></t>
        </section>
      </section>

      <section title="Site">
        <t>A site represents a customer office located at a specific location.
        The "sites" container specifies three main parameters:</t>

        <t><list style="symbols">
            <t>"site-id: uniquely identifies the site within the overall
            network infrastructure.</t>

            <t>"lan-accesses": specifies the customer network access link
            parameters. A "site" is composed of at least one "lan-access" and,
            in the case of multihoming, may have multiple links.</t>
          </list></t>

        <t><figure align="center" title="figure 3">
            <artwork align="center">+---------------------------------+
|              site               |
|    |   |            |     |     |
|    |   |            |     |     |
|   LAN1 LAN2         LAN3 LAN4   |
|  +--------+       +--------+    |
|  |        |       |        |    |
|  |Device 1|       |Device 2|    |
|  +--------+       +--------+    |
+---------------------------------+
</artwork>
          </figure></t>

        <t>The "lan-access" consists of the following categories of
        parameters:</t>

        <t><list style="symbols">
            <t>"bearer": defines requirements of the attachment (below Layer
            3), bearer type including Ethernet and etc..</t>

            <t>"device-type": specifies the device type, including physical or
            virtual device.</t>

            <t>IP Connection: defines Layer 3 parameters of the attachment,
            including IPv4 connection parameters and IPv4 connection
            parameters respectively.</t>
          </list></t>
      </section>
    </section>

    <section title=" Modules Tree Structure">
      <t>This document defines sd-wan-vpn yang data model.</t>

      <figure>
        <artwork>module: ietf-sdwan-vpn-svc
  +--rw sdwan-vpn-svc
     +--rw vpn-services
     |  +--rw vpn-service* [vpn-id]
     |     +--rw vpn-id                   svc-id
     |     +--rw performance-objective
     |     |  +--rw start-time?         yang:date-and-time
     |     |  +--rw duration?           string
     |     |  +--rw uptime-objective
     |     |     +--rw duration?   decimal64
     |     +--rw reserved-prefixes
     |     |  +--rw prefix*   inet:ip-prefix
     |     +--rw applications
     |     |  +--rw application* [app-id]
     |     |     +--rw app-id    svc-id
     |     |     +--rw ac* [name]
     |     |        +--rw name                       string
     |     |        +--rw (match-type)?
     |     |           +--:(match-flow)
     |     |           |  +--rw match-flow
     |     |           |     +--rw ethertype?         uint16
     |     |           |     +--rw cvlan?             uint8
     |     |           |     +--rw ipv4-src-prefix?
     |     |           |     |       inet:ipv4-prefix
     |     |           |     +--rw ipv4-dst-prefix?
     |     |           |     |       inet:ipv4-prefix
     |     |           |     +--rw l4-src-port?
     |     |           |     |       inet:port-number
     |     |           |     +--rw l4-dst-port?
     |     |           |     |       inet:port-number
     |     |           |     +--rw ipv6-src-prefix?
     |     |           |     |       inet:ipv6-prefix
     |     |           |     +--rw ipv6-dst-prefix?
     |     |           |     |       inet:ipv6-prefix
     |     |           |     +--rw protocol-field?    union
     |     |           +--:(match-application)
     |     |              +--rw match-application?   identityref
     |     +--rw application-group* [app-group-id]
     |     |  +--rw app-group-id    svc-id
     |     |  +--rw app-id*
     |     |          -&gt; ../../applications/application/app-id
     |     +--rw policy* [policy-id]
     |     |  +--rw policy-id    svc-id
     |     |  +--rw direction?   enumeration
     |     |  +--rw criterias* [pc-name]
     |     |     +--rw pc-name                  string
     |     |     +--rw (policy-type)?
     |     |        +--:(encryption)
     |     |        |  +--rw enable?            boolean
     |     |        +--:(public-private)
     |     |        |  +--rw underlay-values?   enumeration
     |     |        +--:(internet-breakout)
     |     |        |  +--rw internet-policy
     |     |        |     +--rw local-breakout?   boolean
     |     |        |     +--rw alter-route?      boolean
     |     |        +--:(billing-method)
     |     |        |  +--rw billing-values?    enumeration
     |     |        +--:(primary-backup)
     |     |        |  +--rw path-values
     |     |        |     +--rw overlay-values?   enumeration
     |     |        |     +--rw sla-values
     |     |        |        +--rw latency?            uint32
     |     |        |        +--rw jitter?             uint32
     |     |        |        +--rw packet-loss-rate?   uint32
     |     |        +--:(bandwidth)
     |     |           +--rw bandwith-values
     |     |              +--rw commit?   uint32
     |     |              +--rw max?      uint32
     |     |              +--rw time?     uint32
     |     +--rw app-group-policy-map
     |     |  +--rw mapping* [app-group-id]
     |     |     +--rw app-group-id
     |     |     |       -&gt; ../../../application-group/app-group-id
     |     |     +--rw policy-id?      -&gt; ../../../policy/policy-id
     |     +--rw endpoints* [endpoint-id]
     |        +--rw endpoint-id            svc-id
     |        +--rw site-attachment
     |        |  +--rw site-id?
     |        |          -&gt; /sdwan-vpn-svc/sites/site/site-id
     |        +--rw endpoint-policy-map
     |           +--rw app-policy* [app-id]
     |              +--rw app-id       leafref
     |              +--rw policy-id?   leafref
     +--rw sites
        +--rw site* [site-id]
           +--rw site-id        svc-id
           +--rw device-type?   device-type
           +--rw lan-access* [name]
              +--rw name             string
              +--rw l2-technology
              |  +--rw l2-type?              identityref
              |  +--rw untagged-interface
              |  |  +--rw speed?   uint32
              |  |  +--rw mode?    neg-mode
              |  +--rw tagged-interface
              |     +--rw type?                identityref
              |     +--rw dot1q-vlan-tagged
              |        +--rw tg-type?    identityref
              |        +--rw cvlan-id    uint16
              +--rw ip-connection
                 +--rw ipv4
                 |  +--rw address-allocation-type?   identityref
                 |  +--rw dhcp
                 |  |  +--rw primary-subnet
                 |  |  |  +--rw ip-prefix?
                 |  |  |  |       inet:ipv4-prefix
                 |  |  |  +--rw default-router?       inet:ip-address
                 |  |  |  +--rw provider-addresses*
                 |  |  |  |       inet:ipv4-address
                 |  |  |  +--rw subscriber-address?   inet:ip-address
                 |  |  |  +--rw reserved-ip-prefix*   inet:ip-prefix
                 |  |  +--rw secondary-subnet* [ip-prefix]
                 |  |     +--rw ip-prefix
                 |  |     |       inet:ipv4-prefix
                 |  |     +--rw provider-addresses*
                 |  |     |       inet:ipv4-address
                 |  |     +--rw reserved-ip-prefix*
                 |  |             inet:ipv4-prefix
                 |  +--rw static
                 |     +--rw primary-subnet
                 |     |  +--rw ip-prefix?
                 |     |  |       inet:ipv4-prefix
                 |     |  +--rw default-router?       inet:ip-address
                 |     |  +--rw provider-addresses*
                 |     |  |       inet:ipv4-address
                 |     |  +--rw subscriber-address?   inet:ip-address
                 |     |  +--rw reserved-ip-prefix*   inet:ip-prefix
                 |     +--rw secondary-subnet* [ip-prefix]
                 |        +--rw ip-prefix
                 |        |       inet:ipv4-prefix
                 |        +--rw provider-addresses*
                 |        |       inet:ipv4-address
                 |        +--rw reserved-ip-prefix*
                 |                inet:ipv4-prefix
                 +--rw ipv6
                    +--rw address-allocation-type?   identityref
                    +--rw dhcp
                    |  +--rw subnet* [ip-prefix]
                    |     +--rw ip-prefix
                    |     |       inet:ipv6-prefix
                    |     +--rw provider-addresses*
                    |     |       inet:ipv6-address
                    |     +--rw reserved-ip-prefix*
                    |             inet:ipv6-prefix
                    +--rw slaac
                    |  +--rw subnet* [ip-prefix]
                    |     +--rw ip-prefix
                    |     |       inet:ipv6-prefix
                    |     +--rw provider-addresses*
                    |     |       inet:ipv6-address
                    |     +--rw reserved-ip-prefix*
                    |             inet:ipv6-prefix
                    +--rw static
                       +--rw subnet* [ip-prefix]
                       |  +--rw ip-prefix
                       |  |       inet:ipv6-prefix
                       |  +--rw provider-addresses*
                       |  |       inet:ipv6-address
                       |  +--rw reserved-ip-prefix*
                       |          inet:ipv6-prefix
                       +--rw subscriber-address?   inet:ipv6-address
</artwork>
      </figure>
    </section>

    <section title="YANG Modules">
      <t>&lt;CODE BEGINS&gt; file "ietf-sdwan-vpn-svc@2019-03-10.yang"</t>

      <figure>
        <artwork>module ietf-sdwan-vpn-svc {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-sdwan-vpn-svc";
  prefix sdwan-vpn-svc;

  import ietf-inet-types {
    prefix inet;
  }
  import ietf-yang-types {
    prefix yang;
  }

  organization
    "IETF foo Working Group.";
  contact
    "WG List: foo@ietf.org
     Editor:  ";
  description
    "The YANG module defines a generic service configuration
     model for SD-WAN VPN.";

  revision 2019-03-10 {
    description
      "Initial revision";
    reference "A YANG Data Model for SD-WAN VPN.";
  }

  typedef svc-id {
    type string;
    description
      "Type definition for servicer identifier";
  }

  typedef address-family {
    type enumeration {
      enum ipv4 {
        description
          "IPv4 address family.";
      }
      enum ipv6 {
        description
          "IPv6 address family.";
      }
    }
    description
      "Defines a type for the address family.";
  }

  typedef neg-mode {
    type enumeration {
      enum full-duplex {
        description
          "Defining Full duplex mode";
      }
      enum auto-neg {
        description
          "Defining Auto negotiation mode";
      }
    }
    description
      "Defining a type of the negotiation mode";
  }

  typedef device-type {
    type enumeration {
      enum physical {
        description
          "Physical device";
      }
      enum virtual {
        description
          "Virtual device";
      }
    }
    description
      "Defines device types.";
  }

  identity customer-application {
    description
      "Base identity for customer application.";
  }

  identity web {
    base customer-application;
    description
      "Identity for Web application (e.g., HTTP, HTTPS).";
  }

  identity mail {
    base customer-application;
    description
      "Identity for mail application.";
  }

  identity file-transfer {
    base customer-application;
    description
      "Identity for file transfer application (e.g., FTP, SFTP).";
  }

  identity database {
    base customer-application;
    description
      "Identity for database application.";
  }

  identity social {
    base customer-application;
    description
      "Identity for social-network application.";
  }

  identity games {
    base customer-application;
    description
      "Identity for gaming application.";
  }

  identity p2p {
    base customer-application;
    description
      "Identity for peer-to-peer application.";
  }

  identity network-management {
    base customer-application;
    description
      "Identity for management application
       (e.g., Telnet, syslog, SNMP).";
  }

  identity voice {
    base customer-application;
    description
      "Identity for voice application.";
  }

  identity video {
    base customer-application;
    description
      "Identity for video conference application.";
  }

  identity eth-inf-type {
    description
      "Identity of the Ethernet interface type.";
  }

  identity tagged {
    base eth-inf-type;
    description
      "Identity of the tagged interface type.";
  }

  identity untagged {
    base eth-inf-type;
    description
      "Identity of the untagged interface type.";
  }

  identity lag {
    base eth-inf-type;
    description
      "Identity of the LAG interface type.";
  }

  identity tag-type {
    description
      "Base identity from which all tag types
       are derived from";
  }

  identity c-vlan {
    base tag-type;
    description
      "A Customer-VLAN tag, normally using the 0x8100
       Ethertype";
  }

  identity s-vlan {
    base tag-type;
    description
      "A Service-VLAN tag.";
  }

  identity c-s-vlan {
    base tag-type;
    description
      "Using both Customer-VLAN tag and Service-VLAN tag.";
  }

  identity tagged-inf-type {
    description
      "Identity for the tagged
       interface type.";
  }

  identity qinq {
    base tagged-inf-type;
    description
      "Identity for the qinq tagged interface.";
  }

  identity dot1q {
    base tagged-inf-type;
    description
      "Identity for dot1q vlan tagged interface.";
  }

  identity vpn-topology {
    description
      "Base identity for vpn topology.";
  }

  identity any-to-any {
    base vpn-topology;
    description
      "Identity for any-to-any VPN topology.";
  }

  identity hub-spoke {
    base vpn-topology;
    description
      "Identity for Hub-and-Spoke VPN topology.";
  }

  identity site-role {
    description
      "Site Role in a VPN topology ";
  }

  identity any-to-any-role {
    base site-role;
    description
      "Site in an any-to-any IP VPN.";
  }

  identity hub {
    base site-role;
    description
      "Hub Role in Hub-and-Spoke IP VPN.";
  }

  identity spoke {
    base site-role;
    description
      "Spoke Role in Hub-and-Spoke IP VPN.";
  }

  identity access-type {
    description
      "Access type of a site in a connection to a customer network or
       WAN network";
  }

  identity ge {
    base access-type;
    description
      "GE";
  }

  identity ef {
    base access-type;
    description
      "EF";
  }

  identity xge {
    base access-type;
    description
      "XGE";
  }

  identity lte {
    base access-type;
    description
      "LTE";
  }

  identity xdsl-atm {
    base access-type;
    description
      "xDSL(ATM)";
  }

  identity xdsl-ptm {
    base access-type;
    description
      "xDSL(PTM)";
  }

  identity routing-protocol-type {
    description
      "Base identity for routing protocol type.";
  }

  identity ospf {
    base routing-protocol-type;
    description
      "Identity for OSPF protocol type.";
  }

  identity bgp {
    base routing-protocol-type;
    description
      "Identity for BGP protocol type.";
  }

  identity static {
    base routing-protocol-type;
    description
      "Identity for static routing protocol type.";
  }

  identity address-allocation-type {
    description
      "Base identity for address-allocation-type for PE-CE link.";
  }

  identity dhcp {
    base address-allocation-type;
    description
      "Provider network provides DHCP service to customer.";
  }

  identity static-address {
    base address-allocation-type;
    description
      "Provider-to-customer addressing is static.";
  }

  identity slaac {
    base address-allocation-type;
    description
      "Use IPv6 SLAAC.";
  }

  identity ll-only {
    base address-allocation-type;
    description
      "Use IPv6 Link Local.";
  }

  identity traffic-direction {
    description
      "Base identity for traffic direction";
  }

  identity inbound {
    base traffic-direction;
    description
      "Identity for inbound";
  }

  identity outbound {
    base traffic-direction;
    description
      "Identity for outbound";
  }

  identity both {
    base traffic-direction;
    description
      "Identity for both";
  }

  identity traffic-action {
    description
      "Base identity for traffic action";
  }

  identity permit {
    base traffic-action;
    description
      "Identity for permit action";
  }

  identity deny {
    base traffic-action;
    description
      "Identity for deny action";
  }

  identity bd-limit-type {
    description
      "base identity for bd limit type";
  }

  identity percent {
    base bd-limit-type;
    description
      "Identity for percent";
  }

  identity value {
    base bd-limit-type;
    description
      "Identity for value";
  }

  identity protocol-type {
    description
      "Base identity for protocol field type.";
  }

  identity tcp {
    base protocol-type;
    description
      "TCP protocol type.";
  }

  identity udp {
    base protocol-type;
    description
      "UDP protocol type.";
  }

  identity icmp {
    base protocol-type;
    description
      "ICMP protocol type.";
  }

  identity icmp6 {
    base protocol-type;
    description
      "ICMPv6 protocol type.";
  }

  identity gre {
    base protocol-type;
    description
      "GRE protocol type.";
  }

  identity ipip {
    base protocol-type;
    description
      "IP-in-IP protocol type.";
  }

  identity hop-by-hop {
    base protocol-type;
    description
      "Hop-by-Hop IPv6 header type.";
  }

  identity routing {
    base protocol-type;
    description
      "Routing IPv6 header type.";
  }

  identity esp {
    base protocol-type;
    description
      "ESP header type.";
  }

  identity ah {
    base protocol-type;
    description
      "AH header type.";
  }

  grouping vpn-endpoint {
    leaf endpoint-id {
      type svc-id;
      description
        "Identity for the vpn endpoint";
    }
    container site-attachment {
      leaf site-id {
        type leafref {
          path "/sdwan-vpn-svc/sites/site/site-id";
        }
        description
          "Defines site id attached.";
      }
      description
        "Defines site attachment to a vpn endpoint.";
    }
    container endpoint-policy-map {
      list app-policy {
        key "app-id";
        leaf app-id {
          type leafref {
            path "/sdwan-vpn-svc/vpn-services/vpn-service/applications/application/app-id";
          }
          description
            "Identity for application";
        }
        leaf policy-id {
          type leafref {
            path "/sdwan-vpn-svc/vpn-services/vpn-service/policy/policy-id";
          }
          description
            "Identity for value";
        }
        description
          "list for application policy";
      }
      description
        "Identity for policy maps";
    }
    description
      "grouping for vpn endpoint";
  }

  grouping flow-definition {
    container match-flow {
      leaf ethertype {
        type uint16;
        description
          "Ethertype value, e.g. 0800 for IPv4.";
      }
      leaf cvlan {
        type uint8 {
          range "0..7";
        }
        description
          "802.1Q matching.";
      }
      leaf ipv4-src-prefix {
        type inet:ipv4-prefix;
        description
          "Match on IPv4 src address.";
      }
      leaf ipv4-dst-prefix {
        type inet:ipv4-prefix;
        description
          "Match on IPv4 dst address.";
      }
      leaf l4-src-port {
        type inet:port-number;
        description
          "Match on Layer 4 src port.";
      }
      leaf l4-dst-port {
        type inet:port-number;
        description
          "Match on Layer 4 dst port.";
      }
      leaf ipv6-src-prefix {
        type inet:ipv6-prefix;
        description
          "Match on IPv6 src address.";
      }
      leaf ipv6-dst-prefix {
        type inet:ipv6-prefix;
        description
          "Match on IPv6 dst address.";
      }
      leaf protocol-field {
        type union {
          type uint8;
          type identityref {
            base protocol-type;
          }
        }
        description
          "Match on IPv4 protocol or IPv6 Next Header field.";
      }
      description
        "Describes flow-matching criteria.";
    }
    description
      "groupin flow definition.";
  }

  grouping application-criteria {
    list ac {
      key "name";
      ordered-by user;
      leaf name {
        type string;
        description
          "A description identifying qos classification
           policy rule.";
      }
      choice match-type {
        default "match-flow";
        case match-flow {
          uses flow-definition;
        }
        case match-application {
          leaf match-application {
            type identityref {
              base customer-application;
            }
            description
              "Defines the application to match.";
          }
        }
        description
          "Choice for classification.";
      }
      description
        "List of marking rules.";
    }
    description
      "This grouping defines QoS parameters for a site.";
  }

  grouping vpn-service {
    leaf vpn-id {
      type svc-id;
      description
        "Identity for VPN.";
    }
    container performance-objective {
      leaf start-time {
        type yang:date-and-time;
        description
          "start-time indicats date and time.";
      }
      leaf duration {
        type string;
        description
          "Time duration.";
      }
      container uptime-objective {
        leaf duration {
          type decimal64 {
            fraction-digits 5;
            range "0..100";
          }
          units "percent";
          description
            "To be used to define the a percentage of the available
             service.";
        }
        description
          "Uptime objective.";
      }
      description
        "The performance objective.";
    }
    container reserved-prefixes {
      leaf-list prefix {
        type inet:ip-prefix;
        description
          "ip prefix reserved for SP managment purpose.";
      }
      description
        "ip prefix list reserved for SP managment purpose.";
    }
    container applications {
      list application {
        key "app-id";
        leaf app-id {
          type svc-id;
          description
            "application name";
        }
        uses application-criteria;
        description
          "list for application";
      }
      description
        "container for application";
    }
    list application-group {
      key "app-group-id";
      leaf app-group-id {
        type svc-id;
        description
          "application name";
      }
      leaf-list app-id {
        type leafref {
          path "../../applications/application/app-id";
        }
        description
          "application member list in an application group";
      }
      description
        "list for application group";
    }
    list policy {
      key "policy-id";
      leaf policy-id {
        type svc-id;
        description
          "Policy names";
      }
      leaf direction {
        type enumeration {
          enum inbound {
            description
              "specify the wan-to-site direction to which the policy
               criteria is applied";
          }
          enum oubound {
            description
              "specify the site-to-wan direction to which the policy
               criteria is applied";
          }
          enum both {
            description
              "specify both the site-to-wan or wan-to-site direction to
               which the policy criteria is applied";
          }
        }
        description
          "Traffic direction";
      }
      list criterias {
        key "pc-name";
        leaf pc-name {
          type string;
          description
            "Policy criteria name";
        }
        choice policy-type {
          case encryption {
            leaf enable {
              type boolean;
              description
                "yes,no.";
            }
            description
              "TVC encrypted or not.";
          }
          case public-private {
            leaf underlay-values {
              type enumeration {
                enum private-only {
                  description
                    "The private WAN underlay is specified.";
                }
                enum public-only {
                  description
                    "The public WAN underlay is specified.";
                }
                enum either {
                  description
                    "Both public WAN or private WAN could be used";
                }
              }
              description
                "yes,no,either.";
            }
            description
              "public-private.";
          }
          case internet-breakout {
            container internet-policy {
              leaf local-breakout {
                type boolean;
                description
                  "indicates whether the Application Flow should be
                   routed directly to the Internet using Local Internet
                   Breakout.It can have values Yes and No.";
              }
              leaf alter-route {
                type boolean;
                description
                  "whether an alternate route to the Internet can be
                   used.";
              }
              description
                "lib,alt.";
            }
            description
              "lib,alt.";
          }
          case billing-method {
            leaf billing-values {
              type enumeration {
                enum flat-only {
                  description
                    "Only flat-rate underlay could be used for the 
                    traffic.";
                }
                enum either {
                  description
                    "Either flat-rate or usage based underlay could be 
                    used for the traffic.";
                }
              }
              description
                "billing policy.";
            }
          }
          case primary-backup {
            container path-values {
              leaf overlay-values {
                type enumeration {
                  enum primary {
                    description
                      "Only the primary tunnel overlay could be used for
                       the traffic.";
                  }
                  enum either {
                    description
                      "Either the primary or backup overlay tunnel could 
                       be used for the traffic.";
                  }
                }
                description
                  "overlay connection as Primary or both Primary and
                   Backup.";
              }
              container sla-values {
                leaf latency {
                  type uint32;
                  description
                    "latency";
                }
                leaf jitter {
                  type uint32;
                  description
                    "jitter";
                }
                leaf packet-loss-rate {
                  type uint32;
                  description
                    "packet loss rate";
                }
                description
                  "traffic sla";
              }
              description
                "path values";
            }
            description
              "primary-backup policy";
          }
          case bandwidth {
            container bandwith-values {
              leaf commit {
                type uint32;
                description
                  "CIR";
              }
              leaf max {
                type uint32;
                description
                  "max speed ";
              }
              leaf time {
                type uint32;
                description
                  "the averaging period (in milliseconds) for
                   determining the information rates ";
              }
              description
                "Container for value";
            }
            description
              "case for bandwidth policy.";
          }
          description
            "Choice for policy criteria.";
        }
        description
          "List for pc criteria";
      }
      description
        "List for policy";
    }
    container app-group-policy-map {
      list mapping {
        key "app-group-id";
        leaf app-group-id {
          type leafref {
            path "../../../application-group/app-group-id";
          }
          description
            "List for policy";
        }
        leaf policy-id {
          type leafref {
            path "../../../policy/policy-id";
          }
          description
            "policy reference";
        }
        description
          "List for policy mapping";
      }
      description
        "container for policy mapping ";
    }
    list endpoints {
      key "endpoint-id";
      uses vpn-endpoint;
      description
        "List of endpoints.";
    }
    description
      "List of vpn service";
  }

  grouping site-l2-technology {
    container l2-technology {
      leaf l2-type {
        type identityref {
          base eth-inf-type;
        }
        default "untagged";
        description
          "Defines physical properties of an interface. By default, the
            Ethernet interface type is set to &rsquo;untagged&rsquo;.";
      }
      container untagged-interface {
        leaf speed {
          type uint32;
          units "mbps";
          default "10";
          description
            "Port speed.";
        }
        leaf mode {
          type neg-mode;
          default "auto-neg";
          description
            "Negotiation mode.";
        }
        description
          "Container of Untagged Interface Attributes
           configurations.";
      }
      container tagged-interface {
        leaf type {
          type identityref {
            base tagged-inf-type;
          }
          default "dot1q";
          description
            "Tagged interface type. By default,
             the Tagged interface type is dot1q interface. ";
        }
        container dot1q-vlan-tagged {
          leaf tg-type {
            type identityref {
              base tag-type;
            }
            default "c-vlan";
            description
              "TAG type.By default, Tag type is Customer-VLAN tag.";
          }
          leaf cvlan-id {
            type uint16;
            mandatory true;
            description
              "VLAN identifier.";
          }
          description
            "Tagged interface.";
        }
        description
          "Container for tagged Interface.";
      }
      description
        "Container for l2 technology.";
    }
    description
      "grouping for l2 technology.";
  }

  grouping site-ip-connection {
    container ip-connection {
      container ipv4 {
        leaf address-allocation-type {
          type identityref {
            base address-allocation-type;
          }
          description
            "Defines how addresses are allocated.
             If there is no value for address
             allocation type, then the ipv4 is not enabled.";
        }
        container dhcp {
          container primary-subnet {
            leaf ip-prefix {
              type inet:ipv4-prefix;
              description
                "IPv4 address prefix and mask length between 0 and 31,
                 in bits.";
            }
            leaf default-router {
              type inet:ip-address;
              description
                "Address of default router.";
            }
            leaf-list provider-addresses {
              type inet:ipv4-address;
              description
                "the Service Provider IPv4 Addresses MUST be within the
                 specified IPv4 Prefix.";
            }
            leaf subscriber-address {
              type inet:ip-address;
              description
                "subscriber IPv4 Addresses: Non-empty list
                 of IPv4 addresses";
            }
            leaf-list reserved-ip-prefix {
              type inet:ip-prefix;
              description
                "List of IPv4 Prefixes, possibly empty";
            }
            description
              "Primary Subnet List";
          }
          list secondary-subnet {
            key "ip-prefix";
            leaf ip-prefix {
              type inet:ipv4-prefix;
              description
                "IPv4 address prefix and mask length between 0 and 31,
                 in bits";
            }
            leaf-list provider-addresses {
              type inet:ipv4-address;
              description
                "Service Provider IPv4 Addresses: Non-empty list
                 of IPv4 addresses";
            }
            leaf-list reserved-ip-prefix {
              type inet:ipv4-prefix;
              description
                "List of IPv4 Prefixes, possibly empty";
            }
            description
              "Secondary Subnet List";
          }
          description
            "DHCP allocated addresses related parameters.";
        }
        container static {
          container primary-subnet {
            leaf ip-prefix {
              type inet:ipv4-prefix;
              description
                "IPv4 address prefix and mask length between 0 and 31,
                 in bits.";
            }
            leaf default-router {
              type inet:ip-address;
              description
                "Address of default router.";
            }
            leaf-list provider-addresses {
              type inet:ipv4-address;
              description
                "the Service Provider IPv4 Addresses MUST be within the
                 specified IPv4 Prefix.";
            }
            leaf subscriber-address {
              type inet:ip-address;
              description
                "subscriber IPv4 Addresses: Non-empty list
                 of IPv4 addresses";
            }
            leaf-list reserved-ip-prefix {
              type inet:ip-prefix;
              description
                "List of IPv4 Prefixes, possibly empty";
            }
            description
              "Primary Subnet List";
          }
          list secondary-subnet {
            key "ip-prefix";
            leaf ip-prefix {
              type inet:ipv4-prefix;
              description
                "IPv4 address prefix and mask length between 0 and 31,
                 in bits";
            }
            leaf-list provider-addresses {
              type inet:ipv4-address;
              description
                "Service Provider IPv4 Addresses: Non-empty list
                 of IPv4 addresses";
            }
            leaf-list reserved-ip-prefix {
              type inet:ipv4-prefix;
              description
                "List of IPv4 Prefixes, possibly empty";
            }
            description
              "Secondary Subnet List";
          }
          description
            "Static configuration related parameters.";
        }
        description
          "IPv4-specific parameters.";
      }
      container ipv6 {
        leaf address-allocation-type {
          type identityref {
            base address-allocation-type;
          }
          description
            "Defines how addresses are allocated.
             If there is no value for address
             allocation type, then the ipv6 is not enabled.";
        }
        container dhcp {
          list subnet {
            key "ip-prefix";
            leaf ip-prefix {
              type inet:ipv6-prefix;
              description
                "IPv6 address prefix and prefix length between 0 and
                 128";
            }
            leaf-list provider-addresses {
              type inet:ipv6-address;
              description
                "Non-empty list of IPv6 addresses";
            }
            leaf-list reserved-ip-prefix {
              type inet:ipv6-prefix;
              description
                "List of IPv6 Prefixes, possibly empty";
            }
            description
              "Subnet List";
          }
          description
            "DHCP allocated addresses related parameters.";
        }
        container slaac {
          list subnet {
            key "ip-prefix";
            leaf ip-prefix {
              type inet:ipv6-prefix;
              description
                "IPv6 address prefix and prefix length of 64 ";
            }
            leaf-list provider-addresses {
              type inet:ipv6-address;
              description
                "Non-empty list of IPv6 addresses";
            }
            leaf-list reserved-ip-prefix {
              type inet:ipv6-prefix;
              description
                "List of IPv6 Prefixes, possibly empty";
            }
            description
              "Subnet List";
          }
          description
            "DHCP allocated addresses related parameters.";
        }
        container static {
          list subnet {
            key "ip-prefix";
            leaf ip-prefix {
              type inet:ipv6-prefix;
              description
                "IPv6 address prefix and prefix length between 0 and
                 128";
            }
            leaf-list provider-addresses {
              type inet:ipv6-address;
              description
                "Non-empty list of IPv6 addresses";
            }
            leaf-list reserved-ip-prefix {
              type inet:ipv6-prefix;
              description
                "List of IPv6 Prefixes, possibly empty";
            }
            description
              "Subnet List";
          }
          leaf subscriber-address {
            type inet:ipv6-address;
            description
              "IPv6 address or Not Specified.";
          }
          description
            "Static configuration related parameters.";
        }
        description
          "Describes IPv6 addresses used.";
      }
      description
        "IPv6-specific parameters.";
    }
    description
      "This grouping defines IP connection parameters.";
  }

  container sdwan-vpn-svc {
    container vpn-services {
      list vpn-service {
        key "vpn-id";
        uses vpn-service;
        description
          "List for SD-WAN";
      }
      description
        "Container for SD-WAN VPN service";
    }
    container sites {
      list site {
        key "site-id";
        leaf site-id {
          type svc-id;
          description
            "Site Name";
        }
        leaf device-type {
          type device-type;
          description
            "device type";
        }
        list lan-access {
          key "name";
          leaf name {
            type string;
            description
              "lan access link name";
          }
          uses site-l2-technology;
          uses site-ip-connection;
          description
            "container for lan access";
        }
        description
          "List for site";
      }
      description
        "Container for sites";
    }
    description
      "Top-level container for the VPN services.";
  }
}</artwork>
      </figure>

      <t>&lt;CODE ENDS&gt;</t>
    </section>

    <section title="Security Considerations">
      <t>The YANG module specified in this document defines a schema for data
      that is designed to be accessed via network management protocols such as
      NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the
      secure transport layer, and the mandatory-to-implement secure transport
      is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and
      the mandatory-to-implement secure transport is TLS [RFC5246].</t>

      <t>The NETCONF access control model [RFC6536]provides the means to
      restrict access for particular NETCONF or RESTCONF users to a
      preconfigured subset of all available NETCONF or RESTCONF protocol
      operations and content.</t>

      <t>There are a number of data nodes defined in this YANG module that are
      writable/creatable/deletable (i.e., config true, which is the default).
      These data nodes may be considered sensitive or vulnerable in some
      network environments. Write operations (e.g., edit-config) to these data
      nodes without proper protection can have a negative effect on network
      operations. These are the subtrees and data nodes and their
      sensitivity/vulnerability.</t>
    </section>

    <section title="IANA Considerations">
      <t>IANA has assigned a new URI from the "IETF XML Registry"
      [RFC3688].</t>

      <figure>
        <artwork>             URI: urn:ietf:params:xml:ns:yang:ietf-sdwan-vpn-svc
             Registrant Contact: The IESG
             XML: N/A; the requested URI is an XML namespace.</artwork>
      </figure>

      <t>IANA has recorded a YANG module name in the "YANG Module Names"
      registry [RFC6020] as follows:</t>

      <figure>
        <artwork>           Name: ietf-sdwan-vpn-svc
           Namespace: urn:ietf:params:xml:ns:yang:ietf-sdwan-vpn-svc
           Prefix: sdwan-svc
           Reference: RFC xxxx</artwork>
      </figure>
    </section>

    <section title="Appendix 1: MEF SD-WAN Service Attributes Terminology Mapping">
      <t>The below table shows the terminology mapping. Besides the
      difference, the MEF defines the service attribute of the UNI or SWVC
      object in a parallel approach. However, in order to reflect the
      relevance of the parameters, the YANG model retains the parameter name
      but adjusts some of the structure. Additionally, in order to preserve
      the space for future augmentation, the model defines "lan-access" as a
      list, which can also accommodate the case where the current MEF service
      attribute restricts only one LAN access.<figure>
          <artwork> +----------------------------+----------------------------------+
 | IETF SD-WAN Service model  | MEF70 SD-WAN Services Term       |
 +----------------------------+----------------------------------+
 | SD-WAN VPN                 | SD-WAN Virtual Connection (SWVC) |
 +----------------------------+----------------------------------+
 | SD-WAN VPN Endpoint        | SWVC End Point                   |
 +----------------------------+----------------------------------+
 | Site                       | User Network Interface(UNI)      |
 +----------------------------+----------------------------------+
 | lan access                 | UNI Service Attributes           |
 +----------------------------+----------------------------------+</artwork>
        </figure></t>
    </section>

    <section title="Appendix 2: Site Augmentation and Policy Augmentation">
      <t>In some cases, a customer needs to have a whole view of site network
      connection which not only includes customer network but also includes
      WAN connectivity.</t>

      <section title="Site Augmentation">
        <t>A Site node could be augmentated with WAN access list to show the
        underlay network information.</t>

        <t><figure>
            <artwork>+---------------------------------+
|              site               |
|    |   |            |     |     |
|    |   |            |     |     |
|   LAN1 LAN2         LAN3 LAN4   |
|  +--------+       +--------+    |
|  |        |       |        |    |
|  |Device 1|       |Device 2|    |
|  +---+----+       +----+---+    |
|  WAN |   \         /   | WAN    |
|      |    \       /    |        |
+------+-----------------+--------+
       |      \   /      |
       |       \ /       |
     -----      /\     -----
   /        \  /  \  /        \
  | MPLS VPN |-    -| Internet |
   \        /        \        /
     -----              ----- </artwork>
          </figure></t>

        <t/>
      </section>

      <section title="Path Selection Policy Augmentation">
        <t>For the traffic specified by the flow classification rule, traffic
        SLA profile related status will be collected and based on the
        measurement result calculated from the collected information, primary
        path or secondary path will be selected.<figure>
            <artwork> +--:(primary-backup)
      +--rw path-values
         +--rw overlay-values?   enumeration
         +--rw sla-values
            +--rw latency?            uint32
            +--rw jitter?             uint32
            +--rw packet-loss-rate?   uint32</artwork>
          </figure></t>
      </section>
    </section>

    <section title="Acknowledgments">
      <t>This work has benefited from the discussions of xxxx.</t>
    </section>

    <section title="Contributors">
      <t>The authors would like to thank Zitao Wang and Qin Wu for their major
      contributions to the initial modeling.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629;
        here (as shown)
    2. simply use a PI
        "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds:
          include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")
    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included
    files in the same directory as the including file. You can also define
    the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be
    either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.8299'?>

      <?rfc include='reference.RFC.4026'?>

      <?rfc include='reference.RFC.4364'?>

      <?rfc include='reference.RFC.4664'?>

      <?rfc include='reference.RFC.6071'?>

      <?rfc include='reference.RFC.6020'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.rosen-bess-secure-l3vpn'?>

      <?rfc include='reference.I-D.carrel-ipsecme-controller-ike'?>

      <?rfc include='reference.RFC.4110'?>

      <?rfc include='reference.RFC.7364'?>

      <?rfc include='reference.RFC.8446'?>

      <?rfc include='reference.RFC.2784'?>

      <reference anchor="MEF55">
        <front>
          <title>Lifecycle Service Orchestration (LSO): Reference Architecture
          and Framework</title>

          <author fullname="MEF" role="editor"/>

          <date/>
        </front>
      </reference>

      <reference anchor="MEF70">
        <front>
          <title>SD-WAN Service Attributes and Service Description</title>

          <author fullname="MEF" role="editor"/>

          <date/>
        </front>
      </reference>
    </references>

    <!-- Change Log
v00 2018-06-17  SS    Initial version
    -->
  </back>
</rfc>
