summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9182.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9182.txt')
-rw-r--r--doc/rfc/rfc9182.txt6827
1 files changed, 6827 insertions, 0 deletions
diff --git a/doc/rfc/rfc9182.txt b/doc/rfc/rfc9182.txt
new file mode 100644
index 0000000..75c2bb1
--- /dev/null
+++ b/doc/rfc/rfc9182.txt
@@ -0,0 +1,6827 @@
+
+
+
+
+Internet Engineering Task Force (IETF) S. Barguil
+Request for Comments: 9182 O. Gonzalez de Dios, Ed.
+Category: Standards Track Telefonica
+ISSN: 2070-1721 M. Boucadair, Ed.
+ Orange
+ L. Munoz
+ Vodafone
+ A. Aguado
+ Nokia
+ February 2022
+
+
+ A YANG Network Data Model for Layer 3 VPNs
+
+Abstract
+
+ 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.
+
+ 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.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9182.
+
+Copyright Notice
+
+ Copyright (c) 2022 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Terminology
+ 3. Acronyms and Abbreviations
+ 4. L3NM Reference Architecture
+ 5. Relationship to Other YANG Data Models
+ 6. Sample Uses of the L3NM Data Model
+ 6.1. Enterprise Layer 3 VPN Services
+ 6.2. Multi-Domain Resource Management
+ 6.3. Management of Multicast Services
+ 7. Description of the L3NM YANG Module
+ 7.1. Overall Structure of the Module
+ 7.2. VPN Profiles
+ 7.3. VPN Services
+ 7.4. VPN Instance Profiles
+ 7.5. VPN Nodes
+ 7.6. VPN Network Accesses
+ 7.6.1. Connection
+ 7.6.2. IP Connection
+ 7.6.3. CE-PE Routing Protocols
+ 7.6.3.1. Static Routing
+ 7.6.3.2. BGP
+ 7.6.3.3. OSPF
+ 7.6.3.4. IS-IS
+ 7.6.3.5. RIP
+ 7.6.3.6. VRRP
+ 7.6.4. OAM
+ 7.6.5. Security
+ 7.6.6. Services
+ 7.6.6.1. Overview
+ 7.6.6.2. QoS
+ 7.7. Multicast
+ 8. L3NM YANG Module
+ 9. Security Considerations
+ 10. IANA Considerations
+ 11. References
+ 11.1. Normative References
+ 11.2. Informative References
+ Appendix A. L3VPN Examples
+ A.1. 4G VPN Provisioning Example
+ A.2. Loopback Interface
+ A.3. Overriding VPN Instance Profile Parameters
+ A.4. Multicast VPN Provisioning Example
+ Acknowledgements
+ Contributors
+ Authors' Addresses
+
+1. Introduction
+
+ [RFC8299] defines a YANG Layer 3 Virtual Private Network Service
+ Model (L3SM) that can be used for communication between customers and
+ service providers. Such a model focuses on describing the customer
+ view of the Virtual Private Network (VPN) services and provides an
+ abstracted view of the customer's requested services. That approach
+ limits the usage of the L3SM to the role of a customer service model
+ (as per [RFC8309]).
+
+ This document defines a YANG module called the "L3VPN Network Model"
+ (L3NM). The L3NM is aimed at providing a network-centric view of
+ Layer 3 (L3) VPN services. This data model can be used to facilitate
+ communication between the service orchestrator and the network
+ controller/orchestrator by allowing more network-centric information
+ to be included. It enables such additional capabilities as resource
+ management, or it serves as a multi-domain orchestration interface
+ where logical resources (such as route targets or route
+ distinguishers) must be coordinated.
+
+ This document uses the common VPN YANG module defined in [RFC9181].
+
+ This document does not obsolete [RFC8299]. These two modules are
+ used for similar objectives but with different scopes and views.
+
+ The L3NM YANG module was initially built with a "prune and extend"
+ approach, taking as a starting point the YANG module described in
+ [RFC8299]. Nevertheless, the L3NM is not defined as an augment to
+ the L3SM, because a specific structure is required to meet network-
+ oriented L3 needs.
+
+ Some information captured in the L3SM can be passed by the
+ orchestrator in the L3NM (e.g., customer) or be used to feed some
+ L3NM attributes (e.g., actual forwarding policies). Also, some
+ information captured in the L3SM may be maintained locally within the
+ orchestrator, which is in charge of maintaining the correlation
+ between a customer view and its network instantiation. Likewise,
+ some information captured and exposed using the L3NM can feed the
+ service layer (e.g., capabilities) to drive VPN service order
+ handling and thus the L3SM.
+
+ Section 5.1 of [RFC8969] illustrates how the L3NM can be used within
+ the network management automation architecture.
+
+ The L3NM does not attempt to address all deployment cases, especially
+ those where L3VPN connectivity is supported through the coordination
+ of different VPNs in different underlying networks. More complex
+ deployment scenarios involving the coordination of different VPN
+ instances and different technologies to provide end-to-end VPN
+ connectivity are addressed by complementary YANG modules, e.g.,
+ [YANG-Composed-VPN].
+
+ The L3NM focuses on Layer 3 VPNs based on BGP Provider Edges (PEs) as
+ described in [RFC4026], [RFC4110], and [RFC4364]; and Multicast VPNs
+ as described in [RFC6037] and [RFC6513].
+
+ The YANG data model in this document conforms to the Network
+ Management Datastore Architecture (NMDA) defined in [RFC8342].
+
+2. Terminology
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+ This document assumes that the reader is familiar with the contents
+ of [RFC6241], [RFC7950], [RFC8299], [RFC8309], and [RFC8453] and uses
+ the terminology defined in those documents.
+
+ This document uses the term "network model" as defined in Section 2.1
+ of [RFC8969].
+
+ The meanings of the symbols in the tree diagrams are defined in
+ [RFC8340].
+
+ This document makes use of the following terms:
+
+ Layer 3 VPN Service Model (L3SM): A YANG data model that describes
+ the service requirements of an L3VPN that interconnects a set of
+ sites from the point of view of the customer. The customer
+ service model does not provide details on the service provider
+ network. The L3VPN customer service model is defined in
+ [RFC8299].
+
+ Layer 3 VPN Network Model (L3NM): A YANG data model that describes a
+ VPN service in the service provider network. It contains
+ information on the service provider network and might include
+ allocated resources. It can be used by network controllers to
+ manage and control the VPN service configuration in the service
+ provider network. The corresponding YANG module can be used by a
+ service orchestrator to request a VPN service to a network
+ controller.
+
+ Service orchestrator: A functional entity that interacts with the
+ customer of an L3VPN. The service orchestrator interacts with the
+ customer using the L3SM. The service orchestrator is responsible
+ for the Customer Edge to Provider Edge (CE-PE) attachment
+ circuits, the PE selection, and requesting the VPN service to the
+ network controller.
+
+ Network orchestrator: A functional entity that is hierarchically
+ intermediate between a service orchestrator and network
+ controllers. A network orchestrator can manage one or several
+ network controllers.
+
+ Network controller: A functional entity responsible for the control
+ and management of the service provider network.
+
+ VPN node: An abstraction that represents a set of policies applied
+ on a PE and belonging to a single VPN service. A VPN service
+ involves one or more VPN nodes. As it is an abstraction, the
+ network controller will decide how to implement a VPN node. For
+ example, in a BGP-based VPN, a VPN node could typically be mapped
+ to a Virtual Routing and Forwarding (VRF) instance.
+
+ VPN network access: An abstraction that represents the network
+ interfaces that are associated with a given VPN node. Traffic
+ coming from the VPN network access belongs to the VPN. The
+ attachment circuits (bearers) between CEs and PEs are terminated
+ in the VPN network access. A reference to the bearer is
+ maintained to allow keeping the link between the L3SM and L3NM
+ when both models are used in a given deployment.
+
+ VPN site: A VPN customer's location that is connected to the service
+ provider network via a CE-PE link, which can access at least one
+ VPN [RFC4176].
+
+ VPN service provider: A service provider that offers VPN-related
+ services [RFC4176].
+
+ Service provider network: A network that is able to provide VPN-
+ related services.
+
+ This document is aimed at modeling BGP PE-based VPNs in a service
+ provider network, so the terms defined in [RFC4026] and [RFC4176] are
+ used in this document as well.
+
+3. Acronyms and Abbreviations
+
+ The following acronyms and abbreviations are used in this document:
+
+ ACL Access Control List
+ AS Autonomous System
+ ASM Any-Source Multicast
+ ASN AS Number
+ BFD Bidirectional Forwarding Detection
+ BGP Border Gateway Protocol
+ BSR Bootstrap Router
+ CE Customer Edge
+ CsC Carriers' Carriers
+ IGMP Internet Group Management Protocol
+ L3NM L3VPN Network Model
+ L3SM L3VPN Service Model
+ L3VPN Layer 3 Virtual Private Network
+ MLD Multicast Listener Discovery
+ MSDP Multicast Source Discovery Protocol
+ MVPN Multicast VPN
+ NAT Network Address Translation
+ OAM Operations, Administration, and Maintenance
+ OSPF Open Shortest Path First
+ PE Provider Edge
+ PIM Protocol Independent Multicast
+ QoS Quality of Service
+ RD Route Distinguisher
+ RP Rendezvous Point
+ RT Route Target
+ SA Security Association
+ SSM Source-Specific Multicast
+ VPN Virtual Private Network
+ VRF Virtual Routing and Forwarding
+
+4. L3NM Reference Architecture
+
+ Figure 1 depicts the reference architecture for the L3NM. The figure
+ is an expansion of the architecture presented in Section 5 of
+ [RFC8299]; it decomposes the box marked "orchestration" in that
+ section into three separate functional components: service
+ orchestration, network orchestration, and domain orchestration.
+
+ Although some deployments may choose to construct a monolithic
+ orchestration component (covering both service and network matters),
+ this document advocates for a clear separation between service and
+ network orchestration components for the sake of better flexibility.
+ Such a design adheres to the L3VPN reference architecture defined in
+ Section 1.3 of [RFC4176]. This separation relies upon a dedicated
+ communication interface between these components and appropriate YANG
+ modules that reflect network-related information. Such information
+ is hidden from customers.
+
+ The intelligence for translating customer-facing information into
+ network-centric information (and vice versa) is implementation
+ specific.
+
+ The terminology from [RFC8309] is used here to show the distinction
+ between the customer service model, the service delivery model, the
+ network configuration model, and the device configuration model. In
+ that context, the "domain orchestration" and "config manager" roles
+ may be performed by "controllers".
+
+ +---------------+
+ | Customer |
+ +-------+-------+
+ Customer Service Model |
+ (e.g., 'l3vpn-svc') |
+ +-------+-------+
+ | Service |
+ | Orchestration |
+ +-------+-------+
+ Service Delivery Model |
+ 'l3vpn-ntw' |
+ +-------+-------+
+ | Network |
+ | Orchestration |
+ +-------+-------+
+ Network Configuration Model |
+ +-----------+-----------+
+ | |
+ +--------+------+ +--------+------+
+ | Domain | | Domain |
+ | Orchestration | | Orchestration |
+ +---+-----------+ +--------+------+
+ Device | | |
+ Configuration | | |
+ Model | | |
+ +----+----+ | |
+ | Config | | |
+ | Manager | | |
+ +----+----+ | |
+ | | |
+ | NETCONF/CLI..................
+ | | |
+ +------------------------------------------------+
+ Network
+
+ NETCONF: Network Configuration Protocol
+ CLI: Command-Line Interface
+
+ Figure 1: L3NM Reference Architecture
+
+ The customer may use a variety of means to request a service that may
+ trigger the instantiation of an L3NM. The customer may use the L3SM
+ or more abstract models to request a service that relies upon an
+ L3VPN service. For example, the customer may supply an IP
+ Connectivity Provisioning Profile (CPP) that characterizes the
+ requested service [RFC7297], an enhanced VPN (VPN+) service
+ [Enhanced-VPN-Framework], or an IETF network slice service
+ [Network-Slices-Framework].
+
+ Note also that both the L3SM and the L3NM may be used in the context
+ of the Abstraction and Control of TE Networks (ACTN) framework
+ [RFC8453]. Figure 2 shows the Customer Network Controller (CNC), the
+ Multi-Domain Service Coordinator (MDSC), the Provisioning Network
+ Controller (PNC) components, and the interfaces where the L3SM and
+ L3NM are used.
+
+ +----------------------------------+
+ | Customer |
+ | +-----------------------------+ |
+ | | CNC | |
+ | +-----------------------------+ |
+ +----+-----------------------+-----+
+ | |
+ | L3SM | L3SM
+ | |
+ +---------+---------+ +---------+---------+
+ | MDSC | | MDSC |
+ | +---------------+ | | (parent) |
+ | | Service | | +---------+---------+
+ | | Orchestration | | |
+ | +-------+-------+ | | L3NM
+ | | | |
+ | | L3NM | +---------+---------+
+ | | | | MDSC |
+ | +-------+-------+ | | (child) |
+ | | Network | | +---------+---------+
+ | | Orchestration | | |
+ | +---------------+ | |
+ +---------+---------+ |
+ | |
+ | Network Configuration |
+ | |
+ +------------+-------+ +---------+------------+
+ | Domain | | Domain |
+ | Controller | | Controller |
+ | +---------+ | | +---------+ |
+ | | PNC | | | | PNC | |
+ | +---------+ | | +---------+ |
+ +------------+-------+ +---------+------------+
+ | |
+ | Device Configuration |
+ | |
+ +----+---+ +----+---+
+ | Device | | Device |
+ +--------+ +--------+
+
+ Figure 2: L3SM and L3NM in the Context of the ACTN
+
+5. Relationship to Other YANG Data Models
+
+ The "ietf-vpn-common" module [RFC9181] includes a set of identities,
+ types, and groupings that are meant to be reused by VPN-related YANG
+ modules independently of the layer (e.g., Layer 2, Layer 3) and the
+ type of the module (e.g., network model, service model), including
+ future revisions of existing models (e.g., [RFC8299] or [RFC8466]).
+ The L3NM reuses these common types and groupings.
+
+ In order to avoid data duplication and to ease passing data between
+ layers when required (service layer to network layer and vice versa),
+ early versions of the L3NM reused many of the data nodes that are
+ defined in [RFC8299]. Nevertheless, that approach was abandoned in
+ favor of the "ietf-vpn-common" module because that initial design was
+ interpreted as if the deployment of the L3NM depends on the L3SM,
+ while this is not the case. For example, a service provider may
+ decide to use the L3NM to build its L3VPN services without exposing
+ the L3SM.
+
+ As discussed in Section 4, the L3NM is meant to manage L3VPN services
+ within a service provider network. The module provides a network
+ view of the service. Such a view is only visible within the service
+ provider and is not exposed outside (to customers, for example). The
+ items below discuss how the L3NM interfaces with other YANG modules:
+
+ L3SM: The L3NM is not a customer service model.
+
+ The internal view of the service (i.e., the L3NM) may be mapped to
+ an external view that is visible to customers: the L3VPN Service
+ Model (L3SM) [RFC8299].
+
+ The L3NM can be fed with inputs that are requested by customers.
+ Such requests typically rely upon an L3SM template. Concretely,
+ some parts of the L3SM module can be directly mapped to the L3NM,
+ while other parts are generated as a function of the requested
+ service and local guidelines. Some other parts are local to the
+ service provider and do not map directly to the L3SM.
+
+ Note that using the L3NM within a service provider does not
+ assume, nor does it preclude, exposing the VPN service via the
+ L3SM. This is deployment specific. Nevertheless, the design of
+ the L3NM tries to align as much as possible with the features
+ supported by the L3SM to ease the grafting of both the L3NM and
+ the L3SM for the sake of highly automated VPN service provisioning
+ and delivery.
+
+ Network Topology Modules: An L3VPN involves nodes that are part of a
+ topology managed by the service provider network. The topology
+ can be represented using the network topology YANG module defined
+ in [RFC8345] or its extension, such as a network YANG module for
+ Service Attachment Points (SAPs) [YANG-SAPs].
+
+ Device Modules: The L3NM is not a device model.
+
+ Once a global VPN service is captured by means of the L3NM, the
+ actual activation and provisioning of the VPN service will involve
+ a variety of device modules to tweak the required functions for
+ the delivery of the service. These functions are supported by the
+ VPN nodes and can be managed using device YANG modules. A non-
+ comprehensive list of such device YANG modules is provided below:
+
+ * Routing management [RFC8349].
+
+ * BGP [BGP-YANG].
+
+ * PIM [PIM-YANG].
+
+ * NAT management [RFC8512].
+
+ * QoS management [QoS-YANG].
+
+ * ACLs [RFC8519].
+
+ How the L3NM is used to derive device-specific actions is
+ implementation specific.
+
+6. Sample Uses of the L3NM Data Model
+
+ This section provides a non-exhaustive list of examples that
+ illustrate contexts where the L3NM can be used.
+
+6.1. Enterprise Layer 3 VPN Services
+
+ Enterprise L3VPNs are one of the most demanded services for carriers;
+ therefore, L3NM can be useful for automating the provisioning and
+ maintenance of these VPNs. Templates and batch processes can be
+ built, and as a result many parameters are needed for the creation
+ from scratch of a VPN that can be abstracted to the upper Software-
+ Defined Networking (SDN) layer [RFC7149] [RFC7426], but some manual
+ intervention will still be required.
+
+ A common function that is supported by VPNs is the addition or
+ removal of VPN nodes. Workflows can use the L3NM in these scenarios
+ to add or prune nodes from the network data model as required.
+
+6.2. Multi-Domain Resource Management
+
+ The implementation of L3VPN services that span administratively
+ separated domains (i.e., that are under the administration of
+ different management systems or controllers) requires some network
+ resources to be synchronized between systems. Particularly,
+ resources must be adequately managed in each domain to avoid broken
+ configurations.
+
+ For example, route targets (RTs) shall be synchronized between PEs.
+ When all PEs are controlled by the same management system, RT
+ allocation can be performed by that management system. In cases
+ where the service spans multiple management systems, the task of
+ allocating RTs has to be aligned across the domains; therefore, the
+ network model must provide a way to specify RTs. In addition, route
+ distinguishers (RDs) must also be synchronized to avoid collisions of
+ RD allocations between separate management systems. An incorrect
+ allocation might lead to the same RD and IP prefixes being exported
+ by different PEs.
+
+6.3. Management of Multicast Services
+
+ Multicast services over L3VPNs can be implemented using dual PIM
+ MVPNs (also known as the draft-rosen model) [RFC6037] or MVPNs based
+ on Multiprotocol BGP (MP-BGP) [RFC6513] [RFC6514]. Both methods are
+ supported and equally effective, but the main difference is that MP-
+ BGP-based MVPNs do not require multicast configuration on the service
+ provider network. MP-BGP MVPNs employ the intra-AS BGP control plane
+ and PIM Sparse Mode [RFC7761] as the data plane. The PIM state
+ information is maintained between PEs using the same architecture
+ that is used for unicast VPNs.
+
+ On the other hand, [RFC6037] has limitations, such as reduced options
+ for transport, control plane scalability, availability, operational
+ inconsistency, and the need to maintain state in the backbone.
+ Because of these limitations, MP-BGP MVPNs provide the architectural
+ model that has been taken as the base for implementing multicast
+ services in L3VPNs. In this scenario, BGP is used to autodiscover
+ MVPN PE members and the customer PIM signaling is sent across the
+ provider's core through MP-BGP. The multicast traffic is transported
+ on MPLS Point-to-Multipoint (P2MP) Label Switched Paths (LSPs).
+
+7. Description of the L3NM YANG Module
+
+ The L3NM ("ietf-l3vpn-ntw") is defined to manage L3VPNs in a service
+ provider network. In particular, the "ietf-l3vpn-ntw" module can be
+ used to create, modify, and retrieve L3VPN services of a network.
+
+ The full tree diagram of the module can be generated using the
+ "pyang" tool [PYANG]. That tree is not included here because it is
+ too long (Section 3.3 of [RFC8340]). Instead, subtrees are provided
+ for the reader's convenience.
+
+7.1. Overall Structure of the Module
+
+ The "ietf-l3vpn-ntw" module uses two main containers: 'vpn-profiles'
+ and 'vpn-services' (see Figure 3).
+
+ The 'vpn-profiles' container is used by the provider to maintain a
+ set of common VPN profiles that apply to one or several VPN services
+ (Section 7.2).
+
+ The 'vpn-services' container maintains the set of VPN services
+ managed within the service provider network. The 'vpn-service' is
+ the data structure that abstracts a VPN service (Section 7.3).
+
+ module: ietf-l3vpn-ntw
+ +--rw l3vpn-ntw
+ +--rw vpn-profiles
+ | ...
+ +--rw vpn-services
+ +--rw vpn-service* [vpn-id]
+ ...
+ +--rw vpn-nodes
+ +--rw vpn-node* [vpn-node-id]
+ ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ ...
+
+ Figure 3: Overall L3NM Tree Structure
+
+ Some of the data nodes are keyed by the address family. For the sake
+ of data representation compactness, it is RECOMMENDED to use the
+ dual-stack address family for data nodes that have the same value for
+ both IPv4 and IPv6. If, for some reason, a data node is present for
+ both dual-stack and IPv4 (or IPv6), the value that is indicated under
+ dual-stack takes precedence over the value that is indicated under
+ IPv4 (or IPv6).
+
+7.2. VPN Profiles
+
+ The 'vpn-profiles' container (Figure 4) allows the VPN service
+ provider to define and maintain a set of VPN profiles [RFC9181] that
+ apply to one or several VPN services.
+
+ +--rw l3vpn-ntw
+ +--rw vpn-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 vpn-services
+ ...
+
+ Figure 4: VPN Profiles Subtree Structure
+
+ This document does not make any assumption about the exact definition
+ of these profiles. The exact definition of the profiles is local to
+ each VPN service provider. The model only includes an identifier for
+ these profiles in order to facilitate identifying and binding local
+ policies when building a VPN service. As shown in Figure 4, the
+ following identifiers can be included:
+
+ 'external-connectivity-identifier': This identifier refers to a
+ profile that defines the external connectivity provided to a VPN
+ service (or a subset of VPN sites). External connectivity may be
+ access to the Internet or restricted connectivity, such as access
+ to a public/private cloud.
+
+ 'encryption-profile-identifier': An encryption profile refers to a
+ set of policies related to the encryption schemes and setup that
+ can be applied when building and offering a VPN service.
+
+ 'qos-profile-identifier': A Quality of Service (QoS) profile refers
+ to a set of policies, such as classification, marking, and actions
+ (e.g., [RFC3644]).
+
+ 'bfd-profile-identifier': A Bidirectional Forwarding Detection (BFD)
+ profile refers to a set of BFD policies [RFC5880] that can be
+ invoked when building a VPN service.
+
+ 'forwarding-profile-identifier': A forwarding profile refers to the
+ policies that apply to the forwarding of packets conveyed within a
+ VPN. Such policies may consist, for example, of applying Access
+ Control Lists (ACLs).
+
+ 'routing-profile-identifier': A routing profile refers to a set of
+ routing policies that will be invoked (e.g., BGP policies) when
+ delivering the VPN service.
+
+7.3. VPN Services
+
+ The 'vpn-service' is the data structure that abstracts a VPN service
+ in the service provider network. Each 'vpn-service' is uniquely
+ identified by an identifier: 'vpn-id'. Such a 'vpn-id' is only
+ meaningful locally (e.g., the network controller). The subtree of
+ the 'vpn-services' is shown in Figure 5.
+
+ +--rw l3vpn-ntw
+ +--rw vpn-profiles
+ | ...
+ +--rw vpn-services
+ +--rw vpn-service* [vpn-id]
+ +--rw vpn-id vpn-common:vpn-id
+ +--rw vpn-name? string
+ +--rw vpn-description? string
+ +--rw customer-name? string
+ +--rw parent-service-id? vpn-common:vpn-id
+ +--rw vpn-type? identityref
+ +--rw vpn-service-topology? 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 vpn-instance-profiles
+ | ...
+ +--rw underlay-transport
+ | +-- (type)?
+ | +--:(abstract)
+ | | +--rw transport-instance-id? string
+ | | +--rw instance-type? identityref
+ | +--:(protocol)
+ | +--rw protocol* identityref
+ +--rw external-connectivity
+ | {vpn-common:external-connectivity}?
+ | +--rw (profile)?
+ | +--:(profile)
+ | +--rw profile-name? leafref
+ +--rw vpn-nodes
+ ...
+
+ Figure 5: VPN Services Subtree Structure
+
+ The descriptions of the VPN service data nodes that are depicted in
+ Figure 5 are as follows:
+
+ 'vpn-id': An identifier that is used to uniquely identify the L3VPN
+ service within the L3NM scope.
+
+ 'vpn-name': Associates a name with the service in order to
+ facilitate the identification of the service.
+
+ 'vpn-description': Includes a textual description of the service.
+
+ The internal structure of a VPN description is local to each VPN
+ service provider.
+
+ 'customer-name': Indicates the name of the customer who ordered the
+ service.
+
+ 'parent-service-id': Refers to an identifier of the parent service
+ (e.g., L3SM, IETF network slice, VPN+) that triggered the creation
+ of the VPN service. This identifier is used to easily correlate
+ the (network) service as built in the network with a service
+ order. A controller can use that correlation to enrich or
+ populate some fields (e.g., description fields) as a function of
+ local deployments.
+
+ 'vpn-type': Indicates the VPN type. The values are taken from
+ [RFC9181]. For the L3NM, this is typically set to "BGP/MPLS
+ L3VPN", but other values may be defined to support specific Layer
+ 3 VPN capabilities (e.g., [RFC9136]).
+
+ 'vpn-service-topology': Indicates the network topology for the
+ service: 'hub-spoke', 'any-to-any', or 'custom'. The network
+ implementation of this attribute is defined by the correct usage
+ of import and export targets (Section 4.3.5 of [RFC4364]).
+
+ 'status': Used to track the service status of a given VPN service.
+ Both operational status and administrative status are maintained
+ together with a timestamp. For example, a service can be created
+ but not put into effect.
+
+ Administrative status and operational status can be used as a
+ trigger to detect service anomalies. For example, a service that
+ is declared active at the service layer but is still inactive at
+ the network layer may be an indication that network provision
+ actions are needed to align the observed service status with the
+ expected service status.
+
+ 'vpn-instance-profiles': Defines reusable parameters for the same
+ 'vpn-service'.
+
+ More details are provided in Section 7.4.
+
+ 'underlay-transport': Describes the preference for the transport
+ technology to carry the traffic of the VPN service. This
+ preference is especially useful in networks with multiple domains
+ and Network-to-Network Interface (NNI) types. The underlay
+ transport can be expressed as an abstract transport instance
+ (e.g., an identifier of a VPN+ instance, a virtual network
+ identifier, or a network slice name) or as an ordered list of the
+ actual protocols to be enabled in the network.
+
+ A rich set of protocol identifiers that can be used to refer to an
+ underlay transport are defined in [RFC9181].
+
+ 'external-connectivity': Indicates whether/how external connectivity
+ is provided to the VPN service. For example, a service provider
+ may provide external connectivity to a VPN customer (e.g., to a
+ public cloud). Such a service may involve tweaking both filtering
+ and NAT rules (e.g., binding a Virtual Routing and Forwarding
+ (VRF) interface with a NAT instance as discussed in Section 2.10
+ of [RFC8512]). These value-added features may be bound to all, or
+ a subset of, network accesses. Some of these value-added features
+ may be implemented in a PE or in nodes other than PEs (e.g., a P
+ node or even a dedicated node that hosts the NAT function).
+
+ Only a pointer to a local profile that defines the external-
+ connectivity feature is supported in this document.
+
+ 'vpn-node': An abstraction that represents a set of policies applied
+ to a network node and belonging to a single 'vpn-service'. A VPN
+ service is typically built by adding instances of 'vpn-node' to
+ the 'vpn-nodes' container.
+
+ A 'vpn-node' contains 'vpn-network-accesses', which are the
+ interfaces attached to the VPN by which the customer traffic is
+ received. Therefore, the customer sites are connected to the
+ 'vpn-network-accesses'.
+
+ Note that because this is a network data model, information about
+ customers' sites is not required in the model. Rather, such
+ information is relevant in the L3SM. Whether that information is
+ included in the L3NM, e.g., to populate the various 'description'
+ data nodes, is implementation specific.
+
+ More details are provided in Section 7.5.
+
+7.4. VPN Instance Profiles
+
+ VPN instance profiles are meant to factorize data nodes that are used
+ at many levels of the model. Generic VPN instance profiles are
+ defined at the VPN service level and then called at the VPN node and
+ VPN network access levels. Each VPN instance profile is identified
+ by 'profile-id'. This identifier is then referenced for one or
+ multiple VPN nodes (Section 7.5) so that the controller can identify
+ generic resources (e.g., RTs and RDs) to be configured for a given
+ VRF instance.
+
+ The subtree of the 'vpn-instance-profiles' is shown in Figure 6.
+
+ +--rw l3vpn-ntw
+ +--rw vpn-profiles
+ | ...
+ +--rw vpn-services
+ +--rw vpn-service* [vpn-id]
+ +--rw vpn-id vpn-common:vpn-id
+ ...
+ +--rw vpn-instance-profiles
+ | +--rw vpn-instance-profile* [profile-id]
+ | +--rw profile-id string
+ | +--rw role? identityref
+ | +--rw local-as? inet:as-number
+ | | {vpn-common:rtg-bgp}?
+ | +--rw (rd-choice)?
+ | | +--:(directly-assigned)
+ | | | +--rw rd?
+ | | | rt-types:route-distinguisher
+ | | +--:(directly-assigned-suffix)
+ | | | +--rw rd-suffix? uint16
+ | | +--:(auto-assigned)
+ | | | +--rw rd-auto
+ | | | +--rw (auto-mode)?
+ | | | | +--:(from-pool)
+ | | | | | +--rw rd-pool-name? string
+ | | | | +--:(full-auto)
+ | | | | +--rw auto? empty
+ | | | +--ro auto-assigned-rd?
+ | | | rt-types:route-distinguisher
+ | | +--:(auto-assigned-suffix)
+ | | | +--rw rd-auto-suffix
+ | | | +--rw (auto-mode)?
+ | | | | +--:(from-pool)
+ | | | | | +--rw rd-pool-name? string
+ | | | | +--:(full-auto)
+ | | | | +--rw auto? empty
+ | | | +--ro auto-assigned-rd-suffix? uint16
+ | | +--:(no-rd)
+ | | +--rw no-rd? empty
+ | +--rw address-family* [address-family]
+ | | +--rw address-family identityref
+ | | +--rw vpn-targets
+ | | | +--rw vpn-target* [id]
+ | | | | +--rw id uint8
+ | | | | +--rw route-targets* [route-target]
+ | | | | | +--rw route-target
+ | | | | | rt-types:route-target
+ | | | | +--rw route-target-type
+ | | | | rt-types:route-target-type
+ | | | +--rw vpn-policies
+ | | | +--rw import-policy? string
+ | | | +--rw export-policy? string
+ | | +--rw maximum-routes* [protocol]
+ | | +--rw protocol identityref
+ | | +--rw maximum-routes? uint32
+ | +--rw multicast {vpn-common:multicast}?
+ | ...
+
+ Figure 6: Subtree Structure of VPN Instance Profiles
+
+ The descriptions of the listed data nodes are as follows:
+
+ 'profile-id': Used to uniquely identify a VPN instance profile.
+
+ 'role': Indicates the role of the VPN instance profile in the VPN.
+ Role values are defined in [RFC9181] (e.g., 'any-to-any-role',
+ 'spoke-role', 'hub-role').
+
+ 'local-as': Indicates the Autonomous System Number (ASN) that is
+ configured for the VPN node.
+
+ 'rd': As defined in [RFC9181], the following RD assignment modes are
+ supported: direct assignment, full automatic assignment, automatic
+ assignment from a given pool, and no assignment. For illustration
+ purposes, the following modes can be used in the deployment cases:
+
+ 'directly-assigned': The VPN service provider (service
+ orchestrator) assigns RDs explicitly. This case will fit with
+ a brownfield scenario where some existing services need to be
+ updated by the VPN service provider.
+
+ 'full-auto': The network controller auto-assigns RDs. This can
+ apply for the deployment of new services.
+
+ 'no-rd': The VPN service provider (service orchestrator)
+ explicitly wants no RD to be assigned. This case can be used
+ for CE testing within the network or for troubleshooting
+ proposes.
+
+ Also, the module accommodates deployments where only the Assigned
+ Number subfield of RDs (Section 4.2 of [RFC4364]) is assigned from
+ a pool while the Administrator subfield is set to, for example,
+ the Router ID that is assigned to a VPN node. The module supports
+ these modes for managing the Assigned Number subfield: explicit
+ assignment, auto-assignment from a pool, and full auto-assignment.
+
+ 'address-family': Includes a set of data nodes per address family:
+
+ 'address-family': Identifies the address family. It can be set
+ to 'ipv4', 'ipv6', or 'dual-stack'.
+
+ 'vpn-targets': Specifies RT import/export rules for the VPN
+ service (Section 4.3 of [RFC4364]).
+
+ 'maximum-routes': Indicates the maximum number of prefixes that
+ the VPN node can accept for a given routing protocol. If
+ 'protocol' is set to 'any', this means that the maximum value
+ applies to each active routing protocol.
+
+ 'multicast': Enables multicast traffic in the VPN service. Refer to
+ Section 7.7.
+
+7.5. VPN Nodes
+
+ The 'vpn-node' is an abstraction that represents a set of common
+ policies applied on a given network node (typically, a PE) and
+ belonging to one L3VPN service. The 'vpn-node' includes a parameter
+ to indicate the network node on which it is applied. In the case
+ that the 'ne-id' points to a specific PE, the 'vpn-node' will likely
+ be mapped to a VRF instance in the node. However, the model also
+ allows pointing to an abstract node. In this case, the network
+ controller will decide how to split the 'vpn-node' into VRF
+ instances.
+
+ The VPN node subtree structure is shown in Figure 7.
+
+ +--rw l3vpn-ntw
+ +--rw vpn-profiles
+ | ...
+ +--rw vpn-services
+ +--rw vpn-service* [vpn-id]
+ ...
+ +--rw vpn-nodes
+ +--rw vpn-node* [vpn-node-id]
+ +--rw vpn-node-id vpn-common:vpn-id
+ +--rw description? string
+ +--rw ne-id? string
+ +--rw local-as? inet:as-number
+ | {vpn-common:rtg-bgp}?
+ +--rw router-id? rt-types:router-id
+ +--rw active-vpn-instance-profiles
+ | +--rw vpn-instance-profile* [profile-id]
+ | +--rw profile-id leafref
+ | +--rw router-id* [address-family]
+ | | +--rw address-family identityref
+ | | +--rw router-id? inet:ip-address
+ | +--rw local-as? inet:as-number
+ | | {vpn-common:rtg-bgp}?
+ | +--rw (rd-choice)?
+ | | ....
+ | +--rw address-family* [address-family]
+ | | +--rw address-family identityref
+ | | | ...
+ | | +--rw vpn-targets
+ | | | ...
+ | | +--rw maximum-routes* [protocol]
+ | | ...
+ | +--rw multicast {vpn-common:multicast}?
+ | ...
+ +--rw msdp {msdp}?
+ | +--rw peer? inet:ipv4-address
+ | +--rw local-address? inet:ipv4-address
+ | +--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 groups
+ | +--rw group* [group-id]
+ | +--rw group-id string
+ +--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 vpn-network-accesses
+ ...
+
+ Figure 7: VPN Node Subtree Structure
+
+ The descriptions of the 'vpn-node' data nodes (Figure 7) are as
+ follows:
+
+ 'vpn-node-id': An identifier that uniquely identifies a node that
+ enables a VPN network access.
+
+ 'description': Provides a textual description of the VPN node.
+
+ 'ne-id': Includes a unique identifier of the network element where
+ the VPN node is deployed.
+
+ 'local-as': Indicates the ASN that is configured for the VPN node.
+
+ 'router-id': Indicates a 32-bit number that is used to uniquely
+ identify a router within an AS.
+
+ 'active-vpn-instance-profiles': Lists the set of active VPN instance
+ profiles for this VPN node. Concretely, one or more VPN instance
+ profiles that are defined at the VPN service level can be enabled
+ at the VPN node level; each of these profiles is uniquely
+ identified by means of 'profile-id'. The structure of 'active-
+ vpn-instance-profiles' is the same as the structure discussed in
+ Section 7.4, except that the structure of 'active-vpn-instance-
+ profiles' includes 'router-id' but does not include the 'role'
+ leaf. The value of 'router-id' indicated under 'active-vpn-
+ instance-profiles' takes precedence over the 'router-id' under the
+ 'vpn-node' for the indicated address family. For example, Router
+ IDs can be configured per address family. This capability can be
+ used, for example, to configure an IPv6 address as a Router ID
+ when such a capability is supported by involved routers.
+
+ Values defined in 'active-vpn-instance-profiles' override the
+ values defined at the VPN service level. An example is shown in
+ Appendix A.3.
+
+ 'msdp': For redundancy purposes, the Multicast Source Discovery
+ Protocol (MSDP) [RFC3618] may be enabled and used to share state
+ information about sources between multiple Rendezvous Points
+ (RPs). The purpose of MSDP in this context is to enhance the
+ robustness of the multicast service. MSDP may be configured on
+ non-RP routers; this is useful in a domain that does not support
+ multicast sources but does support multicast transit.
+
+ 'groups': Lists the groups to which a VPN node belongs [RFC9181].
+ For example, the 'group-id' is used to associate redundancy or
+ protection constraints with VPN nodes.
+
+ 'status': Tracks the status of a node involved in a VPN service.
+ Both operational status and administrative status are maintained.
+ A mismatch between the administrative status vs. the operational
+ status can be used as a trigger to detect anomalies.
+
+ 'vpn-network-accesses': Represents the point to which sites are
+ connected.
+
+ Note that unlike the L3SM, the L3NM does not need to model the
+ customer site -- only the points that receive traffic from the
+ site (i.e., the PE side of Provider Edge to Customer Edge (PE-CE)
+ connections). Hence, the VPN network access contains the
+ connectivity information between the provider's network and the
+ customer premises. The VPN profiles ('vpn-profiles') have a set
+ of routing policies that can be applied during the service
+ creation.
+
+ See Section 7.6 for more details.
+
+7.6. VPN Network Accesses
+
+ The 'vpn-network-access' includes a set of data nodes that describe
+ the access information for the traffic that belongs to a particular
+ L3VPN (Figure 8).
+
+ ...
+ +--rw vpn-nodes
+ +--rw vpn-node* [vpn-node-id]
+ ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ +--rw id vpn-common:vpn-id
+ +--rw interface-id? string
+ +--rw description? string
+ +--rw vpn-network-access-type? identityref
+ +--rw vpn-instance-profile? leafref
+ +--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 connection
+ | ...
+ +--rw ip-connection
+ | ...
+ +--rw routing-protocols
+ | ...
+ +--rw oam
+ | ...
+ +--rw security
+ | ...
+ +--rw service
+ ...
+
+ Figure 8: VPN Network Access Subtree Structure
+
+ A 'vpn-network-access' (Figure 8) includes the following data nodes:
+
+ 'id': An identifier of the VPN network access.
+
+ 'interface-id': Indicates the physical or logical interface on which
+ the VPN network access is bound.
+
+ 'description': Includes a textual description of the VPN network
+ access.
+
+ 'vpn-network-access-type': Used to select the type of network
+ interface to be deployed in the devices. The available defined
+ values are as follows:
+
+ 'point-to-point': Represents a direct connection between the
+ endpoints. The controller must keep the association between a
+ logical or physical interface on the device with the 'id' of
+ the 'vpn-network-access'.
+
+ 'multipoint': Represents a multipoint connection between the
+ customer site and the PEs. The controller must keep the
+ association between a logical or physical interface on the
+ device with the 'id' of the 'vpn-network-access'.
+
+ 'irb': Represents a connection coming from an L2VPN service. An
+ identifier of such a service ('l2vpn-id') may be included in
+ the 'connection' container, as depicted in Figure 9
+ (Section 7.6.1). The controller must keep the relationship
+ between the logical tunnels or bridges on the devices with the
+ 'id' of the 'vpn-network-access'.
+
+ 'loopback': Represents the creation of a logical interface on a
+ device. An example that illustrates how a loopback interface
+ can be used in the L3NM is provided in Appendix A.2.
+
+ 'vpn-instance-profile': Provides a pointer to an active VPN instance
+ profile at the VPN node level. Referencing an active VPN instance
+ profile implies that all associated data nodes will be inherited
+ by the VPN network access. However, some inherited data nodes
+ (e.g., multicast) can be overridden at the VPN network access
+ level. In such a case, adjusted values take precedence over
+ inherited values.
+
+ 'status': Indicates both operational status and administrative
+ status of a VPN network access.
+
+ 'connection': Represents and groups the set of Layer 2 connectivity
+ from where the traffic of the L3VPN in a particular VPN network
+ access is coming. See Section 7.6.1.
+
+ 'ip-connection': Contains Layer 3 connectivity information on a VPN
+ network access (e.g., IP addressing). See Section 7.6.2.
+
+ 'routing-protocols': Includes the CE-PE routing configuration
+ information. See Section 7.6.3.
+
+ 'oam': Specifies the Operations, Administration, and Maintenance
+ (OAM) mechanisms used for a VPN network access. See
+ Section 7.6.4.
+
+ 'security': Specifies the authentication and the encryption to be
+ applied for a given VPN network access. See Section 7.6.5.
+
+ 'service': Specifies the service parameters (e.g., QoS, multicast)
+ to apply for a given VPN network access. See Section 7.6.6.
+
+7.6.1. Connection
+
+ The 'connection' container represents the Layer 2 connectivity to the
+ L3VPN for a particular VPN network access. As shown in the tree
+ depicted in Figure 9, the 'connection' container defines protocols
+ and parameters to enable such connectivity at Layer 2.
+
+ The traffic can enter the VPN with or without encapsulation (e.g.,
+ VLAN, QinQ). The 'encapsulation' container specifies the Layer 2
+ encapsulation to use (if any) and allows the configuration of the
+ relevant tags.
+
+ The interface that is attached to the L3VPN is identified by the
+ 'interface-id' at the 'vpn-network-access' level. From a network
+ model perspective, it is expected that the 'interface-id' is
+ sufficient to identify the interface. However, specific Layer 2 sub-
+ interfaces may be required to be configured in some implementations/
+ deployments. Such a Layer-2-specific interface can be included in
+ 'l2-termination-point'.
+
+ If a Layer 2 tunnel is needed to terminate the service in the CE-PE
+ connection, the 'l2-tunnel-service' container is used to specify the
+ required parameters to set such a tunneling service (e.g., a Virtual
+ Private LAN Service (VPLS) or a Virtual eXtensible Local Area Network
+ (VXLAN)). An identity called 'l2-tunnel-type' is defined for Layer 2
+ tunnel selection. The container can also identify the pseudowire
+ (Section 6.1 of [RFC8077]).
+
+ As discussed in Section 7.6, 'l2vpn-id' is used to identify the L2VPN
+ service that is associated with an Integrated Routing and Bridging
+ (IRB) interface.
+
+ To accommodate implementations that require internal bridging, a
+ local bridge reference can be specified in 'local-bridge-reference'.
+ Such a reference may be a local bridge domain.
+
+ A site, as per [RFC4176], represents a VPN customer's location that
+ is connected to the service provider network via a CE-PE link, which
+ can access at least one VPN. The connection from the site to the
+ service provider network is the bearer. Every site is associated
+ with a list of bearers. A bearer is the Layer 2 connection with the
+ site. In the L3NM, it is assumed that the bearer has been allocated
+ by the service provider at the service orchestration stage. The
+ bearer is associated with a network element and a port. Hence, a
+ bearer is just a 'bearer-reference' to allow the association between
+ a service request (e.g., the L3SM) and the L3NM.
+
+ The L3NM can be used to create a Link Aggregation Group (LAG)
+ interface for a given L3VPN service ('lag-interface') [IEEE802.1AX].
+ Such a LAG interface can be referenced under 'interface-id'
+ (Section 7.6).
+
+ ...
+ +--rw connection
+ | +--rw encapsulation
+ | | +--rw type? identityref
+ | | +--rw dot1q
+ | | | +--rw tag-type? identityref
+ | | | +--rw cvlan-id? uint16
+ | | +--rw priority-tagged
+ | | | +--rw tag-type? identityref
+ | | +--rw qinq
+ | | +--rw tag-type? identityref
+ | | +--rw svlan-id uint16
+ | | +--rw cvlan-id uint16
+ | +--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
+ ...
+
+ Figure 9: Connection Subtree Structure
+
+7.6.2. IP Connection
+
+ This container is used to group Layer 3 connectivity information,
+ particularly the IP addressing information, of a VPN network access.
+ The allocated address represents the PE interface address
+ configuration. Note that a distinct Layer 3 interface other than the
+ interface indicated under the 'connection' container may be needed to
+ terminate the Layer 3 service. The identifier of such an interface
+ is included in 'l3-termination-point'. For example, this data node
+ can be used to carry the identifier of a bridge domain interface.
+
+ As shown in Figure 10, the 'ip-connection' container can include
+ IPv4, IPv6, or both if dual-stack is enabled.
+
+ ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ ...
+ +--rw ip-connection
+ | +--rw l3-termination-point? string
+ | +--rw ipv4 {vpn-common:ipv4}?
+ | | ...
+ | +--rw ipv6 {vpn-common:ipv6}?
+ | ...
+ ...
+
+ Figure 10: IP Connection Subtree Structure
+
+ For both IPv4 and IPv6, the IP connection supports three IP address
+ assignment modes for customer addresses: provider DHCP, DHCP relay,
+ and static addressing. Note that for the IPv6 case, Stateless
+ Address Autoconfiguration (SLAAC) [RFC4862] can be used. For both
+ IPv4 and IPv6, 'address-allocation-type' is used to indicate the IP
+ address allocation mode to activate for a given VPN network access.
+
+ When 'address-allocation-type' is set to 'provider-dhcp', DHCP
+ assignments can be made locally or by an external DHCP server. Such
+ behavior is controlled by setting 'dhcp-service-type'.
+
+ Figure 11 shows the structure of the dynamic IPv4 address assignment
+ (i.e., by means of DHCP).
+
+ ...
+ +--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)?
+ | | +--:(provider-dhcp)
+ | | | +--rw dhcp-service-type? enumeration
+ | | | +--rw (service-type)?
+ | | | +--:(relay)
+ | | | | +--rw server-ip-address*
+ | | | | inet:ipv4-address
+ | | | +--:(server)
+ | | | +--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:ipv4-address
+ | | | +--rw end-address?
+ | | | inet:ipv4-address
+ | | +--:(dhcp-relay)
+ | | | +--rw customer-dhcp-servers
+ | | | +--rw server-ip-address* inet:ipv4-address
+ | | +--:(static-addresses)
+ | | ...
+ ...
+
+ Figure 11: IP Connection Subtree Structure (IPv4)
+
+ Figure 12 shows the structure of the dynamic IPv6 address assignment
+ (i.e., DHCPv6 and/or SLAAC). Note that if 'address-allocation-type'
+ is set to 'slaac', the Prefix Information option of Router
+ Advertisements that will be issued for SLAAC purposes will carry the
+ IPv6 prefix that is determined by 'local-address' and 'prefix-
+ length'. For example, if 'local-address' is set to '2001:db8:0:1::1'
+ and 'prefix-length' is set to '64', the IPv6 prefix that will be used
+ is '2001:db8:0:1::/64'.
+
+ ...
+ +--rw ip-connection
+ | +--rw l3-termination-point? string
+ | +--rw ipv4 {vpn-common:ipv4}?
+ | | ...
+ | +--rw ipv6 {vpn-common:ipv6}?
+ | +--rw local-address? inet:ipv6-address
+ | +--rw prefix-length? uint8
+ | +--rw address-allocation-type? identityref
+ | +--rw (allocation-type)?
+ | +--:(provider-dhcp)
+ | | +--rw provider-dhcp
+ | | +--rw dhcp-service-type?
+ | | | enumeration
+ | | +--rw (service-type)?
+ | | +--:(relay)
+ | | | +--rw server-ip-address*
+ | | | inet:ipv6-address
+ | | +--:(server)
+ | | +--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
+ | +--:(dhcp-relay)
+ | | +--rw customer-dhcp-servers
+ | | +--rw server-ip-address*
+ | | inet:ipv6-address
+ | +--:(static-addresses)
+ | ...
+
+ Figure 12: IP Connection Subtree Structure (IPv6)
+
+ In the case of static addressing (Figure 13), the model supports the
+ assignment of several IP addresses in the same 'vpn-network-access'.
+ To identify which of the addresses is the primary address of a
+ connection, the 'primary-address' reference MUST be set with the
+ corresponding 'address-id'.
+
+ ...
+ +--rw ip-connection
+ | +--rw l3-termination-point? string
+ | +--rw ipv4 {vpn-common:ipv4}?
+ | | +--rw address-allocation-type? identityref
+ | | +--rw (allocation-type)?
+ | | ...
+ | | +--:(static-addresses)
+ | | +--rw primary-address? -> ../address/address-id
+ | | +--rw address* [address-id]
+ | | +--rw address-id string
+ | | +--rw customer-address? inet:ipv4-address
+ | +--rw ipv6 {vpn-common:ipv6}?
+ | +--rw address-allocation-type? identityref
+ | +--rw (allocation-type)?
+ | ...
+ | +--:(static-addresses)
+ | +--rw primary-address? -> ../address/address-id
+ | +--rw address* [address-id]
+ | +--rw address-id string
+ | +--rw customer-address? inet:ipv6-address
+ ...
+
+ Figure 13: IP Connection Subtree Structure (Static Mode)
+
+7.6.3. CE-PE Routing Protocols
+
+ A VPN service provider can configure one or more routing protocols
+ associated with a particular 'vpn-network-access'. Such routing
+ protocols are enabled between the PE and the CE. Each instance is
+ uniquely identified to accommodate scenarios where multiple instances
+ of the same routing protocol have to be configured on the same link.
+
+ The subtree of the 'routing-protocols' is shown in Figure 14.
+
+ ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ ...
+ +--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 bgp
+ | | ...
+ | +--rw ospf
+ | | ...
+ | +--rw isis
+ | | ...
+ | +--rw rip
+ | | ...
+ | +--rw vrrp
+ | ...
+ +--rw security
+ ...
+
+ Figure 14: Routing Subtree Structure
+
+ Multiple routing instances can be defined, each uniquely identified
+ by an 'id'. The type of routing instance is indicated in 'type'.
+ The values of these attributes are those defined in [RFC9181] (the
+ 'routing-protocol-type' identity).
+
+ Configuring multiple instances of the same routing protocol does not
+ automatically imply that, from a device configuration perspective,
+ there will be parallel instances (e.g., multiple processes) running
+ on the PE-CE link. It is up to each implementation (typically,
+ network orchestration, as shown in Figure 1) to decide on the
+ appropriate configuration as a function of underlying capabilities
+ and service provider operational guidelines. As an example, when
+ multiple BGP peers need to be implemented, multiple instances of BGP
+ must be configured as part of this model. However, from a device
+ configuration point of view, this could be implemented as:
+
+ * Multiple BGP processes with a single neighbor running in each
+ process.
+
+ * A single BGP process with multiple neighbors running.
+
+ * A combination thereof.
+
+ Routing configuration does not include low-level policies. Such
+ policies are handled at the device configuration level. Local
+ policies of a service provider (e.g., filtering) are implemented as
+ part of the device configuration; these are not captured in the L3NM,
+ but the model allows local profiles to be associated with routing
+ instances ('routing-profiles'). Note that these routing profiles can
+ be scoped to capture parameters that are globally applied to all
+ L3VPN services within a service provider network, while customized
+ L3VPN parameters are captured by means of the L3NM. The provisioning
+ of an L3VPN service will thus rely upon the instantiation of these
+ global routing profiles and the customized L3NM.
+
+7.6.3.1. Static Routing
+
+ The L3NM supports the configuration of one or more IPv4/IPv6 static
+ routes. Since the same structure is used for both IPv4 and IPv6,
+ using one single container to group both static entries independently
+ of their address family was considered at one time, but that design
+ was abandoned to ease the mapping, using the structure provided in
+ [RFC8299].
+
+ The static routing subtree structure is shown in Figure 15.
+
+ ...
+ +--rw routing-protocols
+ | +--rw routing-protocol* [id]
+ | ...
+ | +--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 bfd-enable? boolean
+ | | | +--rw metric? uint32
+ | | | +--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:ipv6-prefix
+ | | +--rw lan-tag? string
+ | | +--rw next-hop union
+ | | +--rw bfd-enable? boolean
+ | | +--rw metric? uint32
+ | | +--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
+ ...
+
+ Figure 15: Static Routing Subtree Structure
+
+ As depicted in Figure 15, the following data nodes can be defined for
+ a given IP prefix:
+
+ 'lan-tag': Indicates a local tag (e.g., "myfavorite-lan") that is
+ used to enforce local policies.
+
+ 'next-hop': Indicates the next hop to be used for the static route.
+ It can be identified by an IP address, a predefined next-hop type
+ (e.g., 'discard' or 'local-link'), etc.
+
+ 'bfd-enable': Indicates whether BFD is enabled or disabled for this
+ static route entry.
+
+ 'metric': Indicates the metric associated with the static route
+ entry. This metric is used when the route is exported into an
+ IGP.
+
+ 'preference': Indicates the preference associated with the static
+ route entry. This preference is used to select a preferred route
+ among routes to the same destination prefix.
+
+ 'status': Used to convey the status of a static route entry. This
+ data node can also be used to control the (de)activation of
+ individual static route entries.
+
+7.6.3.2. BGP
+
+ The L3NM allows the configuration of a BGP neighbor, including a set
+ of parameters that are pertinent to be tweaked at the network level
+ for service customization purposes. The 'bgp' container does not aim
+ to include every BGP parameter; a comprehensive set of parameters
+ belongs more to the BGP device model.
+
+ The BGP routing subtree structure is shown in Figure 16.
+
+ ...
+ +--rw routing-protocols
+ | +--rw routing-protocol* [id]
+ | ...
+ | +--rw bgp
+ | | +--rw description? string
+ | | +--rw local-as? inet:as-number
+ | | +--rw peer-as inet:as-number
+ | | +--rw address-family? identityref
+ | | +--rw local-address? union
+ | | +--rw neighbor* inet:ip-address
+ | | +--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
+ | | | +--:(ipsec)
+ | | | +--rw sa? string
+ | | +--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
+ ...
+
+ Figure 16: BGP Routing Subtree Structure
+
+ The following data nodes are captured in Figure 16. It is up to the
+ implementation (e.g., network orchestrator) to derive the
+ corresponding BGP device configuration:
+
+ 'description': Includes a description of the BGP session.
+
+ 'local-as': Indicates a local AS Number (ASN), if a distinct ASN is
+ required other than the ASN configured at the VPN node level.
+
+ 'peer-as': Conveys the customer's ASN.
+
+ 'address-family': Indicates the address family of the peer. It can
+ be set to 'ipv4', 'ipv6', or 'dual-stack'.
+
+ This address family will be used together with the 'vpn-type' to
+ derive the appropriate Address Family Identifiers (AFIs) /
+ Subsequent Address Family Identifiers (SAFIs) that will be part of
+ the derived device configurations (e.g., unicast IPv4 MPLS L3VPN
+ (AFI,SAFI = 1,128) as defined in Section 4.3.4 of [RFC4364]).
+
+ 'local-address': Specifies an address or a reference to an interface
+ to use when establishing the BGP transport session.
+
+ 'neighbor': Can indicate two neighbors (each for a given address
+ family) or one neighbor (if the 'address-family' attribute is set
+ to 'dual-stack'). A list of IP address(es) of the BGP neighbor(s)
+ can then be conveyed in this data node.
+
+ 'multihop': Indicates the number of allowed IP hops between a PE and
+ its BGP peer.
+
+ 'as-override': If set, this parameter indicates whether ASN override
+ is enabled, i.e., replacing the ASN of the customer specified in
+ the AS_PATH BGP attribute with the ASN identified in the 'local-
+ as' attribute.
+
+ 'allow-own-as': Used in some topologies (e.g., hub-and-spoke) to
+ allow the provider's ASN to be included in the AS_PATH BGP
+ attribute received from a CE. Loops are prevented by setting
+ 'allow-own-as' to a maximum number of the provider's ASN
+ occurrences. By default, this parameter is set to '0' (that is,
+ reject any AS_PATH attribute that includes the provider's ASN).
+
+ 'prepend-global-as': When distinct ASNs are configured at the VPN
+ node and network access levels, this parameter controls whether
+ the ASN provided at the VPN node level is prepended to the AS_PATH
+ attribute.
+
+ 'send-default-route': Controls whether default routes can be
+ advertised to the peer.
+
+ 'site-of-origin': Meant to uniquely identify the set of routes
+ learned from a site via a particular CE-PE connection. It is used
+ to prevent routing loops (Section 7 of [RFC4364]). The Site of
+ Origin attribute is encoded as a Route Origin Extended Community.
+
+ 'ipv6-site-of-origin': Carries an IPv6 Address Specific BGP Extended
+ Community that is used to indicate the Site of Origin for VRF
+ information [RFC5701]. It is used to prevent routing loops.
+
+ 'redistribute-connected': Controls whether the PE-CE link is
+ advertised to other PEs.
+
+ 'bgp-max-prefix': Controls the behavior when a prefix maximum is
+ reached.
+
+ 'max-prefix': Indicates the maximum number of BGP prefixes
+ allowed in the BGP session. If the limit is reached, the
+ action indicated in 'violate-action' will be followed.
+
+ 'warning-threshold': A warning notification is triggered when
+ this limit is reached.
+
+ 'violate-action': Indicates which action to execute when the
+ maximum number of BGP prefixes is reached. Examples of such
+ actions include sending a warning message, discarding extra
+ paths from the peer, or restarting the session.
+
+ 'restart-timer': Indicates, in seconds, the time interval after
+ which the BGP session will be reestablished.
+
+ 'bgp-timers': Two timers can be captured in this container: (1)
+ 'hold-time', which is the time interval that will be used for the
+ Hold Timer (Section 4.2 of [RFC4271]) when establishing a BGP
+ session and (2) 'keepalive', which is the time interval for the
+ KeepaliveTimer between a PE and a BGP peer (Section 4.4 of
+ [RFC4271]). Both timers are expressed in seconds.
+
+ 'authentication': The module adheres to the recommendations in
+ Section 13.2 of [RFC4364], as it allows enabling the TCP
+ Authentication Option (TCP-AO) [RFC5925] and accommodates the
+ installed base that makes use of MD5. In addition, the module
+ includes a provision for using IPsec.
+
+ This version of the L3NM assumes that parameters specific to the
+ TCP-AO are preconfigured as part of the key chain that is
+ referenced in the L3NM. No assumption is made about how such a
+ key chain is preconfigured. However, the structure of the key
+ chain should cover data nodes beyond those in [RFC8177], mainly
+ SendID and RecvID (Section 3.1 of [RFC5925]).
+
+ 'status': Indicates the status of the BGP routing instance.
+
+7.6.3.3. OSPF
+
+ OSPF can be configured to run as a routing protocol on the 'vpn-
+ network-access'.
+
+ The OSPF routing subtree structure is shown in Figure 17.
+
+ ...
+ +--rw routing-protocols
+ | +--rw routing-protocol* [id]
+ | ...
+ | +--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
+ | | | +--:(ipsec)
+ | | | +--rw sa? string
+ | | +--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
+ ...
+
+ Figure 17: OSPF Routing Subtree Structure
+
+ The following data nodes are captured in Figure 17:
+
+ 'address-family': Indicates whether IPv4, IPv6, or both address
+ families are to be activated.
+
+ When the IPv4 or dual-stack address family is requested, it is up
+ to the implementation (e.g., network orchestrator) to decide
+ whether OSPFv2 [RFC4577] or OSPFv3 [RFC6565] is used to announce
+ IPv4 routes. Such a decision will typically be reflected in the
+ device configurations that will be derived to implement the L3VPN.
+
+ 'area-id': Indicates the OSPF Area ID.
+
+ 'metric': Associates a metric with OSPF routes.
+
+ 'sham-links': Used to create OSPF sham links between two VPN network
+ accesses sharing the same area and having a backdoor link
+ (Section 4.2.7 of [RFC4577] and Section 5 of [RFC6565]).
+
+ 'max-lsa': Sets the maximum number of Link State Advertisements
+ (LSAs) that the OSPF instance will accept.
+
+ 'authentication': Controls the authentication schemes to be enabled
+ for the OSPF instance. The following options are supported: IPsec
+ for OSPFv3 authentication [RFC4552], and the Authentication
+ Trailer for OSPFv2 [RFC5709] [RFC7474] and OSPFv3 [RFC7166].
+
+ 'status': Indicates the status of the OSPF routing instance.
+
+7.6.3.4. IS-IS
+
+ The model allows the user to configure IS-IS [ISO10589] [RFC1195]
+ [RFC5308] to run on the 'vpn-network-access' interface. See
+ Figure 18.
+
+ ...
+ +--rw routing-protocols
+ | +--rw routing-protocol* [id]
+ | ...
+ | +--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
+ ...
+
+ Figure 18: IS-IS Routing Subtree Structure
+
+ The following IS-IS data nodes are supported:
+
+ 'address-family': Indicates whether IPv4, IPv6, or both address
+ families are to be activated.
+
+ 'area-address': Indicates the IS-IS area address.
+
+ 'level': Indicates the IS-IS level: Level 1, Level 2, or both.
+
+ 'metric': Associates a metric with IS-IS routes.
+
+ 'mode': Indicates the IS-IS interface mode type. It can be set to
+ 'active' (that is, send or receive IS-IS protocol control packets)
+ or 'passive' (that is, suppress the sending of IS-IS updates
+ through the interface).
+
+ 'authentication': Controls the authentication schemes to be enabled
+ for the IS-IS instance. Both the specification of a key chain
+ [RFC8177] and the direct specification of key and authentication
+ algorithms are supported.
+
+ 'status': Indicates the status of the IS-IS routing instance.
+
+7.6.3.5. RIP
+
+ The model allows the user to configure RIP to run on the 'vpn-
+ network-access' interface. See Figure 19.
+
+ ...
+ +--rw routing-protocols
+ | +--rw routing-protocol* [id]
+ | ...
+ | +--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
+ ...
+
+ Figure 19: RIP Subtree Structure
+
+ As shown in Figure 19, the following RIP data nodes are supported:
+
+ 'address-family': Indicates whether IPv4, IPv6, or both address
+ families are to be activated. This parameter is used to determine
+ whether RIPv2 [RFC2453], RIP Next Generation (RIPng), or both are
+ to be enabled [RFC2080].
+
+ 'timers': Indicates the following timers:
+
+ 'update-interval': The interval at which RIP updates are sent.
+
+ 'invalid-interval': The interval before a RIP route is declared
+ invalid.
+
+ 'holddown-interval': The interval before better RIP routes are
+ released.
+
+ 'flush-interval': The interval before a route is removed from the
+ routing table.
+
+ These timers are expressed in seconds.
+
+ 'default-metric': Sets the default RIP metric.
+
+ 'authentication': Controls the authentication schemes to be enabled
+ for the RIP instance.
+
+ 'status': Indicates the status of the RIP routing instance.
+
+7.6.3.6. VRRP
+
+ The model allows enabling the Virtual Router Redundancy Protocol
+ (VRRP) on the 'vpn-network-access' interface. See Figure 20.
+
+ ...
+ +--rw routing-protocols
+ | +--rw routing-protocol* [id]
+ | ...
+ | +--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
+ ...
+
+ Figure 20: VRRP Subtree Structure
+
+ The following data nodes are supported:
+
+ 'address-family': Indicates whether IPv4, IPv6, or both address
+ families are to be activated. Note that VRRP version 3 [RFC5798]
+ supports both IPv4 and IPv6.
+
+ 'vrrp-group': Used to identify the VRRP group.
+
+ 'backup-peer': Carries the IP address of the peer.
+
+ 'virtual-ip-address': Includes virtual IP addresses for a single
+ VRRP group.
+
+ 'priority': Assigns the VRRP election priority for the backup
+ virtual router.
+
+ 'ping-reply': Controls whether the VRRP speaker should reply to ping
+ requests.
+
+ 'status': Indicates the status of the VRRP instance.
+
+ Note that no authentication data node is included for VRRP, as there
+ isn't any type of VRRP authentication at this time (see Section 9 of
+ [RFC5798]).
+
+7.6.4. OAM
+
+ This container (Figure 21) defines the Operations, Administration,
+ and Maintenance (OAM) mechanisms used for a VPN network access. In
+ the current version of the L3NM, only BFD is supported.
+
+ ...
+ +--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
+ | +--rw profile? leafref
+ | +--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
+ ...
+
+ Figure 21: IP Connection Subtree Structure (OAM)
+
+ The following OAM data nodes can be specified:
+
+ 'session-type': Indicates which BFD flavor is used to set up the
+ session (e.g., classic BFD [RFC5880], Seamless BFD [RFC7880]). By
+ default, it is assumed that the BFD session will follow the
+ behavior specified in [RFC5880].
+
+ 'desired-min-tx-interval': The minimum interval, in microseconds,
+ that a PE would like to use when transmitting BFD Control packets,
+ less any jitter applied.
+
+ 'required-min-rx-interval': The minimum interval, in microseconds,
+ between received BFD Control packets that a PE is capable of
+ supporting, less any jitter applied by the sender.
+
+ 'local-multiplier': The negotiated transmit interval, multiplied by
+ this value, provides the detection time for the peer.
+
+ 'holdtime': Used to indicate the expected BFD holddown time, in
+ milliseconds. This value may be inherited from the service
+ request (see Section 6.3.2.2.2 of [RFC8299]).
+
+ 'profile': Refers to a BFD profile (Section 7.2). Such a profile
+ can be set by the provider or inherited from the service request
+ (see Section 6.3.2.2.2 of [RFC8299]).
+
+ 'authentication': Includes the required information to enable the
+ BFD authentication modes discussed in Section 6.7 of [RFC5880].
+ In particular, 'meticulous' controls the activation of meticulous
+ mode as discussed in Sections 6.7.3 and 6.7.4 of [RFC5880].
+
+ 'status': Indicates the status of BFD.
+
+7.6.5. Security
+
+ The 'security' container specifies the authentication and the
+ encryption to be applied to traffic for a given VPN network access.
+ As depicted in the subtree shown in Figure 22, the L3NM can be used
+ to directly control the encryption to be applied (e.g., Layer 2 or
+ Layer 3 encryption) or invoke a local encryption profile.
+
+ ...
+ +--rw vpn-services
+ +--rw vpn-service* [vpn-id]
+ ...
+ +--rw vpn-nodes
+ +--rw vpn-node* [vpn-node-id]
+ ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ ...
+ +--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
+ +--rw service
+ ...
+
+ Figure 22: Security Subtree Structure
+
+7.6.6. Services
+
+7.6.6.1. Overview
+
+ The 'service' container specifies the service parameters to apply for
+ a given VPN network access (Figure 23).
+
+ ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ ...
+ +--rw service
+ +--rw pe-to-ce-bandwidth? uint64 {vpn-common:inbound-bw}?
+ +--rw ce-to-pe-bandwidth? uint64 {vpn-common:outbound-bw}?
+ +--rw mtu? uint32
+ +--rw qos {vpn-common:qos}?
+ | ...
+ +--rw carriers-carrier
+ | {vpn-common:carriers-carrier}?
+ | +--rw signaling-type? enumeration
+ +--rw ntp
+ | +--rw broadcast? enumeration
+ | +--rw auth-profile
+ | | +--rw profile-id? string
+ | +--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 multicast {vpn-common:multicast}?
+ ...
+
+ Figure 23: Services Subtree Structure
+
+ The following data nodes are defined:
+
+ 'pe-to-ce-bandwidth': Indicates, in bits per second (bps), the
+ inbound bandwidth of the connection (i.e., the download bandwidth
+ from the service provider to the site).
+
+ 'ce-to-pe-bandwidth': Indicates, in bps, the outbound bandwidth of
+ the connection (i.e., the upload bandwidth from the site to the
+ service provider).
+
+ 'mtu': Indicates the MTU at the service level.
+
+ 'qos': Used to define a set of QoS policies to apply on a given
+ connection (refer to Section 7.6.6.2 for more details).
+
+ 'carriers-carrier': Groups a set of parameters that are used when
+ Carriers' Carriers (CsC) is enabled, such as using BGP for
+ signaling purposes [RFC8277].
+
+ 'ntp': Time synchronization may be needed in some VPNs, such as
+ infrastructure and management VPNs. This container is used to
+ enable the NTP service [RFC5905].
+
+ 'multicast': Specifies the multicast mode and other data nodes, such
+ as the address family. Refer to Section 7.7.
+
+7.6.6.2. QoS
+
+ The 'qos' container is used to define a set of QoS policies to apply
+ on a given connection (Figure 24). A QoS policy may be a
+ classification or an action policy. For example, a QoS action can be
+ defined to rate-limit inbound/outbound traffic of a given class of
+ service.
+
+ ...
+ +--rw qos {vpn-common:qos}?
+ | +--rw qos-classification-policy
+ | | +--rw rule* [id]
+ | | +--rw id string
+ | | +--rw (match-type)?
+ | | | +--:(match-flow)
+ | | | | +--rw (l3)?
+ | | | | | +--:(ipv4)
+ | | | | | | ...
+ | | | | | +--:(ipv6)
+ | | | | | ...
+ | | | | +--rw (l4)?
+ | | | | +--:(tcp)
+ | | | | | ...
+ | | | | +--:(udp)
+ | | | | ...
+ | | | +--:(match-application)
+ | | | +--rw match-application?
+ | | | identityref
+ | | +--rw target-class-id? string
+ | +--rw qos-action
+ | | +--rw rule* [id]
+ | | +--rw id string
+ | | +--rw target-class-id? string
+ | | +--rw inbound-rate-limit? decimal64
+ | | +--rw outbound-rate-limit? decimal64
+ | +--rw qos-profile
+ | +--rw qos-profile* [profile]
+ | +--rw profile leafref
+ | +--rw direction? identityref
+ ...
+
+ Figure 24: Overall QoS Subtree Structure
+
+ QoS classification can be based on many criteria, such as the
+ following:
+
+ Layer 3: As shown in Figure 25, classification can be based on any
+ IP header field or a combination thereof. Both IPv4 and IPv6 are
+ supported.
+
+ +--rw qos {vpn-common:qos}?
+ | +--rw qos-classification-policy
+ | | +--rw rule* [id]
+ | | +--rw id string
+ | | +--rw (match-type)?
+ | | | +--:(match-flow)
+ | | | | +--rw (l3)?
+ | | | | | +--:(ipv4)
+ | | | | | | +--rw ipv4
+ | | | | | | +--rw dscp? inet:dscp
+ | | | | | | +--rw ecn? uint8
+ | | | | | | +--rw length? uint16
+ | | | | | | +--rw ttl? uint8
+ | | | | | | +--rw protocol? uint8
+ | | | | | | +--rw ihl? uint8
+ | | | | | | +--rw flags? bits
+ | | | | | | +--rw offset? uint16
+ | | | | | | +--rw identification? uint16
+ | | | | | | +--rw (destination-network)?
+ | | | | | | | +--:(destination-ipv4-network)
+ | | | | | | | +--rw destination-ipv4-network?
+ | | | | | | | inet:ipv4-prefix
+ | | | | | | +--rw (source-network)?
+ | | | | | | +--:(source-ipv4-network)
+ | | | | | | +--rw source-ipv4-network?
+ | | | | | | inet:ipv4-prefix
+ | | | | | +--:(ipv6)
+ | | | | | +--rw ipv6
+ | | | | | +--rw dscp? inet:dscp
+ | | | | | +--rw ecn? uint8
+ | | | | | +--rw length? uint16
+ | | | | | +--rw ttl? uint8
+ | | | | | +--rw protocol? uint8
+ | | | | | +--rw (destination-network)?
+ | | | | | | +--:(destination-ipv6-network)
+ | | | | | | +--rw destination-ipv6-network?
+ | | | | | | inet:ipv6-prefix
+ | | | | | +--rw (source-network)?
+ | | | | | | +--:(source-ipv6-network)
+ | | | | | | +--rw source-ipv6-network?
+ | | | | | | inet:ipv6-prefix
+ | | | | | +--rw flow-label?
+ | | | | | inet:ipv6-flow-label
+ ...
+
+ Figure 25: QoS Subtree Structure (L3)
+
+ Layer 4: As discussed in [RFC9181], any Layer 4 protocol can be
+ indicated in the 'protocol' data node under 'l3' (Figure 25), but
+ only TCP- and UDP-specific match criteria are elaborated in this
+ version, as these protocols are widely used in the context of VPN
+ services. Augmentations can be considered in the future to add
+ other Layer-4-specific data nodes, if needed.
+
+ TCP- or UDP-related match criteria can be specified in the L3NM,
+ as shown in Figure 26.
+
+ As discussed in [RFC9181], some transport protocols use existing
+ protocols (e.g., TCP or UDP) as the substrate. The match criteria
+ for such protocols may rely upon the 'protocol' setting under
+ 'l3', TCP/UDP match criteria as shown in Figure 26, part of the
+ TCP/UDP payload, or a combination thereof. This version of the
+ module does not support such advanced match criteria. Future
+ revisions of the VPN common module or augmentations to the L3NM
+ may consider adding match criteria based on the transport protocol
+ payload (e.g., by means of a bitmask match).
+
+ +--rw qos {vpn-common:qos}?
+ | +--rw qos-classification-policy
+ | | +--rw rule* [id]
+ | | +--rw id string
+ | | +--rw (match-type)?
+ | | | +--:(match-flow)
+ | | | | +--rw (l3)?
+ | | | | | ...
+ | | | | +--rw (l4)?
+ | | | | +--:(tcp)
+ | | | | | +--rw tcp
+ | | | | | +--rw sequence-number? uint32
+ | | | | | +--rw acknowledgement-number? uint32
+ | | | | | +--rw data-offset? uint8
+ | | | | | +--rw reserved? uint8
+ | | | | | +--rw flags? bits
+ | | | | | +--rw window-size? uint16
+ | | | | | +--rw urgent-pointer? uint16
+ | | | | | +--rw options? binary
+ | | | | | +--rw (source-port)?
+ | | | | | | +--:(source-port-range-or-operator)
+ | | | | | | +--rw source-port-range-or-operator
+ | | | | | | +--rw (port-range-or-operator)?
+ | | | | | | +--:(range)
+ | | | | | | | +--rw lower-port
+ | | | | | | | | inet:port-number
+ | | | | | | | +--rw upper-port
+ | | | | | | | inet:port-number
+ | | | | | | +--:(operator)
+ | | | | | | +--rw operator? operator
+ | | | | | | +--rw port
+ | | | | | | inet:port-number
+ | | | | | +--rw (destination-port)?
+ | | | | | +--:(destination-port-range-or-operator)
+ | | | | | +--rw destination-port-range-or-operator
+ | | | | | +--rw (port-range-or-operator)?
+ | | | | | +--:(range)
+ | | | | | | +--rw lower-port
+ | | | | | | | inet:port-number
+ | | | | | | +--rw upper-port
+ | | | | | | inet:port-number
+ | | | | | +--:(operator)
+ | | | | | +--rw operator? operator
+ | | | | | +--rw port
+ | | | | | inet:port-number
+ | | | | +--:(udp)
+ | | | | +--rw udp
+ | | | | +--rw length? uint16
+ | | | | +--rw (source-port)?
+ | | | | | +--:(source-port-range-or-operator)
+ | | | | | +--rw source-port-range-or-operator
+ | | | | | +--rw (port-range-or-operator)?
+ | | | | | +--:(range)
+ | | | | | | +--rw lower-port
+ | | | | | | | inet:port-number
+ | | | | | | +--rw upper-port
+ | | | | | | inet:port-number
+ | | | | | +--:(operator)
+ | | | | | +--rw operator? operator
+ | | | | | +--rw port
+ | | | | | inet:port-number
+ | | | | +--rw (destination-port)?
+ | | | | +--:(destination-port-range-or-operator)
+ | | | | +--rw destination-port-range-or-operator
+ | | | | +--rw (port-range-or-operator)?
+ | | | | +--:(range)
+ | | | | | +--rw lower-port
+ | | | | | | inet:port-number
+ | | | | | +--rw upper-port
+ | | | | | inet:port-number
+ | | | | +--:(operator)
+ | | | | +--rw operator? operator
+ | | | | +--rw port
+ | | | | inet:port-number
+ ...
+
+ Figure 26: QoS Subtree Structure (L4)
+
+ Application match: Relies upon application-specific classification
+ (Figure 24).
+
+7.7. Multicast
+
+ Multicast may be enabled for a particular VPN at the VPN node and VPN
+ network access levels (see Figure 27). Some data nodes (e.g., max-
+ groups (Figure 28)) can be controlled at various levels: VPN service,
+ VPN node level, or VPN network access.
+
+ ...
+ +--rw vpn-services
+ +--rw vpn-service* [vpn-id]
+ ...
+ +--rw vpn-instance-profiles
+ | +--rw vpn-instance-profile* [profile-id]
+ | ....
+ | +--rw multicast {vpn-common:multicast}?
+ | ...
+ +--rw vpn-nodes
+ +--rw vpn-node* [vpn-node-id]
+ ...
+ +--rw active-vpn-instance-profiles
+ | +--rw vpn-instance-profile* [profile-id]
+ | ...
+ | +--rw multicast {vpn-common:multicast}?
+ | ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ ...
+ +--rw service
+ ...
+ +--rw multicast {vpn-common:multicast}?
+ ...
+
+ Figure 27: Overall Multicast Subtree Structure
+
+ Multicast-related data nodes at the VPN instance profile level have
+ the structure shown in Figure 28.
+
+ ...
+ +--rw vpn-services
+ +--rw vpn-service* [vpn-id]
+ ...
+ +--rw vpn-instance-profiles
+ | +--rw vpn-instance-profile* [profile-id]
+ | ....
+ | +--rw multicast {vpn-common:multicast}?
+ | +--rw tree-flavor? identityref
+ | +--rw rp
+ | | +--rw rp-group-mappings
+ | | | +--rw rp-group-mapping* [id]
+ | | | +--rw id uint16
+ | | | +--rw provider-managed
+ | | | | +--rw enabled? boolean
+ | | | | +--rw rp-redundancy? boolean
+ | | | | +--rw optimal-traffic-delivery? boolean
+ | | | | +--rw anycast
+ | | | | +--rw local-address? inet:ip-address
+ | | | | +--rw rp-set-address* inet:ip-address
+ | | | +--rw rp-address inet:ip-address
+ | | | +--rw groups
+ | | | +--rw group* [id]
+ | | | +--rw id uint16
+ | | | +--rw (group-format)
+ | | | +--:(group-prefix)
+ | | | | +--rw group-address?
+ | | | | inet:ip-prefix
+ | | | +--:(startend)
+ | | | +--rw group-start?
+ | | | | inet:ip-address
+ | | | +--rw group-end?
+ | | | | inet:ip-address
+ | | +--rw rp-discovery
+ | | +--rw rp-discovery-type? identityref
+ | | +--rw bsr-candidates
+ | | +--rw bsr-candidate-address*
+ | | | inet:ip-address
+ | +--rw igmp {vpn-common:igmp and vpn-common:ipv4}?
+ | | +--rw static-group* [group-addr]
+ | | | +--rw group-addr
+ | | | | rt-types:ipv4-multicast-group-address
+ | | | +--rw source-addr?
+ | | | rt-types:ipv4-multicast-source-address
+ | | +--rw max-groups? uint32
+ | | +--rw max-entries? uint32
+ | | +--rw version? identityref
+ | +--rw mld {vpn-common:mld and vpn-common:ipv6}?
+ | | +--rw static-group* [group-addr]
+ | | | +--rw group-addr
+ | | | | rt-types:ipv6-multicast-group-address
+ | | | +--rw source-addr?
+ | | | rt-types:ipv6-multicast-source-address
+ | | +--rw max-groups? uint32
+ | | +--rw max-entries? uint32
+ | | +--rw version? identityref
+ | +--rw pim {vpn-common:pim}?
+ | +--rw hello-interval?
+ | | rt-types:timer-value-seconds16
+ | +--rw dr-priority? uint32
+ ...
+
+ Figure 28: Multicast Subtree Structure (VPN Instance Profile Level)
+
+ The model supports a single type of tree per VPN access ('tree-
+ flavor'): Any-Source Multicast (ASM), Source-Specific Multicast
+ (SSM), or bidirectional.
+
+ When ASM is used, the model supports the configuration of Rendezvous
+ Points (RPs). RP discovery may be 'static', 'bsr-rp', or 'auto-rp'.
+ When set to 'static', RP-to-multicast-group mappings MUST be
+ configured as part of the 'rp-group-mappings' container. The RP MAY
+ be a provider node or a customer node. When the RP is a customer
+ node, the RP address must be configured using the 'rp-address' leaf.
+
+ The model supports RP redundancy through the 'rp-redundancy' leaf.
+ How the redundancy is achieved is out of scope.
+
+ When a particular VPN using ASM requires traffic delivery that is
+ more optimal (e.g., requested per the guidance in [RFC8299]),
+ 'optimal-traffic-delivery' can be set. When set to 'true', the
+ implementation must use any mechanism to provide traffic delivery
+ that is more optimal for the customer. For example, anycast is one
+ of the mechanisms for enhancing RP redundancy, providing resilience
+ against failures, and recovering from failures quickly.
+
+ When configuring multicast-related parameters at the VPN node level
+ (Figure 29), the same structure as the structure depicted in
+ Figure 30 is used. When defined at the VPN node level, Internet
+ Group Management Protocol (IGMP) parameters [RFC1112] [RFC2236]
+ [RFC3376], Multicast Listener Discovery (MLD) parameters [RFC2710]
+ [RFC3810], and Protocol Independent Multicast (PIM) parameters
+ [RFC7761] are applicable to all VPN network accesses of that VPN node
+ unless corresponding nodes are overridden at the VPN network access
+ level.
+
+ ...
+ +--rw vpn-nodes
+ +--rw vpn-node* [vpn-node-id]
+ ...
+ +--rw active-vpn-instance-profiles
+ | +--rw vpn-instance-profile* [profile-id]
+ | ...
+ | +--rw multicast {vpn-common:multicast}?
+ | +--rw tree-flavor* identityref
+ | +--rw rp
+ | | ...
+ | +--rw igmp {vpn-common:igmp and vpn-common:ipv4}?
+ | | ...
+ | +--rw mld {vpn-common:mld and vpn-common:ipv6}?
+ | | ...
+ | +--rw pim {vpn-common:pim}?
+ | ...
+
+ Figure 29: Multicast Subtree Structure (VPN Node Level)
+
+ Multicast-related data nodes at the VPN network access level are
+ shown in Figure 30. The values configured at the VPN network access
+ level override the values configured for the corresponding data nodes
+ at other levels.
+
+ ...
+ +--rw vpn-network-accesses
+ +--rw vpn-network-access* [id]
+ ...
+ +--rw service
+ ...
+ +--rw multicast {vpn-common:multicast}?
+ +--rw access-type? enumeration
+ +--rw address-family? identityref
+ +--rw protocol-type? enumeration
+ +--rw remote-source? boolean
+ +--rw igmp {vpn-common:igmp}?
+ | +--rw static-group* [group-addr]
+ | | +--rw group-addr
+ | | rt-types:ipv4-multicast-group-address
+ | | +--rw source-addr?
+ | | rt-types:ipv4-multicast-source-address
+ | +--rw max-groups? uint32
+ | +--rw max-entries? uint32
+ | +--rw max-group-sources? uint32
+ | +--rw version? 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 mld {vpn-common:mld}?
+ | +--rw static-group* [group-addr]
+ | | +--rw group-addr
+ | | rt-types:ipv6-multicast-group-address
+ | | +--rw source-addr?
+ | | rt-types:ipv6-multicast-source-address
+ | +--rw max-groups? uint32
+ | +--rw max-entries? uint32
+ | +--rw max-group-sources? uint32
+ | +--rw version? 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 pim {vpn-common:pim}?
+ +--rw hello-interval? rt-types:timer-value-seconds16
+ +--rw dr-priority? 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
+
+ Figure 30: Multicast Subtree Structure (VPN Network Access Level)
+
+8. L3NM YANG Module
+
+ This module uses types defined in [RFC6991], [RFC8343], and
+ [RFC9181]. It also uses groupings defined in [RFC8519], [RFC8177],
+ and [RFC8294].
+
+ <CODE BEGINS> file "ietf-l3vpn-ntw@2022-02-14.yang"
+ module ietf-l3vpn-ntw {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-l3vpn-ntw";
+ prefix l3nm;
+
+ 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-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types, Section 3";
+ }
+ 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";
+ }
+
+ organization
+ "IETF OPSAWG (Operations and Management Area Working Group)";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
+ WG List: <mailto:opsawg@ietf.org>
+
+ Author: Samier Barguil
+ <mailto:samier.barguilgiraldo.ext@telefonica.com>
+ Editor: Oscar Gonzalez de Dios
+ <mailto:oscar.gonzalezdedios@telefonica.com>
+ Editor: Mohamed Boucadair
+ <mailto:mohamed.boucadair@orange.com>
+ Author: Luis Angel Munoz
+ <mailto:luis-angel.munoz@vodafone.com>
+ Author: Alejandro Aguado
+ <mailto:alejandro.aguado_martin@nokia.com>";
+ description
+ "This YANG module defines a generic network-oriented model
+ for the configuration of Layer 3 Virtual Private Networks.
+
+ Copyright (c) 2022 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 9182; see the
+ RFC itself for full legal notices.";
+
+ revision 2022-02-14 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 9182: A YANG Network Data Model for Layer 3 VPNs";
+ }
+
+ /* Features */
+
+ feature msdp {
+ description
+ "This feature indicates that Multicast Source Discovery
+ Protocol (MSDP) capabilities are supported by the VPN.";
+ reference
+ "RFC 3618: Multicast Source Discovery Protocol (MSDP)";
+ }
+
+ /* Identities */
+
+ identity address-allocation-type {
+ description
+ "Base identity for address allocation type in the
+ Provider Edge to Customer Edge (PE-CE) link.";
+ }
+
+ identity provider-dhcp {
+ base address-allocation-type;
+ description
+ "The provider's network provides a DHCP service to the
+ customer.";
+ }
+
+ identity provider-dhcp-relay {
+ base address-allocation-type;
+ description
+ "The provider's network provides a DHCP relay service to the
+ customer.";
+ }
+
+ identity provider-dhcp-slaac {
+ if-feature "vpn-common:ipv6";
+ base address-allocation-type;
+ description
+ "The provider's network provides a DHCP service to the
+ customer as well as IPv6 Stateless Address
+ Autoconfiguration (SLAAC).";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+ }
+
+ identity static-address {
+ base address-allocation-type;
+ description
+ "The provider's network provides static IP addressing to the
+ customer.";
+ }
+
+ identity slaac {
+ if-feature "vpn-common:ipv6";
+ base address-allocation-type;
+ description
+ "The provider's network uses IPv6 SLAAC to provide
+ addressing to the customer.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+ }
+
+ identity local-defined-next-hop {
+ description
+ "Base identity of local defined next hops.";
+ }
+
+ identity discard {
+ base local-defined-next-hop;
+ description
+ "Indicates an action to discard traffic for the
+ corresponding destination.
+ For example, this can be used to black-hole traffic.";
+ }
+
+ identity local-link {
+ base local-defined-next-hop;
+ description
+ "Treat traffic towards addresses within the specified
+ next-hop prefix as though they are connected to a local
+ link.";
+ }
+
+ identity l2-tunnel-type {
+ description
+ "Base identity for Layer 2 tunnel selection under the VPN
+ network access.";
+ }
+
+ identity pseudowire {
+ base l2-tunnel-type;
+ description
+ "Pseudowire tunnel termination in the VPN network access.";
+ }
+
+ identity vpls {
+ base l2-tunnel-type;
+ description
+ "Virtual Private LAN Service (VPLS) tunnel termination in
+ the VPN network access.";
+ }
+
+ identity vxlan {
+ base l2-tunnel-type;
+ description
+ "Virtual eXtensible Local Area Network (VXLAN) tunnel
+ termination in the VPN network access.";
+ }
+
+ /* Typedefs */
+
+ typedef predefined-next-hop {
+ type identityref {
+ base local-defined-next-hop;
+ }
+ description
+ "Predefined next-hop designation for locally generated
+ routes.";
+ }
+
+ typedef area-address {
+ type string {
+ pattern '[0-9A-Fa-f]{2}(\.[0-9A-Fa-f]{4}){0,6}';
+ }
+ description
+ "This type defines the area address format.";
+ }
+
+ /* Groupings */
+
+ grouping vpn-instance-profile {
+ description
+ "Grouping for data nodes that may be factorized
+ among many levels of the model. The grouping can
+ be used to define generic profiles at the VPN service
+ level and then referenced at the VPN node and VPN
+ network access levels.";
+ leaf local-as {
+ if-feature "vpn-common:rtg-bgp";
+ type inet:as-number;
+ description
+ "Provider's Autonomous System (AS) number. Used if the
+ customer requests BGP routing.";
+ }
+ uses vpn-common:route-distinguisher;
+ list address-family {
+ key "address-family";
+ description
+ "Set of parameters per address family.";
+ leaf address-family {
+ type identityref {
+ base vpn-common:address-family;
+ }
+ description
+ "Indicates the address family (IPv4 and/or IPv6).";
+ }
+ container vpn-targets {
+ description
+ "Set of route targets to match for import and export
+ routes to/from VRF.";
+ uses vpn-common:vpn-route-targets;
+ }
+ list maximum-routes {
+ key "protocol";
+ description
+ "Defines the maximum number of routes for VRF.";
+ leaf protocol {
+ type identityref {
+ base vpn-common:routing-protocol-type;
+ }
+ description
+ "Indicates the routing protocol. A value of 'any'
+ can be used to identify a limit that will apply for
+ each active routing protocol.";
+ }
+ leaf maximum-routes {
+ type uint32;
+ description
+ "Indicates the maximum number of prefixes that VRF can
+ accept for this address family and protocol.";
+ }
+ }
+ }
+ container multicast {
+ if-feature "vpn-common:multicast";
+ description
+ "Global multicast parameters.";
+ leaf tree-flavor {
+ type identityref {
+ base vpn-common:multicast-tree-type;
+ }
+ description
+ "Type of the multicast tree to be used.";
+ }
+ container rp {
+ description
+ "Rendezvous Point (RP) parameters.";
+ container rp-group-mappings {
+ description
+ "RP-to-group mapping parameters.";
+ list rp-group-mapping {
+ key "id";
+ description
+ "List of RP-to-group mappings.";
+ leaf id {
+ type uint16;
+ description
+ "Unique identifier for the mapping.";
+ }
+ container provider-managed {
+ description
+ "Parameters for a provider-managed RP.";
+ leaf enabled {
+ type boolean;
+ default "false";
+ description
+ "Set to 'true' if the RP must be a
+ provider-managed node. Set to 'false' if it is
+ a customer-managed node.";
+ }
+ leaf rp-redundancy {
+ type boolean;
+ default "false";
+ description
+ "If set to 'true', it indicates that a
+ redundancy mechanism for the RP is required.";
+ }
+ leaf optimal-traffic-delivery {
+ type boolean;
+ default "false";
+ description
+ "If set to 'true', the service provider (SP)
+ must ensure that the traffic uses an optimal
+ path. An SP may use Anycast RP or
+ RP-tree-to-SPT ('SPT' is 'shortest path tree')
+ switchover architectures.";
+ }
+ container anycast {
+ when "../rp-redundancy = 'true' and
+ ../optimal-traffic-delivery = 'true'" {
+ description
+ "Only applicable if both RP redundancy and
+ delivery through an optimal path are
+ activated.";
+ }
+ description
+ "PIM Anycast-RP parameters.";
+ leaf local-address {
+ type inet:ip-address;
+ description
+ "IP local address for the PIM RP. Usually
+ corresponds to the Router ID or the
+ primary address.";
+ }
+ leaf-list rp-set-address {
+ type inet:ip-address;
+ description
+ "Specifies the IP address of other RP routers
+ that share the same RP IP address.";
+ }
+ }
+ }
+ leaf rp-address {
+ when "../provider-managed/enabled = 'false'" {
+ description
+ "Relevant when the RP is not managed by the
+ provider.";
+ }
+ type inet:ip-address;
+ mandatory true;
+ description
+ "Defines the address of the RP.
+ Used if the RP is managed by the customer.";
+ }
+ container groups {
+ description
+ "Multicast groups associated with the RP.";
+ list group {
+ key "id";
+ description
+ "List of multicast groups.";
+ leaf id {
+ type uint16;
+ description
+ "Identifier for the group.";
+ }
+ choice group-format {
+ mandatory true;
+ description
+ "Choice for multicast group format.";
+ case group-prefix {
+ leaf group-address {
+ type inet:ip-prefix;
+ description
+ "A single multicast group prefix.";
+ }
+ }
+ case startend {
+ leaf group-start {
+ type inet:ip-address;
+ description
+ "The first multicast group address in
+ the multicast group address range.";
+ }
+ leaf group-end {
+ type inet:ip-address;
+ description
+ "The last multicast group address in
+ the multicast group address range.";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ container rp-discovery {
+ description
+ "RP discovery parameters.";
+ leaf rp-discovery-type {
+ type identityref {
+ base vpn-common:multicast-rp-discovery-type;
+ }
+ default "vpn-common:static-rp";
+ description
+ "Type of RP discovery used.";
+ }
+ container bsr-candidates {
+ when "derived-from-or-self(../rp-discovery-type, "
+ + "'vpn-common:bsr-rp')" {
+ description
+ "Only applicable if the discovery type
+ is 'bsr-rp'.";
+ }
+ description
+ "Container for the customer Bootstrap Router (BSR)
+ candidate's addresses.";
+ leaf-list bsr-candidate-address {
+ type inet:ip-address;
+ description
+ "Specifies the address of the candidate BSR.";
+ }
+ }
+ }
+ }
+ container igmp {
+ if-feature "vpn-common:igmp and vpn-common:ipv4";
+ description
+ "Includes IGMP-related parameters.";
+ list static-group {
+ key "group-addr";
+ description
+ "Multicast static source/group associated with the
+ IGMP session.";
+ leaf group-addr {
+ type rt-types:ipv4-multicast-group-address;
+ description
+ "Multicast group IPv4 address.";
+ }
+ leaf source-addr {
+ type rt-types:ipv4-multicast-source-address;
+ description
+ "Multicast source IPv4 address.";
+ }
+ }
+ leaf max-groups {
+ type uint32;
+ description
+ "Indicates the maximum number of groups.";
+ }
+ leaf max-entries {
+ type uint32;
+ description
+ "Indicates the maximum number of IGMP entries.";
+ }
+ leaf version {
+ type identityref {
+ base vpn-common:igmp-version;
+ }
+ default "vpn-common:igmpv2";
+ description
+ "Indicates the IGMP version.";
+ reference
+ "RFC 1112: Host Extensions for IP Multicasting
+ RFC 2236: Internet Group Management Protocol,
+ Version 2
+ RFC 3376: Internet Group Management Protocol,
+ Version 3";
+ }
+ }
+ container mld {
+ if-feature "vpn-common:mld and vpn-common:ipv6";
+ description
+ "Includes MLD-related parameters.";
+ list static-group {
+ key "group-addr";
+ description
+ "Multicast static source/group associated with the
+ MLD session.";
+ leaf group-addr {
+ type rt-types:ipv6-multicast-group-address;
+ description
+ "Multicast group IPv6 address.";
+ }
+ leaf source-addr {
+ type rt-types:ipv6-multicast-source-address;
+ description
+ "Multicast source IPv6 address.";
+ }
+ }
+ leaf max-groups {
+ type uint32;
+ description
+ "Indicates the maximum number of groups.";
+ }
+ leaf max-entries {
+ type uint32;
+ description
+ "Indicates the maximum number of MLD entries.";
+ }
+ leaf version {
+ type identityref {
+ base vpn-common:mld-version;
+ }
+ default "vpn-common:mldv2";
+ description
+ "Indicates the MLD protocol version.";
+ reference
+ "RFC 2710: Multicast Listener Discovery (MLD) for IPv6
+ RFC 3810: Multicast Listener Discovery Version 2
+ (MLDv2) for IPv6";
+ }
+ }
+ container pim {
+ if-feature "vpn-common:pim";
+ description
+ "Only applies when the protocol type is 'pim'.";
+ leaf hello-interval {
+ type rt-types:timer-value-seconds16;
+ default "30";
+ description
+ "Interval between PIM Hello messages. If set to
+ 'infinity' or 'not-set', no periodic Hello messages
+ are sent.";
+ reference
+ "RFC 7761: Protocol Independent Multicast - Sparse
+ Mode (PIM-SM): Protocol Specification
+ (Revised), Section 4.11
+ RFC 8294: Common YANG Data Types for the Routing
+ Area";
+ }
+ leaf dr-priority {
+ type uint32;
+ default "1";
+ description
+ "Indicates the preference associated with the
+ Designated Router (DR) election process. A larger
+ value has a higher priority over a smaller value.";
+ reference
+ "RFC 7761: Protocol Independent Multicast - Sparse
+ Mode (PIM-SM): Protocol Specification
+ (Revised), Section 4.3.2";
+ }
+ }
+ }
+ }
+
+ /* Main Blocks */
+ /* Main l3vpn-ntw */
+
+ container l3vpn-ntw {
+ description
+ "Main container for management of Layer 3 Virtual Private
+ Network (L3VPN) services.";
+ container vpn-profiles {
+ description
+ "Contains a set of valid VPN profiles to reference
+ in the VPN service.";
+ uses vpn-common:vpn-profile-cfg;
+ }
+ container vpn-services {
+ description
+ "Container for the VPN services.";
+ list vpn-service {
+ key "vpn-id";
+ description
+ "List of VPN services.";
+ uses vpn-common:vpn-description;
+ leaf parent-service-id {
+ type vpn-common:vpn-id;
+ description
+ "Pointer to the parent service, if any.
+ A parent service can be an L3SM, a slice request,
+ a VPN+ service, etc.";
+ }
+ leaf vpn-type {
+ type identityref {
+ base vpn-common:service-type;
+ }
+ description
+ "Indicates the service type.";
+ }
+ leaf vpn-service-topology {
+ type identityref {
+ base vpn-common:vpn-topology;
+ }
+ default "vpn-common:any-to-any";
+ description
+ "VPN service topology.";
+ }
+ uses vpn-common:service-status;
+ container vpn-instance-profiles {
+ description
+ "Container for a list of VPN instance profiles.";
+ list vpn-instance-profile {
+ key "profile-id";
+ description
+ "List of VPN instance profiles.";
+ leaf profile-id {
+ type string;
+ description
+ "VPN instance profile identifier.";
+ }
+ leaf role {
+ type identityref {
+ base vpn-common:role;
+ }
+ default "vpn-common:any-to-any-role";
+ description
+ "Role of the VPN node in the VPN.";
+ }
+ uses vpn-instance-profile;
+ }
+ }
+ container underlay-transport {
+ description
+ "Container for the underlay transport.";
+ uses vpn-common:underlay-transport;
+ }
+ container external-connectivity {
+ if-feature "vpn-common:external-connectivity";
+ description
+ "Container for external connectivity.";
+ choice profile {
+ description
+ "Choice for the external connectivity profile.";
+ case profile {
+ leaf profile-name {
+ type leafref {
+ path "/l3vpn-ntw/vpn-profiles"
+ + "/valid-provider-identifiers"
+ + "/external-connectivity-identifier/id";
+ }
+ description
+ "Name of the service provider's profile to be
+ applied at the VPN service level.";
+ }
+ }
+ }
+ }
+ container vpn-nodes {
+ description
+ "Container for VPN nodes.";
+ list vpn-node {
+ key "vpn-node-id";
+ description
+ "Includes a list of VPN nodes.";
+ leaf vpn-node-id {
+ type vpn-common:vpn-id;
+ description
+ "An identifier of the VPN node.";
+ }
+ leaf description {
+ type string;
+ description
+ "Textual description of the VPN node.";
+ }
+ leaf ne-id {
+ type string;
+ description
+ "Unique identifier of the network element where
+ the VPN node is deployed.";
+ }
+ leaf local-as {
+ if-feature "vpn-common:rtg-bgp";
+ type inet:as-number;
+ description
+ "Provider's AS number. Used if the customer
+ requests BGP routing.";
+ }
+ leaf router-id {
+ type rt-types:router-id;
+ description
+ "A 32-bit number in the dotted-quad format that is
+ used to uniquely identify a node within an AS.
+ This identifier is used for both IPv4 and IPv6.";
+ }
+ container active-vpn-instance-profiles {
+ description
+ "Container for active VPN instance profiles.";
+ list vpn-instance-profile {
+ key "profile-id";
+ description
+ "Includes a list of active VPN instance
+ profiles.";
+ leaf profile-id {
+ type leafref {
+ path "/l3vpn-ntw/vpn-services/vpn-service"
+ + "/vpn-instance-profiles"
+ + "/vpn-instance-profile/profile-id";
+ }
+ description
+ "Node's active VPN instance profile.";
+ }
+ list router-id {
+ key "address-family";
+ description
+ "Router ID per address family.";
+ leaf address-family {
+ type identityref {
+ base vpn-common:address-family;
+ }
+ description
+ "Indicates the address family for which the
+ Router ID applies.";
+ }
+ leaf router-id {
+ type inet:ip-address;
+ description
+ "The 'router-id' information can be an IPv4
+ or IPv6 address. This can be used,
+ for example, to configure an IPv6 address
+ as a Router ID when such a capability is
+ supported by underlay routers. In such a
+ case, the configured value overrides the
+ generic value defined at the VPN node
+ level.";
+ }
+ }
+ uses vpn-instance-profile;
+ }
+ }
+ container msdp {
+ if-feature "msdp";
+ description
+ "Includes MSDP-related parameters.";
+ leaf peer {
+ type inet:ipv4-address;
+ description
+ "Indicates the IPv4 address of the MSDP peer.";
+ }
+ leaf local-address {
+ type inet:ipv4-address;
+ description
+ "Indicates the IPv4 address of the local end.
+ This local address must be configured on
+ the node.";
+ }
+ uses vpn-common:service-status;
+ }
+ uses vpn-common:vpn-components-group;
+ uses vpn-common:service-status;
+ container vpn-network-accesses {
+ description
+ "List of network accesses.";
+ list vpn-network-access {
+ key "id";
+ description
+ "List of network accesses.";
+ leaf id {
+ type vpn-common:vpn-id;
+ description
+ "Identifier for the network access.";
+ }
+ leaf interface-id {
+ type string;
+ description
+ "Identifier for the physical or logical
+ interface.
+ The identification of the sub-interface
+ is provided at the connection level and/or
+ the IP connection level.";
+ }
+ leaf description {
+ type string;
+ description
+ "Textual description of the network access.";
+ }
+ leaf vpn-network-access-type {
+ type identityref {
+ base vpn-common:site-network-access-type;
+ }
+ default "vpn-common:point-to-point";
+ description
+ "Describes the type of connection, e.g.,
+ point to point.";
+ }
+ leaf vpn-instance-profile {
+ type leafref {
+ path "/l3vpn-ntw/vpn-services/vpn-service"
+ + "/vpn-nodes/vpn-node"
+ + "/active-vpn-instance-profiles"
+ + "/vpn-instance-profile/profile-id";
+ }
+ description
+ "An identifier of an active VPN instance
+ profile.";
+ }
+ uses vpn-common:service-status;
+ container connection {
+ description
+ "Defines Layer 2 protocols and parameters that
+ are required to enable connectivity between
+ the PE and the CE.";
+ container encapsulation {
+ description
+ "Container for Layer 2 encapsulation.";
+ leaf type {
+ type identityref {
+ base vpn-common:encapsulation-type;
+ }
+ default "vpn-common:priority-tagged";
+ description
+ "Encapsulation type. By default, the type
+ of the tagged interface is
+ 'priority-tagged'.";
+ }
+ container dot1q {
+ when "derived-from-or-self(../type, "
+ + "'vpn-common:dot1q')" {
+ description
+ "Only applies when the type of the
+ tagged interface is 'dot1q'.";
+ }
+ description
+ "Tagged interface.";
+ leaf tag-type {
+ type identityref {
+ base vpn-common:tag-type;
+ }
+ default "vpn-common:c-vlan";
+ description
+ "Tag type. By default, the tag type is
+ 'c-vlan'.";
+ }
+ leaf cvlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "VLAN identifier.";
+ }
+ }
+ container priority-tagged {
+ when "derived-from-or-self(../type, "
+ + "'vpn-common:priority-tagged')" {
+ description
+ "Only applies when the type of
+ the tagged interface is
+ 'priority-tagged'.";
+ }
+ description
+ "Priority tagged.";
+ leaf tag-type {
+ type identityref {
+ base vpn-common:tag-type;
+ }
+ default "vpn-common:c-vlan";
+ description
+ "Tag type. By default, the tag type is
+ 'c-vlan'.";
+ }
+ }
+ container qinq {
+ when "derived-from-or-self(../type, "
+ + "'vpn-common:qinq')" {
+ description
+ "Only applies when the type of the
+ tagged interface is 'qinq'.";
+ }
+ description
+ "Includes QinQ parameters.";
+ leaf tag-type {
+ type identityref {
+ base vpn-common:tag-type;
+ }
+ default "vpn-common:s-c-vlan";
+ description
+ "Tag type.";
+ }
+ leaf svlan-id {
+ type uint16;
+ mandatory true;
+ description
+ "Service VLAN (S-VLAN) identifier.";
+ }
+ leaf cvlan-id {
+ type uint16;
+ mandatory true;
+ description
+ "Customer VLAN (C-VLAN) identifier.";
+ }
+ }
+ }
+ 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.";
+ leaf type {
+ type identityref {
+ base l2-tunnel-type;
+ }
+ description
+ "Selects the tunnel termination option
+ for each VPN network access.";
+ }
+ container pseudowire {
+ when "derived-from-or-self(../type, "
+ + "'pseudowire')" {
+ description
+ "Only applies when the Layer 2 service
+ type is 'pseudowire'.";
+ }
+ description
+ "Includes pseudowire termination
+ parameters.";
+ leaf vcid {
+ type uint32;
+ description
+ "Indicates a pseudowire (PW) or
+ virtual circuit (VC) identifier.";
+ }
+ leaf far-end {
+ type union {
+ type uint32;
+ type inet:ip-address;
+ }
+ description
+ "Neighbor reference.";
+ reference
+ "RFC 8077: Pseudowire Setup and
+ Maintenance Using the Label
+ Distribution Protocol
+ (LDP), Section 6.1";
+ }
+ }
+ container vpls {
+ when "derived-from-or-self(../type, "
+ + "'vpls')" {
+ description
+ "Only applies when the Layer 2 service
+ type is 'vpls'.";
+ }
+ description
+ "VPLS termination parameters.";
+ leaf vcid {
+ type uint32;
+ description
+ "VC identifier.";
+ }
+ leaf-list far-end {
+ type union {
+ type uint32;
+ type inet:ip-address;
+ }
+ description
+ "Neighbor reference.";
+ }
+ }
+ container vxlan {
+ when "derived-from-or-self(../type, "
+ + "'vxlan')" {
+ description
+ "Only applies when the Layer 2 service
+ type is 'vxlan'.";
+ }
+ description
+ "VXLAN termination parameters.";
+ leaf vni-id {
+ type uint32;
+ mandatory true;
+ description
+ "VXLAN Network Identifier (VNI).";
+ }
+ leaf peer-mode {
+ type identityref {
+ base vpn-common:vxlan-peer-mode;
+ }
+ default "vpn-common:static-mode";
+ description
+ "Specifies the VXLAN access mode. By
+ default, the peer mode is set to
+ 'static-mode'.";
+ }
+ leaf-list peer-ip-address {
+ type inet:ip-address;
+ description
+ "List of a peer's IP addresses.";
+ }
+ }
+ }
+ case l2vpn {
+ leaf l2vpn-id {
+ type vpn-common:vpn-id;
+ description
+ "Indicates the L2VPN service associated
+ with an Integrated Routing and Bridging
+ (IRB) interface.";
+ }
+ }
+ }
+ 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.";
+ }
+ }
+ }
+ }
+ }
+ container 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.";
+ }
+ leaf prefix-length {
+ type uint8 {
+ range "0..32";
+ }
+ description
+ "Subnet prefix length expressed in bits.
+ It is applied to both local and customer
+ addresses.";
+ }
+ leaf address-allocation-type {
+ type identityref {
+ base address-allocation-type;
+ }
+ must "not(derived-from-or-self(current(), "
+ + "'slaac') or "
+ + "derived-from-or-self(current(), "
+ + "'provider-dhcp-slaac'))" {
+ error-message "SLAAC is only applicable "
+ + "to IPv6.";
+ }
+ description
+ "Defines how addresses are allocated to
+ the peer site.
+
+ If there is no value for the address
+ allocation type, then IPv4 addressing
+ is not enabled.";
+ }
+ choice allocation-type {
+ description
+ "Choice of the IPv4 address allocation.";
+ case 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:ipv4-address;
+ description
+ "IPv4 addresses of the provider's
+ DHCP server, for use by the local
+ DHCP relay.";
+ }
+ }
+ case server {
+ description
+ "A choice for how addresses are
+ assigned when a local DHCP server
+ is enabled.";
+ 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 allocated by DHCP.
+
+ 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:ipv4-address;
+ mandatory true;
+ description
+ "Indicates the first
+ address in the pool.";
+ }
+ leaf end-address {
+ type inet:ipv4-address;
+ description
+ "Indicates the last
+ address in the pool.";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ case 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:ipv4-address;
+ description
+ "IPv4 addresses of the customer's
+ DHCP server.";
+ }
+ }
+ }
+ case static-addresses {
+ description
+ "Lists the IPv4 addresses that are
+ used.";
+ leaf primary-address {
+ type leafref {
+ path "../address/address-id";
+ }
+ description
+ "Primary address of the connection.";
+ }
+ list address {
+ key "address-id";
+ description
+ "Lists the IPv4 addresses that are
+ used.";
+ leaf address-id {
+ type string;
+ description
+ "An identifier of the static IPv4
+ address.";
+ }
+ leaf customer-address {
+ type inet:ipv4-address;
+ description
+ "IPv4 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.";
+ }
+ leaf prefix-length {
+ type uint8 {
+ range "0..128";
+ }
+ description
+ "Subnet prefix length expressed in bits.
+ It is applied to both local and customer
+ addresses.";
+ }
+ leaf address-allocation-type {
+ type identityref {
+ base address-allocation-type;
+ }
+ description
+ "Defines how addresses are allocated.
+ If there is no value for the address
+ allocation type, then IPv6 addressing is
+ disabled.";
+ }
+ choice allocation-type {
+ description
+ "A choice based on the IPv6 allocation
+ type.";
+ container provider-dhcp {
+ when "derived-from-or-self(../address-allo"
+ + "cation-type, 'provider-dhcp') or "
+ + "derived-from-or-self(../address-allo"
+ + "cation-type, 'provider-dhcp-slaac')" {
+ description
+ "Only applies when addresses are
+ allocated by DHCPv6 as provided by
+ the operator.";
+ }
+ description
+ "Parameters related to DHCP-allocated
+ addresses.";
+ leaf dhcp-service-type {
+ type enumeration {
+ enum server {
+ description
+ "Local DHCPv6 server.";
+ }
+ enum relay {
+ description
+ "DHCPv6 relay.";
+ }
+ }
+ description
+ "Indicates the type of the DHCPv6
+ service to be enabled on this
+ access.";
+ }
+ choice service-type {
+ description
+ "Choice based on the DHCPv6 service
+ type.";
+ case relay {
+ leaf-list server-ip-address {
+ type inet:ipv6-address;
+ description
+ "IPv6 addresses of the provider's
+ DHCPv6 server.";
+ }
+ }
+ case server {
+ choice address-assign {
+ default "number";
+ description
+ "Choice for how IPv6 prefixes are
+ assigned by the DHCPv6 server.";
+ case number {
+ leaf number-of-dynamic-address {
+ type uint16;
+ default "1";
+ description
+ "Describes the number of IPv6
+ prefixes that are allocated
+ to the customer on this
+ access.";
+ }
+ }
+ case explicit {
+ container customer-addresses {
+ description
+ "Container for customer IPv6
+ addresses allocated by
+ DHCPv6.";
+ list address-pool {
+ key "pool-id";
+ description
+ "Describes IPv6 addresses
+ allocated by DHCPv6.
+
+ 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.";
+ }
+ leaf end-address {
+ type inet:ipv6-address;
+ description
+ "Indicates the last
+ address.";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ case dhcp-relay {
+ description
+ "DHCPv6 relay 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
+ "Contains the IP addresses of the
+ customer's DHCPv6 server.";
+ }
+ }
+ }
+ case static-addresses {
+ description
+ "IPv6-specific parameters for static
+ allocation.";
+ leaf primary-address {
+ type leafref {
+ path "../address/address-id";
+ }
+ description
+ "Principal address of the
+ connection.";
+ }
+ list address {
+ key "address-id";
+ description
+ "Describes IPv6 addresses that are
+ used.";
+ leaf address-id {
+ type string;
+ description
+ "An identifier of an IPv6 address.";
+ }
+ leaf customer-address {
+ type inet:ipv6-address;
+ description
+ "An IPv6 address of the customer
+ side.";
+ }
+ }
+ }
+ }
+ }
+ }
+ container routing-protocols {
+ 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 "/l3vpn-ntw/vpn-profiles"
+ + "/valid-provider-identifiers"
+ + "/routing-profile-identifier/id";
+ }
+ 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.";
+ leaf lan {
+ type inet:ipv4-prefix;
+ description
+ "LAN prefixes.";
+ }
+ leaf lan-tag {
+ type string;
+ description
+ "Internal tag to be used in VPN
+ policies.";
+ }
+ leaf next-hop {
+ type union {
+ type inet:ip-address;
+ type predefined-next-hop;
+ }
+ description
+ "The next hop that is to be used
+ for the static route. This may be
+ specified as an IP address or a
+ predefined next-hop type (e.g.,
+ 'discard' or 'local-link').";
+ }
+ leaf bfd-enable {
+ if-feature "vpn-common:bfd";
+ type boolean;
+ description
+ "Enables Bidirectional Forwarding
+ Detection (BFD).";
+ }
+ leaf metric {
+ type uint32;
+ description
+ "Indicates the metric associated
+ with the static route.";
+ }
+ 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.";
+ leaf lan {
+ type inet:ipv6-prefix;
+ description
+ "LAN prefixes.";
+ }
+ leaf lan-tag {
+ type string;
+ description
+ "Internal tag to be used in VPN
+ policies.";
+ }
+ leaf next-hop {
+ type union {
+ type inet:ip-address;
+ type predefined-next-hop;
+ }
+ description
+ "The next hop that is to be used for
+ the static route. This may be
+ specified as an IP address or a
+ predefined next-hop type (e.g.,
+ 'discard' or 'local-link').";
+ }
+ leaf bfd-enable {
+ if-feature "vpn-common:bfd";
+ type boolean;
+ description
+ "Enables BFD.";
+ }
+ leaf metric {
+ type uint32;
+ description
+ "Indicates the metric associated
+ with the static route.";
+ }
+ 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.";
+ 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 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-list neighbor {
+ type inet:ip-address;
+ description
+ "IP address(es) of the BGP neighbor.
+ IPv4 and IPv6 neighbors may be
+ indicated if two sessions will be used
+ for IPv4 and IPv6.";
+ }
+ 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";
+ }
+ }
+ container authentication {
+ description
+ "Container for BGP authentication
+ parameters between a PE and a CE.";
+ leaf enable {
+ type boolean;
+ default "false";
+ description
+ "Enables or disables authentication.";
+ }
+ container keying-material {
+ when "../enable = 'true'";
+ description
+ "Container for describing how a BGP
+ routing session is to be secured
+ between a PE and a CE.";
+ choice option {
+ description
+ "Choice of authentication options.";
+ case ao {
+ description
+ "Uses the TCP Authentication
+ Option (TCP-AO).";
+ reference
+ "RFC 5925: The TCP Authentication
+ Option";
+ leaf enable-ao {
+ type boolean;
+ description
+ "Enables the TCP-AO.";
+ }
+ leaf ao-keychain {
+ type key-chain:key-chain-ref;
+ description
+ "Reference to the TCP-AO key
+ chain.";
+ reference
+ "RFC 8177: YANG Data Model for
+ Key Chains";
+ }
+ }
+ case md5 {
+ description
+ "Uses MD5 to secure the session.";
+ reference
+ "RFC 4364: BGP/MPLS IP Virtual
+ Private Networks
+ (VPNs), Section 13.2";
+ leaf md5-keychain {
+ type key-chain:key-chain-ref;
+ description
+ "Reference to the MD5 key
+ chain.";
+ reference
+ "RFC 8177: YANG Data Model for
+ Key Chains";
+ }
+ }
+ case explicit {
+ leaf key-id {
+ type uint32;
+ description
+ "Key identifier.";
+ }
+ leaf key {
+ type string;
+ description
+ "BGP authentication key.
+ This model only supports the
+ subset of keys that are
+ representable as ASCII
+ strings.";
+ }
+ leaf crypto-algorithm {
+ type identityref {
+ base key-chain:crypto-algorithm;
+ }
+ description
+ "Indicates the cryptographic
+ algorithm associated with the
+ key.";
+ }
+ }
+ case ipsec {
+ description
+ "Specifies a reference to an
+ Internet Key Exchange Protocol
+ (IKE) Security Association
+ (SA).";
+ leaf sa {
+ type string;
+ description
+ "Indicates the
+ administrator-assigned name
+ of the SA.";
+ }
+ }
+ }
+ }
+ }
+ 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.";
+ leaf address-family {
+ type identityref {
+ base vpn-common:address-family;
+ }
+ description
+ "Indicates whether IPv4, IPv6, or
+ both are to be activated.";
+ }
+ leaf area-id {
+ type yang:dotted-quad;
+ mandatory true;
+ description
+ "Area ID.";
+ reference
+ "RFC 4577: OSPF as the Provider/Customer
+ Edge Protocol for BGP/MPLS IP
+ Virtual Private Networks
+ (VPNs), Section 4.2.3
+ RFC 6565: OSPFv3 as a Provider Edge to
+ Customer Edge (PE-CE) Routing
+ Protocol, Section 4.2";
+ }
+ leaf metric {
+ type uint16;
+ default "1";
+ description
+ "Metric of the PE-CE link. It is used
+ in the routing state calculation and
+ path selection.";
+ }
+ 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.";
+ }
+ container authentication {
+ description
+ "Authentication configuration.";
+ leaf enable {
+ type boolean;
+ default "false";
+ description
+ "Enables or disables authentication.";
+ }
+ container keying-material {
+ when "../enable = 'true'";
+ description
+ "Container for describing how an OSPF
+ session is to be secured between a CE
+ and a PE.";
+ choice option {
+ description
+ "Options for OSPF authentication.";
+ case auth-key-chain {
+ leaf key-chain {
+ type key-chain:key-chain-ref;
+ description
+ "Name of the key chain.";
+ }
+ }
+ case auth-key-explicit {
+ leaf key-id {
+ type uint32;
+ description
+ "Key identifier.";
+ }
+ leaf key {
+ type string;
+ description
+ "OSPF authentication key.
+ This model only supports the
+ subset of keys that are
+ representable as ASCII
+ strings.";
+ }
+ leaf crypto-algorithm {
+ type identityref {
+ base key-chain:crypto-algorithm;
+ }
+ description
+ "Indicates the cryptographic
+ algorithm associated with the
+ key.";
+ }
+ }
+ case ipsec {
+ leaf sa {
+ type string;
+ description
+ "Indicates the
+ administrator-assigned name
+ of the SA.";
+ reference
+ "RFC 4552: Authentication/
+ Confidentiality for
+ OSPFv3";
+ }
+ }
+ }
+ }
+ }
+ 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.";
+ leaf address-family {
+ type identityref {
+ base vpn-common:address-family;
+ }
+ description
+ "Indicates whether IPv4, IPv6, or both
+ are to be activated.";
+ }
+ leaf area-address {
+ type area-address;
+ mandatory true;
+ description
+ "Area address.";
+ }
+ 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 authentication {
+ description
+ "Authentication configuration.";
+ leaf enable {
+ type boolean;
+ default "false";
+ description
+ "Enables or disables authentication.";
+ }
+ container keying-material {
+ when "../enable = 'true'";
+ description
+ "Container for describing how an IS-IS
+ session is to be secured between a CE
+ and a PE.";
+ choice option {
+ description
+ "Options for IS-IS authentication.";
+ case auth-key-chain {
+ leaf key-chain {
+ type key-chain:key-chain-ref;
+ description
+ "Name of the key chain.";
+ }
+ }
+ case auth-key-explicit {
+ leaf key-id {
+ type uint32;
+ description
+ "Key identifier.";
+ }
+ leaf key {
+ type string;
+ description
+ "IS-IS authentication key.
+ This model only supports the
+ subset of keys that are
+ representable as ASCII
+ strings.";
+ }
+ leaf crypto-algorithm {
+ type identityref {
+ base key-chain:crypto-algorithm;
+ }
+ description
+ "Indicates the cryptographic
+ algorithm associated with the
+ key.";
+ }
+ }
+ }
+ }
+ }
+ 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.";
+ }
+ container authentication {
+ description
+ "Authentication configuration.";
+ leaf enable {
+ type boolean;
+ default "false";
+ description
+ "Enables or disables authentication.";
+ }
+ container keying-material {
+ when "../enable = 'true'";
+ description
+ "Container for describing how a RIP
+ session is to be secured between a CE
+ and a PE.";
+ choice option {
+ description
+ "Specifies the authentication
+ scheme.";
+ case auth-key-chain {
+ leaf key-chain {
+ type key-chain:key-chain-ref;
+ description
+ "Name of the key chain.";
+ }
+ }
+ case auth-key-explicit {
+ leaf key {
+ type string;
+ description
+ "RIP authentication key.
+ This model only supports the
+ subset of keys that are
+ representable as ASCII
+ strings.";
+ }
+ leaf crypto-algorithm {
+ type identityref {
+ base key-chain:crypto-algorithm;
+ }
+ description
+ "Indicates the cryptographic
+ algorithm associated with the
+ key.";
+ }
+ }
+ }
+ }
+ }
+ 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;
+ }
+ }
+ }
+ container oam {
+ description
+ "Defines the Operations, Administration,
+ and Maintenance (OAM) mechanisms used.
+
+ BFD is set as a fault detection mechanism,
+ but other mechanisms can be defined in the
+ future.";
+ container bfd {
+ if-feature "vpn-common:bfd";
+ description
+ "Container 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";
+ }
+ leaf profile {
+ type leafref {
+ path "/l3vpn-ntw/vpn-profiles"
+ + "/valid-provider-identifiers"
+ + "/bfd-profile-identifier/id";
+ }
+ 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.";
+ }
+ 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;
+ }
+ }
+ container security {
+ description
+ "Site-specific security parameters.";
+ container encryption {
+ if-feature "vpn-common:encryption";
+ description
+ "Container for CE-PE 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 "/l3vpn-ntw/vpn-profiles"
+ + "/valid-provider-identifiers"
+ + "/encryption-profile-identifier/id";
+ }
+ 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.";
+ }
+ }
+ }
+ }
+ }
+ container service {
+ description
+ "Service parameters of the attachment.";
+ leaf pe-to-ce-bandwidth {
+ if-feature "vpn-common:inbound-bw";
+ type uint64;
+ units "bps";
+ description
+ "From the customer site's perspective, the
+ service inbound bandwidth of the connection
+ or download bandwidth from the SP to the
+ site. Note that the L3SM uses
+ 'input-bandwidth' to refer to the same
+ concept.";
+ }
+ leaf ce-to-pe-bandwidth {
+ if-feature "vpn-common:outbound-bw";
+ type uint64;
+ units "bps";
+ description
+ "From the customer site's perspective,
+ the service outbound bandwidth of the
+ connection or upload bandwidth from
+ the site to the SP. Note that the L3SM
+ uses 'output-bandwidth' to refer to the
+ same concept.";
+ }
+ leaf mtu {
+ type uint32;
+ units "bytes";
+ description
+ "MTU at the service level. If the service
+ is IP, it refers to the IP MTU. If
+ Carriers' Carriers (CsC) is enabled, the
+ requested MTU will refer to the MPLS
+ maximum labeled packet size and not to the
+ IP MTU.";
+ }
+ container qos {
+ if-feature "vpn-common:qos";
+ description
+ "QoS configuration.";
+ container qos-classification-policy {
+ description
+ "Configuration of the traffic
+ classification policy.";
+ uses vpn-common:qos-classification-policy;
+ }
+ container qos-action {
+ description
+ "List of QoS action policies.";
+ list rule {
+ key "id";
+ description
+ "List of QoS actions.";
+ leaf id {
+ type string;
+ description
+ "An identifier of the QoS action
+ rule.";
+ }
+ leaf target-class-id {
+ type string;
+ description
+ "Identification of the class of
+ service. This identifier is internal
+ to the administration.";
+ }
+ leaf inbound-rate-limit {
+ type decimal64 {
+ fraction-digits 5;
+ range "0..100";
+ }
+ units "percent";
+ description
+ "Specifies whether/how to rate-limit
+ the inbound traffic matching this QoS
+ policy. It is expressed as a percent
+ of the value that is indicated in
+ 'input-bandwidth'.";
+ }
+ leaf outbound-rate-limit {
+ type decimal64 {
+ fraction-digits 5;
+ range "0..100";
+ }
+ units "percent";
+ description
+ "Specifies whether/how to rate-limit
+ the outbound traffic matching this
+ QoS policy. It is expressed as a
+ percent of the value that is
+ indicated in 'output-bandwidth'.";
+ }
+ }
+ }
+ container qos-profile {
+ description
+ "QoS profile configuration.";
+ list qos-profile {
+ key "profile";
+ description
+ "QoS profile.
+ Can be a standard profile or
+ a customized profile.";
+ leaf profile {
+ type leafref {
+ path "/l3vpn-ntw/vpn-profiles"
+ + "/valid-provider-identifiers"
+ + "/qos-profile-identifier/id";
+ }
+ description
+ "QoS profile to be used.";
+ }
+ leaf direction {
+ type identityref {
+ base vpn-common:qos-profile-direction;
+ }
+ default "vpn-common:both";
+ description
+ "The direction to which the QoS
+ profile is applied.";
+ }
+ }
+ }
+ }
+ container carriers-carrier {
+ if-feature "vpn-common:carriers-carrier";
+ description
+ "This container is used when the customer
+ provides MPLS-based services. This is
+ only used in the case of CsC (i.e., a
+ customer builds an MPLS service using an
+ IP VPN to carry its traffic).";
+ leaf signaling-type {
+ type enumeration {
+ enum ldp {
+ description
+ "Uses LDP as the signaling protocol
+ between the PE and the CE. In this
+ case, an IGP routing protocol must
+ also be configured.";
+ }
+ enum bgp {
+ description
+ "Uses BGP as the signaling protocol
+ between the PE and the CE.
+ In this case, BGP must also be
+ configured as the routing protocol.";
+ reference
+ "RFC 8277: Using BGP to Bind MPLS
+ Labels to Address
+ Prefixes";
+ }
+ }
+ default "bgp";
+ description
+ "MPLS signaling type.";
+ }
+ }
+ container ntp {
+ description
+ "Time synchronization may be needed in some
+ VPNs, such as infrastructure and management
+ VPNs. This container includes parameters
+ to enable the NTP service.";
+ reference
+ "RFC 5905: Network Time Protocol Version 4:
+ Protocol and Algorithms
+ Specification";
+ leaf broadcast {
+ type enumeration {
+ enum client {
+ description
+ "The VPN node will listen to NTP
+ broadcast messages on this VPN
+ network access.";
+ }
+ enum server {
+ description
+ "The VPN node will behave as a
+ broadcast server.";
+ }
+ }
+ description
+ "Indicates the NTP broadcast mode to use
+ for the VPN network access.";
+ }
+ container auth-profile {
+ description
+ "Pointer to a local profile.";
+ leaf profile-id {
+ type string;
+ description
+ "A pointer to a local authentication
+ profile on the VPN node is provided.";
+ }
+ }
+ uses vpn-common:service-status;
+ }
+ container multicast {
+ if-feature "vpn-common:multicast";
+ description
+ "Multicast parameters for the network
+ access.";
+ leaf access-type {
+ type enumeration {
+ enum receiver-only {
+ description
+ "The peer site only has receivers.";
+ }
+ enum source-only {
+ description
+ "The peer site only has sources.";
+ }
+ enum source-receiver {
+ description
+ "The peer site has both sources and
+ receivers.";
+ }
+ }
+ default "source-receiver";
+ description
+ "Type of multicast site.";
+ }
+ leaf address-family {
+ type identityref {
+ base vpn-common:address-family;
+ }
+ description
+ "Indicates the address family.";
+ }
+ leaf protocol-type {
+ type enumeration {
+ enum host {
+ description
+ "Hosts are directly connected to the
+ provider network.
+
+ Host protocols, such as IGMP or MLD,
+ are required.";
+ }
+ enum router {
+ description
+ "Hosts are behind a customer router.
+ PIM will be implemented.";
+ }
+ enum both {
+ description
+ "Some hosts are behind a customer
+ router, and some others are directly
+ connected to the provider network.
+ Both host and routing protocols must
+ be used.
+
+ Typically, IGMP and PIM will be
+ implemented.";
+ }
+ }
+ default "both";
+ description
+ "Multicast protocol type to be used with
+ the customer site.";
+ }
+ leaf remote-source {
+ type boolean;
+ default "false";
+ description
+ "A remote multicast source is a source
+ that is not on the same subnet as the
+ VPN network access. When set to 'true',
+ the multicast traffic from a remote
+ source is accepted.";
+ }
+ container igmp {
+ when "../protocol-type = 'host' and "
+ + "../address-family = 'vpn-common:ipv4' "
+ + "or 'vpn-common:dual-stack'";
+ if-feature "vpn-common:igmp";
+ description
+ "Includes IGMP-related parameters.";
+ list static-group {
+ key "group-addr";
+ description
+ "Multicast static source/group
+ associated with the IGMP session.";
+ leaf group-addr {
+ type rt-types:ipv4-multicast-group-address;
+ description
+ "Multicast group IPv4 address.";
+ }
+ leaf source-addr {
+ type
+ rt-types:ipv4-multicast-source-address;
+ description
+ "Multicast source IPv4 address.";
+ }
+ }
+ leaf max-groups {
+ type uint32;
+ description
+ "Indicates the maximum number of
+ groups.";
+ }
+ leaf max-entries {
+ type uint32;
+ description
+ "Indicates the maximum number of IGMP
+ entries.";
+ }
+ leaf max-group-sources {
+ type uint32;
+ description
+ "The maximum number of group sources.";
+ }
+ leaf version {
+ type identityref {
+ base vpn-common:igmp-version;
+ }
+ default "vpn-common:igmpv2";
+ description
+ "Indicates the IGMP version.";
+ }
+ uses vpn-common:service-status;
+ }
+ container mld {
+ when "../protocol-type = 'host' and "
+ + "../address-family = 'vpn-common:ipv6' "
+ + "or 'vpn-common:dual-stack'";
+ if-feature "vpn-common:mld";
+ description
+ "Includes MLD-related parameters.";
+ list static-group {
+ key "group-addr";
+ description
+ "Multicast static source/group associated
+ with the MLD session.";
+ leaf group-addr {
+ type rt-types:ipv6-multicast-group-address;
+ description
+ "Multicast group IPv6 address.";
+ }
+ leaf source-addr {
+ type
+ rt-types:ipv6-multicast-source-address;
+ description
+ "Multicast source IPv6 address.";
+ }
+ }
+ leaf max-groups {
+ type uint32;
+ description
+ "Indicates the maximum number of
+ groups.";
+ }
+ leaf max-entries {
+ type uint32;
+ description
+ "Indicates the maximum number of MLD
+ entries.";
+ }
+ leaf max-group-sources {
+ type uint32;
+ description
+ "The maximum number of group sources.";
+ }
+ leaf version {
+ type identityref {
+ base vpn-common:mld-version;
+ }
+ default "vpn-common:mldv2";
+ description
+ "Indicates the MLD protocol version.";
+ }
+ uses vpn-common:service-status;
+ }
+ container pim {
+ when "../protocol-type = 'router'";
+ if-feature "vpn-common:pim";
+ description
+ "Only applies when the protocol type is
+ 'pim'.";
+ leaf hello-interval {
+ type rt-types:timer-value-seconds16;
+ default "30";
+ description
+ "Interval between PIM Hello messages.
+ If set to 'infinity' or 'not-set',
+ no periodic Hello messages are sent.";
+ reference
+ "RFC 7761: Protocol Independent
+ Multicast - Sparse Mode
+ (PIM-SM): Protocol
+ Specification (Revised),
+ Section 4.11
+ RFC 8294: Common YANG Data Types for
+ the Routing Area";
+ }
+ leaf dr-priority {
+ type uint32;
+ default "1";
+ description
+ "Indicates the preference associated
+ with the DR election process. A larger
+ value has a higher priority over a
+ smaller value.";
+ reference
+ "RFC 7761: Protocol Independent
+ Multicast - Sparse Mode
+ (PIM-SM): Protocol
+ Specification (Revised),
+ Section 4.3.2";
+ }
+ uses vpn-common:service-status;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ <CODE ENDS>
+
+9. Security Considerations
+
+ The YANG module specified in this document defines a schema for data
+ that is designed to be accessed via network management protocols such
+ as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
+ is the secure transport layer, and the mandatory-to-implement secure
+ transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
+ is HTTPS, and the mandatory-to-implement secure transport is TLS
+ [RFC8446].
+
+ The Network Configuration Access Control Model (NACM) [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.
+
+ 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-l3vpn-ntw" module:
+
+ 'vpn-profiles': This container includes a set of sensitive data that
+ influence how the L3VPN service is delivered. For example, an
+ attacker who has access to these data nodes may be able to
+ manipulate routing policies, QoS policies, or encryption
+ properties. These data nodes are defined with "nacm:default-deny-
+ write" tagging [RFC9181].
+
+ 'vpn-services': An attacker who is able to access network nodes can
+ undertake various attacks, such as deleting a running L3VPN
+ service, interrupting all the traffic of a client. In addition,
+ an attacker may modify the attributes of a running service (e.g.,
+ QoS, bandwidth, routing protocols, keying material), leading to
+ malfunctioning of the service and therefore to Service Level
+ Agreement (SLA) violations. In addition, an attacker could
+ attempt to create an L3VPN service or add a new network access.
+ In addition to using NACM to prevent unauthorized access, such
+ activity can be detected by adequately monitoring and tracking
+ network configuration changes.
+
+ 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:
+
+ 'customer-name' and 'ip-connection': An attacker can retrieve
+ privacy-related information, which can be used to track a
+ customer. Disclosing such information may be considered a
+ violation of the customer-provider trust relationship.
+
+ 'keying-material': An attacker can retrieve the cryptographic keys
+ protecting the underlying VPN service (CE-PE routing, in
+ particular). These keys could be used to inject spoofed routing
+ advertisements.
+
+ Several data nodes ('bgp', 'ospf', 'isis', 'rip', and 'bfd') rely
+ upon [RFC8177] for authentication purposes. Therefore, this module
+ inherits the security considerations discussed in Section 5 of
+ [RFC8177]. Also, these data nodes support supplying explicit keys as
+ strings in ASCII format. The use of keys in hexadecimal string
+ format would afford greater key entropy with the same number of key-
+ string octets. However, such a format is not included in this
+ version of the L3NM, because it is not supported by the underlying
+ device modules (e.g., [RFC8695]).
+
+ As discussed in Section 7.6.3, the module supports MD5 to basically
+ accommodate the installed BGP base. MD5 suffers from the security
+ weaknesses discussed in Section 2 of [RFC6151] and Section 2.1 of
+ [RFC6952].
+
+ [RFC8633] describes best current practices to be considered in VPNs
+ making use of NTP. Moreover, a mechanism to provide cryptographic
+ security for NTP is specified in [RFC8915].
+
+10. IANA Considerations
+
+ IANA has registered the following URI in the "ns" subregistry within
+ the "IETF XML Registry" [RFC3688]:
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-l3vpn-ntw
+ Registrant Contact: The IESG.
+ XML: N/A; the requested URI is an XML namespace.
+
+ IANA has registered the following YANG module in the "YANG Module
+ Names" subregistry [RFC6020] within the "YANG Parameters" registry.
+
+ Name: ietf-l3vpn-ntw
+ Maintained by IANA? N
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-l3vpn-ntw
+ Prefix: l3nm
+ Reference: RFC 9182
+
+11. References
+
+11.1. Normative References
+
+ [ISO10589] ISO, "Information technology - Telecommunications and
+ information exchange between systems - Intermediate System
+ to Intermediate System intra-domain routeing information
+ exchange protocol for use in conjunction with the protocol
+ for providing the connectionless-mode network service (ISO
+ 8473)", ISO/IEC 10589:2002, 2002,
+ <https://www.iso.org/standard/30932.html>.
+
+ [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5,
+ RFC 1112, DOI 10.17487/RFC1112, August 1989,
+ <https://www.rfc-editor.org/info/rfc1112>.
+
+ [RFC1195] Callon, R., "Use of OSI IS-IS for routing in TCP/IP and
+ dual environments", RFC 1195, DOI 10.17487/RFC1195,
+ December 1990, <https://www.rfc-editor.org/info/rfc1195>.
+
+ [RFC2080] Malkin, G. and R. Minnear, "RIPng for IPv6", RFC 2080,
+ DOI 10.17487/RFC2080, January 1997,
+ <https://www.rfc-editor.org/info/rfc2080>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC2236] Fenner, W., "Internet Group Management Protocol, Version
+ 2", RFC 2236, DOI 10.17487/RFC2236, November 1997,
+ <https://www.rfc-editor.org/info/rfc2236>.
+
+ [RFC2453] Malkin, G., "RIP Version 2", STD 56, RFC 2453,
+ DOI 10.17487/RFC2453, November 1998,
+ <https://www.rfc-editor.org/info/rfc2453>.
+
+ [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast
+ Listener Discovery (MLD) for IPv6", RFC 2710,
+ DOI 10.17487/RFC2710, October 1999,
+ <https://www.rfc-editor.org/info/rfc2710>.
+
+ [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A.
+ Thyagarajan, "Internet Group Management Protocol, Version
+ 3", RFC 3376, DOI 10.17487/RFC3376, October 2002,
+ <https://www.rfc-editor.org/info/rfc3376>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC3810] Vida, R., Ed. and L. Costa, Ed., "Multicast Listener
+ Discovery Version 2 (MLDv2) for IPv6", RFC 3810,
+ DOI 10.17487/RFC3810, June 2004,
+ <https://www.rfc-editor.org/info/rfc3810>.
+
+ [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A
+ Border Gateway Protocol 4 (BGP-4)", RFC 4271,
+ DOI 10.17487/RFC4271, January 2006,
+ <https://www.rfc-editor.org/info/rfc4271>.
+
+ [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private
+ Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February
+ 2006, <https://www.rfc-editor.org/info/rfc4364>.
+
+ [RFC4552] Gupta, M. and N. Melam, "Authentication/Confidentiality
+ for OSPFv3", RFC 4552, DOI 10.17487/RFC4552, June 2006,
+ <https://www.rfc-editor.org/info/rfc4552>.
+
+ [RFC4577] Rosen, E., Psenak, P., and P. Pillay-Esnault, "OSPF as the
+ Provider/Customer Edge Protocol for BGP/MPLS IP Virtual
+ Private Networks (VPNs)", RFC 4577, DOI 10.17487/RFC4577,
+ June 2006, <https://www.rfc-editor.org/info/rfc4577>.
+
+ [RFC5308] Hopps, C., "Routing IPv6 with IS-IS", RFC 5308,
+ DOI 10.17487/RFC5308, October 2008,
+ <https://www.rfc-editor.org/info/rfc5308>.
+
+ [RFC5701] Rekhter, Y., "IPv6 Address Specific BGP Extended Community
+ Attribute", RFC 5701, DOI 10.17487/RFC5701, November 2009,
+ <https://www.rfc-editor.org/info/rfc5701>.
+
+ [RFC5709] Bhatia, M., Manral, V., Fanto, M., White, R., Barnes, M.,
+ Li, T., and R. Atkinson, "OSPFv2 HMAC-SHA Cryptographic
+ Authentication", RFC 5709, DOI 10.17487/RFC5709, October
+ 2009, <https://www.rfc-editor.org/info/rfc5709>.
+
+ [RFC5798] Nadas, S., Ed., "Virtual Router Redundancy Protocol (VRRP)
+ Version 3 for IPv4 and IPv6", RFC 5798,
+ DOI 10.17487/RFC5798, March 2010,
+ <https://www.rfc-editor.org/info/rfc5798>.
+
+ [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection
+ (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010,
+ <https://www.rfc-editor.org/info/rfc5880>.
+
+ [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch,
+ "Network Time Protocol Version 4: Protocol and Algorithms
+ Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010,
+ <https://www.rfc-editor.org/info/rfc5905>.
+
+ [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP
+ Authentication Option", RFC 5925, DOI 10.17487/RFC5925,
+ June 2010, <https://www.rfc-editor.org/info/rfc5925>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+ [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
+ Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
+ <https://www.rfc-editor.org/info/rfc6242>.
+
+ [RFC6513] Rosen, E., Ed. and R. Aggarwal, Ed., "Multicast in MPLS/
+ BGP IP VPNs", RFC 6513, DOI 10.17487/RFC6513, February
+ 2012, <https://www.rfc-editor.org/info/rfc6513>.
+
+ [RFC6514] Aggarwal, R., Rosen, E., Morin, T., and Y. Rekhter, "BGP
+ Encodings and Procedures for Multicast in MPLS/BGP IP
+ VPNs", RFC 6514, DOI 10.17487/RFC6514, February 2012,
+ <https://www.rfc-editor.org/info/rfc6514>.
+
+ [RFC6565] Pillay-Esnault, P., Moyer, P., Doyle, J., Ertekin, E., and
+ M. Lundberg, "OSPFv3 as a Provider Edge to Customer Edge
+ (PE-CE) Routing Protocol", RFC 6565, DOI 10.17487/RFC6565,
+ June 2012, <https://www.rfc-editor.org/info/rfc6565>.
+
+ [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
+ RFC 6991, DOI 10.17487/RFC6991, July 2013,
+ <https://www.rfc-editor.org/info/rfc6991>.
+
+ [RFC7166] Bhatia, M., Manral, V., and A. Lindem, "Supporting
+ Authentication Trailer for OSPFv3", RFC 7166,
+ DOI 10.17487/RFC7166, March 2014,
+ <https://www.rfc-editor.org/info/rfc7166>.
+
+ [RFC7474] Bhatia, M., Hartman, S., Zhang, D., and A. Lindem, Ed.,
+ "Security Extension for OSPFv2 When Using Manual Key
+ Management", RFC 7474, DOI 10.17487/RFC7474, April 2015,
+ <https://www.rfc-editor.org/info/rfc7474>.
+
+ [RFC7761] Fenner, B., Handley, M., Holbrook, H., Kouvelas, I.,
+ Parekh, R., Zhang, Z., and L. Zheng, "Protocol Independent
+ Multicast - Sparse Mode (PIM-SM): Protocol Specification
+ (Revised)", STD 83, RFC 7761, DOI 10.17487/RFC7761, March
+ 2016, <https://www.rfc-editor.org/info/rfc7761>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8177] Lindem, A., Ed., Qu, Y., Yeung, D., Chen, I., and J.
+ Zhang, "YANG Data Model for Key Chains", RFC 8177,
+ DOI 10.17487/RFC8177, June 2017,
+ <https://www.rfc-editor.org/info/rfc8177>.
+
+ [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
+ "Common YANG Data Types for the Routing Area", RFC 8294,
+ DOI 10.17487/RFC8294, December 2017,
+ <https://www.rfc-editor.org/info/rfc8294>.
+
+ [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
+ Access Control Model", STD 91, RFC 8341,
+ DOI 10.17487/RFC8341, March 2018,
+ <https://www.rfc-editor.org/info/rfc8341>.
+
+ [RFC8343] Bjorklund, M., "A YANG Data Model for Interface
+ Management", RFC 8343, DOI 10.17487/RFC8343, March 2018,
+ <https://www.rfc-editor.org/info/rfc8343>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [RFC8466] Wen, B., Fioccola, G., Ed., Xie, C., and L. Jalil, "A YANG
+ Data Model for Layer 2 Virtual Private Network (L2VPN)
+ Service Delivery", RFC 8466, DOI 10.17487/RFC8466, October
+ 2018, <https://www.rfc-editor.org/info/rfc8466>.
+
+ [RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair,
+ "YANG Data Model for Network Access Control Lists (ACLs)",
+ RFC 8519, DOI 10.17487/RFC8519, March 2019,
+ <https://www.rfc-editor.org/info/rfc8519>.
+
+ [RFC9181] Barguil, S., Gonzalez de Dios, O., Ed., Boucadair, M.,
+ Ed., and Q. Wu, "A Common YANG Data Model for Layer 2 and
+ Layer 3 VPNs", RFC 9181, DOI 10.17487/RFC9181, February
+ 2022, <https://www.rfc-editor.org/info/rfc9181>.
+
+11.2. Informative References
+
+ [BGP-YANG] Jethanandani, M., Patel, K., Hares, S., and J. Haas, "BGP
+ YANG Model for Service Provider Networks", Work in
+ Progress, Internet-Draft, draft-ietf-idr-bgp-model-12, 25
+ October 2021, <https://datatracker.ietf.org/doc/html/
+ draft-ietf-idr-bgp-model-12>.
+
+ [Enhanced-VPN-Framework]
+ Dong, J., Bryant, S., Li, Z., Miyasaka, T., and Y. Lee, "A
+ Framework for Enhanced Virtual Private Network (VPN+)
+ Services", Work in Progress, Internet-Draft, draft-ietf-
+ teas-enhanced-vpn-09, 25 October 2021,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-teas-
+ enhanced-vpn-09>.
+
+ [IEEE802.1AX]
+ IEEE, "802.1AX-2020 - IEEE Standard for Local and
+ Metropolitan Area Networks--Link Aggregation", IEEE Std
+ 802.1AX-2020,
+ <https://ieeexplore.ieee.org/document/9105034>.
+
+ [Network-Slices-Framework]
+ Farrel, A., Ed., Gray, E., Drake, J., Rokui, R., Homma,
+ S., Makhijani, K., Contreras, LM., and J. Tantsura,
+ "Framework for IETF Network Slices", Work in Progress,
+ Internet-Draft, draft-ietf-teas-ietf-network-slices-05, 25
+ October 2021, <https://datatracker.ietf.org/doc/html/
+ draft-ietf-teas-ietf-network-slices-05>.
+
+ [PIM-YANG] Liu, X., McAllister, P., Peter, A., Sivakumar, M., Liu,
+ Y., and F. Hu, "A YANG Data Model for Protocol Independent
+ Multicast (PIM)", Work in Progress, Internet-Draft, draft-
+ ietf-pim-yang-17, 19 May 2018,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-pim-
+ yang-17>.
+
+ [PYANG] "pyang", commit 524cf61, December 2021,
+ <https://github.com/mbj4668/pyang>.
+
+ [QoS-YANG] Choudhary, A., Jethanandani, M., Aries, E., and I. Chen,
+ "A YANG Data Model for Quality of Service (QoS)", Work in
+ Progress, Internet-Draft, draft-ietf-rtgwg-qos-model-06, 8
+ November 2021, <https://datatracker.ietf.org/doc/html/
+ draft-ietf-rtgwg-qos-model-06>.
+
+ [RFC3618] Fenner, B., Ed. and D. Meyer, Ed., "Multicast Source
+ Discovery Protocol (MSDP)", RFC 3618,
+ DOI 10.17487/RFC3618, October 2003,
+ <https://www.rfc-editor.org/info/rfc3618>.
+
+ [RFC3644] Snir, Y., Ramberg, Y., Strassner, J., Cohen, R., and B.
+ Moore, "Policy Quality of Service (QoS) Information
+ Model", RFC 3644, DOI 10.17487/RFC3644, November 2003,
+ <https://www.rfc-editor.org/info/rfc3644>.
+
+ [RFC4026] Andersson, L. and T. Madsen, "Provider Provisioned Virtual
+ Private Network (VPN) Terminology", RFC 4026,
+ DOI 10.17487/RFC4026, March 2005,
+ <https://www.rfc-editor.org/info/rfc4026>.
+
+ [RFC4110] Callon, R. and M. Suzuki, "A Framework for Layer 3
+ Provider-Provisioned Virtual Private Networks (PPVPNs)",
+ RFC 4110, DOI 10.17487/RFC4110, July 2005,
+ <https://www.rfc-editor.org/info/rfc4110>.
+
+ [RFC4176] El Mghazli, Y., Ed., Nadeau, T., Boucadair, M., Chan, K.,
+ and A. Gonguet, "Framework for Layer 3 Virtual Private
+ Networks (L3VPN) Operations and Management", RFC 4176,
+ DOI 10.17487/RFC4176, October 2005,
+ <https://www.rfc-editor.org/info/rfc4176>.
+
+ [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless
+ Address Autoconfiguration", RFC 4862,
+ DOI 10.17487/RFC4862, September 2007,
+ <https://www.rfc-editor.org/info/rfc4862>.
+
+ [RFC6037] Rosen, E., Ed., Cai, Y., Ed., and IJ. Wijnands, "Cisco
+ Systems' Solution for Multicast in BGP/MPLS IP VPNs",
+ RFC 6037, DOI 10.17487/RFC6037, October 2010,
+ <https://www.rfc-editor.org/info/rfc6037>.
+
+ [RFC6151] Turner, S. and L. Chen, "Updated Security Considerations
+ for the MD5 Message-Digest and the HMAC-MD5 Algorithms",
+ RFC 6151, DOI 10.17487/RFC6151, March 2011,
+ <https://www.rfc-editor.org/info/rfc6151>.
+
+ [RFC6952] Jethanandani, M., Patel, K., and L. Zheng, "Analysis of
+ BGP, LDP, PCEP, and MSDP Issues According to the Keying
+ and Authentication for Routing Protocols (KARP) Design
+ Guide", RFC 6952, DOI 10.17487/RFC6952, May 2013,
+ <https://www.rfc-editor.org/info/rfc6952>.
+
+ [RFC7149] Boucadair, M. and C. Jacquenet, "Software-Defined
+ Networking: A Perspective from within a Service Provider
+ Environment", RFC 7149, DOI 10.17487/RFC7149, March 2014,
+ <https://www.rfc-editor.org/info/rfc7149>.
+
+ [RFC7297] Boucadair, M., Jacquenet, C., and N. Wang, "IP
+ Connectivity Provisioning Profile (CPP)", RFC 7297,
+ DOI 10.17487/RFC7297, July 2014,
+ <https://www.rfc-editor.org/info/rfc7297>.
+
+ [RFC7426] Haleplidis, E., Ed., Pentikousis, K., Ed., Denazis, S.,
+ Hadi Salim, J., Meyer, D., and O. Koufopavlou, "Software-
+ Defined Networking (SDN): Layers and Architecture
+ Terminology", RFC 7426, DOI 10.17487/RFC7426, January
+ 2015, <https://www.rfc-editor.org/info/rfc7426>.
+
+ [RFC7880] Pignataro, C., Ward, D., Akiya, N., Bhatia, M., and S.
+ Pallagatti, "Seamless Bidirectional Forwarding Detection
+ (S-BFD)", RFC 7880, DOI 10.17487/RFC7880, July 2016,
+ <https://www.rfc-editor.org/info/rfc7880>.
+
+ [RFC8077] Martini, L., Ed. and G. Heron, Ed., "Pseudowire Setup and
+ Maintenance Using the Label Distribution Protocol (LDP)",
+ STD 84, RFC 8077, DOI 10.17487/RFC8077, February 2017,
+ <https://www.rfc-editor.org/info/rfc8077>.
+
+ [RFC8277] Rosen, E., "Using BGP to Bind MPLS Labels to Address
+ Prefixes", RFC 8277, DOI 10.17487/RFC8277, October 2017,
+ <https://www.rfc-editor.org/info/rfc8277>.
+
+ [RFC8299] Wu, Q., Ed., Litkowski, S., Tomotaki, L., and K. Ogaki,
+ "YANG Data Model for L3VPN Service Delivery", RFC 8299,
+ DOI 10.17487/RFC8299, January 2018,
+ <https://www.rfc-editor.org/info/rfc8299>.
+
+ [RFC8309] Wu, Q., Liu, W., and A. Farrel, "Service Models
+ Explained", RFC 8309, DOI 10.17487/RFC8309, January 2018,
+ <https://www.rfc-editor.org/info/rfc8309>.
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+ [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
+ and R. Wilton, "Network Management Datastore Architecture
+ (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
+ <https://www.rfc-editor.org/info/rfc8342>.
+
+ [RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N.,
+ Ananthakrishnan, H., and X. Liu, "A YANG Data Model for
+ Network Topologies", RFC 8345, DOI 10.17487/RFC8345, March
+ 2018, <https://www.rfc-editor.org/info/rfc8345>.
+
+ [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
+ Routing Management (NMDA Version)", RFC 8349,
+ DOI 10.17487/RFC8349, March 2018,
+ <https://www.rfc-editor.org/info/rfc8349>.
+
+ [RFC8453] Ceccarelli, D., Ed. and Y. Lee, Ed., "Framework for
+ Abstraction and Control of TE Networks (ACTN)", RFC 8453,
+ DOI 10.17487/RFC8453, August 2018,
+ <https://www.rfc-editor.org/info/rfc8453>.
+
+ [RFC8512] Boucadair, M., Ed., Sivakumar, S., Jacquenet, C.,
+ Vinapamula, S., and Q. Wu, "A YANG Module for Network
+ Address Translation (NAT) and Network Prefix Translation
+ (NPT)", RFC 8512, DOI 10.17487/RFC8512, January 2019,
+ <https://www.rfc-editor.org/info/rfc8512>.
+
+ [RFC8633] Reilly, D., Stenn, H., and D. Sibold, "Network Time
+ Protocol Best Current Practices", BCP 223, RFC 8633,
+ DOI 10.17487/RFC8633, July 2019,
+ <https://www.rfc-editor.org/info/rfc8633>.
+
+ [RFC8695] Liu, X., Sarda, P., and V. Choudhary, "A YANG Data Model
+ for the Routing Information Protocol (RIP)", RFC 8695,
+ DOI 10.17487/RFC8695, February 2020,
+ <https://www.rfc-editor.org/info/rfc8695>.
+
+ [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu,
+ "Handling Long Lines in Content of Internet-Drafts and
+ RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020,
+ <https://www.rfc-editor.org/info/rfc8792>.
+
+ [RFC8915] Franke, D., Sibold, D., Teichel, K., Dansarie, M., and R.
+ Sundblad, "Network Time Security for the Network Time
+ Protocol", RFC 8915, DOI 10.17487/RFC8915, September 2020,
+ <https://www.rfc-editor.org/info/rfc8915>.
+
+ [RFC8969] Wu, Q., Ed., Boucadair, M., Ed., Lopez, D., Xie, C., and
+ L. Geng, "A Framework for Automating Service and Network
+ Management with YANG", RFC 8969, DOI 10.17487/RFC8969,
+ January 2021, <https://www.rfc-editor.org/info/rfc8969>.
+
+ [RFC9136] Rabadan, J., Ed., Henderickx, W., Drake, J., Lin, W., and
+ A. Sajassi, "IP Prefix Advertisement in Ethernet VPN
+ (EVPN)", RFC 9136, DOI 10.17487/RFC9136, October 2021,
+ <https://www.rfc-editor.org/info/rfc9136>.
+
+ [YANG-Composed-VPN]
+ Even, R., Wu, B., Wu, Q., and Y. Cheng, "YANG Data Model
+ for Composed VPN Service Delivery", Work in Progress,
+ Internet-Draft, draft-evenwu-opsawg-yang-composed-vpn-03,
+ 8 March 2019, <https://datatracker.ietf.org/doc/html/
+ draft-evenwu-opsawg-yang-composed-vpn-03>.
+
+ [YANG-SAPs]
+ Gonzalez de Dios, O., Barguil, S., Wu, Q., Boucadair, M.,
+ and V. Lopez, "A Network YANG Model for Service Attachment
+ Points", Work in Progress, Internet-Draft, draft-ietf-
+ opsawg-sap-00, 25 January 2022,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-
+ sap-00>.
+
+Appendix A. L3VPN Examples
+
+A.1. 4G VPN Provisioning Example
+
+ L3VPNs are widely used to deploy 3G/4G, fixed, and enterprise
+ services, mainly because several traffic discrimination policies can
+ be applied within the network to deliver to the mobile customers a
+ service that meets the SLA requirements.
+
+ Typically, and as shown in Figure 31, an eNodeB (CE) is directly
+ connected to the access routers of the mobile backhaul and their
+ logical interfaces (one or many, according to the service type) are
+ configured in a VPN that transports the packets to the mobile core
+ platforms. In this example, a 'vpn-node' is created with two 'vpn-
+ network-accesses'.
+
+ +-------------+ +------------------+
+ | | | PE |
+ | | | 198.51.100.1 |
+ | eNodeB |>--------/------->|........... |
+ | | vlan 1 | | |
+ | |>--------/------->|...... | |
+ | | vlan 2 | | | |
+ | | Direct | +-------------+ |
+ +-------------+ Routing | | vpn-node-id | |
+ | | 44 | |
+ | +-------------+ |
+ | |
+ +------------------+
+
+ Figure 31: Mobile Backhaul Example
+
+ To create an L3VPN service using the L3NM, the following steps can be
+ followed.
+
+ First, create the 4G VPN service (Figure 32).
+
+ POST: /restconf/data/ietf-l3vpn-ntw:l3vpn-ntw/vpn-services
+ Host: example.com
+ Content-Type: application/yang-data+json
+
+ {
+ "ietf-l3vpn-ntw:vpn-services": {
+ "vpn-service": [
+ {
+ "vpn-id": "4G",
+ "vpn-description": "VPN to deploy 4G services",
+ "customer-name": "mycustomer",
+ "vpn-service-topology": "custom",
+ "vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "simple-profile",
+ "local-as": 65550,
+ "rd": "0:65550:1",
+ "address-family": [
+ {
+ "address-family": "ietf-vpn-common:dual-stack",
+ "vpn-targets": {
+ "vpn-target": [
+ {
+ "id": 1,
+ "route-targets": [
+ {
+ "route-target": "0:65550:1"
+ }
+ ],
+ "route-target-type": "both"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+
+ Figure 32: Create VPN Service
+
+ Second, create a VPN node, as depicted in Figure 33. In this type of
+ service, the VPN node is equivalent to VRF configured in the physical
+ device ('ne-id'=198.51.100.1). NOTE: '\' line wrapping in Figures 33
+ and 34 is implemented per [RFC8792].
+
+ POST: /restconf/data/ietf-l3vpn-ntw:l3vpn-ntw/\
+ vpn-services/vpn-service=4G
+ Host: example.com
+ Content-Type: application/yang-data+json
+
+ {
+ "ietf-l3vpn-ntw:vpn-nodes": {
+ "vpn-node": [
+ {
+ "vpn-node-id": "44",
+ "ne-id": "198.51.100.1",
+ "active-vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "simple-profile"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+
+ Figure 33: Create VPN Node
+
+ Finally, two VPN network accesses are created using the same physical
+ port ('interface-id'=1/1/1). Each 'vpn-network-access' has a
+ particular VLAN interface (1,2): "SYNC" and "DATA" (Figure 34).
+ These interfaces differentiate the traffic between them.
+
+ POST: /restconf/data/ietf-l3vpn-ntw:l3vpn-ntw/\
+ vpn-services/vpn-service=4G/vpn-nodes/vpn-node=44
+ content-type: application/yang-data+json
+
+ {
+ "ietf-l3vpn-ntw:vpn-network-accesses": {
+ "vpn-network-access": [
+ {
+ "id": "1/1/1.1",
+ "interface-id": "1/1/1",
+ "description": "Interface SYNC to eNODE-B",
+ "vpn-network-access-type": "ietf-vpn-common:point-to-point",
+ "vpn-instance-profile": "simple-profile",
+ "status": {
+ "admin-status": {
+ "status": "ietf-vpn-common:admin-up"
+ }
+ },
+ "connection": {
+ "encapsulation": {
+ "type": "ietf-vpn-common:dot1q",
+ "dot1q": {
+ "cvlan-id": 1
+ }
+ }
+ },
+ "ip-connection": {
+ "ipv4": {
+ "local-address": "192.0.2.1",
+ "prefix-length": 30,
+ "address-allocation-type": "static-address",
+ "static-addresses": {
+ "primary-address": "1",
+ "address": [
+ {
+ "address-id": "1",
+ "customer-address": "192.0.2.2"
+ }
+ ]
+ }
+ },
+ "ipv6": {
+ "local-address": "2001:db8::1",
+ "prefix-length": 64,
+ "address-allocation-type": "static-address",
+ "primary-address": "1",
+ "address": [
+ {
+ "address-id": "1",
+ "customer-address": "2001:db8::2"
+ }
+ ]
+ }
+ },
+ "routing-protocols": {
+ "routing-protocol": [
+ {
+ "id": "1",
+ "type": "ietf-vpn-common:direct"
+ }
+ ]
+ }
+ },
+ {
+ "id": "1/1/1.2",
+ "interface-id": "1/1/1",
+ "description": "Interface DATA to eNODE-B",
+ "vpn-network-access-type": "ietf-vpn-common:point-to-point",
+ "vpn-instance-profile": "simple-profile",
+ "status": {
+ "admin-status": {
+ "status": "ietf-vpn-common:admin-up"
+ }
+ },
+ "connection": {
+ "encapsulation": {
+ "type": "ietf-vpn-common:dot1q",
+ "dot1q": {
+ "cvlan-id": 2
+ }
+ }
+ },
+ "ip-connection": {
+ "ipv4": {
+ "local-address": "192.0.2.1",
+ "prefix-length": 30,
+ "address-allocation-type": "static-address",
+ "static-addresses": {
+ "primary-address": "1",
+ "address": [
+ {
+ "address-id": "1",
+ "customer-address": "192.0.2.2"
+ }
+ ]
+ }
+ },
+ "ipv6": {
+ "local-address": "2001:db8::1",
+ "prefix-length": 64,
+ "address-allocation-type": "static-address",
+ "primary-address": "1",
+ "address": [
+ {
+ "address-id": "1",
+ "customer-address": "2001:db8::2"
+ }
+ ]
+ }
+ },
+ "routing-protocols": {
+ "routing-protocol": [
+ {
+ "id": "1",
+ "type": "ietf-vpn-common:direct"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+
+ Figure 34: Create VPN Network Access
+
+A.2. Loopback Interface
+
+ An example of a loopback interface is depicted in Figure 35.
+
+ {
+ "ietf-l3vpn-ntw:vpn-network-accesses": {
+ "vpn-network-access": [
+ {
+ "id": "vpn-access-loopback",
+ "interface-id": "Loopback1",
+ "description": "An example of a loopback interface.",
+ "vpn-network-access-type": "ietf-vpn-common:loopback",
+ "status": {
+ "admin-status": {
+ "status": "ietf-vpn-common:admin-up"
+ }
+ },
+ "ip-connection": {
+ "ipv6": {
+ "local-address": "2001:db8::4",
+ "prefix-length": 128
+ }
+ }
+ }
+ ]
+ }
+ }
+
+ Figure 35: VPN Network Access with a Loopback Interface (Message
+ Body)
+
+A.3. Overriding VPN Instance Profile Parameters
+
+ Figure 36 shows a simplified example to illustrate how some
+ information that is provided at the VPN service level (particularly
+ as part of the 'vpn-instance-profiles') can be overridden by
+ information configured at the VPN node level. In this example, PE3
+ and PE4 inherit the 'vpn-instance-profiles' parameters that are
+ specified at the VPN service level, but PE1 and PE2 are provided with
+ "maximum-routes" values at the VPN node level that override the
+ values that are specified at the VPN service level.
+
+ {
+ "ietf-l3vpn-ntw:vpn-services": {
+ "vpn-service": [
+ {
+ "vpn-id": "override-example",
+ "vpn-service-topology": "ietf-vpn-common:hub-spoke",
+ "vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "HUB",
+ "role": "ietf-vpn-common:hub-role",
+ "local-as": 64510,
+ "rd-suffix": 1001,
+ "address-family": [
+ {
+ "address-family": "ietf-vpn-common:dual-stack",
+ "maximum-routes": [
+ {
+ "protocol": "ietf-vpn-common:any",
+ "maximum-routes": 100
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "profile-id": "SPOKE",
+ "role": "ietf-vpn-common:spoke-role",
+ "local-as": 64510,
+ "address-family": [
+ {
+ "address-family": "ietf-vpn-common:dual-stack",
+ "maximum-routes": [
+ {
+ "protocol": "ietf-vpn-common:any",
+ "maximum-routes": 1000
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "vpn-nodes": {
+ "vpn-node": [
+ {
+ "vpn-node-id": "PE1",
+ "ne-id": "pe1",
+ "router-id": "198.51.100.1",
+ "active-vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "HUB",
+ "rd": "1:198.51.100.1:1001",
+ "address-family": [
+ {
+ "address-family":
+ "ietf-vpn-common:dual-stack",
+ "maximum-routes": [
+ {
+ "protocol": "ietf-vpn-common:any",
+ "maximum-routes": 10
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "vpn-node-id": "PE2",
+ "ne-id": "pe2",
+ "router-id": "198.51.100.2",
+ "active-vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "SPOKE",
+ "address-family": [
+ {
+ "address-family":
+ "ietf-vpn-common:dual-stack",
+ "maximum-routes": [
+ {
+ "protocol": "ietf-vpn-common:any",
+ "maximum-routes": 100
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "vpn-node-id": "PE3",
+ "ne-id": "pe3",
+ "router-id": "198.51.100.3",
+ "active-vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "SPOKE"
+ }
+ ]
+ }
+ },
+ {
+ "vpn-node-id": "PE4",
+ "ne-id": "pe4",
+ "router-id": "198.51.100.4",
+ "active-vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "SPOKE"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+
+ Figure 36: VPN Instance Profile Example (Message Body)
+
+A.4. Multicast VPN Provisioning Example
+
+ IPTV is mainly distributed through multicast over the LANs. In the
+ following example, PIM - Sparse Mode (PIM-SM) is enabled and
+ functional between the PE and the CE. The PE receives multicast
+ traffic from a CE that is directly connected to the multicast source.
+ The signaling between the PE and the CE is achieved using BGP. Also,
+ the RP is statically configured for a multicast group.
+
+ +-----------+ +------+ +------+ +-----------+
+ | Multicast |---| CE |--/--| PE |----| Backbone |
+ | source | +------+ +------+ | IP/MPLS |
+ +-----------+ +-----------+
+
+ Figure 37: Multicast L3VPN Service Example
+
+ Figure 38 illustrates how to configure a multicast L3VPN service
+ using the L3NM.
+
+ First, the multicast service is created together with a generic VPN
+ instance profile (see the excerpt of the request message body shown
+ in Figure 38).
+
+ {
+ "ietf-l3vpn-ntw:vpn-services": {
+ "vpn-service": [
+ {
+ "vpn-id": "Multicast-IPTV",
+ "vpn-description": "Multicast IPTV VPN service",
+ "customer-name": "a-name",
+ "vpn-service-topology": "ietf-vpn-common:hub-spoke",
+ "vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "multicast",
+ "role": "ietf-vpn-common:hub-role",
+ "local-as": 65536,
+ "multicast": {
+ "rp": {
+ "rp-group-mappings": {
+ "rp-group-mapping": [
+ {
+ "id": 1,
+ "rp-address": "203.0.113.17",
+ "groups": {
+ "group": [
+ {
+ "id": 1,
+ "group-address": "239.130.0.0/15"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "rp-discovery": {
+ "rp-discovery-type": "ietf-vpn-common:static-rp"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+
+ Figure 38: Create Multicast VPN Service (Excerpt of the Message
+ Request Body)
+
+ Then, the VPN nodes are created (see the excerpt of the request
+ message body shown in Figure 39). In this example, the VPN node will
+ represent VRF configured in the physical device.
+
+ {
+ "ietf-l3vpn-ntw:vpn-node": [
+ {
+ "vpn-node-id": "500003105",
+ "description": "VRF-IPTV-MULTICAST",
+ "ne-id": "198.51.100.10",
+ "router-id": "198.51.100.10",
+ "active-vpn-instance-profiles": {
+ "vpn-instance-profile": [
+ {
+ "profile-id": "multicast",
+ "rd": "65536:31050202"
+ }
+ ]
+ }
+ }
+ ]
+ }
+
+ Figure 39: Create Multicast VPN Node (Excerpt of the Message
+ Request Body)
+
+ Finally, create the VPN network access with multicast enabled (see
+ the excerpt of the request message body shown in Figure 40).
+
+ {
+ "ietf-l3vpn-ntw:vpn-network-access": {
+ "id": "1/1/1",
+ "description": "Connected-to-source",
+ "vpn-network-access-type": "ietf-vpn-common:point-to-point",
+ "vpn-instance-profile": "multicast",
+ "status": {
+ "admin-status": {
+ "status": "ietf-vpn-common:admin-up"
+ },
+ "ip-connection": {
+ "ipv4": {
+ "local-address": "203.0.113.1",
+ "prefix-length": 30,
+ "address-allocation-type": "static-address",
+ "static-addresses": {
+ "primary-address": "1",
+ "address": [
+ {
+ "address-id": "1",
+ "customer-address": "203.0.113.2"
+ }
+ ]
+ }
+ }
+ },
+ "routing-protocols": {
+ "routing-protocol": [
+ {
+ "id": "1",
+ "type": "ietf-vpn-common:bgp-routing",
+ "bgp": {
+ "description": "Connected to CE",
+ "peer-as": "65537",
+ "address-family": "ietf-vpn-common:ipv4",
+ "neighbor": "203.0.113.2"
+ }
+ }
+ ]
+ },
+ "service": {
+ "pe-to-ce-bandwidth": "100000000",
+ "ce-to-pe-bandwidth": "100000000",
+ "mtu": 1500,
+ "multicast": {
+ "access-type": "source-only",
+ "address-family": "ietf-vpn-common:ipv4",
+ "protocol-type": "router",
+ "pim": {
+ "hello-interval": 30,
+ "status": {
+ "admin-status": {
+ "status": "ietf-vpn-common:admin-up"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Figure 40: Create VPN Network Access (Excerpt of the Message
+ Request Body)
+
+Acknowledgements
+
+ During the discussions of this work, helpful comments, suggestions,
+ and reviews were received from (listed alphabetically) Raul Arco,
+ Miguel Cros Cecilia, Joe Clarke, Dhruv Dhody, Adrian Farrel, Roque
+ Gagliano, Christian Jacquenet, Kireeti Kompella, Julian Lucek, Greg
+ Mirsky, and Tom Petch. Many thanks to them. Thanks to Philip
+ Eardley for the review of an early draft version of the document.
+
+ Daniel King, Daniel Voyer, Luay Jalil, and Stephane Litkowski
+ contributed to early draft versions of this document. Many thanks to
+ Robert Wilton for the AD review. Thanks to Andrew Malis for the
+ routing directorate review, Rifaat Shekh-Yusef for the security
+ directorate review, Qin Wu for the opsdir review, and Pete Resnick
+ for the genart directorate review. Thanks to Michael Scharf for the
+ discussion on the TCP-AO. Thanks to Martin Duke, Lars Eggert,
+ Zaheduzzaman Sarker, Roman Danyliw, Erik Kline, Benjamin Kaduk,
+ Francesca Palombini, and Éric Vyncke for the IESG review.
+
+ This work was supported in part by the European Commission-funded
+ H2020-ICT-2016-2 METRO-HAUL project (G.A. 761727) and Horizon 2020
+ Secured autonomic traffic management for a Tera of SDN flows
+ (Teraflow) project (G.A. 101015857).
+
+Contributors
+
+ Victor Lopez
+ Nokia
+ Madrid
+ Spain
+
+ Email: victor.lopez@nokia.com
+
+
+ Qin Wu
+ Huawei
+
+ Email: bill.wu@huawei.com
+
+
+ Manuel Lopez
+ Vodafone
+ Spain
+
+ Email: manuel-julian.lopez@vodafone.com
+
+
+ Lucia Oliva Ballega
+ Telefonica
+
+ Email: lucia.olivaballega.ext@telefonica.com
+
+
+ Erez Segev
+ Ribbon Communications
+
+ Email: erez.segev@rbbn.com
+
+
+ Paul Sherratt
+ Gamma Telecom
+
+ Email: paul.sherratt@gamma.co.uk
+
+
+Authors' Addresses
+
+ Samier Barguil
+ Telefonica
+ Madrid
+ Spain
+
+ Email: samier.barguilgiraldo.ext@telefonica.com
+
+
+ Oscar Gonzalez de Dios (editor)
+ Telefonica
+ Madrid
+ Spain
+
+ Email: oscar.gonzalezdedios@telefonica.com
+
+
+ Mohamed Boucadair (editor)
+ Orange
+ 35000 Rennes
+ France
+
+ Email: mohamed.boucadair@orange.com
+
+
+ Luis Angel Munoz
+ Vodafone
+ Spain
+
+ Email: luis-angel.munoz@vodafone.com
+
+
+ Alejandro Aguado
+ Nokia
+ Madrid
+ Spain
+
+ Email: alejandro.aguado_martin@nokia.com