<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.24 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-boro-opsawg-ntw-attachment-circuit-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="A YANG Network Model for ACs">A Network YANG Data Model for Attachment Circuits</title>
    <seriesInfo name="Internet-Draft" value="draft-boro-opsawg-ntw-attachment-circuit-01"/>
    <author fullname="Mohamed Boucadair" role="editor">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Richard Roberts">
      <organization>Juniper</organization>
      <address>
        <email>rroberts@juniper.net</email>
      </address>
    </author>
    <author fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author fullname="Samier Barguil Giraldo">
      <organization>Nokia</organization>
      <address>
        <email>samier.barguil_giraldo@nokia.com</email>
      </address>
    </author>
    <author fullname="Bo Wu">
      <organization>Huawei Technologies</organization>
      <address>
        <email>lana.wubo@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="01"/>
    <area>Operations and Management</area>
    <workgroup>Operations and Management Area Working Group</workgroup>
    <keyword>Slice Service</keyword>
    <keyword>L3VPN</keyword>
    <keyword>L2VPN</keyword>
    <abstract>
      <t>This document specifies a network model for attachment circuits. The model can be used for the provisioning of attachment circuits prior or during service provisioning (e.g., Network Slice Service). A companion service model is specified in <xref target="I-D.boro-opsawg-teas-attachment-circuit"/>.</t>
      <t>The module augments the Service Attachment Point (SAP) model with the detailed information for the provisioning of attachment circuits in Provider Edges (PEs).</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Operations and Management Area Working Group Working Group mailing list (opsawg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/opsawg/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/boucadair/network-attachment-circuits"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The procedure to provision a service in a service provider network may depend on the practices adopted by a service provider, including the flow put in place for the provisioning of advanced network services and how they are bound to an attachment circuit. For example, the same attachment circuit may be used to host multiple services. In order to avoid service interference and redundant information in various locations, a service provider may expose an interface to manage ACs network-wide. Customers can then request a base attachment circuit to be put in place, and then refer to that base AC when requesting services that are bound to that AC. <xref target="I-D.boro-opsawg-teas-attachment-circuit"/> specifies a data model for managing ACs as a service.</t>
      <t>This document specifies a network model for attachment circuits ("ietf-ac-ntw"). The model can be used for the provisioning of attachment circuits prior or during service provisioning (e.g., Network Slice Service).</t>
      <t>The document leverages <xref target="RFC9182"/> and <xref target="RFC9291"/> by adopting an AC provisioning structure that uses data nodes that are defined in these RFCs. Some refinements were introduced to cover, not only conventional service provider networks, but also specifics of other target deployments (cloud, for example).</t>
      <t>The AC network model is designed as an augmnetation to the Service Attachment Point (SAP) model <xref target="I-D.ietf-opsawg-sap"/>. An AC can be bound to a single or multiple SAPs. Likewise, the model is designed to accomdate deployments where a SAP can be bound to one or multiple ACs.</t>
      <figure anchor="sap-ac-ntw">
        <name>Attachment Circuits Examples</name>
        <artwork align="center"><![CDATA[
                    .---.
                    |CE6|
                    '-+-'
                   ac |        .---.        .---.        .---.
                    .-+-.      |CE5+--------+   +--------+CE2|
               .----+   +---.  '---'        '-+-'       '---'
               |    '-+-'   |                 |ac
               |            |                 |
             .-+-.       .-+-.              .-+-.
           .-+sap+-------+sap+-.          .-+sap+-------------.
           | '---'       '---' |          | '---'             |
.---.    .-+-.                 |          |                   |
|CE1+----+sap|      PE1        |          |         PE2       |
'---' ac '-+-'                 |          |                   |
           '-------------------'          '-------------------'

           .-------------------.          .-------------------.
           |                   |          |                 .-+-. ac .---.
           |         PE3       |          |        PE4      |sap+----+CE5|
           |                   |          |                 '---'    '---'
           |             .---. |          | .---. .---. .---. |
           '-------------+sap+-'          '-+sap+-+sap+-+sap+-'
                         '-+-'              '-+-' '-+-' '-+-'
                           |ac                |     |ac   |ac
                         .-+-.                |   .-+-.   |
                         |CE3+--------ac------'   |CE4+---'
                         '---'                    '---'
]]></artwork>
      </figure>
      <t>The AC network model uses the AC common model defined in <xref target="I-D.boro-opsawg-teas-attachment-circuit"/>.</t>
      <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in <xref target="RFC8342"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>The reader should be familiar with the terms defined in <xref section="2" sectionFormat="of" target="I-D.ietf-opsawg-sap"/>.</t>
      <t>This document uses the term "network model" as defined in <xref section="2.1" sectionFormat="of" target="RFC8969"/>.</t>
      <t>The meanings of the symbols in the YANG tree diagrams are defined in <xref target="RFC8340"/>.</t>
      <t>This document uses the following terms:</t>
      <dl>
        <dt>Bearer:</dt>
        <dd>
          <t>A physical or logical link that connects a customer node (or site) to a provider network. A bearer can be a wireless or wired link. One or multiple technologies can be used to build a bearer. The bearer type can be specified by a customer.</t>
        </dd>
        <dt/>
        <dd>
          <t>The operator allocates a unique bearer reference to identify a bearer within its network (e.g., customer line identifier). Such a reference can be retrieved by a customer and used in subsequent service placement requests to unambiguously identify where a service is to be bound.</t>
        </dd>
        <dt/>
        <dd>
          <t>The concept of bearer can be generalized to refer to the required underlying connection for the provisioning of an attachment circuit. One or multiple attachment circuits may be hosted over the same bearer (e.g., multiple VLANs on the same bearer that is provided by a physical link).</t>
        </dd>
        <dt>Network controller:</dt>
        <dd>
          <t>Denotes a functional entity responsible for the management of the service provider network.</t>
        </dd>
        <dt>Service orchestrator:</dt>
        <dd>
          <t>Refers to a functional entity that interacts with the customer of a network service. The service orchestrator is typically responsible for the attachment circuits, the Provider Edge (PE) selection, and requesting the activation of the requested service to a network controller.</t>
        </dd>
        <dt>Service provider network:</dt>
        <dd>
          <t>A network that is able to provide network services (e.g., Network Slice Services).</t>
        </dd>
        <dt>Service provider:</dt>
        <dd>
          <t>A service provider that offers network services (e.g., Network Slice Services).</t>
        </dd>
        <dt>Customer Terminating Point (CTP):</dt>
        <dd>
          <t>Refers to a customer-owned endpoint that terminates an attachment circuit. Such an endpoint can be a Customer Edge (CE), a Network Function (NF), a peer ASBR, etc.</t>
        </dd>
      </dl>
    </section>
    <section anchor="sample-uses-of-the-attachment-circuit-data-models">
      <name>Sample Uses of the Attachment Circuit Data Models</name>
      <t><xref target="_u-ex"/> shows the positioning of the AC network model in the overall service delivery process.</t>
      <figure anchor="_u-ex">
        <name>An Example of the Network AC Model Usage</name>
        <artwork align="center"><![CDATA[
                          +---------------+
                          |   Customer    |
                          +-------+-------+
          Customer Service Model  |
        e.g., slice-svc, ac-svc   |
                          +-------+-------+
                          |    Service    |
                          | Orchestration |
                          +-------+-------+
           Network Model          |
     e.g., l3vpn-ntw, sap, ac-ntw |
                          +-------+-------+
                          |   Network     |
                          | Orchestration |
                          +-------+-------+
    Network Configuration Model   |
                      +-----------+-----------+
                      |                       |
             +--------+------+       +--------+------+
             |    Domain     |       |     Domain    |
             | Orchestration |       | Orchestration |
             +---+-----------+       +--------+------+
  Device         |        |                   |
  Configuration  |        |                   |
  Model          |        |                   |
            +----+----+   |                   |
            | Config  |   |                   |
            | Manager |   |                   |
            +----+----+   |                   |
                 |        |                   |
                 | NETCONF/CLI..................
                 | NETCONF/CLI..................
                 |        |                   |
               +--------------------------------+
 +----+ Bearer |                                | Bearer +----+
 |CTP +--------+            Network             +--------+ CTP|
 +----+        |                                |        +----+
               +--------------------------------+
  Site A                                                  Site B
]]></artwork>
      </figure>
    </section>
    <section anchor="description-of-the-attachment-circuit-yang-module">
      <name>Description of the Attachment Circuit YANG Module</name>
      <section anchor="overall-structure-of-the-module">
        <name>Overall Structure of the Module</name>
        <t>The overall tree structure of the module is shown in <xref target="o-ntw-tree"/>. A node can host one or more SAPs as per <xref target="I-D.ietf-opsawg-sap"/>. Each SAP terminate one or multiple ACs. The SAP model in <xref target="I-D.ietf-opsawg-sap"/> is thus augmented with required AC-related information. Also, in order to ease the correlation between the AC exposed at the service layer and the one that is actually provisioned in the network operation, a reference to the AC exposed to the customer  ('ac-ref') is stored in the 'ac-ntw' module.</t>
        <t>Unlike the AC service model, an AC is uniquely identified within the scope of a node not a network. An AC can be characterized using Layer 2 connectivity, Layer 3 connectivity, routing protocols, OAM, and security considerations. In order to factorize a set of data that is provisioned for a set of ACs, a set of profiled can be defined at the network level, and then called under the node level. The information contained in the profile are thus inherited, unless the corresponding data node is refined at the AC level. In such as case, the value provided at the AC level takes precedence over the global one.</t>
        <figure anchor="o-ntw-tree">
          <name>Overall Tree Structure</name>
          <artwork><![CDATA[
  augment /nw:networks/nw:network:
    +--rw ac-profile* [name]
       ...
  augment /nw:networks/nw:network/nw:node/sap:service/sap:sap:
    +--rw ac* [name]
       +--rw name                 string
       +--rw ac-ref?              ac-svc:attachment-circuit-reference
       +--rw ac-profile* [profile-id]
       |  +--rw profile-id    -> /nw:networks/network/ac-profile/name
       +--rw description?         string
       +--rw l2-connection
       |  ...
       +--rw ip-connection
       |  ...
       +--rw routing-protocols
       |  ...
       +--rw oam
       |  ...
       +--rw security
          ...
]]></artwork>
        </figure>
        <t>The full tree of the 'ac-ntw' is provided in <xref target="full-tree"/>.</t>
      </section>
      <section anchor="l2-connection">
        <name>L2 Connection</name>
        <t>The  Layer 2 connection tree structure is shown in <xref target="l2-tree"/>.</t>
        <figure anchor="l2-tree">
          <name>Layer 2 Connection Tree Structure</name>
          <artwork><![CDATA[
  augment /nw:networks/nw:network/nw:node/sap:service/sap:sap:
    +--rw ac* [name]
       +--rw name                 string
       +--rw ac-ref?              ac-svc:attachment-circuit-reference
       +--rw ac-profile* [profile-id]
       |  +--rw profile-id    -> /nw:networks/network/ac-profile/name
       +--rw description?         string
       +--rw l2-connection
       |  +--rw encapsulation
       |  |  +--rw encap-type?        identityref
       |  |  +--rw dot1q
       |  |  |  +--rw tag-type?         identityref
       |  |  |  +--rw cvlan-id?         uint16
       |  |  |  +--rw tag-operations
       |  |  |     +--rw (op-choice)?
       |  |  |     |  +--:(pop)
       |  |  |     |  |  +--rw pop?         empty
       |  |  |     |  +--:(push)
       |  |  |     |  |  +--rw push?        empty
       |  |  |     |  +--:(translate)
       |  |  |     |     +--rw translate?   empty
       |  |  |     +--rw tag-1?             dot1q-types:vlanid
       |  |  |     +--rw tag-1-type?
       |  |  |     |       dot1q-types:dot1q-tag-type
       |  |  |     +--rw tag-2?             dot1q-types:vlanid
       |  |  |     +--rw tag-2-type?
       |  |  |             dot1q-types:dot1q-tag-type
       |  |  +--rw priority-tagged
       |  |  |  +--rw tag-type?   identityref
       |  |  +--rw qinq
       |  |     +--rw tag-type?         identityref
       |  |     +--rw svlan-id          uint16
       |  |     +--rw cvlan-id          uint16
       |  |     +--rw tag-operations
       |  |        +--rw (op-choice)?
       |  |        |  +--:(pop)
       |  |        |  |  +--rw pop?         uint8
       |  |        |  +--:(push)
       |  |        |  |  +--rw push?        empty
       |  |        |  +--:(translate)
       |  |        |     +--rw translate?   uint8
       |  |        +--rw tag-1?             dot1q-types:vlanid
       |  |        +--rw tag-1-type?
       |  |        |       dot1q-types:dot1q-tag-type
       |  |        +--rw tag-2?             dot1q-types:vlanid
       |  |        +--rw tag-2-type?
       |  |                dot1q-types:dot1q-tag-type
       |  +--rw (l2-service)?
       |  |  +--:(l2-tunnel-service)
       |  |  |  +--rw l2-tunnel-service
       |  |  |     +--rw type?         identityref
       |  |  |     +--rw pseudowire
       |  |  |     |  +--rw vcid?      uint32
       |  |  |     |  +--rw far-end?   union
       |  |  |     +--rw vpls
       |  |  |     |  +--rw vcid?      uint32
       |  |  |     |  +--rw far-end*   union
       |  |  |     +--rw vxlan
       |  |  |        +--rw vni-id             uint32
       |  |  |        +--rw peer-mode?         identityref
       |  |  |        +--rw peer-ip-address*   inet:ip-address
       |  |  +--:(l2vpn)
       |  |     +--rw l2vpn-id?            vpn-common:vpn-id
       |  +--rw l2-termination-point?      string
       |  +--rw local-bridge-reference?    string
       |  +--rw bearer-reference?          string
       |  |       {vpn-common:bearer-reference}?
       |  +--rw lag-interface {vpn-common:lag-interface}?
       |     +--rw lag-interface-id?   string
       |     +--rw member-link-list
       |        +--rw member-link* [name]
       |           +--rw name    string
       +--rw ip-connection
       |  ...
       +--rw routing-protocols
       |  ...
       +--rw oam
       |  ...
       +--rw security
          ...
]]></artwork>
        </figure>
      </section>
      <section anchor="ip-connection">
        <name>IP Connection</name>
        <t>The  Layer 3 connection tree structure is shown in <xref target="l3-tree"/>.</t>
        <figure anchor="l3-tree">
          <name>IP Connection Tree Structure</name>
          <artwork><![CDATA[
  augment /nw:networks/nw:network/nw:node/sap:service/sap:sap:
    +--rw ac* [name]
       +--rw name                 string
       +--rw ac-ref?              ac-svc:attachment-circuit-reference
       +--rw ac-profile* [profile-id]
       |  +--rw profile-id    -> /nw:networks/network/ac-profile/name
       +--rw description?         string
       +--rw l2-connection
       |  ...
       +--rw ip-connection
       |  +--rw l3-termination-point?   string
       |  +--rw ipv4 {vpn-common:ipv4}?
       |  |  +--rw local-address?
       |  |  |       inet:ipv4-address
       |  |  +--rw prefix-length?                           uint8
       |  |  +--rw address-allocation-type?
       |  |  |       identityref
       |  |  +--rw (allocation-type)?
       |  |     +--:(dynamic)
       |  |     |  +--rw (address-assign)?
       |  |     |  |  +--:(number)
       |  |     |  |  |  +--rw number-of-dynamic-address?   uint16
       |  |     |  |  +--:(explicit)
       |  |     |  |     +--rw customer-addresses
       |  |     |  |        +--rw address-pool* [pool-id]
       |  |     |  |           +--rw pool-id          string
       |  |     |  |           +--rw start-address
       |  |     |  |           |       inet:ipv6-address
       |  |     |  |           +--rw end-address?
       |  |     |  |                   inet:ipv6-address
       |  |     |  +--rw (provider-dhcp)?
       |  |     |  |  +--:(dhcp-service-type)
       |  |     |  |  |  +--rw dhcp-service-type?
       |  |     |  |  |          enumeration
       |  |     |  |  +--:(service-type)
       |  |     |  |     +--rw (service-type)?
       |  |     |  |        +--:(relay)
       |  |     |  |           +--rw server-ip-address*
       |  |     |  |                   inet:ipv6-address
       |  |     |  +--rw (dhcp-relay)?
       |  |     |     +--:(customer-dhcp-servers)
       |  |     |        +--rw customer-dhcp-servers
       |  |     |           +--rw server-ip-address*
       |  |     |                   inet:ipv6-address
       |  |     +--:(static-addresses)
       |  |        +--rw primary-address?
       |  |        |       -> ../address/address-id
       |  |        +--rw address* [address-id]
       |  |           +--rw address-id          string
       |  |           +--rw customer-address?   inet:ipv6-address
       |  +--rw ipv6 {vpn-common:ipv6}?
       |     +--rw local-address?
       |     |       inet:ipv6-address
       |     +--rw prefix-length?                           uint8
       |     +--rw address-allocation-type?
       |     |       identityref
       |     +--rw (allocation-type)?
       |        +--:(dynamic)
       |        |  +--rw (address-assign)?
       |        |  |  +--:(number)
       |        |  |  |  +--rw number-of-dynamic-address?   uint16
       |        |  |  +--:(explicit)
       |        |  |     +--rw customer-addresses
       |        |  |        +--rw address-pool* [pool-id]
       |        |  |           +--rw pool-id          string
       |        |  |           +--rw start-address
       |        |  |           |       inet:ipv6-address
       |        |  |           +--rw end-address?
       |        |  |                   inet:ipv6-address
       |        |  +--rw (provider-dhcp)?
       |        |  |  +--:(dhcp-service-type)
       |        |  |  |  +--rw dhcp-service-type?
       |        |  |  |          enumeration
       |        |  |  +--:(service-type)
       |        |  |     +--rw (service-type)?
       |        |  |        +--:(relay)
       |        |  |           +--rw server-ip-address*
       |        |  |                   inet:ipv6-address
       |        |  +--rw (dhcp-relay)?
       |        |     +--:(customer-dhcp-servers)
       |        |        +--rw customer-dhcp-servers
       |        |           +--rw server-ip-address*
       |        |                   inet:ipv6-address
       |        +--:(static-addresses)
       |           +--rw primary-address?
       |           |       -> ../address/address-id
       |           +--rw address* [address-id]
       |              +--rw address-id          string
       |              +--rw customer-address?   inet:ipv6-address
       +--rw routing-protocols
       |  ...
       +--rw oam
       |  ...
       +--rw security
          ...
]]></artwork>
        </figure>
      </section>
      <section anchor="routing">
        <name>Routing</name>
        <t>The routing tree structure is shown in <xref target="rtg-tree"/>.</t>
        <figure anchor="rtg-tree">
          <name>Rotuing Tree Structure</name>
          <artwork><![CDATA[
module: ietf-ac-ntw
  augment /nw:networks/nw:network:
    +--rw ac-profile* [name]
       +--rw name                 string
       +--rw l2-connection
       +--rw ip-connection
       +--rw routing-protocols
       |  +--rw routing-protocol* [id]
       |     +--rw id      string
       |     +--rw type?   identityref
       |     +--rw bgp
       |     |  +--rw description?              string
       |     |  +--rw local-as?                 inet:as-number
       |     |  +--rw peer-as                   inet:as-number
       |     |  +--rw address-family?           identityref
       |     |  +--rw multihop?                 uint8
       |     |  +--rw as-override?              boolean
       |     |  +--rw allow-own-as?             uint8
       |     |  +--rw prepend-global-as?        boolean
       |     |  +--rw send-default-route?       boolean
       |     |  +--rw site-of-origin?           rt-types:route-origin
       |     |  +--rw ipv6-site-of-origin?
       |     |  |       rt-types:ipv6-route-origin
       |     |  +--rw redistribute-connected* [address-family]
       |     |  |  +--rw address-family    identityref
       |     |  |  +--rw enable?           boolean
       |     |  +--rw bgp-max-prefix
       |     |  |  +--rw max-prefix?          uint32
       |     |  |  +--rw warning-threshold?   decimal64
       |     |  |  +--rw violate-action?      enumeration
       |     |  |  +--rw restart-timer?       uint32
       |     |  +--rw bgp-timers
       |     |     +--rw keepalive?   uint16
       |     |     +--rw hold-time?   uint16
       |     +--rw ospf
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-id           yang:dotted-quad
       |     |  +--rw metric?           uint16
       |     |  +--rw max-lsa?          uint32
       |     +--rw isis
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-address      area-address
       |     |  +--rw level?            identityref
       |     |  +--rw metric?           uint16
       |     |  +--rw mode?             enumeration
       |     +--rw rip
       |     |  +--rw address-family?   identityref
       |     |  +--rw timers
       |     |  |  +--rw update-interval?     uint16
       |     |  |  +--rw invalid-interval?    uint16
       |     |  |  +--rw holddown-interval?   uint16
       |     |  |  +--rw flush-interval?      uint16
       |     |  +--rw default-metric?   uint8
       |     +--rw vrrp
       |        +--rw address-family?   identityref
       |        +--rw ping-reply?       boolean
       +--rw oam
          ...
  augment /nw:networks/nw:network/nw:node/sap:service/sap:sap:
    +--rw ac* [name]
       +--rw name                 string
       +--rw ac-ref?              ac-svc:attachment-circuit-reference
       +--rw ac-profile* [profile-id]
       |  +--rw profile-id    -> /nw:networks/network/ac-profile/name
       +--rw description?         string
       +--rw l2-connection
       |  ...
       +--rw ip-connection
       |  ...
       +--rw routing-protocols
       |  +--rw routing-protocol* [id]
       |     +--rw id                  string
       |     +--rw type?               identityref
       |     +--rw routing-profiles* [id]
       |     |  +--rw id      leafref
       |     |  +--rw type?   identityref
       |     +--rw static
       |     |  +--rw cascaded-lan-prefixes
       |     |     +--rw ipv4-lan-prefixes* [lan next-hop]
       |     |     |       {vpn-common:ipv4}?
       |     |     |  +--rw lan           inet:ipv4-prefix
       |     |     |  +--rw lan-tag?      string
       |     |     |  +--rw next-hop      union
       |     |     |  +--rw metric?       uint32
       |     |     |  +--rw bfd-enable?   boolean {vpn-common:bfd}?
       |     |     |  +--rw preference?   uint32
       |     |     |  +--rw status
       |     |     |     +--rw admin-status
       |     |     |     |  +--rw status?        identityref
       |     |     |     |  +--rw last-change?   yang:date-and-time
       |     |     |     +--ro oper-status
       |     |     |        +--ro status?        identityref
       |     |     |        +--ro last-change?   yang:date-and-time
       |     |     +--rw ipv6-lan-prefixes* [lan next-hop]
       |     |             {vpn-common:ipv6}?
       |     |        +--rw lan           inet:ipv4-prefix
       |     |        +--rw lan-tag?      string
       |     |        +--rw next-hop      union
       |     |        +--rw metric?       uint32
       |     |        +--rw bfd-enable?   boolean {vpn-common:bfd}?
       |     |        +--rw preference?   uint32
       |     |        +--rw status
       |     |           +--rw admin-status
       |     |           |  +--rw status?        identityref
       |     |           |  +--rw last-change?   yang:date-and-time
       |     |           +--ro oper-status
       |     |              +--ro status?        identityref
       |     |              +--ro last-change?   yang:date-and-time
       |     +--rw bgp
       |     |  +--rw peer-groups
       |     |  |  +--rw peer-group* [name]
       |     |  |     +--rw name                      string
       |     |  |     +--rw local-address?            union
       |     |  |     +--rw description?              string
       |     |  |     +--rw local-as?                 inet:as-number
       |     |  |     +--rw peer-as                   inet:as-number
       |     |  |     +--rw address-family?           identityref
       |     |  |     +--rw multihop?                 uint8
       |     |  |     +--rw as-override?              boolean
       |     |  |     +--rw allow-own-as?             uint8
       |     |  |     +--rw prepend-global-as?        boolean
       |     |  |     +--rw send-default-route?       boolean
       |     |  |     +--rw site-of-origin?
       |     |  |     |       rt-types:route-origin
       |     |  |     +--rw ipv6-site-of-origin?
       |     |  |     |       rt-types:ipv6-route-origin
       |     |  |     +--rw redistribute-connected* [address-family]
       |     |  |     |  +--rw address-family    identityref
       |     |  |     |  +--rw enable?           boolean
       |     |  |     +--rw bgp-max-prefix
       |     |  |     |  +--rw max-prefix?          uint32
       |     |  |     |  +--rw warning-threshold?   decimal64
       |     |  |     |  +--rw violate-action?      enumeration
       |     |  |     |  +--rw restart-timer?       uint32
       |     |  |     +--rw bgp-timers
       |     |  |     |  +--rw keepalive?   uint16
       |     |  |     |  +--rw hold-time?   uint16
       |     |  |     +--rw authentication
       |     |  |        +--rw enable?            boolean
       |     |  |        +--rw keying-material
       |     |  |           +--rw (option)?
       |     |  |              +--:(ao)
       |     |  |              |  +--rw enable-ao?          boolean
       |     |  |              |  +--rw ao-keychain?
       |     |  |              |          key-chain:key-chain-ref
       |     |  |              +--:(md5)
       |     |  |              |  +--rw md5-keychain?
       |     |  |              |          key-chain:key-chain-ref
       |     |  |              +--:(explicit)
       |     |  |                 +--rw key-id?             uint32
       |     |  |                 +--rw key?                string
       |     |  |                 +--rw crypto-algorithm?
       |     |  |                         identityref
       |     |  +--rw neighbor* [remote-address]
       |     |     +--rw remote-address            inet:ip-address
       |     |     +--rw local-address?            union
       |     |     +--rw peer-group?
       |     |     |       -> ../../peer-groups/peer-group/name
       |     |     +--rw description?              string
       |     |     +--rw local-as?                 inet:as-number
       |     |     +--rw peer-as                   inet:as-number
       |     |     +--rw address-family?           identityref
       |     |     +--rw multihop?                 uint8
       |     |     +--rw as-override?              boolean
       |     |     +--rw allow-own-as?             uint8
       |     |     +--rw prepend-global-as?        boolean
       |     |     +--rw send-default-route?       boolean
       |     |     +--rw site-of-origin?
       |     |     |       rt-types:route-origin
       |     |     +--rw ipv6-site-of-origin?
       |     |     |       rt-types:ipv6-route-origin
       |     |     +--rw redistribute-connected* [address-family]
       |     |     |  +--rw address-family    identityref
       |     |     |  +--rw enable?           boolean
       |     |     +--rw bgp-max-prefix
       |     |     |  +--rw max-prefix?          uint32
       |     |     |  +--rw warning-threshold?   decimal64
       |     |     |  +--rw violate-action?      enumeration
       |     |     |  +--rw restart-timer?       uint32
       |     |     +--rw bgp-timers
       |     |     |  +--rw keepalive?   uint16
       |     |     |  +--rw hold-time?   uint16
       |     |     +--rw authentication
       |     |     |  +--rw enable?            boolean
       |     |     |  +--rw keying-material
       |     |     |     +--rw (option)?
       |     |     |        +--:(ao)
       |     |     |        |  +--rw enable-ao?          boolean
       |     |     |        |  +--rw ao-keychain?
       |     |     |        |          key-chain:key-chain-ref
       |     |     |        +--:(md5)
       |     |     |        |  +--rw md5-keychain?
       |     |     |        |          key-chain:key-chain-ref
       |     |     |        +--:(explicit)
       |     |     |           +--rw key-id?             uint32
       |     |     |           +--rw key?                string
       |     |     |           +--rw crypto-algorithm?   identityref
       |     |     +--rw status
       |     |        +--rw admin-status
       |     |        |  +--rw status?        identityref
       |     |        |  +--rw last-change?   yang:date-and-time
       |     |        +--ro oper-status
       |     |           +--ro status?        identityref
       |     |           +--ro last-change?   yang:date-and-time
       |     +--rw ospf
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-id           yang:dotted-quad
       |     |  +--rw metric?           uint16
       |     |  +--rw sham-links {vpn-common:rtg-ospf-sham-link}?
       |     |  |  +--rw sham-link* [target-site]
       |     |  |     +--rw target-site    string
       |     |  |     +--rw metric?        uint16
       |     |  +--rw max-lsa?          uint32
       |     |  +--rw authentication
       |     |  |  +--rw enable?            boolean
       |     |  |  +--rw keying-material
       |     |  |     +--rw (option)?
       |     |  |        +--:(auth-key-chain)
       |     |  |        |  +--rw key-chain?
       |     |  |        |          key-chain:key-chain-ref
       |     |  |        +--:(auth-key-explicit)
       |     |  |           +--rw key-id?             uint32
       |     |  |           +--rw key?                string
       |     |  |           +--rw crypto-algorithm?   identityref
       |     |  +--rw status
       |     |     +--rw admin-status
       |     |     |  +--rw status?        identityref
       |     |     |  +--rw last-change?   yang:date-and-time
       |     |     +--ro oper-status
       |     |        +--ro status?        identityref
       |     |        +--ro last-change?   yang:date-and-time
       |     +--rw isis
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-address      area-address
       |     |  +--rw level?            identityref
       |     |  +--rw metric?           uint16
       |     |  +--rw mode?             enumeration
       |     |  +--rw authentication
       |     |  |  +--rw enable?            boolean
       |     |  |  +--rw keying-material
       |     |  |     +--rw (option)?
       |     |  |        +--:(auth-key-chain)
       |     |  |        |  +--rw key-chain?
       |     |  |        |          key-chain:key-chain-ref
       |     |  |        +--:(auth-key-explicit)
       |     |  |           +--rw key-id?             uint32
       |     |  |           +--rw key?                string
       |     |  |           +--rw crypto-algorithm?   identityref
       |     |  +--rw status
       |     |     +--rw admin-status
       |     |     |  +--rw status?        identityref
       |     |     |  +--rw last-change?   yang:date-and-time
       |     |     +--ro oper-status
       |     |        +--ro status?        identityref
       |     |        +--ro last-change?   yang:date-and-time
       |     +--rw rip
       |     |  +--rw address-family?   identityref
       |     |  +--rw timers
       |     |  |  +--rw update-interval?     uint16
       |     |  |  +--rw invalid-interval?    uint16
       |     |  |  +--rw holddown-interval?   uint16
       |     |  |  +--rw flush-interval?      uint16
       |     |  +--rw default-metric?   uint8
       |     |  +--rw authentication
       |     |  |  +--rw enable?            boolean
       |     |  |  +--rw keying-material
       |     |  |     +--rw (option)?
       |     |  |        +--:(auth-key-chain)
       |     |  |        |  +--rw key-chain?
       |     |  |        |          key-chain:key-chain-ref
       |     |  |        +--:(auth-key-explicit)
       |     |  |           +--rw key?                string
       |     |  |           +--rw crypto-algorithm?   identityref
       |     |  +--rw status
       |     |     +--rw admin-status
       |     |     |  +--rw status?        identityref
       |     |     |  +--rw last-change?   yang:date-and-time
       |     |     +--ro oper-status
       |     |        +--ro status?        identityref
       |     |        +--ro last-change?   yang:date-and-time
       |     +--rw vrrp
       |        +--rw address-family?       identityref
       |        +--rw vrrp-group?           uint8
       |        +--rw backup-peer?          inet:ip-address
       |        +--rw virtual-ip-address*   inet:ip-address
       |        +--rw priority?             uint8
       |        +--rw ping-reply?           boolean
       |        +--rw status
       |           +--rw admin-status
       |           |  +--rw status?        identityref
       |           |  +--rw last-change?   yang:date-and-time
       |           +--ro oper-status
       |              +--ro status?        identityref
       |              +--ro last-change?   yang:date-and-time
       +--rw oam
       |  ...
       +--rw security
          ...
]]></artwork>
        </figure>
      </section>
      <section anchor="oam">
        <name>OAM</name>
        <t>The OAM tree structure is shown in <xref target="oam-tree"/>.</t>
        <figure anchor="oam-tree">
          <name>OAM Tree Structure</name>
          <artwork><![CDATA[
  augment /nw:networks/nw:network:
    +--rw ac-profile* [name]
       +--rw name                 string
       +--rw l2-connection
       +--rw ip-connection
       +--rw routing-protocols
       |  ...
       +--rw oam
          +--rw bfd {vpn-common:bfd}?
             +--rw session-type?               identityref
             +--rw desired-min-tx-interval?    uint32
             +--rw required-min-rx-interval?   uint32
             +--rw local-multiplier?           uint8
             +--rw holdtime?                   uint32
  augment /nw:networks/nw:network/nw:node/sap:service/sap:sap:
    +--rw ac* [name]
       +--rw name                 string
       +--rw ac-ref?              ac-svc:attachment-circuit-reference
       +--rw ac-profile* [profile-id]
       |  +--rw profile-id    -> /nw:networks/network/ac-profile/name
       +--rw description?         string
       +--rw l2-connection
       |  ...
       +--rw ip-connection
       |  ...
       +--rw routing-protocols
       |  ...
       +--rw oam
       |  +--rw bfd
       |     +--rw profile?                    ac-svc:bfd-profile-reference
       |     +--rw session-type?               identityref
       |     +--rw desired-min-tx-interval?    uint32
       |     +--rw required-min-rx-interval?   uint32
       |     +--rw local-multiplier?           uint8
       |     +--rw holdtime?                   uint32
       |     +--rw authentication!
       |     |  +--rw key-chain?    key-chain:key-chain-ref
       |     |  +--rw meticulous?   boolean
       |     +--rw status
       |        +--rw admin-status
       |        |  +--rw status?        identityref
       |        |  +--rw last-change?   yang:date-and-time
       |        +--ro oper-status
       |           +--ro status?        identityref
       |           +--ro last-change?   yang:date-and-time
       +--rw security
          ...
]]></artwork>
        </figure>
      </section>
      <section anchor="security">
        <name>Security</name>
        <t>The security tree structure is shown in <xref target="sec-tree"/>.</t>
        <figure anchor="sec-tree">
          <name>Security Tree Structure</name>
          <artwork><![CDATA[
  augment /nw:networks/nw:network/nw:node/sap:service/sap:sap:
    +--rw ac* [name]
       +--rw name                 string
       +--rw ac-ref?              ac-svc:attachment-circuit-reference
       +--rw ac-profile* [profile-id]
       |  +--rw profile-id    -> /nw:networks/network/ac-profile/name
       +--rw description?         string
       +--rw l2-connection
       |  ...
       +--rw ip-connection
       |  ...
       +--rw routing-protocols
       |  ...
       +--rw oam
       |  ...
       +--rw security
          +--rw encryption {vpn-common:encryption}?
          |  +--rw enabled?   boolean
          |  +--rw layer?     enumeration
          +--rw encryption-profile
             +--rw (profile)?
                +--:(provider-profile)
                |  +--rw profile-name?         leafref
                +--:(customer-profile)
                   +--rw customer-key-chain?
                           key-chain:key-chain-ref
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="yang-module">
      <name>YANG Module</name>
      <t>This module uses types defined in <xref target="RFC6991"/>, <xref target="RFC8177"/>, <xref target="RFC8294"/>, <xref target="RFC8343"/>, <xref target="RFC9181"/>, and IEEE Std 802.1Qcp.</t>
      <sourcecode markers="true" name="ietf-ac-ntw@2022-11-30.yang"><![CDATA[
module ietf-ac-ntw {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-ac-ntw";
  prefix ac-ntw;

  import ietf-vpn-common {
    prefix vpn-common;
    reference
      "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3
                 VPNs";
  }
  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types, Section 4";
  }
  import ietf-key-chain {
    prefix key-chain;
    reference
      "RFC 8177: YANG Data Model for Key Chains";
  }
  import ietf-routing-types {
    prefix rt-types;
    reference
      "RFC 8294: Common YANG Data Types for the Routing Area";
  }
  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model for Interface Management";
  }
  import ieee802-dot1q-types {
    prefix dot1q-types;
    reference
      "IEEE Std 802.1Qcp: Bridges and Bridged Networks--
                          Amendment 30: YANG Data Model";
  }
  import ietf-network {
    prefix nw;
    reference
      "RFC 8345: A YANG Data Model for Network
                 Topologies, Section 6.1";
  }
  import ietf-sap-ntw {
    prefix sap;
    reference
      "RFC SSSS: A YANG Network Model for Service Attachment
                 Points (SAPs)";
  }
  import ietf-ac-common {
    prefix ac-common;
    reference
      "RFC xxx: XXXX";
  }
  import ietf-ac-svc {
    prefix ac-svc;
    reference
      "RFC xxx: XXXX";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>

     Editor:   Mohamed Boucadair
               <mailto:mohamed.boucadair@orange.com>
     Author:   Richard Roberts
               <mailto:rroberts@juniper.net>";
  description
    "This YANG module defines a generic YANG model for
     the configuration of attachment circuits.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC xxx; see the
     RFC itself for full legal notices.";

  revision 2022-11-30 {
    description
      "Initial revision.";
    reference
      "RFC xxxx: A YANG Network Data Model for Attachment Circuits";
  }

  // L2 conenction

  grouping l2-connection {
    description
      "Defines Layer 2 protocols and parameters that
       are required to enable AC connectivity.";
    container encapsulation {
      description
        "Container for Layer 2 encapsulation.";
      leaf encap-type {
        type identityref {
          base vpn-common:encapsulation-type;
        }
        default "vpn-common:priority-tagged";
        description
          "Tagged interface type.  By default, the
           type of the tagged interface is
           'priority-tagged'.";
      }
      container dot1q {
        when "derived-from-or-self(../encap-type, "
           + "'vpn-common:dot1q')" {
          description
            "Only applies when the type of the
             tagged interface is 'dot1q'.";
        }
        description
          "Tagged interface.";
        uses ac-common:dot1q;
        container tag-operations {
          description
            "Sets the tag manipulation policy for this
             VPN network access.  It defines a set of
             tag manipulations that allow for the
             insertion, removal, or rewriting
             of 802.1Q VLAN tags.  These operations are
             indicated for the CE-PE direction.
             By default, tag operations are symmetric.
             As such, the reverse tag operation is
             assumed on the PE-CE direction.";
          choice op-choice {
            description
              "Selects the tag rewriting policy for a
               VPN network access.";
            leaf pop {
              type empty;
              description
                "Pop the outer tag.";
            }
            leaf push {
              type empty;
              description
                "Pushes one or two tags defined by the
                 tag-1 and tag-2 leaves.  It is
                 assumed that, absent any policy, the
                 default value of 0 will be used for
                 the PCP setting.";
            }
            leaf translate {
              type empty;
              description
                "Translates the outer tag to one or two
                 tags.  PCP bits are preserved.";
            }
          }
          leaf tag-1 {
            when 'not(../pop)';
            type dot1q-types:vlanid;
            description
              "A first tag to be used for push or
               translate operations.  This tag will be
               used as the outermost tag as a result
               of the tag operation.";
          }
          leaf tag-1-type {
            type dot1q-types:dot1q-tag-type;
            default "dot1q-types:s-vlan";
            description
              "Specifies a specific 802.1Q tag type
               of tag-1.";
          }
          leaf tag-2 {
            when '(../translate)';
            type dot1q-types:vlanid;
            description
              "A second tag to be used for
               translation.";
          }
          leaf tag-2-type {
            type dot1q-types:dot1q-tag-type;
            default "dot1q-types:c-vlan";
            description
              "Specifies a specific 802.1Q tag type
               of tag-2.";
          }
        }
      }
      container priority-tagged {
        when "derived-from-or-self(../encap-type, "
           + "'vpn-common:priority-tagged')" {
          description
            "Only applies when the type of the
             tagged interface is 'priority-tagged'.";
        }
        description
          "Priority tagged container.";
        uses ac-common:priority-tagged;
      }
      container qinq {
        when "derived-from-or-self(../encap-type, "
           + "'vpn-common:qinq')" {
          description
            "Only applies when the type of the tagged
             interface is 'QinQ'.";
        }
        description
          "Includes QinQ parameters.";
        uses ac-common:qinq;
        container tag-operations {
          description
            "Sets the tag manipulation policy for this
             VPN network access.  It defines a set of
             tag manipulations that allow for the
             insertion, removal, or rewriting
             of 802.1Q VLAN tags.  These operations are
             indicated for the CE-PE direction.
             By default, tag operations are symmetric.
             As such, the reverse tag operation is
             assumed on the PE-CE direction.";
          choice op-choice {
            description
              "Selects the tag rewriting policy for a
               VPN network access.";
            leaf pop {
              type uint8 {
                range "1|2";
              }
              description
                "Pops one or two tags as a function of the indicated pop
                 value.";
            }
            leaf push {
              type empty;
              description
                "Pushes one or two tags defined by the tag-1 and tag-2 leaves.
                 It is assumed that, absent any policy, the default value of 0
                 will be used for PCP setting.";
            }
            leaf translate {
              type uint8 {
                range "1|2";
              }
              description
                "Translates one or two outer tags.  PCP bits are preserved.

                 The following operations are supported:

                 - translate 1 with tag-1 leaf is
                   provided: only the outermost tag is
                   translated to the value in tag-1.

                 - translate 2 with both tag-1 and
                   tag-2 leaves are provided: both
                   outer and inner tags are translated
                   to the values in tag-1 and tag-2,
                   respectively.

                 - translate 2 with tag-1 leaf is
                   provided: the outer tag is popped
                   while the inner tag is translated
                   to the value in tag-1.";
            }
          }
          leaf tag-1 {
            when 'not(../pop)';
            type dot1q-types:vlanid;
            description
              "A first tag to be used for push or
               translate operations.  This tag will be
               used as the outermost tag as a result
               of the tag operation.";
          }
          leaf tag-1-type {
            type dot1q-types:dot1q-tag-type;
            default "dot1q-types:s-vlan";
            description
              "Specifies a specific 802.1Q tag type of tag-1.";
          }
          leaf tag-2 {
            when 'not(../pop)';
            type dot1q-types:vlanid;
            description
              "A second tag to be used for push or translate operations.";
          }
          leaf tag-2-type {
            type dot1q-types:dot1q-tag-type;
            default "dot1q-types:c-vlan";
            description
              "Specifies a specific 802.1Q tag type of tag-2.";
          }
        }
      }
    }
    choice l2-service {
      description
        "The Layer 2 connectivity service can be
         provided by indicating a pointer to an
         L2VPN or by specifying a Layer 2 tunnel
         service.";
      container l2-tunnel-service {
        description
          "Defines a Layer 2 tunnel termination.
           It is only applicable when a tunnel is
           required.  The supported values are
           'pseudowire', 'vpls', and 'vxlan'.  Other
           values may be defined, if needed.";
        uses ac-common:l2-tunnel-service;
      }
      case l2vpn {
        leaf l2vpn-id {
          type vpn-common:vpn-id;
          description
            "Indicates the L2VPN service associated
             with an Integrated Routing and Bridging
             (IRB) interface.";
        }
      }
    }
  }

  grouping l2-connection-if-ref {
    description
      "Defines Layer 2 protocols and parameters that
       are required to enable AC connectivity.";
    uses l2-connection;
    leaf l2-termination-point {
      type string;
      description
        "Specifies a reference to a local Layer 2 termination point, such as a
         Layer 2 sub-interface.";
    }
    leaf local-bridge-reference {
      type string;
      description
        "Specifies a local bridge reference to accommodate, for example,
         implementations that require internal bridging.
         A reference may be a local bridge domain.";
    }
    leaf bearer-reference {
      if-feature "vpn-common:bearer-reference";
      type string;
      description
        "This is an internal reference for the
         service provider to identify the bearer
         associated with this VPN.";
    }
    container lag-interface {
      if-feature "vpn-common:lag-interface";
      description
        "Container for configuration of Link Aggregation Group (LAG) interface
         attributes.";
      leaf lag-interface-id {
        type string;
        description
          "LAG interface identifier.";
      }
      container member-link-list {
        description
          "Container for the member link list.";
        list member-link {
          key "name";
          description
            "Member link.";
          leaf name {
            type string;
            description
              "Member link name.";
          }
        }
      }
    }
  }

  grouping ip-connection {
    description
      "Defines IP connection parameters.";
    leaf l3-termination-point {
      type string;
      description
        "Specifies a reference to a local Layer 3 termination point, such as a
         bridge domain interface.";
    }
    container ipv4 {
      if-feature "vpn-common:ipv4";
      description
        "IPv4-specific parameters.";
      leaf local-address {
        type inet:ipv4-address;
        description
          "The IP address used at the provider's interface.";
      }
      uses ac-common:ipv4-allocation-type;
      choice allocation-type {
        description
          "Choice of the IPv4 address allocation.";
        case dynamic {
          description
            "When the addresses are allocated by DHCP or other
             dynamic means local to the infrastructure.";
          choice address-assign {
            default "number";
            description
              "A choice for how IPv4 addresses are assigned.";
            case number {
              leaf number-of-dynamic-address {
                type uint16;
                default "1";
                description
                  "Specifies the number of IP addresses to be assigned to
                   the customer on this access.";
              }
            }
            case explicit {
              container customer-addresses {
                description
                  "Container for customer addresses to be allocated
                   using DHCP.";
                list address-pool {
                  key "pool-id";
                  description
                    "Describes IP addresses to be dyncamically allocated.

                     When only 'start-address' is present, it represents a
                     single address.

                     When both 'start-address' and 'end-address' are
                     specified, it implies a range inclusive of both
                     addresses.";
                  leaf pool-id {
                    type string;
                    description
                      "A pool identifier for the address range from
                       'start-address' to 'end-address'.";
                  }
                  leaf start-address {
                    type inet:ipv6-address;
                    mandatory true;
                    description
                      "Indicates the first address in the pool.";
                  }
                  leaf end-address {
                    type inet:ipv6-address;
                    description
                      "Indicates the last address in the pool.";
                  }
                }
              }
            }
          }
          choice provider-dhcp {
            description
              "Parameters related to DHCP-allocated addresses.
               IP addresses are allocated by DHCP, which is provided
               by the operator.";
            leaf dhcp-service-type {
              type enumeration {
                enum server {
                  description
                    "Local DHCP server.";
                }
                enum relay {
                  description
                    "Local DHCP relay.  DHCP requests
                     are relayed to a provider's server.";
                }
              }
              description
                "Indicates the type of DHCP service to
                 be enabled on this access.";
            }
            choice service-type {
              description
                "Choice based on the DHCP service type.";
              case relay {
                description
                  "Container for a list of the
                   provider's DHCP servers (i.e.,
                   'dhcp-service-type' is set to
                   'relay').";
                leaf-list server-ip-address {
                  type inet:ipv6-address;
                  description
                    "IPv6 addresses of the provider's
                     DHCP server, for use by the local
                     DHCP relay.";
                }
              }
            }
          }
          choice dhcp-relay {
            description
              "The DHCP relay is provided by the operator.";
            container customer-dhcp-servers {
              description
                "Container for a list of the customer's DHCP servers.";
              leaf-list server-ip-address {
                type inet:ipv6-address;
                description
                  "IPv6 addresses of the customer's DHCP server.";
              }
            }
          }
        }
        case static-addresses {
          description
            "Lists the IPv6 addresses that are used.";
          leaf primary-address {
            type leafref {
              path "../address/address-id";
            }
            description
              "Primary IP address of the connection.";
          }
          list address {
            key "address-id";
            description
              "Lists the IPv6 addresses that are used.";
            leaf address-id {
              type string;
              description
                "An identifier of the static IPv6 address.";
            }
            leaf customer-address {
              type inet:ipv6-address;
              description
                "An IPv6 address of the customer side.";
            }
          }
        }
      }
    }
    container ipv6 {
      if-feature "vpn-common:ipv6";
      description
        "IPv6-specific parameters.";
      leaf local-address {
        type inet:ipv6-address;
        description
          "IPv6 address of the provider side.";
      }
      uses ac-common:ipv6-allocation-type;
      choice allocation-type {
        description
          "Choice of the IPv6 address allocation.";
        case dynamic {
          description
            "When the addresses are allocated by DHCP or other
             dynamic means local to the infrastructure.";
          choice address-assign {
            default "number";
            description
              "A choice for how IPv6 addresses are assigned.";
            case number {
              leaf number-of-dynamic-address {
                type uint16;
                default "1";
                description
                  "Specifies the number of IP addresses to be assigned to
                   the customer on this access.";
              }
            }
            case explicit {
              container customer-addresses {
                description
                  "Container for customer addresses to be allocated
                   using DHCP.";
                list address-pool {
                  key "pool-id";
                  description
                    "Describes IP addresses to be dyncamically allocated.

                     When only 'start-address' is present, it represents a
                     single address.

                     When both 'start-address' and 'end-address' are
                     specified, it implies a range inclusive of both
                     addresses.";
                  leaf pool-id {
                    type string;
                    description
                      "A pool identifier for the address range from
                       'start-address' to 'end-address'.";
                  }
                  leaf start-address {
                    type inet:ipv6-address;
                    mandatory true;
                    description
                      "Indicates the first address in the pool.";
                  }
                  leaf end-address {
                    type inet:ipv6-address;
                    description
                      "Indicates the last address in the pool.";
                  }
                }
              }
            }
          }
          choice provider-dhcp {
            description
              "Parameters related to DHCP-allocated addresses.
               IP addresses are allocated by DHCP, which is provided
               by the operator.";
            leaf dhcp-service-type {
              type enumeration {
                enum server {
                  description
                    "Local DHCP server.";
                }
                enum relay {
                  description
                    "Local DHCP relay.  DHCP requests
                     are relayed to a provider's server.";
                }
              }
              description
                "Indicates the type of DHCP service to
                 be enabled on this access.";
            }
            choice service-type {
              description
                "Choice based on the DHCP service type.";
              case relay {
                description
                  "Container for a list of the
                   provider's DHCP servers (i.e.,
                   'dhcp-service-type' is set to
                   'relay').";
                leaf-list server-ip-address {
                  type inet:ipv6-address;
                  description
                    "IPv6 addresses of the provider's
                     DHCP server, for use by the local
                     DHCP relay.";
                }
              }
            }
          }
          choice dhcp-relay {
            description
              "The DHCP relay is provided by the operator.";
            container customer-dhcp-servers {
              description
                "Container for a list of the customer's DHCP servers.";
              leaf-list server-ip-address {
                type inet:ipv6-address;
                description
                  "IPv6 addresses of the customer's DHCP server.";
              }
            }
          }
        }
        case static-addresses {
          description
            "Lists the IPv6 addresses that are used.";
          leaf primary-address {
            type leafref {
              path "../address/address-id";
            }
            description
              "Primary IP address of the connection.";
          }
          list address {
            key "address-id";
            description
              "Lists the IPv6 addresses that are used.";
            leaf address-id {
              type string;
              description
                "An identifier of the static IPv6 address.";
            }
            leaf customer-address {
              type inet:ipv6-address;
              description
                "An IPv6 address of the customer side.";
            }
          }
        }
      }
    }
  }

  /* Routing */
  //BGP-generic
  //BGP-extended

  grouping bgp-base {
    description
      "Configuration specific to BGP.";
    leaf description {
      type string;
      description
        "Includes a description of the BGP
         session.

         This description is meant to be used
         for diagnostic purposes.  The semantic
         of the description is local to an
         implementation.";
    }
    leaf local-as {
      type inet:as-number;
      description
        "Indicates a local AS Number (ASN), if
         an ASN distinct from the ASN configured
         at the VPN node level is needed.";
    }
    leaf peer-as {
      type inet:as-number;
      mandatory true;
      description
        "Indicates the customer's ASN when
         the customer requests BGP routing.";
    }
    leaf address-family {
      type identityref {
        base vpn-common:address-family;
      }
      description
        "This node contains the address families
         to be activated.  'dual-stack' means
         that both IPv4 and IPv6 will be
         activated.";
    }
    leaf multihop {
      type uint8;
      description
        "Describes the number of IP hops allowed
         between a given BGP neighbor and
         the PE.";
    }
    leaf as-override {
      type boolean;
      default "false";
      description
        "Defines whether ASN override is
         enabled, i.e., replacing the ASN of
         the customer specified in the AS_PATH
         attribute with the local ASN.";
    }
    leaf allow-own-as {
      type uint8;
      default "0";
      description
        "If set, specifies the maximum number of
         occurrences of the provider's ASN that
         are permitted within the AS_PATH
         before it is rejected.";
    }
    leaf prepend-global-as {
      type boolean;
      default "false";
      description
        "In some situations, the ASN that is
         provided at the VPN node level may be
         distinct from the ASN configured at the
         VPN network access level.  When such
         ASNs are provided, they are both
         prepended to the BGP route updates
         for this access.  To disable that
         behavior, 'prepend-global-as'
         must be set to 'false'.  In such a
         case, the ASN that is provided at
         the VPN node level is not prepended
         to the BGP route updates for
         this access.";
    }
    leaf send-default-route {
      type boolean;
      default "false";
      description
        "Defines whether default routes can be
         advertised to a peer.  If set, the
         default routes are advertised to a
         peer.";
    }
    leaf site-of-origin {
      when "../address-family = 'vpn-common:ipv4' "
         + "or 'vpn-common:dual-stack'" {
        description
          "Only applies if IPv4 is activated.";
      }
      type rt-types:route-origin;
      description
        "The Site of Origin attribute is encoded
         as a Route Origin Extended Community.
         It is meant to uniquely identify the
         set of routes learned from a site via a
         particular CE-PE connection and is used
         to prevent routing loops.";
      reference
        "RFC 4364: BGP/MPLS IP Virtual Private
                   Networks (VPNs), Section 7";
    }
    leaf ipv6-site-of-origin {
      when "../address-family = 'vpn-common:ipv6' "
         + "or 'vpn-common:dual-stack'" {
        description
          "Only applies if IPv6 is activated.";
      }
      type rt-types:ipv6-route-origin;
      description
        "The IPv6 Site of Origin attribute is
         encoded as an IPv6 Route Origin
         Extended Community.  It is meant to
         uniquely identify the set of routes
         learned from a site via VRF
         information.";
      reference
        "RFC 5701: IPv6 Address Specific BGP
                   Extended Community
                   Attribute";
    }
    list redistribute-connected {
      key "address-family";
      description
        "Indicates, per address family, the
         policy to follow for connected
         routes.";
      leaf address-family {
        type identityref {
          base vpn-common:address-family;
        }
        description
          "Indicates the address family.";
      }
      leaf enable {
        type boolean;
        description
          "Enables the redistribution of
           connected routes.";
      }
    }
    container bgp-max-prefix {
      description
        "Controls the behavior when a prefix
         maximum is reached.";
      leaf max-prefix {
        type uint32;
        default "5000";
        description
          "Indicates the maximum number of BGP
           prefixes allowed in the BGP session.

           It allows control of how many
           prefixes can be received from a
           neighbor.

           If the limit is exceeded, the action
           indicated in 'violate-action' will be
           followed.";
        reference
          "RFC 4271: A Border Gateway Protocol 4
                     (BGP-4), Section 8.2.2";
      }
      leaf warning-threshold {
        type decimal64 {
          fraction-digits 5;
          range "0..100";
        }
        units "percent";
        default "75";
        description
          "When this value is reached, a warning
           notification will be triggered.";
      }
      leaf violate-action {
        type enumeration {
          enum warning {
            description
              "Only a warning message is sent to
               the peer when the limit is
               exceeded.";
          }
          enum discard-extra-paths {
            description
              "Discards extra paths when the
               limit is exceeded.";
          }
          enum restart {
            description
              "The BGP session restarts after
               the indicated time interval.";
          }
        }
        description
          "If the BGP neighbor 'max-prefix'
           limit is reached, the action
           indicated in 'violate-action'
           will be followed.";
      }
      leaf restart-timer {
        type uint32;
        units "seconds";
        description
          "Time interval after which the BGP
           session will be reestablished.";
      }
    }
    container bgp-timers {
      description
        "Includes two BGP timers that can be
         customized when building a VPN service
         with BGP used as the CE-PE routing
         protocol.";
      leaf keepalive {
        type uint16 {
          range "0..21845";
        }
        units "seconds";
        default "30";
        description
          "This timer indicates the KEEPALIVE
           messages' frequency between a PE
           and a BGP peer.

           If set to '0', it indicates that
           KEEPALIVE messages are disabled.

           It is suggested that the maximum
           time between KEEPALIVE messages be
           one-third of the Hold Time
           interval.";
        reference
          "RFC 4271: A Border Gateway Protocol 4
                     (BGP-4), Section 4.4";
      }
      leaf hold-time {
        type uint16 {
          range "0 | 3..65535";
        }
        units "seconds";
        default "90";
        description
          "Indicates the maximum number of
           seconds that may elapse between the
           receipt of successive KEEPALIVE
           and/or UPDATE messages from the peer.

           The Hold Time must be either zero or
           at least three seconds.";
        reference
          "RFC 4271: A Border Gateway Protocol 4
                     (BGP-4), Section 4.2";
      }
    }
  }

  grouping bgp-base-with-auth {
    description
      "Configuration specific to BGP.";
    uses bgp-base;
    uses ac-common:bgp-authentication;
  }

  //routing profile

  grouping routing-profile {
    description
      "Defines routing protocols.";
    list routing-protocol {
      key "id";
      description
        "List of routing protocols used on the
         CE-PE link.  This list can be augmented.";
      leaf id {
        type string;
        description
          "Unique identifier for the routing
           protocol.";
      }
      leaf type {
        type identityref {
          base vpn-common:routing-protocol-type;
        }
        description
          "Type of routing protocol.";
      }
      container bgp {
        when "derived-from-or-self(../type, "
           + "'vpn-common:bgp-routing')" {
          description
            "Only applies when the protocol is
             BGP.";
        }
        description
          "Configuration specific to BGP.";
        uses bgp-base;
      }
      container ospf {
        when "derived-from-or-self(../type, "
           + "'vpn-common:ospf-routing')" {
          description
            "Only applies when the protocol is
             OSPF.";
        }
        description
          "Configuration specific to OSPF.";
        uses ac-common:ospf-basic;
        leaf max-lsa {
          type uint32 {
            range "1..4294967294";
          }
          description
            "Maximum number of allowed Link State
             Advertisements (LSAs) that the OSPF
             instance will accept.";
        }
      }
      container isis {
        when "derived-from-or-self(../type, "
           + "'vpn-common:isis-routing')" {
          description
            "Only applies when the protocol is
             IS-IS.";
        }
        description
          "Configuration specific to IS-IS.";
        uses ac-common:isis-basic;
        leaf level {
          type identityref {
            base vpn-common:isis-level;
          }
          description
            "Can be 'level-1', 'level-2', or
             'level-1-2'.";
          reference
            "RFC 9181: A Common YANG Data Model for
                       Layer 2 and Layer 3 VPNs";
        }
        leaf metric {
          type uint16;
          default "1";
          description
            "Metric of the PE-CE link.  It is used
             in the routing state calculation and
             path selection.";
        }
        leaf mode {
          type enumeration {
            enum active {
              description
                "The interface sends or receives
                 IS-IS protocol control packets.";
            }
            enum passive {
              description
                "Suppresses the sending of IS-IS
                 updates through the specified
                 interface.";
            }
          }
          default "active";
          description
            "IS-IS interface mode type.";
        }
      }
      container rip {
        when "derived-from-or-self(../type, "
           + "'vpn-common:rip-routing')" {
          description
            "Only applies when the protocol is RIP.
             For IPv4, the model assumes that RIP
             version 2 is used.";
        }
        description
          "Configuration specific to RIP routing.";
        leaf address-family {
          type identityref {
            base vpn-common:address-family;
          }
          description
            "Indicates whether IPv4, IPv6, or both
             address families are to be activated.";
        }
        container timers {
          description
            "Indicates the RIP timers.";
          reference
            "RFC 2453: RIP Version 2";
          leaf update-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "30";
            description
              "Indicates the RIP update time, i.e.,
               the amount of time for which RIP
               updates are sent.";
          }
          leaf invalid-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "180";
            description
              "The interval before a route is
               declared invalid after no updates are
               received.  This value is at least
               three times the value for the
               'update-interval' argument.";
          }
          leaf holddown-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "180";
            description
              "Specifies the interval before better
               routes are released.";
          }
          leaf flush-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "240";
            description
              "Indicates the RIP flush timer, i.e.,
               the amount of time that must elapse
               before a route is removed from the
               routing table.";
          }
        }
        leaf default-metric {
          type uint8 {
            range "0..16";
          }
          default "1";
          description
            "Sets the default metric.";
        }
      }
      container vrrp {
        when "derived-from-or-self(../type, "
           + "'vpn-common:vrrp-routing')" {
          description
            "Only applies when the protocol is the
             Virtual Router Redundancy Protocol
             (VRRP).";
        }
        description
          "Configuration specific to VRRP.";
        reference
          "RFC 5798: Virtual Router Redundancy
                     Protocol (VRRP) Version 3 for
                     IPv4 and IPv6";
        leaf address-family {
          type identityref {
            base vpn-common:address-family;
          }
          description
            "Indicates whether IPv4, IPv6, or both
             address families are to be enabled.";
        }
        leaf ping-reply {
          type boolean;
          default "false";
          description
            "Controls whether the VRRP speaker
             should reply to ping requests.";
        }
      }
    }
  }

  grouping routing {
    description
      "Defines routing protocols.";
    list routing-protocol {
      key "id";
      description
        "List of routing protocols used on the
         CE-PE link.  This list can be augmented.";
      leaf id {
        type string;
        description
          "Unique identifier for the routing
           protocol.";
      }
      leaf type {
        type identityref {
          base vpn-common:routing-protocol-type;
        }
        description
          "Type of routing protocol.";
      }
      list routing-profiles {
        key "id";
        description
          "Routing profiles.";
        leaf id {
          type leafref {
            path "/nw:networks/nw:network"
               + "/ac-ntw:specific-provisioning-profiles/valid-provider-identifiers"
               + "/routing-profile-identifier/id";
          }
          //type ac-svc:routing-profile-reference;
          description
            "Routing profile to be used.";
        }
        leaf type {
          type identityref {
            base vpn-common:ie-type;
          }
          description
            "Import, export, or both.";
        }
      }
      container static {
        when "derived-from-or-self(../type, "
           + "'vpn-common:static-routing')" {
          description
            "Only applies when the protocol is a
             static routing protocol.";
        }
        description
          "Configuration specific to static
           routing.";
        container cascaded-lan-prefixes {
          description
            "LAN prefixes from the customer.";
          list ipv4-lan-prefixes {
            if-feature "vpn-common:ipv4";
            key "lan next-hop";
            description
              "List of LAN prefixes for the site.";
            uses ac-common:ipv4-static-rtg-entry;
            leaf bfd-enable {
              if-feature "vpn-common:bfd";
              type boolean;
              description
                "Enables Bidirectional Forwarding
                 Detection (BFD).";
            }
            leaf preference {
              type uint32;
              description
                "Indicates the preference associated
                 with the static route.";
            }
            uses vpn-common:service-status;
          }
          list ipv6-lan-prefixes {
            if-feature "vpn-common:ipv6";
            key "lan next-hop";
            description
              "List of LAN prefixes for the site.";
            uses ac-common:ipv4-static-rtg-entry;
            leaf bfd-enable {
              if-feature "vpn-common:bfd";
              type boolean;
              description
                "Enables BFD.";
            }
            leaf preference {
              type uint32;
              description
                "Indicates the preference associated
                 with the static route.";
            }
            uses vpn-common:service-status;
          }
        }
      }
      container bgp {
        when "derived-from-or-self(../type, "
           + "'vpn-common:bgp-routing')" {
          description
            "Only applies when the protocol is
             BGP.";
        }
        description
          "Configuration specific to BGP.";
        container peer-groups {
          description
            "Configuration for BGP peer-groups";
          list peer-group {
            key "name";
            description
              "List of BGP peer-groups configured on the local system -
               uniquely identified by peer-group name";
            leaf name {
              type string;
              description
                "Name of the BGP peer-group";
            }
            leaf local-address {
              type union {
                type inet:ip-address;
                type if:interface-ref;
              }
              description
                "Sets the local IP address to use for
                 the BGP transport session.  This may be
                 expressed as either an IP address or a
                 reference to an interface.";
            }
            uses bgp-base-with-auth;
          }
        }
        list neighbor {
          key "remote-address";
          description
            "List of BGP neighbors.";
          leaf remote-address {
            type inet:ip-address;
            description
              "The remote IP address of this entry's BGP peer.";
          }
          leaf local-address {
            type union {
              type inet:ip-address;
              type if:interface-ref;
            }
            description
              "Sets the local IP address to use for
               the BGP transport session.  This may be
               expressed as either an IP address or a
               reference to an interface.";
          }
          leaf peer-group {
            type leafref {
              path "../../peer-groups/peer-group/name";
            }
            description
              "The peer-group with which this neighbor is
               associated.";
          }
          uses bgp-base-with-auth;
          uses vpn-common:service-status;
        }
      }
      container ospf {
        when "derived-from-or-self(../type, "
           + "'vpn-common:ospf-routing')" {
          description
            "Only applies when the protocol is
             OSPF.";
        }
        description
          "Configuration specific to OSPF.";
        uses ac-common:ospf-basic;
        container sham-links {
          if-feature "vpn-common:rtg-ospf-sham-link";
          description
            "List of sham links.";
          reference
            "RFC 4577: OSPF as the Provider/Customer
                       Edge Protocol for BGP/MPLS IP
                       Virtual Private Networks
                       (VPNs), Section 4.2.7
             RFC 6565: OSPFv3 as a Provider Edge to
                       Customer Edge (PE-CE) Routing
                       Protocol, Section 5";
          list sham-link {
            key "target-site";
            description
              "Creates a sham link with another
               site.";
            leaf target-site {
              type string;
              description
                "Target site for the sham link
                 connection.  The site is referred
                 to by its identifier.";
            }
            leaf metric {
              type uint16;
              default "1";
              description
                "Metric of the sham link.  It is
                 used in the routing state
                 calculation and path selection.
                 The default value is set to '1'.";
              reference
                "RFC 4577: OSPF as the
                           Provider/Customer Edge
                           Protocol for BGP/MPLS IP
                           Virtual Private Networks
                           (VPNs), Section 4.2.7.3
                 RFC 6565: OSPFv3 as a Provider Edge
                           to Customer Edge (PE-CE)
                           Routing Protocol,
                           Section 5.2";
            }
          }
        }
        leaf max-lsa {
          type uint32 {
            range "1..4294967294";
          }
          description
            "Maximum number of allowed Link State
             Advertisements (LSAs) that the OSPF
             instance will accept.";
        }
        uses ac-common:ospf-authentication;
        uses vpn-common:service-status;
      }
      container isis {
        when "derived-from-or-self(../type, "
           + "'vpn-common:isis-routing')" {
          description
            "Only applies when the protocol is
             IS-IS.";
        }
        description
          "Configuration specific to IS-IS.";
        uses ac-common:isis-basic;
        leaf level {
          type identityref {
            base vpn-common:isis-level;
          }
          description
            "Can be 'level-1', 'level-2', or
             'level-1-2'.";
          reference
            "RFC 9181: A Common YANG Data Model for
                       Layer 2 and Layer 3 VPNs";
        }
        leaf metric {
          type uint16;
          default "1";
          description
            "Metric of the PE-CE link.  It is used
             in the routing state calculation and
             path selection.";
        }
        leaf mode {
          type enumeration {
            enum active {
              description
                "The interface sends or receives
                 IS-IS protocol control packets.";
            }
            enum passive {
              description
                "Suppresses the sending of IS-IS
                 updates through the specified
                 interface.";
            }
          }
          default "active";
          description
            "IS-IS interface mode type.";
        }
        uses ac-common:isis-authentication;
        uses vpn-common:service-status;
      }
      container rip {
        when "derived-from-or-self(../type, "
           + "'vpn-common:rip-routing')" {
          description
            "Only applies when the protocol is RIP.
             For IPv4, the model assumes that RIP
             version 2 is used.";
        }
        description
          "Configuration specific to RIP routing.";
        leaf address-family {
          type identityref {
            base vpn-common:address-family;
          }
          description
            "Indicates whether IPv4, IPv6, or both
             address families are to be activated.";
        }
        container timers {
          description
            "Indicates the RIP timers.";
          reference
            "RFC 2453: RIP Version 2";
          leaf update-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "30";
            description
              "Indicates the RIP update time, i.e.,
               the amount of time for which RIP
               updates are sent.";
          }
          leaf invalid-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "180";
            description
              "The interval before a route is
               declared invalid after no updates are
               received.  This value is at least
               three times the value for the
               'update-interval' argument.";
          }
          leaf holddown-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "180";
            description
              "Specifies the interval before better
               routes are released.";
          }
          leaf flush-interval {
            type uint16 {
              range "1..32767";
            }
            units "seconds";
            default "240";
            description
              "Indicates the RIP flush timer, i.e.,
               the amount of time that must elapse
               before a route is removed from the
               routing table.";
          }
        }
        leaf default-metric {
          type uint8 {
            range "0..16";
          }
          default "1";
          description
            "Sets the default metric.";
        }
        uses ac-common:rip-authentication;
        uses vpn-common:service-status;
      }
      container vrrp {
        when "derived-from-or-self(../type, "
           + "'vpn-common:vrrp-routing')" {
          description
            "Only applies when the protocol is the
             Virtual Router Redundancy Protocol
             (VRRP).";
        }
        description
          "Configuration specific to VRRP.";
        reference
          "RFC 5798: Virtual Router Redundancy
                     Protocol (VRRP) Version 3 for
                     IPv4 and IPv6";
        leaf address-family {
          type identityref {
            base vpn-common:address-family;
          }
          description
            "Indicates whether IPv4, IPv6, or both
             address families are to be enabled.";
        }
        leaf vrrp-group {
          type uint8 {
            range "1..255";
          }
          description
            "Includes the VRRP group identifier.";
        }
        leaf backup-peer {
          type inet:ip-address;
          description
            "Indicates the IP address of the peer.";
        }
        leaf-list virtual-ip-address {
          type inet:ip-address;
          description
            "Virtual IP addresses for a single VRRP
             group.";
          reference
            "RFC 5798: Virtual Router Redundancy
                       Protocol (VRRP) Version 3 for
                       IPv4 and IPv6,
                       Sections 1.2 and 1.3";
        }
        leaf priority {
          type uint8 {
            range "1..254";
          }
          default "100";
          description
            "Sets the local priority of the VRRP
             speaker.";
        }
        leaf ping-reply {
          type boolean;
          default "false";
          description
            "Controls whether the VRRP speaker
             should reply to ping requests.";
        }
        uses vpn-common:service-status;
      }
    }
  }

  // OAM

  grouping bfd {
    description
      "Grouping for BFD.";
    leaf session-type {
      type identityref {
        base vpn-common:bfd-session-type;
      }
      default "vpn-common:classic-bfd";
      description
        "Specifies the BFD session type.";
    }
    leaf desired-min-tx-interval {
      type uint32;
      units "microseconds";
      default "1000000";
      description
        "The minimum interval between
         transmissions of BFD Control packets, as
         desired by the operator.";
      reference
        "RFC 5880: Bidirectional Forwarding
                   Detection (BFD),
                   Section 6.8.7";
    }
    leaf required-min-rx-interval {
      type uint32;
      units "microseconds";
      default "1000000";
      description
        "The minimum interval between received BFD
         Control packets that the PE should
         support.";
      reference
        "RFC 5880: Bidirectional Forwarding
                   Detection (BFD),
                   Section 6.8.7";
    }
    leaf local-multiplier {
      type uint8 {
        range "1..255";
      }
      default "3";
      description
        "Specifies the detection multiplier that
         is transmitted to a BFD peer.

         The detection interval for the receiving
         BFD peer is calculated by multiplying the
         value of the negotiated transmission
         interval by the received detection
         multiplier value.";
      reference
        "RFC 5880: Bidirectional Forwarding
                   Detection (BFD),
                   Section 6.8.7";
    }
    leaf holdtime {
      type uint32;
      units "milliseconds";
      description
        "Expected BFD holdtime.

         The customer may impose some fixed
         values for the holdtime period if the
         provider allows the customer to use
         this function.

         If the provider doesn't allow the
         customer to use this function,
         fixed values will not be set.";
      reference
        "RFC 5880: Bidirectional Forwarding
                   Detection (BFD),
                   Section 6.8.18";
    }
  }

  // AC profile

  grouping ac-profile {
    description
      "Grouping for attachment circuit profiles.";
    // Layer 2
    container l2-connection {
      description
        "Defines Layer 2 protocols and parameters that
         are required to enable AC connectivity.";
      //uses l2-connection;
    }
    // Layer 3
    container ip-connection {
      description
        "Defines IP connection parameters.";
    }
    // Routing
    container routing-protocols {
      description
        "Defines routing protocols.";
      uses routing-profile;
    }
    // OAM
    container oam {
      description
        "Defines the Operations, Administration,
         and Maintenance (OAM) mechanisms used.";
      container bfd {
        if-feature "vpn-common:bfd";
        description
          "Container for BFD.";
        uses bfd;
      }
    }
  }

  //AC network provisioning 

  grouping ac {
    description
      "Grouping for attachment circuits.";
    leaf description {
      type string;
      description
        "Associates a description with an AC.";
    }
    // Layer 2
    container l2-connection {
      description
        "Defines Layer 2 protocols and parameters that
         are required to enable AC connectivity.";
      uses l2-connection-if-ref;
    }
    // Layer 3
    container ip-connection {
      description
        "Defines IP connection parameters.";
      uses ip-connection;
    }
    // Routing
    container routing-protocols {
      description
        "Defines routing protocols.";
      uses routing;
    }
    // OAM
    container oam {
      description
        "Defines the Operations, Administration,
         and Maintenance (OAM) mechanisms used.";
      container bfd {
        description
          "Container for BFD.";
        leaf profile {
          type leafref {
            path "/nw:networks/nw:network"
               + "/ac-ntw:specific-provisioning-profiles"
               + "/valid-provider-identifiers"
               + "/bfd-profile-identifier/id";
          }
          //type ac-svc:bfd-profile-reference;
          description
            "Well-known service provider profile name.

             The provider can propose some profiles
             to the customer, depending on the
             service level the customer wants to
             achieve.";
        }
        uses bfd;
        container authentication {
          presence "Enables BFD authentication";
          description
            "Parameters for BFD authentication.";
          leaf key-chain {
            type key-chain:key-chain-ref;
            description
              "Name of the key chain.";
          }
          leaf meticulous {
            type boolean;
            description
              "Enables meticulous mode.";
            reference
              "RFC 5880: Bidirectional Forwarding
                         Detection (BFD),
                         Section 6.7";
          }
        }
        uses vpn-common:service-status;
      }
    }
    // Security 
    container security {
      description
        "Site-specific security parameters.";
      container encryption {
        if-feature "vpn-common:encryption";
        description
          "Container for AC security encryption.";
        leaf enabled {
          type boolean;
          default "false";
          description
            "If set to 'true', traffic encryption on
             the connection is required.  Otherwise,
             it is disabled.";
        }
        leaf layer {
          when "../enabled = 'true'" {
            description
              "Included only when encryption
               is enabled.";
          }
          type enumeration {
            enum layer2 {
              description
                "Encryption occurs at Layer 2.";
            }
            enum layer3 {
              description
                "Encryption occurs at Layer 3.
                 For example, IPsec may be used when
                 a customer requests Layer 3
                 encryption.";
            }
          }
          description
            "Indicates the layer on which encryption
             is applied.";
        }
      }
      container encryption-profile {
        when "../encryption/enabled = 'true'" {
          description
            "Indicates the layer on which encryption
             is enabled.";
        }
        description
          "Container for the encryption profile.";
        choice profile {
          description
            "Choice for the encryption profile.";
          case provider-profile {
            leaf profile-name {
              type leafref {
                path "/nw:networks/nw:network"
                   + "/ac-ntw:specific-provisioning-profiles"
                   + "/valid-provider-identifiers"
                   + "/encryption-profile-identifier/id";
              }
              //type ac-svc:encryption-profile-reference;
              description
                "Name of the service provider's
                 profile to be applied.";
            }
          }
          case customer-profile {
            leaf customer-key-chain {
              type key-chain:key-chain-ref;
              description
                "Customer-supplied key chain.";
            }
          }
        }
      }
    }
  }

  augment "/nw:networks/nw:network" {
    description
      "Add a list of profiles.";
    // References to the profiles defined in the AC-SVC
    container specific-provisioning-profiles {
      description
        "Contains a set of valid profiles to reference
         in the AC activation.";
      uses vpn-common:vpn-profile-cfg;
    }
    list ac-profile {
      key "name";
      description
        "Maintains a list of AC profiles.";
      leaf name {
        type string;
        description
          "Name of the AC.";
      }
      uses ac-ntw:ac-profile;
    }
  }

  augment "/nw:networks/nw:network/nw:node"
        + "/sap:service/sap:sap" {
    when '../../../nw:network-types/sap:sap-network' {
      description
        "Augmentation parameters apply only for SAP
         networks.";
    }
    description
      "Augments SAPs with AC provisioning details.";
    list ac {
      key "name";
      description
        "List of ACs.";
      leaf name {
        type string;
        description
          "A local AC identifier.";
      }
      leaf ac-ref {
        type ac-svc:attachment-circuit-reference;
        description
          "A reference to the AC as exposed at the service
           level.";
      }
      list ac-profile {
        key "profile-id";
        description
          "List of AC profiles.";
        leaf profile-id {
          type leafref {
            path "/nw:networks/nw:network/ac-profile/name";
          }
          description
            "A reference to an AC profile.";
        }
      }
      uses ac-ntw:ac;
    }
  }
}
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <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 <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
   is the secure transport layer, and the mandatory-to-implement secure
   transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
   is HTTPS, and the mandatory-to-implement secure transport is TLS
   <xref target="RFC8446"/>.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>
      <t>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)
   and delete operations to these data nodes without proper protection
   or authentication can have a negative effect on network operations.
   These are the subtrees and data nodes and their sensitivity/
   vulnerability in the "ietf-ac-ntw" module:</t>
      <ul spacing="normal">
        <li>TBC</li>
        <li>TBC</li>
      </ul>
      <t>Some of the readable data nodes in this YANG module may be considered
   sensitive or vulnerable in some network environments.  It is thus
   important to control read access (e.g., via get, get-config, or
   notification) to these data nodes.  These are the subtrees and data
   nodes and their sensitivity/vulnerability in the "ietf-ac-svc" module:</t>
      <ul spacing="normal">
        <li>TBC</li>
        <li>TBC</li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to register the following URI in the "ns" subregistry within
   the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:yang:ietf-ac-ntw
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.
]]></artwork>
      <t>IANA is requested to register the following YANG module in the "YANG Module
   Names" subregistry <xref target="RFC6020"/> within the "YANG Parameters" registry.</t>
      <artwork><![CDATA[
   Name:  ietf-ac-ntw
   Maintained by IANA?  N
   Namespace:  urn:ietf:params:xml:ns:yang:ietf-ac-ntw
   Prefix:  ac-ntw
   Reference:  RFC xxxx
]]></artwork>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.boro-opsawg-teas-attachment-circuit">
          <front>
            <title>YANG Data Models for 'Attachment Circuits'-as-a-Service (ACaaS)</title>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Richard Roberts" initials="R." surname="Roberts">
              <organization>Juniper</organization>
            </author>
            <author fullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios">
              <organization>Telefonica</organization>
            </author>
            <author fullname="Samier Barguil" initials="S." surname="Barguil">
              <organization>Nokia</organization>
            </author>
            <author fullname="Bo Wu" initials="B." surname="Wu">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="22" month="February" year="2023"/>
            <abstract>
              <t>   This document specifies a YANG service data model for Attachment
   Circuits (ACs).  The model can be used for the provisioning of ACs
   prior or during service provisioning (e.g., Network Slice Service).
   The document specifies also a module that updates other service and
   network modules with the required information to bind specific
   services to ACs that are created using the AC service model.

   The AC service model is designed with the intent to be reusable.
   Whether a service model reuses structures defined in the AC service
   model or simply include an AC reference is a design choice of these
   service models.  Relying upon the AC model to manage ACs over which a
   service is delivered has the merit to decorrelate the management of a
   service vs. upgrade the AC components to reflect recent AC
   technologies or features.

   Each AC is identified with a unique identifier within a domain.  The
   mapping between this AC and a network node (typically, a Provider
   Edge (PE)) that terminates an AC is hidden to the application/
   customer that makes use of the AC service model.  Such an information
   is internal to the network controller.  Thus, the details about the
   (network node-specific) attachment interfaces are not exposed in this
   service model.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-boro-opsawg-teas-attachment-circuit-02"/>
        </reference>
        <reference anchor="RFC9182">
          <front>
            <title>A YANG Network Data Model for Layer 3 VPNs</title>
            <author fullname="S. Barguil" initials="S." surname="Barguil">
              <organization/>
            </author>
            <author fullname="O. Gonzalez de Dios" initials="O." role="editor" surname="Gonzalez de Dios">
              <organization/>
            </author>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair">
              <organization/>
            </author>
            <author fullname="L. Munoz" initials="L." surname="Munoz">
              <organization/>
            </author>
            <author fullname="A. Aguado" initials="A." surname="Aguado">
              <organization/>
            </author>
            <date month="February" year="2022"/>
            <abstract>
              <t>As a complement to the Layer 3 Virtual Private Network Service Model (L3SM), which is used for communication between customers and service providers, this document defines an L3VPN Network Model (L3NM) that can be used for the provisioning of Layer 3 Virtual Private Network (L3VPN) services within a service provider network. The model provides a network-centric view of L3VPN services.</t>
              <t>The L3NM is meant to be used by a network controller to derive the configuration information that will be sent to relevant network devices. The model can also facilitate communication between a service orchestrator and a network controller/orchestrator.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9182"/>
          <seriesInfo name="DOI" value="10.17487/RFC9182"/>
        </reference>
        <reference anchor="RFC9291">
          <front>
            <title>A YANG Network Data Model for Layer 2 VPNs</title>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair">
              <organization/>
            </author>
            <author fullname="O. Gonzalez de Dios" initials="O." role="editor" surname="Gonzalez de Dios">
              <organization/>
            </author>
            <author fullname="S. Barguil" initials="S." surname="Barguil">
              <organization/>
            </author>
            <author fullname="L. Munoz" initials="L." surname="Munoz">
              <organization/>
            </author>
            <date month="September" year="2022"/>
            <abstract>
              <t>This document defines an L2VPN Network Model (L2NM) that can be used to manage the provisioning of Layer 2 Virtual Private Network (L2VPN) services within a network (e.g., a service provider network). The L2NM complements the L2VPN Service Model (L2SM) by providing a network-centric view of the service that is internal to a service provider. The L2NM is particularly meant to be used by a network controller to derive the configuration information that will be sent to relevant network devices.</t>
              <t>Also, this document defines a YANG module to manage Ethernet segments and the initial versions of two IANA-maintained modules that include a set of identities of BGP Layer 2 encapsulation types and pseudowire types.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9291"/>
          <seriesInfo name="DOI" value="10.17487/RFC9291"/>
        </reference>
        <reference anchor="I-D.ietf-opsawg-sap">
          <front>
            <title>A YANG Network Model for Service Attachment Points (SAPs)</title>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios">
              <organization>Telefonica</organization>
            </author>
            <author fullname="Samier Barguil" initials="S." surname="Barguil">
              <organization>Nokia</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Victor Lopez" initials="V." surname="Lopez">
              <organization>Nokia</organization>
            </author>
            <date day="18" month="January" year="2023"/>
            <abstract>
              <t>   This document defines a YANG data model for representing an abstract
   view of the provider network topology that contains the points from
   which its services can be attached (e.g., basic connectivity, VPN,
   network slices).  Also, the model can be used to retrieve the points
   where the services are actually being delivered to customers
   (including peer networks).

   This document augments the 'ietf-network' data model by adding the
   concept of Service Attachment Points (SAPs).  The SAPs are the
   network reference points to which network services, such as Layer 3
   Virtual Private Network (L3VPN) or Layer 2 Virtual Private Network
   (L2VPN), can be attached.  One or multiple services can be bound to
   the same SAP.  Both User-Network Interface (UNI) and Network-to-
   Network Interface (NNI) are supported in the SAP data model.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-sap-15"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="P. Shafer" initials="P." surname="Shafer">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <author fullname="R. Wilton" initials="R." surname="Wilton">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model.  This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8177">
          <front>
            <title>YANG Data Model for Key Chains</title>
            <author fullname="A. Lindem" initials="A." role="editor" surname="Lindem">
              <organization/>
            </author>
            <author fullname="Y. Qu" initials="Y." surname="Qu">
              <organization/>
            </author>
            <author fullname="D. Yeung" initials="D." surname="Yeung">
              <organization/>
            </author>
            <author fullname="I. Chen" initials="I." surname="Chen">
              <organization/>
            </author>
            <author fullname="J. Zhang" initials="J." surname="Zhang">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>This document describes the key chain YANG data model.  Key chains are commonly used for routing protocol authentication and other applications requiring symmetric keys.  A key chain is a list containing one or more elements containing a Key ID, key string, send/accept lifetimes, and the associated authentication or encryption algorithm.  By properly overlapping the send and accept lifetimes of multiple key chain elements, key strings and algorithms may be gracefully updated.  By representing them in a YANG data model, key distribution can be automated.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8177"/>
          <seriesInfo name="DOI" value="10.17487/RFC8177"/>
        </reference>
        <reference anchor="RFC8294">
          <front>
            <title>Common YANG Data Types for the Routing Area</title>
            <author fullname="X. Liu" initials="X." surname="Liu">
              <organization/>
            </author>
            <author fullname="Y. Qu" initials="Y." surname="Qu">
              <organization/>
            </author>
            <author fullname="A. Lindem" initials="A." surname="Lindem">
              <organization/>
            </author>
            <author fullname="C. Hopps" initials="C." surname="Hopps">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." surname="Berger">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>This document defines a collection of common data types using the YANG data modeling language.  These derived common types are designed to be imported by other modules defined in the routing area.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8294"/>
          <seriesInfo name="DOI" value="10.17487/RFC8294"/>
        </reference>
        <reference anchor="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces.  It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </reference>
        <reference anchor="RFC9181">
          <front>
            <title>A Common YANG Data Model for Layer 2 and Layer 3 VPNs</title>
            <author fullname="S. Barguil" initials="S." surname="Barguil">
              <organization/>
            </author>
            <author fullname="O. Gonzalez de Dios" initials="O." role="editor" surname="Gonzalez de Dios">
              <organization/>
            </author>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair">
              <organization/>
            </author>
            <author fullname="Q. Wu" initials="Q." surname="Wu">
              <organization/>
            </author>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document defines a common YANG module that is meant to be reused by various VPN-related modules such as Layer 3 VPN and Layer 2 VPN network models.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9181"/>
          <seriesInfo name="DOI" value="10.17487/RFC9181"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem.  This document obsoletes RFC 4742.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8969">
          <front>
            <title>A Framework for Automating Service and Network Management with YANG</title>
            <author fullname="Q. Wu" initials="Q." role="editor" surname="Wu">
              <organization/>
            </author>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair">
              <organization/>
            </author>
            <author fullname="D. Lopez" initials="D." surname="Lopez">
              <organization/>
            </author>
            <author fullname="C. Xie" initials="C." surname="Xie">
              <organization/>
            </author>
            <author fullname="L. Geng" initials="L." surname="Geng">
              <organization/>
            </author>
            <date month="January" year="2021"/>
            <abstract>
              <t>Data models provide a programmatic approach to represent services and networks. Concretely, they can be used to derive configuration information for network and service components, and state information that will be monitored and tracked.  Data models can be used during the service and network management life cycle (e.g., service instantiation, service provisioning, service optimization, service monitoring, service diagnosing, and service assurance).  Data models are also instrumental in the automation of network management, and they can provide closed-loop control for adaptive and deterministic service creation, delivery, and maintenance.</t>
              <t>This document describes a framework for service and network management automation that takes advantage of YANG modeling technologies. This framework is drawn from a network operator perspective irrespective of the origin of a data model; thus, it can accommodate YANG modules that are developed outside the IETF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8969"/>
          <seriesInfo name="DOI" value="10.17487/RFC8969"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
      </references>
    </references>
    <section anchor="full-tree">
      <name>Full Tree</name>
      <artwork><![CDATA[
module: ietf-ac-ntw
  augment /nw:networks/nw:network:
    +--rw specific-provisioning-profiles
    |  +--rw valid-provider-identifiers
    |     +--rw external-connectivity-identifier* [id]
    |     |       {external-connectivity}?
    |     |  +--rw id    string
    |     +--rw encryption-profile-identifier* [id]
    |     |  +--rw id    string
    |     +--rw qos-profile-identifier* [id]
    |     |  +--rw id    string
    |     +--rw bfd-profile-identifier* [id]
    |     |  +--rw id    string
    |     +--rw forwarding-profile-identifier* [id]
    |     |  +--rw id    string
    |     +--rw routing-profile-identifier* [id]
    |        +--rw id    string
    +--rw ac-profile* [name]
       +--rw name                 string
       +--rw l2-connection
       +--rw ip-connection
       +--rw routing-protocols
       |  +--rw routing-protocol* [id]
       |     +--rw id      string
       |     +--rw type?   identityref
       |     +--rw bgp
       |     |  +--rw description?              string
       |     |  +--rw local-as?                 inet:as-number
       |     |  +--rw peer-as                   inet:as-number
       |     |  +--rw address-family?           identityref
       |     |  +--rw multihop?                 uint8
       |     |  +--rw as-override?              boolean
       |     |  +--rw allow-own-as?             uint8
       |     |  +--rw prepend-global-as?        boolean
       |     |  +--rw send-default-route?       boolean
       |     |  +--rw site-of-origin?           rt-types:route-origin
       |     |  +--rw ipv6-site-of-origin?
       |     |  |       rt-types:ipv6-route-origin
       |     |  +--rw redistribute-connected* [address-family]
       |     |  |  +--rw address-family    identityref
       |     |  |  +--rw enable?           boolean
       |     |  +--rw bgp-max-prefix
       |     |  |  +--rw max-prefix?          uint32
       |     |  |  +--rw warning-threshold?   decimal64
       |     |  |  +--rw violate-action?      enumeration
       |     |  |  +--rw restart-timer?       uint32
       |     |  +--rw bgp-timers
       |     |     +--rw keepalive?   uint16
       |     |     +--rw hold-time?   uint16
       |     +--rw ospf
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-id           yang:dotted-quad
       |     |  +--rw metric?           uint16
       |     |  +--rw max-lsa?          uint32
       |     +--rw isis
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-address      area-address
       |     |  +--rw level?            identityref
       |     |  +--rw metric?           uint16
       |     |  +--rw mode?             enumeration
       |     +--rw rip
       |     |  +--rw address-family?   identityref
       |     |  +--rw timers
       |     |  |  +--rw update-interval?     uint16
       |     |  |  +--rw invalid-interval?    uint16
       |     |  |  +--rw holddown-interval?   uint16
       |     |  |  +--rw flush-interval?      uint16
       |     |  +--rw default-metric?   uint8
       |     +--rw vrrp
       |        +--rw address-family?   identityref
       |        +--rw ping-reply?       boolean
       +--rw oam
          +--rw bfd {vpn-common:bfd}?
             +--rw session-type?               identityref
             +--rw desired-min-tx-interval?    uint32
             +--rw required-min-rx-interval?   uint32
             +--rw local-multiplier?           uint8
             +--rw holdtime?                   uint32
  augment /nw:networks/nw:network/nw:node/sap:service/sap:sap:
    +--rw ac* [name]
       +--rw name                 string
       +--rw ac-ref?              ac-svc:attachment-circuit-reference
       +--rw ac-profile* [profile-id]
       |  +--rw profile-id    -> /nw:networks/network/ac-profile/name
       +--rw description?         string
       +--rw l2-connection
       |  +--rw encapsulation
       |  |  +--rw encap-type?        identityref
       |  |  +--rw dot1q
       |  |  |  +--rw tag-type?         identityref
       |  |  |  +--rw cvlan-id?         uint16
       |  |  |  +--rw tag-operations
       |  |  |     +--rw (op-choice)?
       |  |  |     |  +--:(pop)
       |  |  |     |  |  +--rw pop?         empty
       |  |  |     |  +--:(push)
       |  |  |     |  |  +--rw push?        empty
       |  |  |     |  +--:(translate)
       |  |  |     |     +--rw translate?   empty
       |  |  |     +--rw tag-1?             dot1q-types:vlanid
       |  |  |     +--rw tag-1-type?
       |  |  |     |       dot1q-types:dot1q-tag-type
       |  |  |     +--rw tag-2?             dot1q-types:vlanid
       |  |  |     +--rw tag-2-type?
       |  |  |             dot1q-types:dot1q-tag-type
       |  |  +--rw priority-tagged
       |  |  |  +--rw tag-type?   identityref
       |  |  +--rw qinq
       |  |     +--rw tag-type?         identityref
       |  |     +--rw svlan-id          uint16
       |  |     +--rw cvlan-id          uint16
       |  |     +--rw tag-operations
       |  |        +--rw (op-choice)?
       |  |        |  +--:(pop)
       |  |        |  |  +--rw pop?         uint8
       |  |        |  +--:(push)
       |  |        |  |  +--rw push?        empty
       |  |        |  +--:(translate)
       |  |        |     +--rw translate?   uint8
       |  |        +--rw tag-1?             dot1q-types:vlanid
       |  |        +--rw tag-1-type?
       |  |        |       dot1q-types:dot1q-tag-type
       |  |        +--rw tag-2?             dot1q-types:vlanid
       |  |        +--rw tag-2-type?
       |  |                dot1q-types:dot1q-tag-type
       |  +--rw (l2-service)?
       |  |  +--:(l2-tunnel-service)
       |  |  |  +--rw l2-tunnel-service
       |  |  |     +--rw type?         identityref
       |  |  |     +--rw pseudowire
       |  |  |     |  +--rw vcid?      uint32
       |  |  |     |  +--rw far-end?   union
       |  |  |     +--rw vpls
       |  |  |     |  +--rw vcid?      uint32
       |  |  |     |  +--rw far-end*   union
       |  |  |     +--rw vxlan
       |  |  |        +--rw vni-id             uint32
       |  |  |        +--rw peer-mode?         identityref
       |  |  |        +--rw peer-ip-address*   inet:ip-address
       |  |  +--:(l2vpn)
       |  |     +--rw l2vpn-id?            vpn-common:vpn-id
       |  +--rw l2-termination-point?      string
       |  +--rw local-bridge-reference?    string
       |  +--rw bearer-reference?          string
       |  |       {vpn-common:bearer-reference}?
       |  +--rw lag-interface {vpn-common:lag-interface}?
       |     +--rw lag-interface-id?   string
       |     +--rw member-link-list
       |        +--rw member-link* [name]
       |           +--rw name    string
       +--rw ip-connection
       |  +--rw l3-termination-point?   string
       |  +--rw ipv4 {vpn-common:ipv4}?
       |  |  +--rw local-address?
       |  |  |       inet:ipv4-address
       |  |  +--rw prefix-length?                           uint8
       |  |  +--rw address-allocation-type?
       |  |  |       identityref
       |  |  +--rw (allocation-type)?
       |  |     +--:(dynamic)
       |  |     |  +--rw (address-assign)?
       |  |     |  |  +--:(number)
       |  |     |  |  |  +--rw number-of-dynamic-address?   uint16
       |  |     |  |  +--:(explicit)
       |  |     |  |     +--rw customer-addresses
       |  |     |  |        +--rw address-pool* [pool-id]
       |  |     |  |           +--rw pool-id          string
       |  |     |  |           +--rw start-address
       |  |     |  |           |       inet:ipv6-address
       |  |     |  |           +--rw end-address?
       |  |     |  |                   inet:ipv6-address
       |  |     |  +--rw (provider-dhcp)?
       |  |     |  |  +--:(dhcp-service-type)
       |  |     |  |  |  +--rw dhcp-service-type?
       |  |     |  |  |          enumeration
       |  |     |  |  +--:(service-type)
       |  |     |  |     +--rw (service-type)?
       |  |     |  |        +--:(relay)
       |  |     |  |           +--rw server-ip-address*
       |  |     |  |                   inet:ipv6-address
       |  |     |  +--rw (dhcp-relay)?
       |  |     |     +--:(customer-dhcp-servers)
       |  |     |        +--rw customer-dhcp-servers
       |  |     |           +--rw server-ip-address*
       |  |     |                   inet:ipv6-address
       |  |     +--:(static-addresses)
       |  |        +--rw primary-address?
       |  |        |       -> ../address/address-id
       |  |        +--rw address* [address-id]
       |  |           +--rw address-id          string
       |  |           +--rw customer-address?   inet:ipv6-address
       |  +--rw ipv6 {vpn-common:ipv6}?
       |     +--rw local-address?
       |     |       inet:ipv6-address
       |     +--rw prefix-length?                           uint8
       |     +--rw address-allocation-type?
       |     |       identityref
       |     +--rw (allocation-type)?
       |        +--:(dynamic)
       |        |  +--rw (address-assign)?
       |        |  |  +--:(number)
       |        |  |  |  +--rw number-of-dynamic-address?   uint16
       |        |  |  +--:(explicit)
       |        |  |     +--rw customer-addresses
       |        |  |        +--rw address-pool* [pool-id]
       |        |  |           +--rw pool-id          string
       |        |  |           +--rw start-address
       |        |  |           |       inet:ipv6-address
       |        |  |           +--rw end-address?
       |        |  |                   inet:ipv6-address
       |        |  +--rw (provider-dhcp)?
       |        |  |  +--:(dhcp-service-type)
       |        |  |  |  +--rw dhcp-service-type?
       |        |  |  |          enumeration
       |        |  |  +--:(service-type)
       |        |  |     +--rw (service-type)?
       |        |  |        +--:(relay)
       |        |  |           +--rw server-ip-address*
       |        |  |                   inet:ipv6-address
       |        |  +--rw (dhcp-relay)?
       |        |     +--:(customer-dhcp-servers)
       |        |        +--rw customer-dhcp-servers
       |        |           +--rw server-ip-address*
       |        |                   inet:ipv6-address
       |        +--:(static-addresses)
       |           +--rw primary-address?
       |           |       -> ../address/address-id
       |           +--rw address* [address-id]
       |              +--rw address-id          string
       |              +--rw customer-address?   inet:ipv6-address
       +--rw routing-protocols
       |  +--rw routing-protocol* [id]
       |     +--rw id                  string
       |     +--rw type?               identityref
       |     +--rw routing-profiles* [id]
       |     |  +--rw id      leafref
       |     |  +--rw type?   identityref
       |     +--rw static
       |     |  +--rw cascaded-lan-prefixes
       |     |     +--rw ipv4-lan-prefixes* [lan next-hop]
       |     |     |       {vpn-common:ipv4}?
       |     |     |  +--rw lan           inet:ipv4-prefix
       |     |     |  +--rw lan-tag?      string
       |     |     |  +--rw next-hop      union
       |     |     |  +--rw metric?       uint32
       |     |     |  +--rw bfd-enable?   boolean {vpn-common:bfd}?
       |     |     |  +--rw preference?   uint32
       |     |     |  +--rw status
       |     |     |     +--rw admin-status
       |     |     |     |  +--rw status?        identityref
       |     |     |     |  +--rw last-change?   yang:date-and-time
       |     |     |     +--ro oper-status
       |     |     |        +--ro status?        identityref
       |     |     |        +--ro last-change?   yang:date-and-time
       |     |     +--rw ipv6-lan-prefixes* [lan next-hop]
       |     |             {vpn-common:ipv6}?
       |     |        +--rw lan           inet:ipv4-prefix
       |     |        +--rw lan-tag?      string
       |     |        +--rw next-hop      union
       |     |        +--rw metric?       uint32
       |     |        +--rw bfd-enable?   boolean {vpn-common:bfd}?
       |     |        +--rw preference?   uint32
       |     |        +--rw status
       |     |           +--rw admin-status
       |     |           |  +--rw status?        identityref
       |     |           |  +--rw last-change?   yang:date-and-time
       |     |           +--ro oper-status
       |     |              +--ro status?        identityref
       |     |              +--ro last-change?   yang:date-and-time
       |     +--rw bgp
       |     |  +--rw peer-groups
       |     |  |  +--rw peer-group* [name]
       |     |  |     +--rw name                      string
       |     |  |     +--rw local-address?            union
       |     |  |     +--rw description?              string
       |     |  |     +--rw local-as?                 inet:as-number
       |     |  |     +--rw peer-as                   inet:as-number
       |     |  |     +--rw address-family?           identityref
       |     |  |     +--rw multihop?                 uint8
       |     |  |     +--rw as-override?              boolean
       |     |  |     +--rw allow-own-as?             uint8
       |     |  |     +--rw prepend-global-as?        boolean
       |     |  |     +--rw send-default-route?       boolean
       |     |  |     +--rw site-of-origin?
       |     |  |     |       rt-types:route-origin
       |     |  |     +--rw ipv6-site-of-origin?
       |     |  |     |       rt-types:ipv6-route-origin
       |     |  |     +--rw redistribute-connected* [address-family]
       |     |  |     |  +--rw address-family    identityref
       |     |  |     |  +--rw enable?           boolean
       |     |  |     +--rw bgp-max-prefix
       |     |  |     |  +--rw max-prefix?          uint32
       |     |  |     |  +--rw warning-threshold?   decimal64
       |     |  |     |  +--rw violate-action?      enumeration
       |     |  |     |  +--rw restart-timer?       uint32
       |     |  |     +--rw bgp-timers
       |     |  |     |  +--rw keepalive?   uint16
       |     |  |     |  +--rw hold-time?   uint16
       |     |  |     +--rw authentication
       |     |  |        +--rw enable?            boolean
       |     |  |        +--rw keying-material
       |     |  |           +--rw (option)?
       |     |  |              +--:(ao)
       |     |  |              |  +--rw enable-ao?          boolean
       |     |  |              |  +--rw ao-keychain?
       |     |  |              |          key-chain:key-chain-ref
       |     |  |              +--:(md5)
       |     |  |              |  +--rw md5-keychain?
       |     |  |              |          key-chain:key-chain-ref
       |     |  |              +--:(explicit)
       |     |  |                 +--rw key-id?             uint32
       |     |  |                 +--rw key?                string
       |     |  |                 +--rw crypto-algorithm?
       |     |  |                         identityref
       |     |  +--rw neighbor* [remote-address]
       |     |     +--rw remote-address            inet:ip-address
       |     |     +--rw local-address?            union
       |     |     +--rw peer-group?
       |     |     |       -> ../../peer-groups/peer-group/name
       |     |     +--rw description?              string
       |     |     +--rw local-as?                 inet:as-number
       |     |     +--rw peer-as                   inet:as-number
       |     |     +--rw address-family?           identityref
       |     |     +--rw multihop?                 uint8
       |     |     +--rw as-override?              boolean
       |     |     +--rw allow-own-as?             uint8
       |     |     +--rw prepend-global-as?        boolean
       |     |     +--rw send-default-route?       boolean
       |     |     +--rw site-of-origin?
       |     |     |       rt-types:route-origin
       |     |     +--rw ipv6-site-of-origin?
       |     |     |       rt-types:ipv6-route-origin
       |     |     +--rw redistribute-connected* [address-family]
       |     |     |  +--rw address-family    identityref
       |     |     |  +--rw enable?           boolean
       |     |     +--rw bgp-max-prefix
       |     |     |  +--rw max-prefix?          uint32
       |     |     |  +--rw warning-threshold?   decimal64
       |     |     |  +--rw violate-action?      enumeration
       |     |     |  +--rw restart-timer?       uint32
       |     |     +--rw bgp-timers
       |     |     |  +--rw keepalive?   uint16
       |     |     |  +--rw hold-time?   uint16
       |     |     +--rw authentication
       |     |     |  +--rw enable?            boolean
       |     |     |  +--rw keying-material
       |     |     |     +--rw (option)?
       |     |     |        +--:(ao)
       |     |     |        |  +--rw enable-ao?          boolean
       |     |     |        |  +--rw ao-keychain?
       |     |     |        |          key-chain:key-chain-ref
       |     |     |        +--:(md5)
       |     |     |        |  +--rw md5-keychain?
       |     |     |        |          key-chain:key-chain-ref
       |     |     |        +--:(explicit)
       |     |     |           +--rw key-id?             uint32
       |     |     |           +--rw key?                string
       |     |     |           +--rw crypto-algorithm?   identityref
       |     |     +--rw status
       |     |        +--rw admin-status
       |     |        |  +--rw status?        identityref
       |     |        |  +--rw last-change?   yang:date-and-time
       |     |        +--ro oper-status
       |     |           +--ro status?        identityref
       |     |           +--ro last-change?   yang:date-and-time
       |     +--rw ospf
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-id           yang:dotted-quad
       |     |  +--rw metric?           uint16
       |     |  +--rw sham-links {vpn-common:rtg-ospf-sham-link}?
       |     |  |  +--rw sham-link* [target-site]
       |     |  |     +--rw target-site    string
       |     |  |     +--rw metric?        uint16
       |     |  +--rw max-lsa?          uint32
       |     |  +--rw authentication
       |     |  |  +--rw enable?            boolean
       |     |  |  +--rw keying-material
       |     |  |     +--rw (option)?
       |     |  |        +--:(auth-key-chain)
       |     |  |        |  +--rw key-chain?
       |     |  |        |          key-chain:key-chain-ref
       |     |  |        +--:(auth-key-explicit)
       |     |  |           +--rw key-id?             uint32
       |     |  |           +--rw key?                string
       |     |  |           +--rw crypto-algorithm?   identityref
       |     |  +--rw status
       |     |     +--rw admin-status
       |     |     |  +--rw status?        identityref
       |     |     |  +--rw last-change?   yang:date-and-time
       |     |     +--ro oper-status
       |     |        +--ro status?        identityref
       |     |        +--ro last-change?   yang:date-and-time
       |     +--rw isis
       |     |  +--rw address-family?   identityref
       |     |  +--rw area-address      area-address
       |     |  +--rw level?            identityref
       |     |  +--rw metric?           uint16
       |     |  +--rw mode?             enumeration
       |     |  +--rw authentication
       |     |  |  +--rw enable?            boolean
       |     |  |  +--rw keying-material
       |     |  |     +--rw (option)?
       |     |  |        +--:(auth-key-chain)
       |     |  |        |  +--rw key-chain?
       |     |  |        |          key-chain:key-chain-ref
       |     |  |        +--:(auth-key-explicit)
       |     |  |           +--rw key-id?             uint32
       |     |  |           +--rw key?                string
       |     |  |           +--rw crypto-algorithm?   identityref
       |     |  +--rw status
       |     |     +--rw admin-status
       |     |     |  +--rw status?        identityref
       |     |     |  +--rw last-change?   yang:date-and-time
       |     |     +--ro oper-status
       |     |        +--ro status?        identityref
       |     |        +--ro last-change?   yang:date-and-time
       |     +--rw rip
       |     |  +--rw address-family?   identityref
       |     |  +--rw timers
       |     |  |  +--rw update-interval?     uint16
       |     |  |  +--rw invalid-interval?    uint16
       |     |  |  +--rw holddown-interval?   uint16
       |     |  |  +--rw flush-interval?      uint16
       |     |  +--rw default-metric?   uint8
       |     |  +--rw authentication
       |     |  |  +--rw enable?            boolean
       |     |  |  +--rw keying-material
       |     |  |     +--rw (option)?
       |     |  |        +--:(auth-key-chain)
       |     |  |        |  +--rw key-chain?
       |     |  |        |          key-chain:key-chain-ref
       |     |  |        +--:(auth-key-explicit)
       |     |  |           +--rw key?                string
       |     |  |           +--rw crypto-algorithm?   identityref
       |     |  +--rw status
       |     |     +--rw admin-status
       |     |     |  +--rw status?        identityref
       |     |     |  +--rw last-change?   yang:date-and-time
       |     |     +--ro oper-status
       |     |        +--ro status?        identityref
       |     |        +--ro last-change?   yang:date-and-time
       |     +--rw vrrp
       |        +--rw address-family?       identityref
       |        +--rw vrrp-group?           uint8
       |        +--rw backup-peer?          inet:ip-address
       |        +--rw virtual-ip-address*   inet:ip-address
       |        +--rw priority?             uint8
       |        +--rw ping-reply?           boolean
       |        +--rw status
       |           +--rw admin-status
       |           |  +--rw status?        identityref
       |           |  +--rw last-change?   yang:date-and-time
       |           +--ro oper-status
       |              +--ro status?        identityref
       |              +--ro last-change?   yang:date-and-time
       +--rw oam
       |  +--rw bfd
       |     +--rw profile?                    leafref
       |     +--rw session-type?               identityref
       |     +--rw desired-min-tx-interval?    uint32
       |     +--rw required-min-rx-interval?   uint32
       |     +--rw local-multiplier?           uint8
       |     +--rw holdtime?                   uint32
       |     +--rw authentication!
       |     |  +--rw key-chain?    key-chain:key-chain-ref
       |     |  +--rw meticulous?   boolean
       |     +--rw status
       |        +--rw admin-status
       |        |  +--rw status?        identityref
       |        |  +--rw last-change?   yang:date-and-time
       |        +--ro oper-status
       |           +--ro status?        identityref
       |           +--ro last-change?   yang:date-and-time
       +--rw security
          +--rw encryption {vpn-common:encryption}?
          |  +--rw enabled?   boolean
          |  +--rw layer?     enumeration
          +--rw encryption-profile
             +--rw (profile)?
                +--:(provider-profile)
                |  +--rw profile-name?         leafref
                +--:(customer-profile)
                   +--rw customer-key-chain?
                           key-chain:key-chain-ref
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
AQA=

-->

</rfc>
