draft-ietf-opsawg-l3sm-l3nm-18.txt   rfc9182.txt 
OPSAWG S. Barguil Internet Engineering Task Force (IETF) S. Barguil
Internet-Draft O. Gonzalez de Dios, Ed. Request for Comments: 9182 O. Gonzalez de Dios, Ed.
Intended status: Standards Track Telefonica Category: Standards Track Telefonica
Expires: 11 April 2022 M. Boucadair, Ed. ISSN: 2070-1721 M. Boucadair, Ed.
Orange Orange
L. Munoz L. Munoz
Vodafone Vodafone
A. Aguado A. Aguado
Nokia Nokia
8 October 2021 February 2022
A Layer 3 VPN Network YANG Model A YANG Network Data Model for Layer 3 VPNs
draft-ietf-opsawg-l3sm-l3nm-18
Abstract Abstract
As a complement to the Layer 3 Virtual Private Network Service YANG As a complement to the Layer 3 Virtual Private Network Service Model
data Model (L3SM), used for communication between customers and (L3SM), which is used for communication between customers and service
service providers, this document defines an L3VPN Network YANG Model providers, this document defines an L3VPN Network Model (L3NM) that
(L3NM) that can be used for the provisioning of Layer 3 Virtual can be used for the provisioning of Layer 3 Virtual Private Network
Private Network (VPN) services within a service provider network. (L3VPN) services within a service provider network. The model
The model provides a network-centric view of L3VPN services. provides a network-centric view of L3VPN services.
L3NM is meant to be used by a network controller to derive the The L3NM is meant to be used by a network controller to derive the
configuration information that will be sent to relevant network configuration information that will be sent to relevant network
devices. The model can also facilitate the communication between a devices. The model can also facilitate communication between a
service orchestrator and a network controller/orchestrator. service orchestrator and a network controller/orchestrator.
Editorial Note (To be removed by RFC Editor)
Please update these statements within the document with the RFC
number to be assigned to this document:
* "This version of this YANG module is part of RFC XXXX;"
* "RFC XXXX: Layer 3 VPN Network Model";
* reference: RFC XXXX
Please update "RFC UUUU" to the RFC number to be assigned to I-
D.ietf-opsawg-vpn-common.
Also, please update the "revision" date of the YANG module.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This is an Internet Standards Track document.
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 7841.
This Internet-Draft will expire on 11 April 2022. 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 Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2022 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/ Provisions Relating to IETF Documents
license-info) in effect on the date of publication of this document. (https://trustee.ietf.org/license-info) in effect on the date of
Please review these documents carefully, as they describe your rights publication of this document. Please review these documents
and restrictions with respect to this document. Code Components carefully, as they describe your rights and restrictions with respect
extracted from this document must include Simplified BSD License text to this document. Code Components extracted from this document must
as described in Section 4.e of the Trust Legal Provisions and are include Revised BSD License text as described in Section 4.e of the
provided without warranty as described in the Simplified BSD License. Trust Legal Provisions and are provided without warranty as described
in the Revised BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Terminology
3. Acronyms . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3. Acronyms and Abbreviations
4. L3NM Reference Architecture . . . . . . . . . . . . . . . . . 7 4. L3NM Reference Architecture
5. Relation with other YANG Models . . . . . . . . . . . . . . . 11 5. Relationship to Other YANG Data Models
6. Sample Uses of the L3NM Data Model . . . . . . . . . . . . . 12 6. Sample Uses of the L3NM Data Model
6.1. Enterprise Layer 3 VPN Services . . . . . . . . . . . . . 12 6.1. Enterprise Layer 3 VPN Services
6.2. Multi-Domain Resource Management . . . . . . . . . . . . 13 6.2. Multi-Domain Resource Management
6.3. Management of Multicast Services . . . . . . . . . . . . 13 6.3. Management of Multicast Services
7. Description of the L3NM YANG Module . . . . . . . . . . . . . 13 7. Description of the L3NM YANG Module
7.1. Overall Structure of the Module . . . . . . . . . . . . . 14 7.1. Overall Structure of the Module
7.2. VPN Profiles . . . . . . . . . . . . . . . . . . . . . . 15 7.2. VPN Profiles
7.3. VPN Services . . . . . . . . . . . . . . . . . . . . . . 16 7.3. VPN Services
7.4. VPN Instance Profiles . . . . . . . . . . . . . . . . . . 20 7.4. VPN Instance Profiles
7.5. VPN Nodes . . . . . . . . . . . . . . . . . . . . . . . . 22 7.5. VPN Nodes
7.6. VPN Network Accesses . . . . . . . . . . . . . . . . . . 25 7.6. VPN Network Accesses
7.6.1. Connection . . . . . . . . . . . . . . . . . . . . . 28 7.6.1. Connection
7.6.2. IP Connection . . . . . . . . . . . . . . . . . . . . 30 7.6.2. IP Connection
7.6.3. CE-PE Routing Protocols . . . . . . . . . . . . . . . 33 7.6.3. CE-PE Routing Protocols
7.6.3.1. Static Routing . . . . . . . . . . . . . . . . . 35 7.6.3.1. Static Routing
7.6.3.2. BGP . . . . . . . . . . . . . . . . . . . . . . . 37 7.6.3.2. BGP
7.6.3.3. OSPF . . . . . . . . . . . . . . . . . . . . . . 40 7.6.3.3. OSPF
7.6.3.4. IS-IS . . . . . . . . . . . . . . . . . . . . . . 42 7.6.3.4. IS-IS
7.6.3.5. RIP . . . . . . . . . . . . . . . . . . . . . . . 44 7.6.3.5. RIP
7.6.3.6. VRRP . . . . . . . . . . . . . . . . . . . . . . 45 7.6.3.6. VRRP
7.6.4. OAM . . . . . . . . . . . . . . . . . . . . . . . . . 47 7.6.4. OAM
7.6.5. Security . . . . . . . . . . . . . . . . . . . . . . 48 7.6.5. Security
7.6.6. Services . . . . . . . . . . . . . . . . . . . . . . 49 7.6.6. Services
7.6.6.1. Overview . . . . . . . . . . . . . . . . . . . . 49 7.6.6.1. Overview
7.6.6.2. QoS . . . . . . . . . . . . . . . . . . . . . . . 50 7.6.6.2. QoS
7.7. Multicast . . . . . . . . . . . . . . . . . . . . . . . . 55 7.7. Multicast
8. L3NM YANG Module . . . . . . . . . . . . . . . . . . . . . . 59 8. L3NM YANG Module
9. Security Considerations . . . . . . . . . . . . . . . . . . . 121 9. Security Considerations
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 122 10. IANA Considerations
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 123 11. References
11.1. Normative References . . . . . . . . . . . . . . . . . . 123 11.1. Normative References
11.2. Informative References . . . . . . . . . . . . . . . . . 127 11.2. Informative References
Appendix A. L3VPN Examples . . . . . . . . . . . . . . . . . . . 132 Appendix A. L3VPN Examples
A.1. 4G VPN Provisioning Example . . . . . . . . . . . . . . . 132 A.1. 4G VPN Provisioning Example
A.2. Loopback Interface . . . . . . . . . . . . . . . . . . . 137 A.2. Loopback Interface
A.3. Overriding VPN Instance Profile Parameters . . . . . . . 138 A.3. Overriding VPN Instance Profile Parameters
A.4. Multicast VPN Provisioning Example . . . . . . . . . . . 141 A.4. Multicast VPN Provisioning Example
Appendix B. Implementation Status . . . . . . . . . . . . . . . 145 Acknowledgements
B.1. Nokia Implementation . . . . . . . . . . . . . . . . . . 145 Contributors
B.2. Huawei Implementation . . . . . . . . . . . . . . . . . . 145 Authors' Addresses
B.3. Infinera Implementation . . . . . . . . . . . . . . . . . 145
B.4. Ribbon-ECI Implementation . . . . . . . . . . . . . . . . 145
B.5. Juniper Implementation . . . . . . . . . . . . . . . . . 146
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 146
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 147
1. Introduction 1. Introduction
[RFC8299] defines a Layer 3 Virtual Private Network Service YANG data [RFC8299] defines a YANG Layer 3 Virtual Private Network Service
Model (L3SM) that can be used for communication between customers and Model (L3SM) that can be used for communication between customers and
service providers. Such a model focuses on describing the customer service providers. Such a model focuses on describing the customer
view of the Virtual Private Network (VPN) services and provides an view of the Virtual Private Network (VPN) services and provides an
abstracted view of the customer's requested services. That approach abstracted view of the customer's requested services. That approach
limits the usage of the L3SM to the role of a customer service model limits the usage of the L3SM to the role of a customer service model
(as per [RFC8309]). (as per [RFC8309]).
This document defines a YANG module called L3VPN Network Model This document defines a YANG module called the "L3VPN Network Model"
(L3NM). The L3NM is aimed at providing a network-centric view of (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 Layer 3 (L3) VPN services. This data model can be used to facilitate
communication between the service orchestrator and the network communication between the service orchestrator and the network
controller/orchestrator by allowing for more network-centric controller/orchestrator by allowing more network-centric information
information to be included. It enables further capabilities such as to be included. It enables such additional capabilities as resource
resource management or serves as a multi-domain orchestration management, or it serves as a multi-domain orchestration interface
interface, where logical resources (such as route targets or route where logical resources (such as route targets or route
distinguishers) must be coordinated. distinguishers) must be coordinated.
This document uses the common VPN YANG module defined in This document uses the common VPN YANG module defined in [RFC9181].
[I-D.ietf-opsawg-vpn-common].
This document does not obsolete [RFC8299]. These two modules are This document does not obsolete [RFC8299]. These two modules are
used for similar objectives but with different scopes and views. used for similar objectives but with different scopes and views.
The L3NM YANG module was initially built with a prune and extend The L3NM YANG module was initially built with a "prune and extend"
approach, taking as a starting points the YANG module described in approach, taking as a starting point the YANG module described in
[RFC8299]. Nevertheless, the L3NM is not defined as an augment to [RFC8299]. Nevertheless, the L3NM is not defined as an augment to
L3SM because a specific structure is required to meet network- the L3SM, because a specific structure is required to meet network-
oriented L3 needs. oriented L3 needs.
Some information captured in the L3SM can be passed by the Some information captured in the L3SM can be passed by the
orchestrator in the L3NM (e.g., customer) or be used to feed some orchestrator in the L3NM (e.g., customer) or be used to feed some
L3NM attributes (e.g., actual forwarding policies). Also, some L3NM attributes (e.g., actual forwarding policies). Also, some
information captured in the L3SM may be maintained locally within the information captured in the L3SM may be maintained locally within the
orchestrator; which is in charge of maintaining the correlation orchestrator, which is in charge of maintaining the correlation
between a customer view and its network instantiation. Likewise, between a customer view and its network instantiation. Likewise,
some information captured and exposed using the L3NM can feed the some information captured and exposed using the L3NM can feed the
service layer (e.g., capabilities) to drive VPN service order service layer (e.g., capabilities) to drive VPN service order
handling, and thus the L3SM. handling and thus the L3SM.
Section 5.1 of [RFC8969] illustrates how the L3NM can be used within Section 5.1 of [RFC8969] illustrates how the L3NM can be used within
the network management automation architecture. the network management automation architecture.
The L3NM does not attempt to address all deployment cases, especially The L3NM does not attempt to address all deployment cases, especially
those where the L3VPN connectivity is supported through the those where L3VPN connectivity is supported through the coordination
coordination of different VPNs in different underlying networks. of different VPNs in different underlying networks. More complex
More complex deployment scenarios involving the coordination of deployment scenarios involving the coordination of different VPN
different VPN instances and different technologies to provide an end- instances and different technologies to provide end-to-end VPN
to-end VPN connectivity are addressed by complementary YANG modules, connectivity are addressed by complementary YANG modules, e.g.,
e.g., [I-D.evenwu-opsawg-yang-composed-vpn]. [YANG-Composed-VPN].
The L3NM focuses on BGP Provider Edge (PE) based Layer 3 VPNs as The L3NM focuses on Layer 3 VPNs based on BGP Provider Edges (PEs) as
described in [RFC4026][RFC4110][RFC4364] and Multicast VPNs as described in [RFC4026], [RFC4110], and [RFC4364]; and Multicast VPNs
described in [RFC6037][RFC6513]. as described in [RFC6037] and [RFC6513].
The YANG data model in this document conforms to the Network The YANG data model in this document conforms to the Network
Management Datastore Architecture (NMDA) defined in [RFC8342]. Management Datastore Architecture (NMDA) defined in [RFC8342].
2. Terminology 2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP "OPTIONAL" in this document are to be interpreted as described in
14 [RFC2119] [RFC8174] when, and only when, they appear in all BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here. capitals, as shown here.
This document assumes that the reader is familiar with the contents This document assumes that the reader is familiar with the contents
of [RFC6241], [RFC7950], [RFC8299], [RFC8309], and [RFC8453] and uses of [RFC6241], [RFC7950], [RFC8299], [RFC8309], and [RFC8453] and uses
the terminology defined in those documents. the terminology defined in those documents.
This document uses the term "network model" defined in Section 2.1 of This document uses the term "network model" as defined in Section 2.1
[RFC8969]. of [RFC8969].
The meaning of the symbols in the tree diagrams is defined in The meanings of the symbols in the tree diagrams are defined in
[RFC8340]. [RFC8340].
This document makes use of the following terms: This document makes use of the following terms:
Layer 3 VPN Customer Service Model (L3SM): A YANG module that Layer 3 VPN Service Model (L3SM): A YANG data model that describes
describes the service requirements of an L3VPN that interconnects the service requirements of an L3VPN that interconnects a set of
a set of sites from the point of view of the customer. The sites from the point of view of the customer. The customer
customer service model does not provide details on the service service model does not provide details on the service provider
provider network. The L3VPN customer service model is defined in network. The L3VPN customer service model is defined in
[RFC8299]. [RFC8299].
Layer 3 VPN Service Network Model (L3NM): A YANG module that Layer 3 VPN Network Model (L3NM): A YANG data model that describes a
describes a VPN service in the service provider network. It VPN service in the service provider network. It contains
contains information of the service provider network and might information on the service provider network and might include
include allocated resources. It can be used by network allocated resources. It can be used by network controllers to
controllers to manage and control the VPN service configuration in manage and control the VPN service configuration in the service
the service provider network. The YANG module can be consumed by provider network. The corresponding YANG module can be used by a
a service orchestrator to request a VPN service to a network service orchestrator to request a VPN service to a network
controller. controller.
Service orchestrator: A functional entity that interacts with the Service orchestrator: A functional entity that interacts with the
customer of an L3VPN. The service orchestrator interacts with the customer of an L3VPN. The service orchestrator interacts with the
customer using the L3SM. The service orchestrator is responsible customer using the L3SM. The service orchestrator is responsible
for the Customer Edge (CE) - Provider Edge (PE) attachment for the Customer Edge to Provider Edge (CE-PE) attachment
circuits, the PE selection, and requesting the VPN service to the circuits, the PE selection, and requesting the VPN service to the
network controller. network controller.
Network orchestrator: A functional entity that is hierarchically Network orchestrator: A functional entity that is hierarchically
intermediate between a service orchestrator and network intermediate between a service orchestrator and network
controllers. A network orchestrator can manage one or several controllers. A network orchestrator can manage one or several
network controllers. network controllers.
Network controller: A functional entity responsible for the control Network controller: A functional entity responsible for the control
and management of the service provider network. and management of the service provider network.
VPN node: An abstraction that represents a set of policies applied VPN node: An abstraction that represents a set of policies applied
on a PE and that belong to a single VPN service. A VPN service 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 involves one or more VPN nodes. As it is an abstraction, the
network controller will take on how to implement a VPN node. For network controller will decide how to implement a VPN node. For
example, typically, in a BGP-based VPN, a VPN node could be mapped example, in a BGP-based VPN, a VPN node could typically be mapped
into a Virtual Routing and Forwarding (VRF). to a Virtual Routing and Forwarding (VRF) instance.
VPN network access: An abstraction that represents the network VPN network access: An abstraction that represents the network
interfaces that are associated to a given VPN node. Traffic interfaces that are associated with a given VPN node. Traffic
coming from the VPN network access belongs to the VPN. The coming from the VPN network access belongs to the VPN. The
attachment circuits (bearers) between CEs and PEs are terminated attachment circuits (bearers) between CEs and PEs are terminated
in the VPN network access. A reference to the bearer is in the VPN network access. A reference to the bearer is
maintained to allow keeping the link between L3SM and L3NM when maintained to allow keeping the link between the L3SM and L3NM
both models are used in a given deployment. when both models are used in a given deployment.
VPN site: A VPN customer's location that is connected to the service 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 provider network via a CE-PE link, which can access at least one
VPN [RFC4176]. VPN [RFC4176].
VPN service provider: A service provider that offers VPN-related VPN service provider: A service provider that offers VPN-related
services [RFC4176]. services [RFC4176].
Service provider network: A network that is able to provide VPN- Service provider network: A network that is able to provide VPN-
related services. related services.
The document is aimed at modeling BGP PE-based VPNs in a service This document is aimed at modeling BGP PE-based VPNs in a service
provider network, so the terms defined in [RFC4026] and [RFC4176] are provider network, so the terms defined in [RFC4026] and [RFC4176] are
used. used in this document as well.
3. Acronyms 3. Acronyms and Abbreviations
The following acronyms are used in the document: The following acronyms and abbreviations are used in this document:
ACL Access Control List ACL Access Control List
AS Autonomous System AS Autonomous System
ASM Any-Source Multicast ASM Any-Source Multicast
ASN AS Number ASN AS Number
BSR Bootstrap Router
BFD Bidirectional Forwarding Detection BFD Bidirectional Forwarding Detection
BGP Border Gateway Protocol BGP Border Gateway Protocol
BSR Bootstrap Router
CE Customer Edge CE Customer Edge
CsC Carriers' Carriers CsC Carriers' Carriers
IGMP Internet Group Management Protocol IGMP Internet Group Management Protocol
L3VPN Layer 3 Virtual Private Network
L3SM L3VPN Service Model
L3NM L3VPN Network Model L3NM L3VPN Network Model
L3SM L3VPN Service Model
L3VPN Layer 3 Virtual Private Network
MLD Multicast Listener Discovery MLD Multicast Listener Discovery
MSDP Multicast Source Discovery Protocol MSDP Multicast Source Discovery Protocol
MVPN Multicast VPN MVPN Multicast VPN
NAT Network Address Translation NAT Network Address Translation
OAM Operations, Administration, and Maintenance OAM Operations, Administration, and Maintenance
OSPF Open Shortest Path First OSPF Open Shortest Path First
PE Provider Edge PE Provider Edge
PIM Protocol Independent Multicast PIM Protocol Independent Multicast
QoS Quality of Service QoS Quality of Service
RD Route Distinguisher RD Route Distinguisher
skipping to change at page 7, line 31 skipping to change at line 284
SA Security Association SA Security Association
SSM Source-Specific Multicast SSM Source-Specific Multicast
VPN Virtual Private Network VPN Virtual Private Network
VRF Virtual Routing and Forwarding VRF Virtual Routing and Forwarding
4. L3NM Reference Architecture 4. L3NM Reference Architecture
Figure 1 depicts the reference architecture for the L3NM. The figure Figure 1 depicts the reference architecture for the L3NM. The figure
is an expansion of the architecture presented in Section 5 of is an expansion of the architecture presented in Section 5 of
[RFC8299]; it decomposes the box marked "orchestration" in that [RFC8299]; it decomposes the box marked "orchestration" in that
section into three separate functional components: Service section into three separate functional components: service
Orchestration, Network Orchestration, and Domain Orchestration. orchestration, network orchestration, and domain orchestration.
Although some deployments may choose to construct a monolithic Although some deployments may choose to construct a monolithic
orchestration component (covering both service and network matters), orchestration component (covering both service and network matters),
this document advocates for a clear separation between service and this document advocates for a clear separation between service and
network orchestration components for the sake of better flexibility. network orchestration components for the sake of better flexibility.
Such design adheres to the L3VPN reference architecture defined in Such a design adheres to the L3VPN reference architecture defined in
Section 1.3 of [RFC4176]. This separation relies upon a dedicated Section 1.3 of [RFC4176]. This separation relies upon a dedicated
communication interface between these components and appropriate YANG communication interface between these components and appropriate YANG
modules that reflect network-related information. Such information modules that reflect network-related information. Such information
is hidden to customers. is hidden from customers.
The intelligence for translating customer-facing information into The intelligence for translating customer-facing information into
network-centric one (and vice versa) is implementation specific. network-centric information (and vice versa) is implementation
specific.
The terminology from [RFC8309] is introduced to show the distinction The terminology from [RFC8309] is used here to show the distinction
between the customer service model, the service delivery model, the between the customer service model, the service delivery model, the
network configuration model, and the device configuration model. In network configuration model, and the device configuration model. In
that context, the "Domain Orchestration" and "Config Manager" roles that context, the "domain orchestration" and "config manager" roles
may be performed by "Controllers". may be performed by "controllers".
+---------------+ +---------------+
| Customer | | Customer |
+-------+-------+ +-------+-------+
Customer Service Model | Customer Service Model |
e.g., l3vpn-svc | (e.g., 'l3vpn-svc') |
+-------+-------+ +-------+-------+
| Service | | Service |
| Orchestration | | Orchestration |
+-------+-------+ +-------+-------+
Service Delivery Model | Service Delivery Model |
l3vpn-ntw | 'l3vpn-ntw' |
+-------+-------+ +-------+-------+
| Network | | Network |
| Orchestration | | Orchestration |
+-------+-------+ +-------+-------+
Network Configuration Model | Network Configuration Model |
+-----------+-----------+ +-----------+-----------+
| | | |
+--------+------+ +--------+------+ +--------+------+ +--------+------+
| Domain | | Domain | | Domain | | Domain |
| Orchestration | | Orchestration | | Orchestration | | Orchestration |
+---+-----------+ +--------+------+ +---+-----------+ +--------+------+
Device | | | Device | | |
Configuration | | | Configuration | | |
Model | | | Model | | |
+----+----+ | | +----+----+ | |
| Config | | | | Config | | |
| Manager | | | | Manager | | |
+----+----+ | | +----+----+ | |
| | | | | |
| NETCONF/CLI.................. | NETCONF/CLI..................
| | | | | |
+------------------------------------------------+ +------------------------------------------------+
Network Network
NETCONF: Network Configuration Protocol
CLI: Command-Line Interface
Figure 1: L3NM Reference Architecture Figure 1: L3NM Reference Architecture
The customer may use a variety of means to request a service that may 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 trigger the instantiation of an L3NM. The customer may use the L3SM
or more abstract models to request a service that relies upon an or more abstract models to request a service that relies upon an
L3VPN service. For example, the customer may supply an IP L3VPN service. For example, the customer may supply an IP
Connectivity Provisioning Profile (CPP) that characterizes the Connectivity Provisioning Profile (CPP) that characterizes the
requested service [RFC7297], an enhanced VPN (VPN+) service requested service [RFC7297], an enhanced VPN (VPN+) service
[I-D.ietf-teas-enhanced-vpn], or an IETF network slice service [Enhanced-VPN-Framework], or an IETF network slice service
[I-D.ietf-teas-ietf-network-slices]. [Network-Slices-Framework].
Note also that both the L3SM and the L3NM may be used in the context 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 of the Abstraction and Control of TE Networks (ACTN) framework
[RFC8453]. Figure 2 shows the Customer Network Controller (CNC), the [RFC8453]. Figure 2 shows the Customer Network Controller (CNC), the
Multi-Domain Service Coordinator (MDSC), and the Provisioning Network Multi-Domain Service Coordinator (MDSC), the Provisioning Network
Controller (PNC) components and the interfaces where L3SM/L3NM are Controller (PNC) components, and the interfaces where the L3SM and
used. L3NM are used.
+----------------------------------+ +----------------------------------+
| Customer | | Customer |
| +-----------------------------+ | | +-----------------------------+ |
| | CNC | | | | CNC | |
| +-----------------------------+ | | +-----------------------------+ |
+----+-----------------------+-----+ +----+-----------------------+-----+
| | | |
| L3SM | L3SM | L3SM | L3SM
| | | |
+---------+---------+ +---------+---------+ +---------+---------+ +---------+---------+
| MDSC | | MDSC | | MDSC | | MDSC |
| +---------------+ | | (parent) | | +---------------+ | | (parent) |
| | Service | | +---------+---------+ | | Service | | +---------+---------+
| | Orchestration | | | | | Orchestration | | |
| +-------+-------+ | | L3NM | +-------+-------+ | | L3NM
| | | | | | | |
| | L3NM | +---------+---------+ | | L3NM | +---------+---------+
| | | | MDSC | | | | | MDSC |
| +-------+-------+ | | (child) | | +-------+-------+ | | (child) |
| | Network | | +---------+---------+ | | Network | | +---------+---------+
| | Orchestration | | | | | Orchestration | | |
| +---------------+ | | | +---------------+ | |
+---------+---------+ | +---------+---------+ |
| | | |
| Network Configuration | | Network Configuration |
| | | |
+------------+-------+ +---------+------------+ +------------+-------+ +---------+------------+
| Domain | | Domain | | Domain | | Domain |
| Controller | | Controller | | Controller | | Controller |
| +---------+ | | +---------+ | | +---------+ | | +---------+ |
| | PNC | | | | PNC | | | | PNC | | | | PNC | |
| +---------+ | | +---------+ | | +---------+ | | +---------+ |
+------------+-------+ +---------+------------+ +------------+-------+ +---------+------------+
| | | |
| Device Configuration | | Device Configuration |
| | | |
+----+---+ +----+---+ +----+---+ +----+---+
| Device | | Device | | Device | | Device |
+--------+ +--------+ +--------+ +--------+
Figure 2: L3SM and L3NM in the Context of ACTN Figure 2: L3SM and L3NM in the Context of the ACTN
5. Relation with other YANG Models 5. Relationship to Other YANG Data Models
The "ietf-vpn-common" module [I-D.ietf-opsawg-vpn-common] includes a The "ietf-vpn-common" module [RFC9181] includes a set of identities,
set of identities, types, and groupings that are meant to be reused types, and groupings that are meant to be reused by VPN-related YANG
by VPN-related YANG modules independently of the layer (e.g., Layer modules independently of the layer (e.g., Layer 2, Layer 3) and the
2, Layer 3) and the type of the module (e.g., network model, service type of the module (e.g., network model, service model), including
model) including future revisions of existing models (e.g., [RFC8299] future revisions of existing models (e.g., [RFC8299] or [RFC8466]).
or [RFC8466]). The L3NM reuses these common types and groupings. The L3NM reuses these common types and groupings.
In order to avoid data duplication and to ease passing data between In order to avoid data duplication and to ease passing data between
layers when required (service layer to network layer and vice versa), layers when required (service layer to network layer and vice versa),
early versions of the L3NM reused many of the data nodes that are early versions of the L3NM reused many of the data nodes that are
defined in [RFC8299]. Nevertheless, that approach was abandoned in defined in [RFC8299]. Nevertheless, that approach was abandoned in
favor of the "ietf-vpn-common" module because that initial design was favor of the "ietf-vpn-common" module because that initial design was
interpreted as if the deployment of L3NM depends on L3SM, while this interpreted as if the deployment of the L3NM depends on the L3SM,
is not the case. For example, a service provider may decide to use while this is not the case. For example, a service provider may
the L3NM to build its L3VPN services without exposing the L3SM. 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 As discussed in Section 4, the L3NM is meant to manage L3VPN services
within a service provider network. The module provides a network within a service provider network. The module provides a network
view of the service. Such a view is only visible within the service view of the service. Such a view is only visible within the service
provider and is not exposed outside (to customers, for example). The provider and is not exposed outside (to customers, for example). The
following discusses how L3NM interfaces with other YANG modules: items below discuss how the L3NM interfaces with other YANG modules:
L3SM: L3NM is not a customer service model. L3SM: The L3NM is not a customer service model.
The internal view of the service (i.e., L3NM) may be mapped to an The internal view of the service (i.e., the L3NM) may be mapped to
external view which is visible to customers: L3VPN Service YANG an external view that is visible to customers: the L3VPN Service
data Model (L3SM) [RFC8299]. Model (L3SM) [RFC8299].
The L3NM can be fed with inputs that are requested by customers, The L3NM can be fed with inputs that are requested by customers.
typically, relying upon an L3SM template. Concretely, some parts Such requests typically rely upon an L3SM template. Concretely,
of the L3SM module can be directly mapped into L3NM while other some parts of the L3SM module can be directly mapped to the L3NM,
parts are generated as a function of the requested service and while other parts are generated as a function of the requested
local guidelines. Some other parts are local to the service service and local guidelines. Some other parts are local to the
provider and do not map directly to L3SM. service provider and do not map directly to the L3SM.
Note that the use of L3NM within a service provider does not Note that using the L3NM within a service provider does not
assume nor preclude exposing the VPN service via the L3SM. This assume, nor does it preclude, exposing the VPN service via the
is deployment-specific. Nevertheless, the design of L3NM tries to L3SM. This is deployment specific. Nevertheless, the design of
align as much as possible with the features supported by the L3SM the L3NM tries to align as much as possible with the features
to ease grafting both L3NM and L3SM for the sake of highly supported by the L3SM to ease the grafting of both the L3NM and
automated VPN service provisioning and delivery. 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 Network Topology Modules: An L3VPN involves nodes that are part of a
topology managed by the service provider network. The topology topology managed by the service provider network. The topology
can be represented using the network topology YANG module defined can be represented using the network topology YANG module defined
in [RFC8345] or its extension such as a User-Network Interface in [RFC8345] or its extension, such as a network YANG module for
(UNI) topology module (e.g., [I-D.ogondio-opsawg-uni-topology]). Service Attachment Points (SAPs) [YANG-SAPs].
Device Modules: L3NM is not a device model. Device Modules: The L3NM is not a device model.
Once a global VPN service is captured by means of L3NM, the actual Once a global VPN service is captured by means of the L3NM, the
activation and provisioning of the VPN service will involve a actual activation and provisioning of the VPN service will involve
variety of device modules to tweak the required functions for the a variety of device modules to tweak the required functions for
delivery of the service. These functions are supported by the VPN the delivery of the service. These functions are supported by the
nodes and can be managed using device YANG modules. A non- VPN nodes and can be managed using device YANG modules. A non-
comprehensive list of such device YANG modules is provided below: comprehensive list of such device YANG modules is provided below:
* Routing management [RFC8349]. * Routing management [RFC8349].
* BGP [I-D.ietf-idr-bgp-model]. * BGP [BGP-YANG].
* PIM [I-D.ietf-pim-yang]. * PIM [PIM-YANG].
* NAT management [RFC8512]. * NAT management [RFC8512].
* QoS management [I-D.ietf-rtgwg-qos-model]. * QoS management [QoS-YANG].
* ACLs [RFC8519]. * ACLs [RFC8519].
How L3NM is used to derive device-specific actions is How the L3NM is used to derive device-specific actions is
implementation-specific. implementation specific.
6. Sample Uses of the L3NM Data Model 6. Sample Uses of the L3NM Data Model
This section provides a non-exhaustive list of examples to illustrate This section provides a non-exhaustive list of examples that
contexts where the L3NM can be used. illustrate contexts where the L3NM can be used.
6.1. Enterprise Layer 3 VPN Services 6.1. Enterprise Layer 3 VPN Services
Enterprise L3VPNs are one of the most demanded services for carriers, Enterprise L3VPNs are one of the most demanded services for carriers;
and therefore, L3NM can be useful to automate the provisioning and therefore, L3NM can be useful for automating the provisioning and
maintenance of these VPNs. Templates and batch processes can be maintenance of these VPNs. Templates and batch processes can be
built, and as a result many parameters are needed for the creation 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- from scratch of a VPN that can be abstracted to the upper Software-
Defined Networking (SDN) [RFC7149][RFC7426] layer, but some manual Defined Networking (SDN) layer [RFC7149] [RFC7426], but some manual
intervention will still be required. intervention will still be required.
A common function that is supported by VPNs is the addition or A common function that is supported by VPNs is the addition or
removal of VPN nodes. Workflows can use the L3NM in these scenarios removal of VPN nodes. Workflows can use the L3NM in these scenarios
to add or prune nodes from the network data model as required. to add or prune nodes from the network data model as required.
6.2. Multi-Domain Resource Management 6.2. Multi-Domain Resource Management
The implementation of L3VPN services which span across The implementation of L3VPN services that span administratively
administratively separated domains (i.e., that are under the separated domains (i.e., that are under the administration of
administration of different management systems or controllers) different management systems or controllers) requires some network
requires some network resources to be synchronized between systems. resources to be synchronized between systems. Particularly,
Particularly, resources must be adequately managed in each domain to resources must be adequately managed in each domain to avoid broken
avoid broken configuration. configurations.
For example, route targets (RTs) shall be synchronized between PEs. For example, route targets (RTs) shall be synchronized between PEs.
When all PEs are controlled by the same management system, RT When all PEs are controlled by the same management system, RT
allocation can be performed by that management system. In cases allocation can be performed by that management system. In cases
where the service spans across multiple management systems, the task where the service spans multiple management systems, the task of
of allocating RTs has to be aligned across the domains, therefore, allocating RTs has to be aligned across the domains; therefore, the
the network model must provide a way to specify RTs. In addition, network model must provide a way to specify RTs. In addition, route
route distinguishers (RDs) must also be synchronized to avoid distinguishers (RDs) must also be synchronized to avoid collisions of
collisions in RD allocation between separate management systems. An RD allocations between separate management systems. An incorrect
incorrect allocation might lead to the same RD and IP prefixes being allocation might lead to the same RD and IP prefixes being exported
exported by different PEs. by different PEs.
6.3. Management of Multicast Services 6.3. Management of Multicast Services
Multicast services over L3VPN can be implemented using dual PIM MVPNs Multicast services over L3VPNs can be implemented using dual PIM
(also known as, Draft Rosen model) [RFC6037] or Multiprotocol BGP MVPNs (also known as the draft-rosen model) [RFC6037] or MVPNs based
(MP-BGP)-based MVPNs [RFC6513][RFC6514]. Both methods are supported on Multiprotocol BGP (MP-BGP) [RFC6513] [RFC6514]. Both methods are
and equally effective, but the main difference is that MBGP-based supported and equally effective, but the main difference is that MP-
MVPN does not require multicast configuration on the service provider BGP-based MVPNs do not require multicast configuration on the service
network. MBGP MVPNs employ the intra-autonomous system BGP control provider network. MP-BGP MVPNs employ the intra-AS BGP control plane
plane and PIM sparse mode as the data plane. The PIM state and PIM Sparse Mode [RFC7761] as the data plane. The PIM state
information is maintained between PEs using the same architecture information is maintained between PEs using the same architecture
that is used for unicast VPNs. that is used for unicast VPNs.
On the other hand, [RFC6037] has limitations such as reduced options On the other hand, [RFC6037] has limitations, such as reduced options
for transport, control plane scalability, availability, operational for transport, control plane scalability, availability, operational
inconsistency, and the need of maintaining state in the backbone. inconsistency, and the need to maintain state in the backbone.
Because of these limitations, MBGP MVPN is the architectural model Because of these limitations, MP-BGP MVPNs provide the architectural
that has been taken as the base for implementing multicast service in model that has been taken as the base for implementing multicast
L3VPNs. In this scenario, BGP is used to auto-discover MVPN PE services in L3VPNs. In this scenario, BGP is used to autodiscover
members and the customer PIM signaling is sent across the provider's MVPN PE members and the customer PIM signaling is sent across the
core through MP-BGP. The multicast traffic is transported on MPLS provider's core through MP-BGP. The multicast traffic is transported
P2MP LSPs. on MPLS Point-to-Multipoint (P2MP) Label Switched Paths (LSPs).
7. Description of the L3NM YANG Module 7. Description of the L3NM YANG Module
The L3NM ('ietf-l3vpn-ntw') is defined to manage L3VPNs in a service The L3NM ("ietf-l3vpn-ntw") is defined to manage L3VPNs in a service
provider network. In particular, the 'ietf-l3vpn-ntw' module can be provider network. In particular, the "ietf-l3vpn-ntw" module can be
used to create, modify, and retrieve L3VPN services of a network. used to create, modify, and retrieve L3VPN services of a network.
The full tree diagram of the module can be generated using the The full tree diagram of the module can be generated using the
"pyang" tool [PYANG]. That tree is not included here because it is "pyang" tool [PYANG]. That tree is not included here because it is
too long (Section 3.3 of [RFC8340]). Instead, subtrees are provided too long (Section 3.3 of [RFC8340]). Instead, subtrees are provided
for the reader's convenience. for the reader's convenience.
7.1. Overall Structure of the Module 7.1. Overall Structure of the Module
The 'ietf-l3vpn-ntw' module uses two main containers: 'vpn-services' The "ietf-l3vpn-ntw" module uses two main containers: 'vpn-profiles'
and 'vpn-profiles' (see Figure 3). and 'vpn-services' (see Figure 3).
The 'vpn-profiles' container is used by the provider to maintain a 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 set of common VPN profiles that apply to one or several VPN services
(Section 7.2). (Section 7.2).
The 'vpn-services' container maintains the set of VPN services The 'vpn-services' container maintains the set of VPN services
managed within the service provider network. 'vpn-service' is the managed within the service provider network. The 'vpn-service' is
data structure that abstracts a VPN service (Section 7.3). the data structure that abstracts a VPN service (Section 7.3).
module: ietf-l3vpn-ntw module: ietf-l3vpn-ntw
+--rw l3vpn-ntw +--rw l3vpn-ntw
+--rw vpn-profiles +--rw vpn-profiles
| ... | ...
+--rw vpn-services +--rw vpn-services
+--rw vpn-service* [vpn-id] +--rw vpn-service* [vpn-id]
... ...
+--rw vpn-nodes +--rw vpn-nodes
+--rw vpn-node* [vpn-node-id] +--rw vpn-node* [vpn-node-id]
... ...
+--rw vpn-network-accesses +--rw vpn-network-accesses
+--rw vpn-network-access* [id] +--rw vpn-network-access* [id]
... ...
Figure 3: Overall L3NM Tree Structure Figure 3: Overall L3NM Tree Structure
Some of the data nodes are keyed by the address-family. For the sake Some of the data nodes are keyed by the address family. For the sake
of data representation compactness, It is RECOMMENDED to use the of data representation compactness, it is RECOMMENDED to use the
dual-stack address-family for data nodes that have the same value for dual-stack address family for data nodes that have the same value for
both IPv4 and IPv6. If, for some reasons, a data node is present 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 both dual-stack and IPv4 (or IPv6), the value that is indicated under
dual-stack takes precedence over the one that is indicated under IPv4 dual-stack takes precedence over the value that is indicated under
(or IPv6). IPv4 (or IPv6).
7.2. VPN Profiles 7.2. VPN Profiles
The 'vpn-profiles' container (Figure 4) allows the VPN service The 'vpn-profiles' container (Figure 4) allows the VPN service
provider to define and maintain a set of VPN profiles provider to define and maintain a set of VPN profiles [RFC9181] that
[I-D.ietf-opsawg-vpn-common] that apply to one or several VPN apply to one or several VPN services.
services.
+--rw l3vpn-ntw +--rw l3vpn-ntw
+--rw vpn-profiles +--rw vpn-profiles
| +--rw valid-provider-identifiers | +--rw valid-provider-identifiers
| +--rw external-connectivity-identifier* [id] | +--rw external-connectivity-identifier* [id]
| | {external-connectivity}? | | {external-connectivity}?
| | +--rw id string | | +--rw id string
| +--rw encryption-profile-identifier* [id] | +--rw encryption-profile-identifier* [id]
| | +--rw id string | | +--rw id string
| +--rw qos-profile-identifier* [id] | +--rw qos-profile-identifier* [id]
| | +--rw id string | | +--rw id string
| +--rw bfd-profile-identifier* [id] | +--rw bfd-profile-identifier* [id]
| | +--rw id string | | +--rw id string
| +--rw forwarding-profile-identifier* [id] | +--rw forwarding-profile-identifier* [id]
| | +--rw id string | | +--rw id string
| +--rw routing-profile-identifier* [id] | +--rw routing-profile-identifier* [id]
| +--rw id string | +--rw id string
+--rw vpn-services +--rw vpn-services
... ...
Figure 4: VPN Profiles Subtree Structure Figure 4: VPN Profiles Subtree Structure
This document does not make any assumption about the exact definition This document does not make any assumption about the exact definition
of these profiles. The exact definition of the profiles is local to of these profiles. The exact definition of the profiles is local to
each VPN service provider. The model only includes an identifier to each VPN service provider. The model only includes an identifier for
these profiles in order to facilitate identifying and binding local these profiles in order to facilitate identifying and binding local
policies when building a VPN service. As shown in Figure 4, the policies when building a VPN service. As shown in Figure 4, the
following identifiers can be included: following identifiers can be included:
'external-connectivity-identifier': This identifier refers to a 'external-connectivity-identifier': This identifier refers to a
profile that defines the external connectivity provided to a VPN profile that defines the external connectivity provided to a VPN
service (or a subset of VPN sites). An external connectivity may service (or a subset of VPN sites). External connectivity may be
be an access to the Internet or a restricted connectivity such as access to the Internet or restricted connectivity, such as access
access to a public/private cloud. to a public/private cloud.
'encryption-profile-identifier': An encryption profile refers to a 'encryption-profile-identifier': An encryption profile refers to a
set of policies related to the encryption schemes and setup that set of policies related to the encryption schemes and setup that
can be applied when building and offering a VPN service. can be applied when building and offering a VPN service.
'qos-profile-identifier': A Quality of Service (QoS) profile refers 'qos-profile-identifier': A Quality of Service (QoS) profile refers
to a set of policies such as classification, marking, and actions to a set of policies, such as classification, marking, and actions
(e.g., [RFC3644]). (e.g., [RFC3644]).
'bfd-profile-identifier': A Bidirectional Forwarding Detection (BFD) 'bfd-profile-identifier': A Bidirectional Forwarding Detection (BFD)
profile refers to a set of BFD [RFC5880] policies that can be profile refers to a set of BFD policies [RFC5880] that can be
invoked when building a VPN service. invoked when building a VPN service.
'forwarding-profile-identifier': A forwarding profile refers to the 'forwarding-profile-identifier': A forwarding profile refers to the
policies that apply to the forwarding of packets conveyed within a policies that apply to the forwarding of packets conveyed within a
VPN. Such policies may consist, for example, of applying Access VPN. Such policies may consist, for example, of applying Access
Control Lists (ACLs). Control Lists (ACLs).
'routing-profile-identifier': A routing profile refers to a set of 'routing-profile-identifier': A routing profile refers to a set of
routing policies that will be invoked (e.g., BGP policies) when routing policies that will be invoked (e.g., BGP policies) when
delivering the VPN service. delivering the VPN service.
7.3. VPN Services 7.3. VPN Services
The 'vpn-service' is the data structure that abstracts a VPN service The 'vpn-service' is the data structure that abstracts a VPN service
in the service provider network. Each 'vpn-service' is uniquely in the service provider network. Each 'vpn-service' is uniquely
identified by an identifier: 'vpn-id'. Such 'vpn-id' is only identified by an identifier: 'vpn-id'. Such a 'vpn-id' is only
meaningful locally (e.g., the network controller). The subtree of meaningful locally (e.g., the network controller). The subtree of
the 'vpn-services' is shown in Figure 5. the 'vpn-services' is shown in Figure 5.
+--rw l3vpn-ntw +--rw l3vpn-ntw
+--rw vpn-profiles +--rw vpn-profiles
| ... | ...
+--rw vpn-services +--rw vpn-services
+--rw vpn-service* [vpn-id] +--rw vpn-service* [vpn-id]
+--rw vpn-id vpn-common:vpn-id +--rw vpn-id vpn-common:vpn-id
+--rw vpn-name? string +--rw vpn-name? string
+--rw vpn-description? string +--rw vpn-description? string
+--rw customer-name? string +--rw customer-name? string
+--rw parent-service-id? vpn-common:vpn-id +--rw parent-service-id? vpn-common:vpn-id
+--rw vpn-type? identityref +--rw vpn-type? identityref
+--rw vpn-service-topology? identityref +--rw vpn-service-topology? identityref
+--rw status +--rw status
| +--rw admin-status | +--rw admin-status
| | +--rw status? identityref | | +--rw status? identityref
| | +--rw last-change? yang:date-and-time | | +--rw last-change? yang:date-and-time
| +--ro oper-status | +--ro oper-status
| +--ro status? identityref | +--ro status? identityref
| +--ro last-change? yang:date-and-time | +--ro last-change? yang:date-and-time
+--rw vpn-instance-profiles +--rw vpn-instance-profiles
| ... | ...
+--rw underlay-transport +--rw underlay-transport
| +-- (type)? | +-- (type)?
| +--:(abstract) | +--:(abstract)
| | +-- transport-instance-id? string | | +--rw transport-instance-id? string
| +--:(protocol) | | +--rw instance-type? identityref
| +-- protocol* identityref | +--:(protocol)
+--rw external-connectivity | +--rw protocol* identityref
| {external-connectivity} +--rw external-connectivity
| +--rw (profile)? | {vpn-common:external-connectivity}?
| +--:(profile) | +--rw (profile)?
| +--rw profile-name? leafref | +--:(profile)
+--rw vpn-nodes | +--rw profile-name? leafref
... +--rw vpn-nodes
...
Figure 5: VPN Services Subtree Structure Figure 5: VPN Services Subtree Structure
The description of the VPN service data nodes that are depicted in The descriptions of the VPN service data nodes that are depicted in
Figure 5 are as follows: Figure 5 are as follows:
'vpn-id': Is an identifier that is used to uniquely identify the 'vpn-id': An identifier that is used to uniquely identify the L3VPN
L3VPN service within L3NM scope. service within the L3NM scope.
'vpn-name': Associates a name with the service in order to 'vpn-name': Associates a name with the service in order to
facilitate the identification of the service. facilitate the identification of the service.
'vpn-description': Includes a textual description of the service. 'vpn-description': Includes a textual description of the service.
The internal structure of a VPN description is local to each VPN The internal structure of a VPN description is local to each VPN
service provider. service provider.
'customer-name': Indicates the name of the customer who ordered the 'customer-name': Indicates the name of the customer who ordered the
service. service.
'parent-service-id': Refers to an identifier of the parent service 'parent-service-id': Refers to an identifier of the parent service
(e.g, L3SM, IETF network slice, VPN+) that triggered the creation (e.g., L3SM, IETF network slice, VPN+) that triggered the creation
of the VPN service. This identifier is used to easily correlate of the VPN service. This identifier is used to easily correlate
the (network) service as built in the network with a service the (network) service as built in the network with a service
order. A controller can use that correlation to enrich or order. A controller can use that correlation to enrich or
populate some fields (e.g., description fields) as a function of populate some fields (e.g., description fields) as a function of
local deployments. local deployments.
'vpn-type': Indicates the VPN type. The values are taken from 'vpn-type': Indicates the VPN type. The values are taken from
[I-D.ietf-opsawg-vpn-common]. For the L3NM, this is typically set [RFC9181]. For the L3NM, this is typically set to "BGP/MPLS
to BGP/MPLS L3VPN, but other values may be defined in the future L3VPN", but other values may be defined to support specific Layer
to support specific Layer 3 VPN capabilities (e.g., 3 VPN capabilities (e.g., [RFC9136]).
[I-D.ietf-bess-evpn-prefix-advertisement]).
'vpn-service-topology': Indicates the network topology for the 'vpn-service-topology': Indicates the network topology for the
service: hub-spoke, any-to-any, or custom. The network service: 'hub-spoke', 'any-to-any', or 'custom'. The network
implementation of this attribute is defined by the correct usage implementation of this attribute is defined by the correct usage
of import and export profiles (Section 4.3.5 of [RFC4364]). of import and export targets (Section 4.3.5 of [RFC4364]).
'status': Is used to track the service status of a given VPN 'status': Used to track the service status of a given VPN service.
service. Both operational and administrative status are Both operational status and administrative status are maintained
maintained together with a timestamp. For example, a service can together with a timestamp. For example, a service can be created
be created, but not put into effect. but not put into effect.
Administrative and operational status can be used as a trigger to Administrative status and operational status can be used as a
detect service anomalies. For example, a service that is declared trigger to detect service anomalies. For example, a service that
at the service layer as being active but still inactive at the is declared active at the service layer but is still inactive at
network layer may be an indication that network provision actions the network layer may be an indication that network provision
are needed to align the observed service status with the expected actions are needed to align the observed service status with the
service status. expected service status.
'vpn-instance-profiles': Defines reusable parameters for the same 'vpn-instance-profiles': Defines reusable parameters for the same
'vpn-service'. 'vpn-service'.
More details are provided in Section 7.4. More details are provided in Section 7.4.
'underlay-transport': Describes the preference for the transport 'underlay-transport': Describes the preference for the transport
technology to carry the traffic of the VPN service. This technology to carry the traffic of the VPN service. This
preference is especially useful in networks with multiple domains preference is especially useful in networks with multiple domains
and Network-to-Network Interface (NNI) types. The underlay and Network-to-Network Interface (NNI) types. The underlay
transport can be expressed as an abstract transport instance transport can be expressed as an abstract transport instance
(e.g., an identifier of a VPN+ instance, a virtual network (e.g., an identifier of a VPN+ instance, a virtual network
identifier, or a network slice name) or as an ordered list of the identifier, or a network slice name) or as an ordered list of the
actual protocols to be enabled in the network. actual protocols to be enabled in the network.
A rich set of protocol identifiers that can be used to refer to an A rich set of protocol identifiers that can be used to refer to an
underlay transport are defined in [I-D.ietf-opsawg-vpn-common]. underlay transport are defined in [RFC9181].
'external-connectivity': Indicates whether/how external connectivity 'external-connectivity': Indicates whether/how external connectivity
is provided to the VPN service. For example, a service provider is provided to the VPN service. For example, a service provider
may provide an external connectivity to a VPN customer (e.g., to a may provide external connectivity to a VPN customer (e.g., to a
public cloud). Such service may involve tweaking both filtering public cloud). Such a service may involve tweaking both filtering
and NAT rules (e.g., bind a Virtual Routing and Forwarding (VRF) and NAT rules (e.g., binding a Virtual Routing and Forwarding
interface with a NAT instance as discussed in Section 2.10 of (VRF) interface with a NAT instance as discussed in Section 2.10
[RFC8512]). These added value features may be bound to all or a of [RFC8512]). These value-added features may be bound to all, or
subset of network accesses. Some of these added value features a subset of, network accesses. Some of these value-added features
may be implemented in a PE or in other nodes than PEs (e.g., a P 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). node or even a dedicated node that hosts the NAT function).
Only a pointer to a local profile that defines the external Only a pointer to a local profile that defines the external-
connectivity feature is supported in this document. connectivity feature is supported in this document.
'vpn-node': Is an abstraction that represents a set of policies 'vpn-node': An abstraction that represents a set of policies applied
applied to a network node and that belong to a single 'vpn- to a network node and belonging to a single 'vpn-service'. A VPN
service'. A VPN service is typically built by adding instances of service is typically built by adding instances of 'vpn-node' to
'vpn-node' to the 'vpn-nodes' container. the 'vpn-nodes' container.
A 'vpn-node' contains 'vpn-network-accesses', which are the A 'vpn-node' contains 'vpn-network-accesses', which are the
interfaces attached to the VPN by which the customer traffic is interfaces attached to the VPN by which the customer traffic is
received. Therefore, the customer sites are connected to the received. Therefore, the customer sites are connected to the
'vpn-network-accesses'. 'vpn-network-accesses'.
Note that, as this is a network data model, the information about Note that because this is a network data model, information about
customers sites is not required in the model. Such information is customers' sites is not required in the model. Rather, such
rather relevant in the L3SM. Whether that information is included information is relevant in the L3SM. Whether that information is
in the L3NM, e.g., to populate the various 'description' data node included in the L3NM, e.g., to populate the various 'description'
is implementation specific. data nodes, is implementation specific.
More details are provided in Section 7.5. More details are provided in Section 7.5.
7.4. VPN Instance Profiles 7.4. VPN Instance Profiles
VPN instance profiles are meant to factorize data nodes that are used VPN instance profiles are meant to factorize data nodes that are used
at many levels of the model. Generic VPN instance profiles are 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 defined at the VPN service level and then called at the VPN node and
VPN network access levels. Each VPN instance profile is identified VPN network access levels. Each VPN instance profile is identified
by 'profile-id'. This identifier is then referenced for one or by 'profile-id'. This identifier is then referenced for one or
multiple VPN nodes (Section 7.5) so that the controller can identify 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 generic resources (e.g., RTs and RDs) to be configured for a given
VRF. VRF instance.
The subtree of 'vpn-instance-profile' is shown in Figure 6. The subtree of the 'vpn-instance-profiles' is shown in Figure 6.
+--rw l3vpn-ntw +--rw l3vpn-ntw
+--rw vpn-profiles +--rw vpn-profiles
| ... | ...
+--rw vpn-services +--rw vpn-services
+--rw vpn-service* [vpn-id] +--rw vpn-service* [vpn-id]
+--rw vpn-id vpn-common:vpn-id +--rw vpn-id vpn-common:vpn-id
... ...
+--rw vpn-instance-profiles +--rw vpn-instance-profiles
| +--rw vpn-instance-profile* [profile-id] | +--rw vpn-instance-profile* [profile-id]
| +--rw profile-id string | +--rw profile-id string
| +--rw role? identityref | +--rw role? identityref
| +--rw local-as? inet:as-number | +--rw local-as? inet:as-number
| | {vpn-common:rtg-bgp}? | | {vpn-common:rtg-bgp}?
| +--rw (rd-choice)? | +--rw (rd-choice)?
| | +--:(directly-assigned) | | +--:(directly-assigned)
| | | +--rw rd? | | | +--rw rd?
| | | rt-types:route-distinguisher | | | rt-types:route-distinguisher
| | +--:(directly-assigned-suffix) | | +--:(directly-assigned-suffix)
| | | +--rw rd-suffix? uint16 | | | +--rw rd-suffix? uint16
| | +--:(auto-assigned) | | +--:(auto-assigned)
| | | +--rw rd-auto | | | +--rw rd-auto
| | | +--rw (auto-mode)? | | | +--rw (auto-mode)?
| | | | +--:(from-pool) | | | | +--:(from-pool)
| | | | | +--rw rd-pool-name? string | | | | | +--rw rd-pool-name? string
| | | | +--:(full-auto) | | | | +--:(full-auto)
| | | | +--rw auto? empty | | | | +--rw auto? empty
| | | +--ro auto-assigned-rd? | | | +--ro auto-assigned-rd?
| | | rt-types:route-distinguisher | | | rt-types:route-distinguisher
| | +--:(auto-assigned-suffix) | | +--:(auto-assigned-suffix)
| | | +--rw rd-auto-suffix | | | +--rw rd-auto-suffix
| | | +--rw (auto-mode)? | | | +--rw (auto-mode)?
| | | | +--:(from-pool) | | | | +--:(from-pool)
| | | | | +--rw rd-pool-name? string | | | | | +--rw rd-pool-name? string
| | | | +--:(full-auto) | | | | +--:(full-auto)
| | | | +--rw auto? empty | | | | +--rw auto? empty
| | | +--ro auto-assigned-rd-suffix? uint16 | | | +--ro auto-assigned-rd-suffix? uint16
| | +--:(no-rd) | | +--:(no-rd)
| | +--rw no-rd? empty | | +--rw no-rd? empty
| +--rw address-family* [address-family] | +--rw address-family* [address-family]
| | +--rw address-family identityref | | +--rw address-family identityref
| | +--rw vpn-targets | | +--rw vpn-targets
| | | +--rw vpn-target* [id] | | | +--rw vpn-target* [id]
| | | | +--rw id uint8 | | | | +--rw id uint8
| | | | +--rw route-targets* [route-target] | | | | +--rw route-targets* [route-target]
| | | | | +--rw route-target | | | | | +--rw route-target
| | | | | rt-types:route-target | | | | | rt-types:route-target
| | | | +--rw route-target-type | | | | +--rw route-target-type
| | | | rt-types:route-target-type | | | | rt-types:route-target-type
| | | +--rw vpn-policies | | | +--rw vpn-policies
| | | +--rw import-policy? string | | | +--rw import-policy? string
| | | +--rw export-policy? string | | | +--rw export-policy? string
| | +--rw maximum-routes* [protocol] | | +--rw maximum-routes* [protocol]
| | +--rw protocol identityref | | +--rw protocol identityref
| | +--rw maximum-routes? uint32 | | +--rw maximum-routes? uint32
| +--rw multicast {vpn-common:multicast}? | +--rw multicast {vpn-common:multicast}?
| ... | ...
Figure 6: Subtree Structure of VPN Instance Profiles Figure 6: Subtree Structure of VPN Instance Profiles
The description of the listed data nodes is as follows: The descriptions of the listed data nodes are as follows:
'profile-id': Is used to uniquely identify a VPN instance profile. 'profile-id': Used to uniquely identify a VPN instance profile.
'role': Indicates the role of the VPN instance profile in the VPN. 'role': Indicates the role of the VPN instance profile in the VPN.
Role values are defined in [I-D.ietf-opsawg-vpn-common] (e.g., Role values are defined in [RFC9181] (e.g., 'any-to-any-role',
any-to-any-role, spoke-role, hub-role). 'spoke-role', 'hub-role').
'local-as': Indicates the Autonomous System Number (ASN) that is 'local-as': Indicates the Autonomous System Number (ASN) that is
configured for the VPN node. configured for the VPN node.
'rd': As defined in [I-D.ietf-opsawg-vpn-common], the following RD 'rd': As defined in [RFC9181], the following RD assignment modes are
assignment modes are supported: direct assignment, automatic supported: direct assignment, full automatic assignment, automatic
assignment from a given pool, automatic assignment, and no assignment from a given pool, and no assignment. For illustration
assignment. For illustration purposes, the following modes can be purposes, the following modes can be used in the deployment cases:
used in the deployment cases:
'directly-assigned': The VPN service provider (service 'directly-assigned': The VPN service provider (service
orchestrator) assigns explicitly RDs. This case will fit with orchestrator) assigns RDs explicitly. This case will fit with
a brownfield scenario where some existing services need to be a brownfield scenario where some existing services need to be
updated by the VPN service provider. updated by the VPN service provider.
'full-auto': The network controller auto-assigns RDs. This can 'full-auto': The network controller auto-assigns RDs. This can
apply for the deployment of new services. apply for the deployment of new services.
'no-rd': The VPN service provider (service orchestrator) 'no-rd': The VPN service provider (service orchestrator)
explicitly wants no RD to be assigned. This case can be used explicitly wants no RD to be assigned. This case can be used
for CE testing within the network or for troubleshooting for CE testing within the network or for troubleshooting
proposes. proposes.
Also, the module accommodates deployments where only the Assigned Also, the module accommodates deployments where only the Assigned
Number subfield of RDs (Section 4.2 of [RFC4364]) is assigned from Number subfield of RDs (Section 4.2 of [RFC4364]) is assigned from
a pool while the Administrator subfield is set to, e.g., the a pool while the Administrator subfield is set to, for example,
Router ID that is assigned to a VPN node. The module supports the Router ID that is assigned to a VPN node. The module supports
these modes for managing the Assigned Number subfield: explicit these modes for managing the Assigned Number subfield: explicit
assignment, auto-assignment from a pool, and full auto-assignment. assignment, auto-assignment from a pool, and full auto-assignment.
'address-family': Includes a set of per-address family data nodes: 'address-family': Includes a set of data nodes per address family:
'address-family': Identifies the address family. It can be set 'address-family': Identifies the address family. It can be set
to IPv4, IPv6, or dual-stack. to 'ipv4', 'ipv6', or 'dual-stack'.
'vpn-targets': Specifies RT import/export rules for the VPN 'vpn-targets': Specifies RT import/export rules for the VPN
service (Section 4.3 of [RFC4364]). service (Section 4.3 of [RFC4364]).
'maximum-routes': Indicates the maximum number of prefixes that 'maximum-routes': Indicates the maximum number of prefixes that
the VPN node can accept for a given routing protocol. If the VPN node can accept for a given routing protocol. If
'protocol' is set to 'any', this means that the maximum value 'protocol' is set to 'any', this means that the maximum value
applies to each active routing protocol. applies to each active routing protocol.
'multicast': Enables multicast traffic in the VPN service. Refer to 'multicast': Enables multicast traffic in the VPN service. Refer to
Section 7.7. Section 7.7.
7.5. VPN Nodes 7.5. VPN Nodes
The 'vpn-node' is an abstraction that represents a set of common The 'vpn-node' is an abstraction that represents a set of common
policies applied on a given network node (typically, a PE) and belong policies applied on a given network node (typically, a PE) and
to one L3VPN service. The 'vpn-node' includes a parameter to belonging to one L3VPN service. The 'vpn-node' includes a parameter
indicate the network node on which it is applied. In the case that to indicate the network node on which it is applied. In the case
the 'ne-id' points to a specific PE, the 'vpn-node' will likely be that the 'ne-id' points to a specific PE, the 'vpn-node' will likely
mapped into a VRF in the node. However, the model also allows be mapped to a VRF instance in the node. However, the model also
pointing to an abstract node. In this case, the network controller allows pointing to an abstract node. In this case, the network
will decide how to split the 'vpn-node' into VRFs. 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 l3vpn-ntw
+--rw vpn-profiles +--rw vpn-profiles
| ... | ...
+--rw vpn-services +--rw vpn-services
+--rw vpn-service* [vpn-id] +--rw vpn-service* [vpn-id]
... ...
+--rw vpn-nodes +--rw vpn-nodes
+--rw vpn-node* [vpn-node-id] +--rw vpn-node* [vpn-node-id]
+--rw vpn-node-id vpn-common:vpn-id +--rw vpn-node-id vpn-common:vpn-id
skipping to change at page 24, line 7 skipping to change at line 989
| | +--rw status? identityref | | +--rw status? identityref
| | +--rw last-change? yang:date-and-time | | +--rw last-change? yang:date-and-time
| +--ro oper-status | +--ro oper-status
| +--ro status? identityref | +--ro status? identityref
| +--ro last-change? yang:date-and-time | +--ro last-change? yang:date-and-time
+--rw vpn-network-accesses +--rw vpn-network-accesses
... ...
Figure 7: VPN Node Subtree Structure Figure 7: VPN Node Subtree Structure
In reference to the subtree shown in Figure 7, the description of VPN The descriptions of the 'vpn-node' data nodes (Figure 7) are as
node data nodes is as follows: follows:
'vpn-node-id': Is an identifier that uniquely identifies a node that 'vpn-node-id': An identifier that uniquely identifies a node that
enables a VPN network access. enables a VPN network access.
'description': Provides a textual description of the VPN node. 'description': Provides a textual description of the VPN node.
'ne-id': Includes a unique identifier of the network element where 'ne-id': Includes a unique identifier of the network element where
the VPN node is deployed. the VPN node is deployed.
'local-autonomous-system': Indicates the ASN that is configured for 'local-as': Indicates the ASN that is configured for the VPN node.
the VPN node.
'router-id': Indicates a 32-bit number that is used to uniquely 'router-id': Indicates a 32-bit number that is used to uniquely
identify a router within an Autonomous System. identify a router within an AS.
'active-vpn-instance-profiles': Lists the set of active VPN instance 'active-vpn-instance-profiles': Lists the set of active VPN instance
profiles for this VPN node. Concretely, one or more 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 profiles that are defined at the VPN service level can be enabled
at the VPN node level; each of these profiles is uniquely at the VPN node level; each of these profiles is uniquely
identified by means of 'profile-id'. The structure of 'active- identified by means of 'profile-id'. The structure of 'active-
vpn-instance-profiles' is the same as the one discussed in vpn-instance-profiles' is the same as the structure discussed in
Section 7.4 except 'router-id'. The value of 'router-id' Section 7.4, except that the structure of 'active-vpn-instance-
indicated under 'active-vpn-instance-profiles' takes precedence profiles' includes 'router-id' but does not include the 'role'
over the 'router-id' under the 'vpn-node' for the indicated leaf. The value of 'router-id' indicated under 'active-vpn-
address family. For example, Router IDs can be configured per instance-profiles' takes precedence over the 'router-id' under the
address family. This capability can be used, for example, to 'vpn-node' for the indicated address family. For example, Router
configure an IPv6 address as a Router ID when such capability is IDs can be configured per address family. This capability can be
supported by involved routers. 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' overrides the Values defined in 'active-vpn-instance-profiles' override the
ones defined in the VPN service level. An example is shown in values defined at the VPN service level. An example is shown in
Appendix A.3. Appendix A.3.
'msdp': For redundancy purposes, Multicast Source Discovery Protocol 'msdp': For redundancy purposes, the Multicast Source Discovery
(MSDP) [RFC3618] may be enabled and used to share the state about Protocol (MSDP) [RFC3618] may be enabled and used to share state
sources between multiple Rendezvous Points (RPs). The purpose of information about sources between multiple Rendezvous Points
MSDP in this context is to enhance the robustness of the multicast (RPs). The purpose of MSDP in this context is to enhance the
service. MSDP may be configured on non-RP routers, which is robustness of the multicast service. MSDP may be configured on
useful in a domain that does not support multicast sources, but non-RP routers; this is useful in a domain that does not support
does support multicast transit. multicast sources but does support multicast transit.
'groups': Lists the groups to which a VPN node belongs to
[I-D.ietf-opsawg-vpn-common]. The 'group-id' is used to 'groups': Lists the groups to which a VPN node belongs [RFC9181].
associate, e.g., redundancy or protection constraints with VPN For example, the 'group-id' is used to associate redundancy or
nodes. protection constraints with VPN nodes.
'status': Tracks the status of a node involved in a VPN service. 'status': Tracks the status of a node involved in a VPN service.
Both operational and administrative status are maintained. A Both operational status and administrative status are maintained.
mismatch between the administrative status vs. the operational A mismatch between the administrative status vs. the operational
status can be used as a trigger to detect anomalies. status can be used as a trigger to detect anomalies.
'vpn-network-accesses': Represents the point to which sites are 'vpn-network-accesses': Represents the point to which sites are
connected. connected.
Note that, unlike in the L3SM, the L3NM does not need to model the Note that unlike the L3SM, the L3NM does not need to model the
customer site, only the points where the traffic from the site are customer site -- only the points that receive traffic from the
received (i.e., the PE side of PE-CE connections). Hence, the VPN site (i.e., the PE side of Provider Edge to Customer Edge (PE-CE)
network access contains the connectivity information between the connections). Hence, the VPN network access contains the
provider's network and the customer premises. The VPN profiles connectivity information between the provider's network and the
('vpn-profiles') have a set of routing policies that can be customer premises. The VPN profiles ('vpn-profiles') have a set
applied during the service creation. of routing policies that can be applied during the service
creation.
See Section 7.6 for more details. See Section 7.6 for more details.
7.6. VPN Network Accesses 7.6. VPN Network Accesses
The 'vpn-network-access' includes a set of data nodes that describe The 'vpn-network-access' includes a set of data nodes that describe
the access information for the traffic that belongs to a particular the access information for the traffic that belongs to a particular
L3VPN (Figure 8). L3VPN (Figure 8).
... ...
skipping to change at page 26, line 38 skipping to change at line 1094
| ... | ...
+--rw oam +--rw oam
| ... | ...
+--rw security +--rw security
| ... | ...
+--rw service +--rw service
... ...
Figure 8: VPN Network Access Subtree Structure Figure 8: VPN Network Access Subtree Structure
In reference to the subtree depicted in Figure 8, a 'vpn-network- A 'vpn-network-access' (Figure 8) includes the following data nodes:
access' includes the following data nodes:
'id': Is an identifier of the VPN network access. 'id': An identifier of the VPN network access.
'interface-id': Indicates the physical or logical interface on which 'interface-id': Indicates the physical or logical interface on which
the VPN network access is bound. the VPN network access is bound.
'description': Includes a textual description of the VPN network 'description': Includes a textual description of the VPN network
access. access.
'vpn-network-access-type': Is used to select the type of network 'vpn-network-access-type': Used to select the type of network
interface to be deployed in the devices. The available defined interface to be deployed in the devices. The available defined
values are: values are as follows:
'point-to-point': Represents a direct connection between the 'point-to-point': Represents a direct connection between the
endpoints. The controller must keep the association between a endpoints. The controller must keep the association between a
logical or physical interface on the device with the 'id' of logical or physical interface on the device with the 'id' of
the 'vpn-network-access'. the 'vpn-network-access'.
'multipoint': Represents a multipoint connection between the 'multipoint': Represents a multipoint connection between the
customer site and the PEs. The controller must keep the customer site and the PEs. The controller must keep the
association between a logical or physical interface on the association between a logical or physical interface on the
device with the 'id' of the 'vpn-network-access'. device with the 'id' of the 'vpn-network-access'.
'irb': Represents a connection coming from an L2VPN service. An 'irb': Represents a connection coming from an L2VPN service. An
identifier of such service ('l2vpn-id') may be included in the identifier of such a service ('l2vpn-id') may be included in
'connection' container as depicted in Figure 9. The controller the 'connection' container, as depicted in Figure 9
must keep the relationship between the logical tunnels or (Section 7.6.1). The controller must keep the relationship
bridges on the devices with the 'id' of the' vpn-network- between the logical tunnels or bridges on the devices with the
access'. 'id' of the 'vpn-network-access'.
'loopback': Represents the creation of a logical interface on a 'loopback': Represents the creation of a logical interface on a
device. An example to illustrate how a loopback interface can device. An example that illustrates how a loopback interface
be used in the L3NM is provided in Appendix A.2. can be used in the L3NM is provided in Appendix A.2.
'vpn-instance-profile': Provides a pointer to an active VPN instance 'vpn-instance-profile': Provides a pointer to an active VPN instance
profile at the VPN node level. Referencing 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 profile implies that all associated data nodes will be inherited
by the VPN network access. However, some inherited data nodes by the VPN network access. However, some inherited data nodes
(e.g., multicast) can be overridden at the VPN network access (e.g., multicast) can be overridden at the VPN network access
level. In such case, adjusted values take precedence over level. In such a case, adjusted values take precedence over
inherited ones. inherited values.
'status': Indicates both operational and administrative status of a 'status': Indicates both operational status and administrative
VPN network access. status of a VPN network access.
'connection': Represents and groups the set of Layer 2 connectivity 'connection': Represents and groups the set of Layer 2 connectivity
from where the traffic of the L3VPN in a particular VPN Network from where the traffic of the L3VPN in a particular VPN network
access is coming. See Section 7.6.1. access is coming. See Section 7.6.1.
'ip-connection': Contains Layer 3 connectivity information of a VPN 'ip-connection': Contains Layer 3 connectivity information on a VPN
network access (e.g., IP addressing). See Section 7.6.2. network access (e.g., IP addressing). See Section 7.6.2.
'routing-protocols': Includes the CE-PE routing configuration 'routing-protocols': Includes the CE-PE routing configuration
information. See Section 7.6.3. information. See Section 7.6.3.
'oam': Specifies the Operations, Administration, and Maintenance 'oam': Specifies the Operations, Administration, and Maintenance
(OAM) mechanisms used for a VPN network access. See (OAM) mechanisms used for a VPN network access. See
Section 7.6.4. Section 7.6.4.
'security': Specifies the authentication and the encryption to be 'security': Specifies the authentication and the encryption to be
applied for a given VPN network access. See Section 7.6.5. applied for a given VPN network access. See Section 7.6.5.
'service': Specifies the service parameters (e.g., QoS, multicast) 'service': Specifies the service parameters (e.g., QoS, multicast)
to apply for a given VPN network access. See Section 7.6.6. to apply for a given VPN network access. See Section 7.6.6.
7.6.1. Connection 7.6.1. Connection
The 'connection' container represents the layer 2 connectivity to the The 'connection' container represents the Layer 2 connectivity to the
L3VPN for a particular VPN network access. As shown in the tree L3VPN for a particular VPN network access. As shown in the tree
depicted in Figure 9, the 'connection' container defines protocols depicted in Figure 9, the 'connection' container defines protocols
and parameters to enable such connectivity at layer 2. and parameters to enable such connectivity at Layer 2.
The traffic can enter the VPN with or without encapsulation (e.g., The traffic can enter the VPN with or without encapsulation (e.g.,
VLAN, QinQ). The 'encapsulation' container specifies the layer 2 VLAN, QinQ). The 'encapsulation' container specifies the Layer 2
encapsulation to use (if any) and allows to configure the relevant encapsulation to use (if any) and allows the configuration of the
tags. relevant tags.
The interface that is attached to the L3VPN is identified by the The interface that is attached to the L3VPN is identified by the
'interface-id' at the 'vpn-network-access' level. From a network 'interface-id' at the 'vpn-network-access' level. From a network
model perspective, it is expected that the 'interface-id' is model perspective, it is expected that the 'interface-id' is
sufficient to identify the interface. However, specific layer 2 sub- sufficient to identify the interface. However, specific Layer 2 sub-
interfaces may be required to be configured in some implementations/ interfaces may be required to be configured in some implementations/
deployments. Such a layer 2 specific interface can be included in deployments. Such a Layer-2-specific interface can be included in
'l2-termination-point'. 'l2-termination-point'.
If a layer 2 tunnel is needed to terminate the service in the CE-PE 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 connection, the 'l2-tunnel-service' container is used to specify the
required parameters to set such tunneling service (e.g., VPLS, required parameters to set such a tunneling service (e.g., a Virtual
VXLAN). An identity, called 'l2-tunnel-type', is defined for layer 2 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 tunnel selection. The container can also identify the pseudowire
(Section 6.1 of [RFC8077]). (Section 6.1 of [RFC8077]).
As discussed in Section 7.6, 'l2vpn-id' is used to identify the L2VPN As discussed in Section 7.6, 'l2vpn-id' is used to identify the L2VPN
service that is associated with an IRB interface. service that is associated with an Integrated Routing and Bridging
(IRB) interface.
To accommodate implementations that require internal bridging, a To accommodate implementations that require internal bridging, a
local bridge reference can be specified in 'local-bridge-reference'. local bridge reference can be specified in 'local-bridge-reference'.
Such a reference may be a local bridge domain. Such a reference may be a local bridge domain.
A site, as per [RFC4176] represents a VPN customer's location that is A site, as per [RFC4176], represents a VPN customer's location that
connected to the service provider network via a CE-PE link, which can is connected to the service provider network via a CE-PE link, which
access at least one VPN. The connection from the site to the service can access at least one VPN. The connection from the site to the
provider network is the bearer. Every site is associated with a list service provider network is the bearer. Every site is associated
of bearers. A bearer is the layer two connection with the site. In with a list of bearers. A bearer is the Layer 2 connection with the
the L3NM, it is assumed that the bearer has been allocated by the site. In the L3NM, it is assumed that the bearer has been allocated
service provider at the service orchestration stage. The bearer is by the service provider at the service orchestration stage. The
associated to a network element and a port. Hence, a bearer is just bearer is associated with a network element and a port. Hence, a
a 'bearer-reference' to allow the association between a service bearer is just a 'bearer-reference' to allow the association between
request (e.g., L3SM) and L3NM. a service request (e.g., the L3SM) and the L3NM.
The L3NM can be used to create a LAG interface for a given L3VPN The L3NM can be used to create a Link Aggregation Group (LAG)
service ('lag-interface') [IEEE802.1AX]. Such a LAG interface can be interface for a given L3VPN service ('lag-interface') [IEEE802.1AX].
referenced under 'interface-id' (Section 7.6). Such a LAG interface can be referenced under 'interface-id'
(Section 7.6).
... ...
+--rw connection +--rw connection
| +--rw encapsulation | +--rw encapsulation
| | +--rw type? identityref | | +--rw type? identityref
| | +--rw dot1q | | +--rw dot1q
| | | +--rw tag-type? identityref | | | +--rw tag-type? identityref
| | | +--rw cvlan-id? uint16 | | | +--rw cvlan-id? uint16
| | +--rw priority-tagged | | +--rw priority-tagged
| | | +--rw tag-type? identityref | | | +--rw tag-type? identityref
| | +--rw qinq | | +--rw qinq
| | +--rw tag-type? identityref | | +--rw tag-type? identityref
| | +--rw svlan-id uint16 | | +--rw svlan-id uint16
| | +--rw cvlan-id uint16 | | +--rw cvlan-id uint16
| +--rw (l2-service)? | +--rw (l2-service)?
| | +--:(l2-tunnel-service) | | +--:(l2-tunnel-service)
| | | +--rw l2-tunnel-service | | | +--rw l2-tunnel-service
| | | +--rw type? identityref | | | +--rw type? identityref
| | | +--rw pseudowire | | | +--rw pseudowire
| | | | +--rw vcid? uint32 | | | | +--rw vcid? uint32
| | | | +--rw far-end? union | | | | +--rw far-end? union
| | | +--rw vpls | | | +--rw vpls
| | | | +--rw vcid? uint32 | | | | +--rw vcid? uint32
| | | | +--rw far-end* union | | | | +--rw far-end* union
| | | +--rw vxlan | | | +--rw vxlan
| | | +--rw vni-id uint32 | | | +--rw vni-id uint32
| | | +--rw peer-mode? identityref | | | +--rw peer-mode? identityref
| | | +--rw peer-ip-address* inet:ip-address | | | +--rw peer-ip-address* inet:ip-address
| | +--:(l2vpn) | | +--:(l2vpn)
| | +--rw l2vpn-id? vpn-common:vpn-id | | +--rw l2vpn-id? vpn-common:vpn-id
| +--rw l2-termination-point? string | +--rw l2-termination-point? string
| +--rw local-bridge-reference? string | +--rw local-bridge-reference? string
| +--rw bearer-reference? string | +--rw bearer-reference? string
| | {vpn-common:bearer-reference}? | | {vpn-common:bearer-reference}?
| +--rw lag-interface {vpn-common:lag-interface}? | +--rw lag-interface {vpn-common:lag-interface}?
| +--rw lag-interface-id? string | +--rw lag-interface-id? string
| +--rw member-link-list | +--rw member-link-list
| +--rw member-link* [name] | +--rw member-link* [name]
| +--rw name string | +--rw name string
... ...
Figure 9: Connection Subtree Structure Figure 9: Connection Subtree Structure
7.6.2. IP Connection 7.6.2. IP Connection
This container is used to group Layer 3 connectivity information, This container is used to group Layer 3 connectivity information,
particularly the IP addressing information, of a VPN network access. particularly the IP addressing information, of a VPN network access.
The allocated address represents the PE interface address The allocated address represents the PE interface address
configuration. Note that a distinct layer 3 interface other than the configuration. Note that a distinct Layer 3 interface other than the
one indicated under the 'connection' container may be needed to interface indicated under the 'connection' container may be needed to
terminate the layer 3 service. The identifier of such interface is terminate the Layer 3 service. The identifier of such an interface
included in 'l3-termination-point'. For example, this data node can is included in 'l3-termination-point'. For example, this data node
be used to carry the identifier of a bridge domain interface. can be used to carry the identifier of a bridge domain interface.
As shown in Figure 10, the 'ip-connection' container can include As shown in Figure 10, the 'ip-connection' container can include
IPv4, IPv6, or both if dual-stack is enabled. IPv4, IPv6, or both if dual-stack is enabled.
... ...
+--rw vpn-network-accesses +--rw vpn-network-accesses
+--rw vpn-network-access* [id] +--rw vpn-network-access* [id]
... ...
+--rw ip-connection +--rw ip-connection
| +--rw l3-termination-point? string | +--rw l3-termination-point? string
| +--rw ipv4 {vpn-common:ipv4}? | +--rw ipv4 {vpn-common:ipv4}?
| | ... | | ...
| +--rw ipv6 {vpn-common:ipv6}? | +--rw ipv6 {vpn-common:ipv6}?
| ... | ...
... ...
Figure 10: IP Connection Subtree Structure Figure 10: IP Connection Subtree Structure
For both IPv4 and IPv6, the IP connection supports three IP address For both IPv4 and IPv6, the IP connection supports three IP address
assignment modes for customer addresses: provider DHCP, DHCP relay, assignment modes for customer addresses: provider DHCP, DHCP relay,
and static addressing. Note that for the IPv6 case, SLAAC [RFC4862] and static addressing. Note that for the IPv6 case, Stateless
can be used. For both IPv4 and IPv6, 'address-allocation-type' is Address Autoconfiguration (SLAAC) [RFC4862] can be used. For both
used to indicate the IP address allocation mode to activate for a IPv4 and IPv6, 'address-allocation-type' is used to indicate the IP
given VPN network access. address allocation mode to activate for a given VPN network access.
When 'address-allocation-type' is set to 'provider-dhcp', DHCP When 'address-allocation-type' is set to 'provider-dhcp', DHCP
assignments can be made locally or by an external DHCP server. Such assignments can be made locally or by an external DHCP server. Such
as behavior is controlled by setting 'dhcp-service-type'. behavior is controlled by setting 'dhcp-service-type'.
Figure 11 shows the structure of the dynamic IPv4 address assignment Figure 11 shows the structure of the dynamic IPv4 address assignment
(i.e., by means of DHCP). (i.e., by means of DHCP).
... ...
+--rw ip-connection +--rw ip-connection
| +--rw l3-termination-point? string | +--rw l3-termination-point? string
| +--rw ipv4 {vpn-common:ipv4}? | +--rw ipv4 {vpn-common:ipv4}?
| | +--rw local-address? inet:ipv4-address | | +--rw local-address? inet:ipv4-address
| | +--rw prefix-length? uint8 | | +--rw prefix-length? uint8
| | +--rw address-allocation-type? identityref | | +--rw address-allocation-type? identityref
| | +--rw (allocation-type)? | | +--rw (allocation-type)?
| | +--:(provider-dhcp) | | +--:(provider-dhcp)
| | | +--rw dhcp-service-type? enumeration | | | +--rw dhcp-service-type? enumeration
| | | +--rw (service-type)? | | | +--rw (service-type)?
| | | +--:(relay) | | | +--:(relay)
| | | | +--rw server-ip-address* | | | | +--rw server-ip-address*
| | | | inet:ipv4-address | | | | inet:ipv4-address
| | | +--:(server) | | | +--:(server)
| | | +--rw (address-assign)? | | | +--rw (address-assign)?
| | | +--:(number) | | | +--:(number)
| | | | +--rw number-of-dynamic-address? | | | | +--rw number-of-dynamic-address?
| | | | uint16 | | | | uint16
| | | +--:(explicit) | | | +--:(explicit)
| | | +--rw customer-addresses | | | +--rw customer-addresses
| | | +--rw address-pool* [pool-id] | | | +--rw address-pool* [pool-id]
| | | +--rw pool-id string | | | +--rw pool-id string
| | | +--rw start-address | | | +--rw start-address
| | | | inet:ipv4-address | | | | inet:ipv4-address
| | | +--rw end-address? | | | +--rw end-address?
| | | inet:ipv4-address | | | inet:ipv4-address
| | +--:(dhcp-relay) | | +--:(dhcp-relay)
| | | +--rw customer-dhcp-servers | | | +--rw customer-dhcp-servers
| | | +--rw server-ip-address* inet:ipv4-address | | | +--rw server-ip-address* inet:ipv4-address
| | +--:(static-addresses) | | +--:(static-addresses)
| | ... | | ...
... ...
Figure 11: IP Connection Subtree Structure (IPv4) Figure 11: IP Connection Subtree Structure (IPv4)
Figure 12 shows the structure of the dynamic IPv6 address assignment Figure 12 shows the structure of the dynamic IPv6 address assignment
(i.e., DHCPv6 and/or SLAAC). Note that if 'address-allocation-type' (i.e., DHCPv6 and/or SLAAC). Note that if 'address-allocation-type'
is set to 'slaac', the Prefix Information option of Router is set to 'slaac', the Prefix Information option of Router
Advertisements that will be issued for SLAAC purposes, will carry the Advertisements that will be issued for SLAAC purposes will carry the
IPv6 prefix that is determined by 'local-address' and 'prefix- IPv6 prefix that is determined by 'local-address' and 'prefix-
length'. For example, if 'local-address' is set to '2001:db8:0:1::1' 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 and 'prefix-length' is set to '64', the IPv6 prefix that will be used
is '2001:db8:0:1::/64'. is '2001:db8:0:1::/64'.
... ...
+--rw ip-connection +--rw ip-connection
| +--rw l3-termination-point? string | +--rw l3-termination-point? string
| +--rw ipv4 {vpn-common:ipv4}? | +--rw ipv4 {vpn-common:ipv4}?
| | ... | | ...
| +--rw ipv6 {vpn-common:ipv6}? | +--rw ipv6 {vpn-common:ipv6}?
| +--rw local-address? inet:ipv6-address | +--rw local-address? inet:ipv6-address
| +--rw prefix-length? uint8 | +--rw prefix-length? uint8
| +--rw address-allocation-type? identityref | +--rw address-allocation-type? identityref
| +--rw (allocation-type)? | +--rw (allocation-type)?
| +--:(provider-dhcp) | +--:(provider-dhcp)
| | +--rw provider-dhcp | | +--rw provider-dhcp
| | +--rw dhcp-service-type? | | +--rw dhcp-service-type?
| | | enumeration | | | enumeration
| | +--rw (service-type)? | | +--rw (service-type)?
| | +--:(relay) | | +--:(relay)
| | | +--rw server-ip-address* | | | +--rw server-ip-address*
| | | inet:ipv6-address | | | inet:ipv6-address
| | +--:(server) | | +--:(server)
| | +--rw (address-assign)? | | +--rw (address-assign)?
| | +--:(number) | | +--:(number)
| | | +--rw number-of-dynamic-address? | | | +--rw number-of-dynamic-address?
| | | uint16 | | | uint16
| | +--:(explicit) | | +--:(explicit)
| | +--rw customer-addresses | | +--rw customer-addresses
| | +--rw address-pool* [pool-id] | | +--rw address-pool* [pool-id]
| | +--rw pool-id string | | +--rw pool-id string
| | +--rw start-address | | +--rw start-address
| | | inet:ipv6-address | | | inet:ipv6-address
| | +--rw end-address? | | +--rw end-address?
| | inet:ipv6-address | | inet:ipv6-address
| +--:(dhcp-relay) | +--:(dhcp-relay)
| | +--rw customer-dhcp-servers | | +--rw customer-dhcp-servers
| | +--rw server-ip-address* | | +--rw server-ip-address*
| | inet:ipv6-address | | inet:ipv6-address
| +--:(static-addresses) | +--:(static-addresses)
| ... | ...
Figure 12: IP Connection Subtree Structure (IPv6) Figure 12: IP Connection Subtree Structure (IPv6)
In the case of the static addressing (Figure 13), the model supports In the case of static addressing (Figure 13), the model supports the
the assignment of several IP addresses in the same 'vpn-network- assignment of several IP addresses in the same 'vpn-network-access'.
access'. To identify which of the addresses is the primary address To identify which of the addresses is the primary address of a
of a connection, the 'primary-address' reference MUST be set with the connection, the 'primary-address' reference MUST be set with the
corresponding 'address-id'. corresponding 'address-id'.
... ...
+--rw ip-connection +--rw ip-connection
| +--rw l3-termination-point? string | +--rw l3-termination-point? string
| +--rw ipv4 {vpn-common:ipv4}? | +--rw ipv4 {vpn-common:ipv4}?
| | +--rw address-allocation-type? identityref | | +--rw address-allocation-type? identityref
| | +--rw (allocation-type)? | | +--rw (allocation-type)?
| | ... | | ...
| | +--:(static-addresses) | | +--:(static-addresses)
| | +--rw primary-address? -> ../address/address-id | | +--rw primary-address? -> ../address/address-id
| | +--rw address* [address-id] | | +--rw address* [address-id]
| | +--rw address-id string | | +--rw address-id string
| | +--rw customer-address? inet:ipv4-address | | +--rw customer-address? inet:ipv4-address
| +--rw ipv6 {vpn-common:ipv6}? | +--rw ipv6 {vpn-common:ipv6}?
| +--rw address-allocation-type? identityref | +--rw address-allocation-type? identityref
| +--rw (allocation-type)? | +--rw (allocation-type)?
| ... | ...
| +--:(static-addresses) | +--:(static-addresses)
| +--rw primary-address? -> ../address/address-id | +--rw primary-address? -> ../address/address-id
| +--rw address* [address-id] | +--rw address* [address-id]
| +--rw address-id string | +--rw address-id string
| +--rw customer-address? inet:ipv6-address | +--rw customer-address? inet:ipv6-address
... ...
Figure 13: IP Connection Subtree Structure (Static Mode) Figure 13: IP Connection Subtree Structure (Static Mode)
7.6.3. CE-PE Routing Protocols 7.6.3. CE-PE Routing Protocols
A VPN service provider can configure one or more routing protocols A VPN service provider can configure one or more routing protocols
associated with a particular 'vpn-network-access'. Such routing associated with a particular 'vpn-network-access'. Such routing
protocols are enabled between the PE and the CE. Each instance is protocols are enabled between the PE and the CE. Each instance is
uniquely identified to accommodate scenarios where multiple instances uniquely identified to accommodate scenarios where multiple instances
of the same routing protocol have to be configured on the same link. of the same routing protocol have to be configured on the same link.
The subtree of the 'routing-protocols' is shown in Figure 14. The subtree of the 'routing-protocols' is shown in Figure 14.
... ...
+--rw vpn-network-accesses +--rw vpn-network-accesses
+--rw vpn-network-access* [id] +--rw vpn-network-access* [id]
... ...
+--rw routing-protocols +--rw routing-protocols
| +--rw routing-protocol* [id] | +--rw routing-protocol* [id]
| +--rw id string | +--rw id string
| +--rw type? identityref | +--rw type? identityref
| +--rw routing-profiles* [id] | +--rw routing-profiles* [id]
| | +--rw id leafref | | +--rw id leafref
| | +--rw type? identityref | | +--rw type? identityref
| +--rw static | +--rw static
| | ... | | ...
| +--rw bgp | +--rw bgp
| | ... | | ...
| +--rw ospf | +--rw ospf
| | ... | | ...
| +--rw isis | +--rw isis
| | ... | | ...
| +--rw rip | +--rw rip
| | ... | | ...
| +--rw vrrp | +--rw vrrp
| ... | ...
+--rw security +--rw security
... ...
Figure 14: Routing Subtree Structure Figure 14: Routing Subtree Structure
Multiple routing instances can be defined; each uniquely identified Multiple routing instances can be defined, each uniquely identified
by an 'id'. The type of routing instance is indicated in 'type'. by an 'id'. The type of routing instance is indicated in 'type'.
The values of these attributes are those defined in The values of these attributes are those defined in [RFC9181] (the
[I-D.ietf-opsawg-vpn-common] ('routing-protocol-type' identity). 'routing-protocol-type' identity).
Configuring multiple instances of the same routing protocol does not Configuring multiple instances of the same routing protocol does not
automatically imply that, from a device configuration perspective, automatically imply that, from a device configuration perspective,
there will be parallel instances (e.g., multiple processes) running there will be parallel instances (e.g., multiple processes) running
on the PE-CE link. It is up to each implementation (typically, on the PE-CE link. It is up to each implementation (typically,
network orchestration shown in Figure 1) to decide about the network orchestration, as shown in Figure 1) to decide on the
appropriate configuration as a function of underlying capabilities appropriate configuration as a function of underlying capabilities
and service provider operational guidelines. As an example, when and service provider operational guidelines. As an example, when
multiple BGP peers need to be implemented, multiple instances of BGP multiple BGP peers need to be implemented, multiple instances of BGP
must be configured as part of this model. However, from a device must be configured as part of this model. However, from a device
configuration point of view, this could be implemented as: configuration point of view, this could be implemented as:
* Multiple BGP processes with a single neighbor running in each * Multiple BGP processes with a single neighbor running in each
process. process.
* A single BGP process with multiple neighbors running. * A single BGP process with multiple neighbors running.
skipping to change at page 35, line 16 skipping to change at line 1482
Routing configuration does not include low-level policies. Such Routing configuration does not include low-level policies. Such
policies are handled at the device configuration level. Local policies are handled at the device configuration level. Local
policies of a service provider (e.g., filtering) are implemented as policies of a service provider (e.g., filtering) are implemented as
part of the device configuration; these are not captured in the L3NM, part of the device configuration; these are not captured in the L3NM,
but the model allows local profiles to be associated with routing but the model allows local profiles to be associated with routing
instances ('routing-profiles'). Note that these routing profiles can instances ('routing-profiles'). Note that these routing profiles can
be scoped to capture parameters that are globally applied to all be scoped to capture parameters that are globally applied to all
L3VPN services within a service provider network, while customized L3VPN services within a service provider network, while customized
L3VPN parameters are captured by means of the L3NM. The provisioning L3VPN parameters are captured by means of the L3NM. The provisioning
of an L3VPN service will, thus, rely upon the instantiation of these of an L3VPN service will thus rely upon the instantiation of these
global routing profiles and the customized L3NM. global routing profiles and the customized L3NM.
7.6.3.1. Static Routing 7.6.3.1. Static Routing
The L3NM supports the configuration of one or more IPv4/IPv6 static The L3NM supports the configuration of one or more IPv4/IPv6 static
routes. Since the same structure is used for both IPv4 and IPv6, it routes. Since the same structure is used for both IPv4 and IPv6,
was considered to have one single container to group both static using one single container to group both static entries independently
entries independently of their address family, but that design was of their address family was considered at one time, but that design
abandoned to ease the mapping with the structure in [RFC8299]. 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 routing-protocols
| +--rw static | +--rw routing-protocol* [id]
| | +--rw cascaded-lan-prefixes | ...
| | +--rw ipv4-lan-prefixes* | +--rw static
| | | [lan next-hop] | | +--rw cascaded-lan-prefixes
| | | {vpn-common:ipv4}? | | +--rw ipv4-lan-prefixes*
| | | +--rw lan inet:ipv4-prefix | | | [lan next-hop]
| | | +--rw lan-tag? string | | | {vpn-common:ipv4}?
| | | +--rw next-hop union | | | +--rw lan inet:ipv4-prefix
| | | +--rw bfd-enable? boolean | | | +--rw lan-tag? string
| | | +--rw metric? uint32 | | | +--rw next-hop union
| | | +--rw preference? uint32 | | | +--rw bfd-enable? boolean
| | | +--rw status | | | +--rw metric? uint32
| | | +--rw admin-status | | | +--rw preference? uint32
| | | | +--rw status? identityref | | | +--rw status
| | | | +--rw last-change? yang:date-and-time | | | +--rw admin-status
| | | +--ro oper-status | | | | +--rw status? identityref
| | | +--ro status? identityref | | | | +--rw last-change? yang:date-and-time
| | | +--ro last-change? yang:date-and-time | | | +--ro oper-status
| | +--rw ipv6-lan-prefixes* | | | +--ro status? identityref
| | [lan next-hop] | | | +--ro last-change? yang:date-and-time
| | {vpn-common:ipv6}? | | +--rw ipv6-lan-prefixes*
| | +--rw lan inet:ipv6-prefix | | [lan next-hop]
| | +--rw lan-tag? string | | {vpn-common:ipv6}?
| | +--rw next-hop union | | +--rw lan inet:ipv6-prefix
| | +--rw bfd-enable? boolean | | +--rw lan-tag? string
| | +--rw metric? uint32 | | +--rw next-hop union
| | +--rw preference? uint32 | | +--rw bfd-enable? boolean
| | +--rw status | | +--rw metric? uint32
| | +--rw admin-status | | +--rw preference? uint32
| | | +--rw status? identityref | | +--rw status
| | | +--rw last-change? yang:date-and-time | | +--rw admin-status
| | +--ro oper-status | | | +--rw status? identityref
| | +--ro status? identityref | | | +--rw last-change? yang:date-and-time
| | +--ro 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 Figure 15: Static Routing Subtree Structure
As depicted in Figure 15, the following data nodes can be defined for As depicted in Figure 15, the following data nodes can be defined for
a given IP prefix: a given IP prefix:
'lan-tag': Indicates a local tag (e.g., "myfavourite-lan") that is 'lan-tag': Indicates a local tag (e.g., "myfavorite-lan") that is
used to enforce local policies. used to enforce local policies.
'next-hop': Indicates the next-hop to be used for the static route. 'next-hop': Indicates the next hop to be used for the static route.
It can be identified by an IP address, an interface, etc. 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 'bfd-enable': Indicates whether BFD is enabled or disabled for this
static route entry. static route entry.
'metric': Indicates the metric associated with the static route 'metric': Indicates the metric associated with the static route
entry. entry. This metric is used when the route is exported into an
IGP.
'preference': Indicates the preference associated with the static 'preference': Indicates the preference associated with the static
route entry. This preference is used to selecting a preferred route entry. This preference is used to select a preferred route
route among routes to the same destination prefix. among routes to the same destination prefix.
'status': Used to convey the status of a static route entry. This 'status': Used to convey the status of a static route entry. This
data node can also be used to control the (de)activation of data node can also be used to control the (de)activation of
individual static route entries. individual static route entries.
7.6.3.2. BGP 7.6.3.2. BGP
The L3NM allows the configuration of a BGP neighbor, including a set The L3NM allows the configuration of a BGP neighbor, including a set
for parameters that are pertinent to be tweaked at the network level of parameters that are pertinent to be tweaked at the network level
for service customization purposes. The 'bgp' container does not aim for service customization purposes. The 'bgp' container does not aim
to include every BGP parameter; a comprehensive set of parameters to include every BGP parameter; a comprehensive set of parameters
belongs more to the BGP device model. 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 ...
+--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 The following data nodes are captured in Figure 16. It is up to the
implementation (e.g., network orchestrator) to derive the implementation (e.g., network orchestrator) to derive the
corresponding BGP device configuration: corresponding BGP device configuration:
'description': Includes a description of the BGP session. 'description': Includes a description of the BGP session.
'local-as': Indicates a local AS Number (ASN) if a distinct ASN is 'local-as': Indicates a local AS Number (ASN), if a distinct ASN is
required, other than the one configured at the VPN node level. required other than the ASN configured at the VPN node level.
'peer-as': Conveys the customer's ASN. 'peer-as': Conveys the customer's ASN.
'address-family': Indicates the address-family of the peer. It can 'address-family': Indicates the address family of the peer. It can
be set to IPv4, IPv6, or dual-stack. be set to 'ipv4', 'ipv6', or 'dual-stack'.
This address family will be used together with the 'vpn-type' to This address family will be used together with the 'vpn-type' to
derive the appropriate Address Family Identifiers derive the appropriate Address Family Identifiers (AFIs) /
(AFIs)/Subsequent Address Family Identifiers (SAFIs) that will be Subsequent Address Family Identifiers (SAFIs) that will be part of
part of the derived device configurations (e.g., Unicast IPv4 MPLS the derived device configurations (e.g., unicast IPv4 MPLS L3VPN
L3VPN (AFI,SAFI = 1,128) defined in Section 4.3.4 of [RFC4364]). (AFI,SAFI = 1,128) as defined in Section 4.3.4 of [RFC4364]).
'local-address': Specifies an address or a reference to an interface 'local-address': Specifies an address or a reference to an interface
to use when establishing the BGP transport session. to use when establishing the BGP transport session.
'neighbor': Can indicate two neighbors (each for a given address- 'neighbor': Can indicate two neighbors (each for a given address
family) or one neighbor (if 'address-family' attribute is set to family) or one neighbor (if the 'address-family' attribute is set
dual-stack). A list of IP address(es) of the BGP neighbors can be to 'dual-stack'). A list of IP address(es) of the BGP neighbor(s)
then conveyed in this data node. can then be conveyed in this data node.
'multihop': Indicates the number of allowed IP hops between a PE and 'multihop': Indicates the number of allowed IP hops between a PE and
its BGP peer. its BGP peer.
'as-override': If set, this parameter indicates whether ASN override 'as-override': If set, this parameter indicates whether ASN override
is enabled, i.e., replace the ASN of the customer specified in the is enabled, i.e., replacing the ASN of the customer specified in
AS_PATH BGP attribute with the ASN identified in the 'local-as' the AS_PATH BGP attribute with the ASN identified in the 'local-
attribute. as' attribute.
'allow-own-as': Is used in some topologies (e.g., hub-and-spoke) to '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 allow the provider's ASN to be included in the AS_PATH BGP
attribute received from a CE. Loops are prevented by setting attribute received from a CE. Loops are prevented by setting
'allow-own-as' to a maximum number of provider's ASN occurrences. 'allow-own-as' to a maximum number of the provider's ASN
This parameter is set by default to '0' (that is, reject any occurrences. By default, this parameter is set to '0' (that is,
AS_PATH attribute that includes the provider's ASN). reject any AS_PATH attribute that includes the provider's ASN).
'prepend-global-as': When distinct ASNs are configured in the VPN 'prepend-global-as': When distinct ASNs are configured at the VPN
node and network access levels, this parameter controls whether node and network access levels, this parameter controls whether
the ASN provided at the VPN node level is prepended to the AS_PATH the ASN provided at the VPN node level is prepended to the AS_PATH
attribute. attribute.
'send-default-route': Controls whether default routes can be 'send-default-route': Controls whether default routes can be
advertised to the peer. advertised to the peer.
'site-of-origin': Is meant to uniquely identify the set of routes 'site-of-origin': Meant to uniquely identify the set of routes
learned from a site via a particular CE/PE connection and is used learned from a site via a particular CE-PE connection. It is used
to prevent routing loops (Section 7 of [RFC4364]). The Site of to prevent routing loops (Section 7 of [RFC4364]). The Site of
Origin attribute is encoded as a Route Origin Extended Community. Origin attribute is encoded as a Route Origin Extended Community.
'ipv6-site-of-origin': Carries an IPv6 Address Specific BGP Extended 'ipv6-site-of-origin': Carries an IPv6 Address Specific BGP Extended
Community that is used to indicate the Site of Origin for VRF Community that is used to indicate the Site of Origin for VRF
information [RFC5701]. It is used to prevent routing loops. information [RFC5701]. It is used to prevent routing loops.
'redistribute-connected': Controls whether the PE-CE link is 'redistribute-connected': Controls whether the PE-CE link is
advertised to other PEs. advertised to other PEs.
skipping to change at page 40, line 17 skipping to change at line 1703
'max-prefix': Indicates the maximum number of BGP prefixes 'max-prefix': Indicates the maximum number of BGP prefixes
allowed in the BGP session. If the limit is reached, the allowed in the BGP session. If the limit is reached, the
action indicated in 'violate-action' will be followed. action indicated in 'violate-action' will be followed.
'warning-threshold': A warning notification is triggered when 'warning-threshold': A warning notification is triggered when
this limit is reached. this limit is reached.
'violate-action': Indicates which action to execute when the 'violate-action': Indicates which action to execute when the
maximum number of BGP prefixes is reached. Examples of such maximum number of BGP prefixes is reached. Examples of such
actions are: send a warning message, discard extra paths from actions include sending a warning message, discarding extra
the peer, or restart the session. paths from the peer, or restarting the session.
'restart-timer': Indicates, in seconds, the time interval after 'restart-timer': Indicates, in seconds, the time interval after
which the BGP session will be reestablished. which the BGP session will be reestablished.
'bgp-timers': Two timers can be captured in this container: (1) '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-time', which is the time interval that will be used for the
HoldTimer (Section 4.2 of [RFC4271]) when establishing a BGP Hold Timer (Section 4.2 of [RFC4271]) when establishing a BGP
session. (2) 'keepalive' which is the time interval for the session and (2) 'keepalive', which is the time interval for the
KeepAlive timer between a PE and a BGP peer (Section 4.4 of KeepaliveTimer between a PE and a BGP peer (Section 4.4 of
[RFC4271]). Both timers are expressed in seconds. [RFC4271]). Both timers are expressed in seconds.
'authentication': The module adheres to the recommendations in 'authentication': The module adheres to the recommendations in
Section 13.2 of [RFC4364] as it allows enabling TCP-AO [RFC5925] Section 13.2 of [RFC4364], as it allows enabling the TCP
and accommodates the installed base that makes use of MD5. In Authentication Option (TCP-AO) [RFC5925] and accommodates the
addition, the module includes a provision for the use of IPsec. installed base that makes use of MD5. In addition, the module
includes a provision for using IPsec.
This version of the L3NM assumes that TCP-AO specific parameters This version of the L3NM assumes that parameters specific to the
are preconfigured as part of the key-chain that is referenced in TCP-AO are preconfigured as part of the key chain that is
the L3NM. No assumption is made about how such a key-chain is referenced in the L3NM. No assumption is made about how such a
pre-configured. However, the structure of the key-chain should key chain is preconfigured. However, the structure of the key
cover data nodes beyond those in [RFC8177], mainly SendID and chain should cover data nodes beyond those in [RFC8177], mainly
RecvID (Section 3.1 of [RFC5925]). SendID and RecvID (Section 3.1 of [RFC5925]).
'status': Indicates the status of the BGP routing instance. 'status': Indicates the status of the BGP routing instance.
7.6.3.3. OSPF 7.6.3.3. OSPF
OSPF can be configured to run as a routing protocol on the 'vpn- OSPF can be configured to run as a routing protocol on the 'vpn-
network-access'. 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
| | | | vpn-common:vpn-id
| | | +--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: OPSF Routing Subtree Structure ...
+--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: The following data nodes are captured in Figure 17:
'address-family': Indicates whether IPv4, IPv6, or both address 'address-family': Indicates whether IPv4, IPv6, or both address
families are to be activated. families are to be activated.
When the IPv4 or dual-stack address-family is requested, it is up When the IPv4 or dual-stack address family is requested, it is up
to the implementation (e.g., network orchestrator) to decide to the implementation (e.g., network orchestrator) to decide
whether OSPFv2 [RFC4577] or OSPFv3 [RFC6565] is used to announce whether OSPFv2 [RFC4577] or OSPFv3 [RFC6565] is used to announce
IPv4 routes. Such decision will be typically reflected in the IPv4 routes. Such a decision will typically be reflected in the
device configurations that will be derived to implement the L3VPN. device configurations that will be derived to implement the L3VPN.
'area-id': Indicates the OSPF Area ID. 'area-id': Indicates the OSPF Area ID.
'metric': Associates a metric with OSPF routes. 'metric': Associates a metric with OSPF routes.
'sham-links': Is used to create OSPF sham links between two VPN 'sham-links': Used to create OSPF sham links between two VPN network
network accesses sharing the same area and having a backdoor link accesses sharing the same area and having a backdoor link
(Section 4.2.7 of [RFC4577] and Section 5 of [RFC6565]). (Section 4.2.7 of [RFC4577] and Section 5 of [RFC6565]).
'max-lsa': Sets the maximum number of LSAs that the OSPF instance 'max-lsa': Sets the maximum number of Link State Advertisements
will accept. (LSAs) that the OSPF instance will accept.
'authentication': Controls the authentication schemes to be enabled 'authentication': Controls the authentication schemes to be enabled
for the OSPF instance. The following options are supported: IPsec for the OSPF instance. The following options are supported: IPsec
for OSPFv3 authentication [RFC4552], authentication trailer for for OSPFv3 authentication [RFC4552], and the Authentication
OSPFv2 [RFC5709] [RFC7474] and OSPFv3 [RFC7166]. Trailer for OSPFv2 [RFC5709] [RFC7474] and OSPFv3 [RFC7166].
'status': Indicates the status of the OSPF routing instance. 'status': Indicates the status of the OSPF routing instance.
7.6.3.4. IS-IS 7.6.3.4. IS-IS
The model (Figure 18) allows the user to configure IS-IS The model allows the user to configure IS-IS [ISO10589] [RFC1195]
[ISO10589][RFC1195][RFC5308] to run on the 'vpn-network-access' [RFC5308] to run on the 'vpn-network-access' interface. See
interface. Figure 18.
... ...
+--rw routing-protocols +--rw routing-protocols
| +--rw routing-protocol* [id] | +--rw routing-protocol* [id]
| ... | ...
| +--rw isis | +--rw isis
| | +--rw address-family? identityref | | +--rw address-family? identityref
| | +--rw area-address area-address | | +--rw area-address area-address
| | +--rw level? identityref | | +--rw level? identityref
| | +--rw metric? uint16 | | +--rw metric? uint16
| | +--rw mode? enumeration | | +--rw mode? enumeration
| | +--rw authentication | | +--rw authentication
| | | +--rw enable? boolean | | | +--rw enable? boolean
| | | +--rw keying-material | | | +--rw keying-material
| | | +--rw (option)? | | | +--rw (option)?
| | | +--:(auth-key-chain) | | | +--:(auth-key-chain)
| | | | +--rw key-chain? | | | | +--rw key-chain?
| | | | key-chain:key-chain-ref | | | | key-chain:key-chain-ref
| | | +--:(auth-key-explicit) | | | +--:(auth-key-explicit)
| | | +--rw key-id? uint32 | | | +--rw key-id? uint32
| | | +--rw key? string | | | +--rw key? string
| | | +--rw crypto-algorithm? identityref | | | +--rw crypto-algorithm? identityref
| | +--rw status | | +--rw status
| | +--rw admin-status | | +--rw admin-status
| | | +--rw status? identityref | | | +--rw status? identityref
| | | +--rw last-change? yang:date-and-time | | | +--rw last-change? yang:date-and-time
| | +--ro oper-status | | +--ro oper-status
| | +--ro status? identityref | | +--ro status? identityref
| | +--ro last-change? yang:date-and-time | | +--ro last-change? yang:date-and-time
... ...
Figure 18: IS-IS Routing Subtree Structure Figure 18: IS-IS Routing Subtree Structure
The following IS-IS data nodes are supported: The following IS-IS data nodes are supported:
'address-family': Indicates whether IPv4, IPv6, or both address 'address-family': Indicates whether IPv4, IPv6, or both address
families are to be activated. families are to be activated.
'area-address': Indicates the IS-IS area address. 'area-address': Indicates the IS-IS area address.
'level': Indicates the IS-IS level: Level 1, Level 2, or both. 'level': Indicates the IS-IS level: Level 1, Level 2, or both.
'metric': Associates a metric with IS-IS routes. 'metric': Associates a metric with IS-IS routes.
'mode': Indicates the IS-IS interface mode type. It can be set to 'mode': Indicates the IS-IS interface mode type. It can be set to
'active' (that is, send or receive IS-IS protocol control packets) 'active' (that is, send or receive IS-IS protocol control packets)
or 'passive' (that is, suppress the sending of IS-IS updates or 'passive' (that is, suppress the sending of IS-IS updates
through the interface). through the interface).
'authentication': Controls the authentication schemes to be enabled 'authentication': Controls the authentication schemes to be enabled
for the IS-IS instance. Both the specification of a key-chain for the IS-IS instance. Both the specification of a key chain
[RFC8177] and the direct specification of key and authentication [RFC8177] and the direct specification of key and authentication
algorithm are supported. algorithms are supported.
'status': Indicates the status of the IS-IS routing instance. 'status': Indicates the status of the IS-IS routing instance.
7.6.3.5. RIP 7.6.3.5. RIP
The model (Figure 19) allows the user to configure RIP to run on the The model allows the user to configure RIP to run on the 'vpn-
'vpn-network-access' interface. network-access' interface. See Figure 19.
... ...
+--rw routing-protocols +--rw routing-protocols
| +--rw routing-protocol* [id] | +--rw routing-protocol* [id]
| ... | ...
| +--rw rip | +--rw rip
| | +--rw address-family? identityref | | +--rw address-family? identityref
| | +--rw timers | | +--rw timers
| | | +--rw update-interval? uint16 | | | +--rw update-interval? uint16
| | | +--rw invalid-interval? uint16 | | | +--rw invalid-interval? uint16
| | | +--rw holddown-interval? uint16 | | | +--rw holddown-interval? uint16
| | | +--rw flush-interval? uint16 | | | +--rw flush-interval? uint16
| | +--rw neighbor* inet:ip-address | | +--rw default-metric? uint8
| | +--rw default-metric? uint8 | | +--rw authentication
| | +--rw authentication | | | +--rw enable? boolean
| | | +--rw enable? boolean | | | +--rw keying-material
| | | +--rw keying-material | | | +--rw (option)?
| | | +--rw (option)? | | | +--:(auth-key-chain)
| | | +--:(auth-key-chain) | | | | +--rw key-chain?
| | | | +--rw key-chain? | | | | key-chain:key-chain-ref
| | | | key-chain:key-chain-ref | | | +--:(auth-key-explicit)
| | | +--:(auth-key-explicit) | | | +--rw key? string
| | | +--rw key? string | | | +--rw crypto-algorithm? identityref
| | | +--rw crypto-algorithm? identityref | | +--rw status
| | +--rw status | | +--rw admin-status
| | +--rw admin-status | | | +--rw status? identityref
| | | +--rw status? identityref | | | +--rw last-change? yang:date-and-time
| | | +--rw last-change? yang:date-and-time | | +--ro oper-status
| | +--ro oper-status | | +--ro status? identityref
| | +--ro status? identityref | | +--ro last-change? yang:date-and-time
| | +--ro last-change? yang:date-and-time ...
...
Figure 19: RIP Subtree Structure Figure 19: RIP Subtree Structure
As shown in Figure 19, the following RIP data nodes are supported: As shown in Figure 19, the following RIP data nodes are supported:
'address-family': Indicates whether IPv4, IPv6, or both address 'address-family': Indicates whether IPv4, IPv6, or both address
families are to be activated. This parameter is used to determine families are to be activated. This parameter is used to determine
whether RIPv2 [RFC2453] and/or RIPng are to be enabled [RFC2080]. whether RIPv2 [RFC2453], RIP Next Generation (RIPng), or both are
to be enabled [RFC2080].
'timers': Indicates the following timers: 'timers': Indicates the following timers:
'update-interval': Is the interval at which RIP updates are sent. 'update-interval': The interval at which RIP updates are sent.
'invalid-interval': Is the interval before a RIP route is 'invalid-interval': The interval before a RIP route is declared
declared invalid. invalid.
'holddown-interval': Is the interval before better RIP routes are 'holddown-interval': The interval before better RIP routes are
released. released.
'flush-interval': Is the interval before a route is removed from 'flush-interval': The interval before a route is removed from the
the routing table. routing table.
These timers are expressed in seconds. These timers are expressed in seconds.
'default-metric': Sets the default RIP metric. 'default-metric': Sets the default RIP metric.
'authentication': Controls the authentication schemes to be enabled 'authentication': Controls the authentication schemes to be enabled
for the RIP instance. for the RIP instance.
'status': Indicates the status of the RIP routing instance. 'status': Indicates the status of the RIP routing instance.
7.6.3.6. VRRP 7.6.3.6. VRRP
The model (Figure 20) allows enabling VRRP on the 'vpn-network- The model allows enabling the Virtual Router Redundancy Protocol
access' interface. (VRRP) on the 'vpn-network-access' interface. See Figure 20.
... ...
+--rw routing-protocols +--rw routing-protocols
| +--rw routing-protocol* [id] | +--rw routing-protocol* [id]
| ... | ...
| +--rw vrrp | +--rw vrrp
| +--rw address-family* identityref | +--rw address-family* identityref
| +--rw vrrp-group? uint8 | +--rw vrrp-group? uint8
| +--rw backup-peer? inet:ip-address | +--rw backup-peer? inet:ip-address
| +--rw virtual-ip-address* inet:ip-address | +--rw virtual-ip-address* inet:ip-address
| +--rw priority? uint8 | +--rw priority? uint8
| +--rw ping-reply? boolean | +--rw ping-reply? boolean
| +--rw status | +--rw status
| +--rw admin-status | +--rw admin-status
| | +--rw status? identityref | | +--rw status? identityref
| | +--rw last-change? yang:date-and-time | | +--rw last-change? yang:date-and-time
| +--ro oper-status | +--ro oper-status
| +--ro status? identityref | +--ro status? identityref
| +--ro last-change? yang:date-and-time | +--ro last-change? yang:date-and-time
... ...
Figure 20: VRRP Subtree Structure Figure 20: VRRP Subtree Structure
The following data nodes are supported: The following data nodes are supported:
'address-family': Indicates whether IPv4, IPv6, or both address 'address-family': Indicates whether IPv4, IPv6, or both address
families are to be activated. Note that VRRP version 3 [RFC5798] families are to be activated. Note that VRRP version 3 [RFC5798]
supports both IPv4 and IPv6. supports both IPv4 and IPv6.
'vrrp-group': Is used to identify the VRRP group. 'vrrp-group': Used to identify the VRRP group.
'backup-peer': Carries the IP address of the peer. 'backup-peer': Carries the IP address of the peer.
'virtual-ip-address': Includes virtual IP addresses for a single 'virtual-ip-address': Includes virtual IP addresses for a single
VRRP group. VRRP group.
'priority': Assigns the VRRP election priority for the backup 'priority': Assigns the VRRP election priority for the backup
virtual router. virtual router.
'ping-reply': Controls whether ping requests can be replied to. 'ping-reply': Controls whether the VRRP speaker should reply to ping
requests.
'status': Indicates the status of the VRRP instance. 'status': Indicates the status of the VRRP instance.
Note that no authentication data node is included for VRRP as there Note that no authentication data node is included for VRRP, as there
isn't currently any type of VRRP authentication (see Section 9 of isn't any type of VRRP authentication at this time (see Section 9 of
[RFC5798]). [RFC5798]).
7.6.4. OAM 7.6.4. OAM
This container (Figure 21) defines the Operations, Administration, This container (Figure 21) defines the Operations, Administration,
and Maintenance (OAM) mechanisms used for a VPN network access. In and Maintenance (OAM) mechanisms used for a VPN network access. In
the current version of the L3NM, only BFD is supported. the current version of the L3NM, only BFD is supported.
... ...
+--rw oam +--rw oam
| +--rw bfd {vpn-common:bfd}? | +--rw bfd {vpn-common:bfd}?
| +--rw session-type? identityref | +--rw session-type? identityref
| +--rw desired-min-tx-interval? uint32 | +--rw desired-min-tx-interval? uint32
| +--rw required-min-rx-interval? uint32 | +--rw required-min-rx-interval? uint32
| +--rw local-multiplier? uint8 | +--rw local-multiplier? uint8
| +--rw holdtime? uint32 | +--rw holdtime? uint32
| +--rw profile? leafref | +--rw profile? leafref
| +--rw authentication! | +--rw authentication!
| | +--rw key-chain? key-chain:key-chain-ref | | +--rw key-chain? key-chain:key-chain-ref
| | +--rw meticulous? boolean | | +--rw meticulous? boolean
| +--rw status | +--rw status
| +--rw admin-status | +--rw admin-status
| | +--rw status? identityref | | +--rw status? identityref
| | +--rw last-change? yang:date-and-time | | +--rw last-change? yang:date-and-time
| +--ro oper-status | +--ro oper-status
| +--ro status? identityref | +--ro status? identityref
| +--ro last-change? yang:date-and-time | +--ro last-change? yang:date-and-time
... ...
Figure 21: IP Connection Subtree Structure (OAM) Figure 21: IP Connection Subtree Structure (OAM)
The following OAM data nodes can be specified: The following OAM data nodes can be specified:
'session-type': Indicates which BFD flavor is used to set up the 'session-type': Indicates which BFD flavor is used to set up the
session (e.g., classic BFD [RFC5880], Seamless BFD [RFC7880]). By session (e.g., classic BFD [RFC5880], Seamless BFD [RFC7880]). By
default, the BFD session is assumed to follow the behavior default, it is assumed that the BFD session will follow the
specified in [RFC5880]. behavior specified in [RFC5880].
'desired-min-tx-interval': Is the minimum interval, in microseconds, 'desired-min-tx-interval': The minimum interval, in microseconds,
that a PE would like to use when transmitting BFD Control packets that a PE would like to use when transmitting BFD Control packets,
less any jitter applied. less any jitter applied.
'required-min-rx-interval': Is the minimum interval, in 'required-min-rx-interval': The minimum interval, in microseconds,
microseconds, between received BFD Control packets that a PE is between received BFD Control packets that a PE is capable of
capable of supporting, less any jitter applied by the sender. supporting, less any jitter applied by the sender.
'local-multiplier': The negotiated transmit interval, multiplied by 'local-multiplier': The negotiated transmit interval, multiplied by
this value, provides the detection time for the peer. this value, provides the detection time for the peer.
'holdtime': Is used to indicate the expected BFD holddown time, in 'holdtime': Used to indicate the expected BFD holddown time, in
milliseconds. This value may be inherited from the service milliseconds. This value may be inherited from the service
request (see Section 6.3.2.2.2 of [RFC8299]). request (see Section 6.3.2.2.2 of [RFC8299]).
'profile': Refers to a BFD profile (Section 7.2). Such a profile 'profile': Refers to a BFD profile (Section 7.2). Such a profile
can be set by the provider or inherited from the service request can be set by the provider or inherited from the service request
(see Section 6.3.2.2.2 of [RFC8299]). (see Section 6.3.2.2.2 of [RFC8299]).
'authentication': Includes the required information to enable the 'authentication': Includes the required information to enable the
BFD authentication modes discussed in Section 6.7 of [RFC5880]. BFD authentication modes discussed in Section 6.7 of [RFC5880].
In particular 'meticulous' controls the activation of the In particular, 'meticulous' controls the activation of meticulous
meticulous mode discussed in Sections 6.7.3 and 6.7.4 of mode as discussed in Sections 6.7.3 and 6.7.4 of [RFC5880].
[RFC5880].
'status': Indicates the status of BFD. 'status': Indicates the status of BFD.
7.6.5. Security 7.6.5. Security
The 'security' container specifies the authentication and the The 'security' container specifies the authentication and the
encryption to be applied for a given VPN network access traffic. As encryption to be applied to traffic for a given VPN network access.
depicted in the subtree shown in Figure 22, the L3NM can be used to As depicted in the subtree shown in Figure 22, the L3NM can be used
directly control the encryption to put in place (e.g., Layer 2 or to directly control the encryption to be applied (e.g., Layer 2 or
Layer 3 encryption) or invoke a local encryption profile. Layer 3 encryption) or invoke a local encryption profile.
... ...
+--rw vpn-services +--rw vpn-services
+--rw vpn-service* [vpn-id] +--rw vpn-service* [vpn-id]
... ...
+--rw vpn-nodes +--rw vpn-nodes
+--rw vpn-node* [vpn-node-id] +--rw vpn-node* [vpn-node-id]
... ...
+--rw vpn-network-accesses +--rw vpn-network-accesses
+--rw vpn-network-access* [id] +--rw vpn-network-access* [id]
... ...
+--rw security +--rw security
| +--rw encryption {vpn-common:encryption}? | +--rw encryption {vpn-common:encryption}?
| | +--rw enabled? boolean | | +--rw enabled? boolean
| | +--rw layer? enumeration | | +--rw layer? enumeration
| +--rw encryption-profile | +--rw encryption-profile
| +--rw (profile)? | +--rw (profile)?
| +--:(provider-profile) | +--:(provider-profile)
| | +--rw profile-name? leafref | | +--rw profile-name? leafref
| +--:(customer-profile) | +--:(customer-profile)
| +--rw customer-key-chain? | +--rw customer-key-chain?
| kc:key-chain-ref | key-chain:key-chain-ref
+--rw service +--rw service
... ...
Figure 22: Security Subtree Structure Figure 22: Security Subtree Structure
7.6.6. Services 7.6.6. Services
7.6.6.1. Overview 7.6.6.1. Overview
The 'service' container specifies the service parameters to apply for The 'service' container specifies the service parameters to apply for
a given VPN network access (Figure 23). a given VPN network access (Figure 23).
... ...
+--rw vpn-network-accesses +--rw vpn-network-accesses
+--rw vpn-network-access* [id] +--rw vpn-network-access* [id]
... ...
+--rw service +--rw service
+--rw inbound-bandwidth? uint64 {vpn-common:inbound-bw}? +--rw pe-to-ce-bandwidth? uint64 {vpn-common:inbound-bw}?
+--rw outbound-bandwidth? uint64 {vpn-common:outbound-bw}? +--rw ce-to-pe-bandwidth? uint64 {vpn-common:outbound-bw}?
+--rw mtu? uint32 +--rw mtu? uint32
+--rw qos {vpn-common:qos}? +--rw qos {vpn-common:qos}?
| ... | ...
+--rw carriers-carrier +--rw carriers-carrier
| {vpn-common:carriers-carrier}? | {vpn-common:carriers-carrier}?
| +--rw signaling-type? enumeration | +--rw signaling-type? enumeration
+--rw ntp +--rw ntp
| +--rw broadcast? enumeration | +--rw broadcast? enumeration
| +--rw auth-profile | +--rw auth-profile
| | +--rw profile-id? string | | +--rw profile-id? string
| +--rw status | +--rw status
| +--rw admin-status | +--rw admin-status
| | +--rw status? identityref | | +--rw status? identityref
| | +--rw last-change? yang:date-and-time | | +--rw last-change? yang:date-and-time
| +--ro oper-status | +--ro oper-status
| +--ro status? identityref | +--ro status? identityref
| +--ro last-change? yang:date-and-time | +--ro last-change? yang:date-and-time
+--rw multicast {vpn-common:multicast}? +--rw multicast {vpn-common:multicast}?
... ...
Figure 23: Services Subtree Structure Figure 23: Services Subtree Structure
The following data nodes are defined: The following data nodes are defined:
'inbound-bandwidth': Indicates, in bits per second (bps), the 'pe-to-ce-bandwidth': Indicates, in bits per second (bps), the
inbound bandwidth of the connection (i.e., download bandwidth from inbound bandwidth of the connection (i.e., the download bandwidth
the service provider to the site). from the service provider to the site).
'outbound-bandwidth': Indicates, in bps, the outbound bandwidth of 'ce-to-pe-bandwidth': Indicates, in bps, the outbound bandwidth of
the connection (i.e., upload bandwidth from the site to the the connection (i.e., the upload bandwidth from the site to the
service provider). service provider).
'mtu': Indicates the MTU at the service level. 'mtu': Indicates the MTU at the service level.
'qos': Is used to define a set of QoS policies to apply on a given '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). connection (refer to Section 7.6.6.2 for more details).
'carriers-carrier': Groups a set of parameters that are used when 'carriers-carrier': Groups a set of parameters that are used when
Carriers' Carriers (CsC) is enabled such the use of BGP for Carriers' Carriers (CsC) is enabled, such as using BGP for
signaling purposes [RFC8277]. signaling purposes [RFC8277].
'ntp': Time synchronization may be needed in some VPNs such as 'ntp': Time synchronization may be needed in some VPNs, such as
infrastructure and management VPNs. This container is used to infrastructure and management VPNs. This container is used to
enable the NTP service [RFC5905]. enable the NTP service [RFC5905].
'multicast': Specifies the multicast mode and other data nodes such 'multicast': Specifies the multicast mode and other data nodes, such
as the address-family. Refer to Section 7.7. as the address family. Refer to Section 7.7.
7.6.6.2. QoS 7.6.6.2. QoS
'qos' container is used to define a set of QoS policies to apply on a The 'qos' container is used to define a set of QoS policies to apply
given connection (Figure 24). A QoS policy may be a classification on a given connection (Figure 24). A QoS policy may be a
or an action policy. For example, a QoS action can be defined to classification or an action policy. For example, a QoS action can be
rate limit inbound/outbound traffic of a given class of service. defined to rate-limit inbound/outbound traffic of a given class of
service.
... ...
+--rw qos {vpn-common:qos}? +--rw qos {vpn-common:qos}?
| +--rw qos-classification-policy | +--rw qos-classification-policy
| | +--rw rule* [id] | | +--rw rule* [id]
| | +--rw id string | | +--rw id string
| | +--rw (match-type)? | | +--rw (match-type)?
| | | +--:(match-flow) | | | +--:(match-flow)
| | | | +--rw (l3)? | | | | +--rw (l3)?
| | | | | +--:(ipv4) | | | | | +--:(ipv4)
| | | | | | ... | | | | | | ...
| | | | | +--:(ipv6) | | | | | +--:(ipv6)
| | | | | ... | | | | | ...
| | | | +--rw (l4)? | | | | +--rw (l4)?
| | | | +--:(tcp) | | | | +--:(tcp)
| | | | | ... | | | | | ...
| | | | +--:(udp) | | | | +--:(udp)
| | | | ... | | | | ...
| | | +--:(match-application) | | | +--:(match-application)
| | | +--rw match-application? | | | +--rw match-application?
| | | identityref | | | identityref
| | +--rw target-class-id? | | +--rw target-class-id? string
| | string | +--rw qos-action
| +--rw qos-action | | +--rw rule* [id]
| | +--rw rule* [id] | | +--rw id string
| | +--rw id string | | +--rw target-class-id? string
| | +--rw target-class-id? string | | +--rw inbound-rate-limit? decimal64
| | +--rw inbound-rate-limit? decimal64 | | +--rw outbound-rate-limit? decimal64
| | +--rw outbound-rate-limit? decimal64 | +--rw qos-profile
| +--rw qos-profile | +--rw qos-profile* [profile]
| +--rw qos-profile* [profile] | +--rw profile leafref
| +--rw profile leafref | +--rw direction? identityref
| +--rw direction? identityref ...
...
Figure 24: Services Subtree Structure Figure 24: Overall QoS Subtree Structure
QoS classification can be based on many criteria such as: 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 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 IP header field or a combination thereof. Both IPv4 and IPv6 are
supported. supported.
+--rw qos {vpn-common:qos}? +--rw qos {vpn-common:qos}?
| +--rw qos-classification-policy | +--rw qos-classification-policy
| | +--rw rule* [id] | | +--rw rule* [id]
| | +--rw id string | | +--rw id string
| | +--rw (match-type)? | | +--rw (match-type)?
| | | +--:(match-flow) | | | +--:(match-flow)
| | | | +--rw (l3)? | | | | +--rw (l3)?
| | | | | +--:(ipv4) | | | | | +--:(ipv4)
| | | | | | +--rw ipv4 | | | | | | +--rw ipv4
| | | | | | +--rw dscp? inet:dscp | | | | | | +--rw dscp? inet:dscp
| | | | | | +--rw ecn? uint8 | | | | | | +--rw ecn? uint8
| | | | | | +--rw length? uint16 | | | | | | +--rw length? uint16
| | | | | | +--rw ttl? uint8 | | | | | | +--rw ttl? uint8
| | | | | | +--rw protocol? uint8 | | | | | | +--rw protocol? uint8
| | | | | | +--rw ihl? uint8 | | | | | | +--rw ihl? uint8
| | | | | | +--rw flags? bits | | | | | | +--rw flags? bits
| | | | | | +--rw offset? uint16 | | | | | | +--rw offset? uint16
| | | | | | +--rw identification? uint16 | | | | | | +--rw identification? uint16
| | | | | | +--rw (destination-network)? | | | | | | +--rw (destination-network)?
| | | | | | | +--:(destination-ipv4-network) | | | | | | | +--:(destination-ipv4-network)
| | | | | | | +--rw destination-ipv4-network? | | | | | | | +--rw destination-ipv4-network?
| | | | | | | inet:ipv4-prefix | | | | | | | inet:ipv4-prefix
| | | | | | +--rw (source-network)? | | | | | | +--rw (source-network)?
| | | | | | +--:(source-ipv4-network) | | | | | | +--:(source-ipv4-network)
| | | | | | +--rw source-ipv4-network? | | | | | | +--rw source-ipv4-network?
| | | | | | inet:ipv4-prefix | | | | | | inet:ipv4-prefix
| | | | | +--:(ipv6) | | | | | +--:(ipv6)
| | | | | +--rw ipv6 | | | | | +--rw ipv6
| | | | | +--rw dscp? inet:dscp | | | | | +--rw dscp? inet:dscp
| | | | | +--rw ecn? uint8 | | | | | +--rw ecn? uint8
| | | | | +--rw length? uint16 | | | | | +--rw length? uint16
| | | | | +--rw ttl? uint8 | | | | | +--rw ttl? uint8
| | | | | +--rw protocol? uint8 | | | | | +--rw protocol? uint8
| | | | | +--rw (destination-network)? | | | | | +--rw (destination-network)?
| | | | | | +--:(destination-ipv6-network) | | | | | | +--:(destination-ipv6-network)
| | | | | | +--rw destination-ipv6-network? | | | | | | +--rw destination-ipv6-network?
| | | | | | inet:ipv6-prefix | | | | | | inet:ipv6-prefix
| | | | | +--rw (source-network)? | | | | | +--rw (source-network)?
| | | | | | +--:(source-ipv6-network) | | | | | | +--:(source-ipv6-network)
| | | | | | +--rw source-ipv6-network? | | | | | | +--rw source-ipv6-network?
| | | | | | inet:ipv6-prefix | | | | | | inet:ipv6-prefix
| | | | | +--rw flow-label? | | | | | +--rw flow-label?
| | | | | inet:ipv6-flow-label | | | | | inet:ipv6-flow-label
... ...
Figure 25: QoS Subtree Structure (L3) Figure 25: QoS Subtree Structure (L3)
Layer 4: As discussed in [I-D.ietf-opsawg-vpn-common], any layer 4 Layer 4: As discussed in [RFC9181], any Layer 4 protocol can be
protocol can be indicated in the 'protocol' data node under 'l3' indicated in the 'protocol' data node under 'l3' (Figure 25), but
(Figure 25), but only TCP and UDP specific match criteria are only TCP- and UDP-specific match criteria are elaborated in this
elaborated in this version as these protocols are widely used in version, as these protocols are widely used in the context of VPN
the context of VPN services. Augmentations can be considered in services. Augmentations can be considered in the future to add
the future to add other Layer 4 specific data nodes, if needed. other Layer-4-specific data nodes, if needed.
TCP or UDP-related match criteria can be specified in the L3NM as TCP- or UDP-related match criteria can be specified in the L3NM,
shown in Figure 26. as shown in Figure 26.
As discussed in [I-D.ietf-opsawg-vpn-common], some transport As discussed in [RFC9181], some transport protocols use existing
protocols use existing protocols (e.g., TCP or UDP) as substrate. protocols (e.g., TCP or UDP) as the substrate. The match criteria
The match criteria for such protocols may rely upon the 'protocol' for such protocols may rely upon the 'protocol' setting under
under 'l3', TCP/UDP match criteria shown in Figure 26, part of the 'l3', TCP/UDP match criteria as shown in Figure 26, part of the
TCP/UDP payload, or a combination thereof. This version of the TCP/UDP payload, or a combination thereof. This version of the
module does not support such advanced match criteria. Future module does not support such advanced match criteria. Future
revisions of the VPN common module or augmentations to the L3NM revisions of the VPN common module or augmentations to the L3NM
may consider adding match criteria based on the transport protocol may consider adding match criteria based on the transport protocol
payload (e.g., by means of a bitmask match). payload (e.g., by means of a bitmask match).
+--rw qos {vpn-common:qos}? +--rw qos {vpn-common:qos}?
| +--rw qos-classification-policy | +--rw qos-classification-policy
| | +--rw rule* [id] | | +--rw rule* [id]
| | +--rw id string | | +--rw id string
| | +--rw (match-type)? | | +--rw (match-type)?
| | | +--:(match-flow) | | | +--:(match-flow)
| | | | +--rw (l3)? | | | | +--rw (l3)?
| | | | | ... | | | | | ...
| | | | +--rw (l4)? | | | | +--rw (l4)?
skipping to change at page 54, line 8 skipping to change at line 2293
| | | | | | +--:(range) | | | | | | +--:(range)
| | | | | | | +--rw lower-port | | | | | | | +--rw lower-port
| | | | | | | | inet:port-number | | | | | | | | inet:port-number
| | | | | | | +--rw upper-port | | | | | | | +--rw upper-port
| | | | | | | inet:port-number | | | | | | | inet:port-number
| | | | | | +--:(operator) | | | | | | +--:(operator)
| | | | | | +--rw operator? operator | | | | | | +--rw operator? operator
| | | | | | +--rw port | | | | | | +--rw port
| | | | | | inet:port-number | | | | | | inet:port-number
| | | | | +--rw (destination-port)? | | | | | +--rw (destination-port)?
| | | | +--:(destination-port-range-or-operator) | | | | | +--:(destination-port-range-or-operator)
| | | | | +--rw destination-port-range-or-operator | | | | | +--rw destination-port-range-or-operator
| | | | | +--rw (port-range-or-operator)? | | | | | +--rw (port-range-or-operator)?
| | | | | +--:(range) | | | | | +--:(range)
| | | | | | +--rw lower-port | | | | | | +--rw lower-port
| | | | | | | inet:port-number | | | | | | | inet:port-number
| | | | | | +--rw upper-port | | | | | | +--rw upper-port
| | | | | | inet:port-number | | | | | | inet:port-number
| | | | | +--:(operator) | | | | | +--:(operator)
| | | | | +--rw operator? operator | | | | | +--rw operator? operator
| | | | | +--rw port | | | | | +--rw port
skipping to change at page 54, line 51 skipping to change at line 2336
| | | | | +--rw lower-port | | | | | +--rw lower-port
| | | | | | inet:port-number | | | | | | inet:port-number
| | | | | +--rw upper-port | | | | | +--rw upper-port
| | | | | inet:port-number | | | | | inet:port-number
| | | | +--:(operator) | | | | +--:(operator)
| | | | +--rw operator? operator | | | | +--rw operator? operator
| | | | +--rw port | | | | +--rw port
| | | | inet:port-number | | | | inet:port-number
... ...
Figure 26: QoS Subtree Structure (L4) Figure 26: QoS Subtree Structure (L4)
Application match: Relies upon application-specific classification. Application match: Relies upon application-specific classification
(Figure 24).
7.7. Multicast 7.7. Multicast
Multicast may be enabled for a particular VPN at the VPN node and VPN 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- network access levels (see Figure 27). Some data nodes (e.g., max-
groups) can be controlled at various levels: VPN service, VPN node groups (Figure 28)) can be controlled at various levels: VPN service,
level, or VPN network access. VPN node level, or VPN network access.
... ...
+--rw vpn-services +--rw vpn-services
+--rw vpn-service* [vpn-id] +--rw vpn-service* [vpn-id]
... ...
+--rw vpn-instance-profiles +--rw vpn-instance-profiles
| +--rw vpn-instance-profile* [profile-id] | +--rw vpn-instance-profile* [profile-id]
| .... | ....
| +--rw multicast {vpn-common:multicast}? | +--rw multicast {vpn-common:multicast}?
| ... | ...
+--rw vpn-nodes +--rw vpn-nodes
+--rw vpn-node* [vpn-node-id] +--rw vpn-node* [vpn-node-id]
... ...
+--rw active-vpn-instance-profiles +--rw active-vpn-instance-profiles
| +--rw vpn-instance-profile* [profile-id] | +--rw vpn-instance-profile* [profile-id]
| ... | ...
| +--rw multicast {vpn-common:multicast}? | +--rw multicast {vpn-common:multicast}?
| ... | ...
+--rw vpn-network-accesses +--rw vpn-network-accesses
+--rw vpn-network-access* [id] +--rw vpn-network-access* [id]
... ...
+--rw service +--rw service
... ...
+--rw multicast {vpn-common:multicast}? +--rw multicast {vpn-common:multicast}?
... ...
Figure 27: Overall Multicast Subtree Structure Figure 27: Overall Multicast Subtree Structure
Multicast-related data nodes at the VPN instance profile level has Multicast-related data nodes at the VPN instance profile level have
the structure that is shown in Figure 30. the structure shown in Figure 28.
... ...
+--rw vpn-services +--rw vpn-services
+--rw vpn-service* [vpn-id] +--rw vpn-service* [vpn-id]
... ...
+--rw vpn-instance-profiles +--rw vpn-instance-profiles
| +--rw vpn-instance-profile* [profile-id] | +--rw vpn-instance-profile* [profile-id]
| .... | ....
| +--rw multicast {vpn-common:multicast}? | +--rw multicast {vpn-common:multicast}?
| +--rw tree-flavor? identityref | +--rw tree-flavor? identityref
| +--rw rp | +--rw rp
| | +--rw rp-group-mappings | | +--rw rp-group-mappings
| | | +--rw rp-group-mapping* [id] | | | +--rw rp-group-mapping* [id]
| | | +--rw id uint16 | | | +--rw id uint16
| | | +--rw provider-managed | | | +--rw provider-managed
| | | | +--rw enabled? boolean | | | | +--rw enabled? boolean
| | | | +--rw rp-redundancy? boolean | | | | +--rw rp-redundancy? boolean
| | | | +--rw optimal-traffic-delivery? boolean | | | | +--rw optimal-traffic-delivery? boolean
| | | | +--rw anycast | | | | +--rw anycast
| | | | +--rw local-address? inet:ip-address | | | | +--rw local-address? inet:ip-address
| | | | +--rw rp-set-address* inet:ip-address | | | | +--rw rp-set-address* inet:ip-address
| | | +--rw rp-address inet:ip-address | | | +--rw rp-address inet:ip-address
| | | +--rw groups | | | +--rw groups
| | | +--rw group* [id] | | | +--rw group* [id]
| | | +--rw id uint16 | | | +--rw id uint16
| | | +--rw (group-format) | | | +--rw (group-format)
| | | +--:(group-prefix) | | | +--:(group-prefix)
| | | | +--rw group-address? inet:ip-prefix | | | | +--rw group-address?
| | | +--:(startend) | | | | inet:ip-prefix
| | | +--rw group-start? inet:ip-address | | | +--:(startend)
| | | +--rw group-end? inet:ip-address | | | +--rw group-start?
| | +--rw rp-discovery | | | | inet:ip-address
| | +--rw rp-discovery-type? identityref | | | +--rw group-end?
| | +--rw bsr-candidates | | | | inet:ip-address
| | +--rw bsr-candidate-address* inet:ip-address | | +--rw rp-discovery
| +--rw igmp {vpn-common:igmp and vpn-common:ipv4}? | | +--rw rp-discovery-type? identityref
| | +--rw static-group* [group-addr] | | +--rw bsr-candidates
| | | +--rw group-addr | | +--rw bsr-candidate-address*
| | | | rt-types:ipv4-multicast-group-address | | | inet:ip-address
| | | +--rw source-addr? | +--rw igmp {vpn-common:igmp and vpn-common:ipv4}?
| | | rt-types:ipv4-multicast-source-address | | +--rw static-group* [group-addr]
| | +--rw max-groups? uint32 | | | +--rw group-addr
| | +--rw max-entries? uint32 | | | | rt-types:ipv4-multicast-group-address
| | +--rw version? identityref | | | +--rw source-addr?
| +--rw mld {vpn-common:mld and vpn-common:ipv6}? | | | rt-types:ipv4-multicast-source-address
| | +--rw static-group* [group-addr] | | +--rw max-groups? uint32
| | | +--rw group-addr | | +--rw max-entries? uint32
| | | | rt-types:ipv6-multicast-group-address | | +--rw version? identityref
| | | +--rw source-addr? | +--rw mld {vpn-common:mld and vpn-common:ipv6}?
| | | rt-types:ipv6-multicast-source-address | | +--rw static-group* [group-addr]
| | +--rw max-groups? uint32 | | | +--rw group-addr
| | +--rw max-entries? uint32 | | | | rt-types:ipv6-multicast-group-address
| | +--rw version? identityref | | | +--rw source-addr?
| +--rw pim {vpn-common:pim}? | | | rt-types:ipv6-multicast-source-address
| +--rw hello-interval? rt-types:timer-value-seconds16 | | +--rw max-groups? uint32
| +--rw dr-priority? 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) Figure 28: Multicast Subtree Structure (VPN Instance Profile Level)
The model supports a single type of tree per VPN access ('tree- The model supports a single type of tree per VPN access ('tree-
flavor'): Any-Source Multicast (ASM), Source-Specific Multicast flavor'): Any-Source Multicast (ASM), Source-Specific Multicast
(SSM), or bidirectional. (SSM), or bidirectional.
When ASM is used, the model supports the configuration of Rendezvous When ASM is used, the model supports the configuration of Rendezvous
Points (RPs). RP discovery may be 'static', 'bsr-rp', or 'auto-rp'. Points (RPs). RP discovery may be 'static', 'bsr-rp', or 'auto-rp'.
When set to 'static', RP to multicast grouping mappings MUST be When set to 'static', RP-to-multicast-group mappings MUST be
configured as part of the 'rp-group-mappings' container. The RP MAY 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 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. node, the RP address must be configured using the 'rp-address' leaf.
The model supports RP redundancy through the 'rp-redundancy' leaf. The model supports RP redundancy through the 'rp-redundancy' leaf.
How the redundancy is achieved is out of scope. How the redundancy is achieved is out of scope.
When a particular VPN using ASM requires a more optimal traffic When a particular VPN using ASM requires traffic delivery that is
delivery (e.g., requested using [RFC8299]), 'optimal-traffic- more optimal (e.g., requested per the guidance in [RFC8299]),
delivery' can be set. When set to 'true', the implementation must 'optimal-traffic-delivery' can be set. When set to 'true', the
use any mechanism to provide a more optimal traffic delivery for the implementation must use any mechanism to provide traffic delivery
customer. For example, anycast is one of the mechanisms to enhance that is more optimal for the customer. For example, anycast is one
RPs redundancy, resilience against failures, and to recover from of the mechanisms for enhancing RP redundancy, providing resilience
failures quickly. against failures, and recovering from failures quickly.
The same structure as the one depicted in Figure 30 is used when When configuring multicast-related parameters at the VPN node level
configuring multicast-related parameters at the VPN node level. When (Figure 29), the same structure as the structure depicted in
defined at the VPN node level (Figure 29), Internet Group Management Figure 30 is used. When defined at the VPN node level, Internet
Protocol (IGMP) [RFC1112][RFC2236][RFC3376], Multicast Listener Group Management Protocol (IGMP) parameters [RFC1112] [RFC2236]
Discovery (MLD) [RFC2710][RFC3810], and Protocol Independent [RFC3376], Multicast Listener Discovery (MLD) parameters [RFC2710]
Multicast (PIM) [RFC7761] parameters are applicable to all VPN [RFC3810], and Protocol Independent Multicast (PIM) parameters
network accesses of that VPN node unless corresponding nodes are [RFC7761] are applicable to all VPN network accesses of that VPN node
overridden at the VPN network access level. unless corresponding nodes are overridden at the VPN network access
level.
... ...
+--rw vpn-nodes +--rw vpn-nodes
+--rw vpn-node* [vpn-node-id] +--rw vpn-node* [vpn-node-id]
... ...
+--rw active-vpn-instance-profiles +--rw active-vpn-instance-profiles
| +--rw vpn-instance-profile* [profile-id] | +--rw vpn-instance-profile* [profile-id]
| ... | ...
| +--rw multicast {vpn-common:multicast}? | +--rw multicast {vpn-common:multicast}?
| +--rw tree-flavor* identityref | +--rw tree-flavor* identityref
| +--rw rp | +--rw rp
| | ... | | ...
| +--rw igmp {vpn-common:igmp and vpn-common:ipv4}? | +--rw igmp {vpn-common:igmp and vpn-common:ipv4}?
| | ... | | ...
| +--rw mld {vpn-common:mld and vpn-common:ipv6}? | +--rw mld {vpn-common:mld and vpn-common:ipv6}?
| | ... | | ...
| +--rw pim {vpn-common:pim}? | +--rw pim {vpn-common:pim}?
| ... | ...
Figure 29: Multicast Subtree Structure (VPN Node Level) Figure 29: Multicast Subtree Structure (VPN Node Level)
Multicast-related data nodes at the VPN network access level are Multicast-related data nodes at the VPN network access level are
shown in Figure 30. The values configured at the VPN network access shown in Figure 30. The values configured at the VPN network access
level override the values configured for the corresponding data nodes level override the values configured for the corresponding data nodes
in other levels. at other levels.
... ...
+--rw vpn-network-accesses +--rw vpn-network-accesses
+--rw vpn-network-access* [id] +--rw vpn-network-access* [id]
... ...
+--rw service +--rw service
... ...
+--rw multicast {vpn-common:multicast}? +--rw multicast {vpn-common:multicast}?
+--rw access-type? enumeration +--rw access-type? enumeration
+--rw address-family? identityref +--rw address-family? identityref
+--rw protocol-type? enumeration +--rw protocol-type? enumeration
+--rw remote-source? boolean +--rw remote-source? boolean
+--rw igmp {vpn-common:igmp}? +--rw igmp {vpn-common:igmp}?
| +--rw static-group* [group-addr] | +--rw static-group* [group-addr]
| | +--rw group-addr | | +--rw group-addr
| | rt-types:ipv4-multicast-group-address | | rt-types:ipv4-multicast-group-address
| | +--rw source-addr? | | +--rw source-addr?
| | rt-types:ipv4-multicast-source-address | | rt-types:ipv4-multicast-source-address
| +--rw max-groups? uint32 | +--rw max-groups? uint32
| +--rw max-entries? uint32 | +--rw max-entries? uint32
| +--rw max-group-sources? uint32 | +--rw max-group-sources? uint32
| +--rw version? identityref | +--rw version? identityref
| +--rw status | +--rw status
| +--rw admin-status | +--rw admin-status
| | +--rw status? identityref | | +--rw status? identityref
| | +--rw last-change? yang:date-and-time | | +--rw last-change? yang:date-and-time
| +--ro oper-status | +--ro oper-status
| +--ro status? identityref | +--ro status? identityref
| +--ro last-change? yang:date-and-time | +--ro last-change? yang:date-and-time
+--rw mld {vpn-common:mld}? +--rw mld {vpn-common:mld}?
| +--rw static-group* [group-addr] | +--rw static-group* [group-addr]
| | +--rw group-addr | | +--rw group-addr
| | rt-types:ipv6-multicast-group-address | | rt-types:ipv6-multicast-group-address
| | +--rw source-addr? | | +--rw source-addr?
| | rt-types:ipv6-multicast-source-address | | rt-types:ipv6-multicast-source-address
| +--rw max-groups? uint32 | +--rw max-groups? uint32
| +--rw max-entries? uint32 | +--rw max-entries? uint32
| +--rw max-group-sources? uint32 | +--rw max-group-sources? uint32
| +--rw version? identityref | +--rw version? identityref
| +--rw status | +--rw status
| +--rw admin-status | +--rw admin-status
| | +--rw status? identityref | | +--rw status? identityref
| | +--rw last-change? yang:date-and-time | | +--rw last-change? yang:date-and-time
| +--ro oper-status | +--ro oper-status
| +--ro status? identityref | +--ro status? identityref
skipping to change at page 59, line 41 skipping to change at line 2559
| +--rw status? identityref | +--rw status? identityref
| +--rw last-change? yang:date-and-time | +--rw last-change? yang:date-and-time
+--ro oper-status +--ro oper-status
+--ro status? identityref +--ro status? identityref
+--ro last-change? yang:date-and-time +--ro last-change? yang:date-and-time
Figure 30: Multicast Subtree Structure (VPN Network Access Level) Figure 30: Multicast Subtree Structure (VPN Network Access Level)
8. L3NM YANG Module 8. L3NM YANG Module
This module uses types defined in [RFC6991] and [RFC8343]. It also This module uses types defined in [RFC6991], [RFC8343], and
uses groupings defined in [RFC8519], [RFC8177], and [RFC8294]. [RFC9181]. It also uses groupings defined in [RFC8519], [RFC8177],
and [RFC8294].
<CODE BEGINS> file "ietf-l3vpn-ntw@2021-09-28.yang" <CODE BEGINS> file "ietf-l3vpn-ntw@2022-02-14.yang"
module ietf-l3vpn-ntw { module ietf-l3vpn-ntw {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-l3vpn-ntw"; namespace "urn:ietf:params:xml:ns:yang:ietf-l3vpn-ntw";
prefix l3nm; prefix l3nm;
import ietf-vpn-common { import ietf-vpn-common {
prefix vpn-common; prefix vpn-common;
reference reference
"RFC UUUU: A Layer 2/3 VPN Common YANG Model"; "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3
VPNs";
} }
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types, Section 4"; "RFC 6991: Common YANG Data Types, Section 4";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types, Section 3"; "RFC 6991: Common YANG Data Types, Section 3";
} }
import ietf-key-chain { import ietf-key-chain {
prefix key-chain; prefix key-chain;
reference reference
"RFC 8177: YANG Key Chain."; "RFC 8177: YANG Data Model for Key Chains";
} }
import ietf-routing-types { import ietf-routing-types {
prefix rt-types; prefix rt-types;
reference reference
"RFC 8294: Common YANG Data Types for the Routing Area"; "RFC 8294: Common YANG Data Types for the Routing Area";
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
organization organization
"IETF OPSAWG (Operations and Management Area Working Group)"; "IETF OPSAWG (Operations and Management Area Working Group)";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/opsawg/> "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
WG List: <mailto:opsawg@ietf.org> WG List: <mailto:opsawg@ietf.org>
Author: Samier Barguil Author: Samier Barguil
<mailto:samier.barguilgiraldo.ext@telefonica.com> <mailto:samier.barguilgiraldo.ext@telefonica.com>
Editor: Oscar Gonzalez de Dios Editor: Oscar Gonzalez de Dios
<mailto:oscar.gonzalezdedios@telefonica.com> <mailto:oscar.gonzalezdedios@telefonica.com>
Editor: Mohamed Boucadair Editor: Mohamed Boucadair
<mailto:mohamed.boucadair@orange.com> <mailto:mohamed.boucadair@orange.com>
Author: Luis Angel Munoz Author: Luis Angel Munoz
<mailto:luis-angel.munoz@vodafone.com> <mailto:luis-angel.munoz@vodafone.com>
Author: Alejandro Aguado Author: Alejandro Aguado
<mailto:alejandro.aguado_martin@nokia.com>"; <mailto:alejandro.aguado_martin@nokia.com>";
description description
"This YANG module defines a generic network-oriented model "This YANG module defines a generic network-oriented model
for the configuration of Layer 3 Virtual Private Networks. for the configuration of Layer 3 Virtual Private Networks.
Copyright (c) 2021 IETF Trust and the persons identified as Copyright (c) 2022 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Revised BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC 9182; see the
the RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2021-09-28 { revision 2022-02-14 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A Layer 3 VPN Network YANG Model"; "RFC 9182: A YANG Network Data Model for Layer 3 VPNs";
} }
/* Features */ /* Features */
feature msdp { feature msdp {
description description
"This feature indicates that Multicast Source Discovery Protocol "This feature indicates that Multicast Source Discovery
(MSDP) capabilities are supported by the VPN."; Protocol (MSDP) capabilities are supported by the VPN.";
reference reference
"RFC 3618: Multicast Source Discovery Protocol (MSDP)"; "RFC 3618: Multicast Source Discovery Protocol (MSDP)";
} }
/* Identities */ /* Identities */
identity address-allocation-type { identity address-allocation-type {
description description
"Base identity for address allocation type in the "Base identity for address allocation type in the
Provider Edge (PE)-Customer Edge (CE) link."; Provider Edge to Customer Edge (PE-CE) link.";
} }
identity provider-dhcp { identity provider-dhcp {
base address-allocation-type; base address-allocation-type;
description description
"The Provider's network provides a DHCP service to the customer."; "The provider's network provides a DHCP service to the
customer.";
} }
identity provider-dhcp-relay { identity provider-dhcp-relay {
base address-allocation-type; base address-allocation-type;
description description
"The Provider's network provides a DHCP relay service to the "The provider's network provides a DHCP relay service to the
customer."; customer.";
} }
identity provider-dhcp-slaac { identity provider-dhcp-slaac {
if-feature "vpn-common:ipv6"; if-feature "vpn-common:ipv6";
base address-allocation-type; base address-allocation-type;
description description
"The Provider's network provides a DHCP service to the customer "The provider's network provides a DHCP service to the
as well as IPv6 Stateless Address Autoconfiguration (SLAAC)."; customer as well as IPv6 Stateless Address
Autoconfiguration (SLAAC).";
reference reference
"RFC 4862: IPv6 Stateless Address Autoconfiguration"; "RFC 4862: IPv6 Stateless Address Autoconfiguration";
} }
identity static-address { identity static-address {
base address-allocation-type; base address-allocation-type;
description description
"The Provider's network provides static IP addressing to the "The provider's network provides static IP addressing to the
customer."; customer.";
} }
identity slaac { identity slaac {
if-feature "vpn-common:ipv6"; if-feature "vpn-common:ipv6";
base address-allocation-type; base address-allocation-type;
description description
"The Provider's network uses IPv6 SLAAC to provide addressing "The provider's network uses IPv6 SLAAC to provide
to the customer."; addressing to the customer.";
reference reference
"RFC 4862: IPv6 Stateless Address Autoconfiguration"; "RFC 4862: IPv6 Stateless Address Autoconfiguration";
} }
identity local-defined-next-hop { identity local-defined-next-hop {
description description
"Base identity of local defined next-hops."; "Base identity of local defined next hops.";
} }
identity discard { identity discard {
base local-defined-next-hop; base local-defined-next-hop;
description description
"Indicates an action to discard traffic for the "Indicates an action to discard traffic for the
corresponding destination. corresponding destination.
For example, this can be used to blackhole traffic."; For example, this can be used to black-hole traffic.";
} }
identity local-link { identity local-link {
base local-defined-next-hop; base local-defined-next-hop;
description description
"Treat traffic towards addresses within the specified next-hop "Treat traffic towards addresses within the specified
prefix as though they are connected to a local link."; next-hop prefix as though they are connected to a local
link.";
} }
identity l2-tunnel-type { identity l2-tunnel-type {
description description
"Base identity for layer-2 tunnel selection under the VPN "Base identity for Layer 2 tunnel selection under the VPN
network access."; network access.";
} }
identity pseudowire { identity pseudowire {
base l2-tunnel-type; base l2-tunnel-type;
description description
"Pseudowire tunnel termination in the VPN network access."; "Pseudowire tunnel termination in the VPN network access.";
} }
identity vpls { identity vpls {
skipping to change at page 63, line 40 skipping to change at line 2755
termination in the VPN network access."; termination in the VPN network access.";
} }
/* Typedefs */ /* Typedefs */
typedef predefined-next-hop { typedef predefined-next-hop {
type identityref { type identityref {
base local-defined-next-hop; base local-defined-next-hop;
} }
description description
"Pre-defined next-hop designation for locally generated routes."; "Predefined next-hop designation for locally generated
routes.";
} }
typedef area-address { typedef area-address {
type string { type string {
pattern '[0-9A-Fa-f]{2}(\.[0-9A-Fa-f]{4}){0,6}'; pattern '[0-9A-Fa-f]{2}(\.[0-9A-Fa-f]{4}){0,6}';
} }
description description
"This type defines the area address format."; "This type defines the area address format.";
} }
skipping to change at page 64, line 4 skipping to change at line 2768
typedef area-address { typedef area-address {
type string { type string {
pattern '[0-9A-Fa-f]{2}(\.[0-9A-Fa-f]{4}){0,6}'; pattern '[0-9A-Fa-f]{2}(\.[0-9A-Fa-f]{4}){0,6}';
} }
description description
"This type defines the area address format."; "This type defines the area address format.";
} }
/* Groupings */ /* Groupings */
grouping vpn-instance-profile { grouping vpn-instance-profile {
description description
"Grouping for data nodes that may be factorized "Grouping for data nodes that may be factorized
among many levels of the model. The grouping can among many levels of the model. The grouping can
be used to define generic profiles at the VPN service be used to define generic profiles at the VPN service
level and then referenced at the VPN node and VPN level and then referenced at the VPN node and VPN
network access levels."; network access levels.";
leaf local-as { leaf local-as {
if-feature "vpn-common:rtg-bgp"; if-feature "vpn-common:rtg-bgp";
type inet:as-number; type inet:as-number;
description description
"Provider's Autonomous System (AS) number. Used if the "Provider's Autonomous System (AS) number. Used if the
customer requests BGP routing."; customer requests BGP routing.";
} }
uses vpn-common:route-distinguisher; uses vpn-common:route-distinguisher;
list address-family { list address-family {
key "address-family"; key "address-family";
description description
"Set of per-address family parameters."; "Set of parameters per address family.";
leaf address-family { leaf address-family {
type identityref { type identityref {
base vpn-common:address-family; base vpn-common:address-family;
} }
description description
"Indicates the address family (IPv4 and/or IPv6)."; "Indicates the address family (IPv4 and/or IPv6).";
} }
container vpn-targets { container vpn-targets {
description description
"Set of route targets to match for import and export routes "Set of route targets to match for import and export
to/from VRF."; routes to/from VRF.";
uses vpn-common:vpn-route-targets; uses vpn-common:vpn-route-targets;
} }
list maximum-routes { list maximum-routes {
key "protocol"; key "protocol";
description description
"Defines the maximum number of routes for the VRF."; "Defines the maximum number of routes for VRF.";
leaf protocol { leaf protocol {
type identityref { type identityref {
base vpn-common:routing-protocol-type; base vpn-common:routing-protocol-type;
} }
description description
"Indicates the routing protocol. 'any' value can "Indicates the routing protocol. A value of 'any'
be used to identify a limit that will apply for can be used to identify a limit that will apply for
each active routing protocol."; each active routing protocol.";
} }
leaf maximum-routes { leaf maximum-routes {
type uint32; type uint32;
description description
"Indicates the maximum number of prefixes that the "Indicates the maximum number of prefixes that VRF can
VRF can accept for this address family and protocol."; accept for this address family and protocol.";
} }
} }
} }
container multicast { container multicast {
if-feature "vpn-common:multicast"; if-feature "vpn-common:multicast";
description description
"Global multicast parameters."; "Global multicast parameters.";
leaf tree-flavor { leaf tree-flavor {
type identityref { type identityref {
base vpn-common:multicast-tree-type; base vpn-common:multicast-tree-type;
} }
description description
"Type of the multicast tree to be used."; "Type of the multicast tree to be used.";
} }
container rp { container rp {
description description
"Rendezvous Point (RP) parameters."; "Rendezvous Point (RP) parameters.";
container rp-group-mappings { container rp-group-mappings {
description description
"RP-to-group mappings parameters."; "RP-to-group mapping parameters.";
list rp-group-mapping { list rp-group-mapping {
key "id"; key "id";
description description
"List of RP-to-group mappings."; "List of RP-to-group mappings.";
leaf id { leaf id {
type uint16; type uint16;
description description
"Unique identifier for the mapping."; "Unique identifier for the mapping.";
} }
container provider-managed { container provider-managed {
description description
"Parameters for a provider-managed RP."; "Parameters for a provider-managed RP.";
leaf enabled { leaf enabled {
type boolean; type boolean;
default "false"; default "false";
description description
"Set to true if the Rendezvous Point (RP) "Set to 'true' if the RP must be a
must be a provider-managed node. Set to provider-managed node. Set to 'false' if it is
false if it is a customer-managed node."; a customer-managed node.";
} }
leaf rp-redundancy { leaf rp-redundancy {
type boolean; type boolean;
default "false"; default "false";
description description
"If set to true, it indicates that a redundancy "If set to 'true', it indicates that a
mechanism for the RP is required."; redundancy mechanism for the RP is required.";
} }
leaf optimal-traffic-delivery { leaf optimal-traffic-delivery {
type boolean; type boolean;
default "false"; default "false";
description description
"If set to true, the service provider (SP) must "If set to 'true', the service provider (SP)
ensure that the traffic uses an optimal path. must ensure that the traffic uses an optimal
An SP may use Anycast RP or RP-tree-to-SPT path. An SP may use Anycast RP or
RP-tree-to-SPT ('SPT' is 'shortest path tree')
switchover architectures."; switchover architectures.";
} }
container anycast { container anycast {
when "../rp-redundancy = 'true' and when "../rp-redundancy = 'true' and
../optimal-traffic-delivery = 'true'" { ../optimal-traffic-delivery = 'true'" {
description description
"Only applicable if both RP redundancy and "Only applicable if both RP redundancy and
delivery through optimal path are delivery through an optimal path are
activated."; activated.";
} }
description description
"PIM Anycast-RP parameters."; "PIM Anycast-RP parameters.";
leaf local-address { leaf local-address {
type inet:ip-address; type inet:ip-address;
description description
"IP local address for PIM RP. Usually, it "IP local address for the PIM RP. Usually
corresponds to the Router ID or the corresponds to the Router ID or the
primary address."; primary address.";
} }
leaf-list rp-set-address { leaf-list rp-set-address {
type inet:ip-address; type inet:ip-address;
description description
"Specifies the IP address of other RP routers "Specifies the IP address of other RP routers
that share the same RP IP address."; that share the same RP IP address.";
} }
} }
} }
leaf rp-address { leaf rp-address {
when "../provider-managed/enabled = 'false'" { when "../provider-managed/enabled = 'false'" {
description description
"Relevant when the RP is not "Relevant when the RP is not managed by the
provider-managed."; provider.";
} }
type inet:ip-address; type inet:ip-address;
mandatory true; mandatory true;
description description
"Defines the address of the RP. "Defines the address of the RP.
Used if the RP is customer-managed."; Used if the RP is managed by the customer.";
} }
container groups { container groups {
description description
"Multicast groups associated with the RP."; "Multicast groups associated with the RP.";
list group { list group {
key "id"; key "id";
description description
"List of multicast groups."; "List of multicast groups.";
leaf id { leaf id {
type uint16; type uint16;
skipping to change at page 68, line 12 skipping to change at line 2970
base vpn-common:multicast-rp-discovery-type; base vpn-common:multicast-rp-discovery-type;
} }
default "vpn-common:static-rp"; default "vpn-common:static-rp";
description description
"Type of RP discovery used."; "Type of RP discovery used.";
} }
container bsr-candidates { container bsr-candidates {
when "derived-from-or-self(../rp-discovery-type, " when "derived-from-or-self(../rp-discovery-type, "
+ "'vpn-common:bsr-rp')" { + "'vpn-common:bsr-rp')" {
description description
"Only applicable if discovery type is BSR-RP."; "Only applicable if the discovery type
is 'bsr-rp'.";
} }
description description
"Container for the customer Bootstrap Router (BSR) "Container for the customer Bootstrap Router (BSR)
candidate's addresses."; candidate's addresses.";
leaf-list bsr-candidate-address { leaf-list bsr-candidate-address {
type inet:ip-address; type inet:ip-address;
description description
"Specifies the address of candidate BSR."; "Specifies the address of the candidate BSR.";
} }
} }
} }
} }
container igmp { container igmp {
if-feature "vpn-common:igmp and vpn-common:ipv4"; if-feature "vpn-common:igmp and vpn-common:ipv4";
description description
"Includes IGMP-related parameters."; "Includes IGMP-related parameters.";
list static-group { list static-group {
key "group-addr"; key "group-addr";
description description
"Multicast static source/group associated to the "Multicast static source/group associated with the
IGMP session."; IGMP session.";
leaf group-addr { leaf group-addr {
type rt-types:ipv4-multicast-group-address; type rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPv4 address."; "Multicast group IPv4 address.";
} }
leaf source-addr { leaf source-addr {
type rt-types:ipv4-multicast-source-address; type rt-types:ipv4-multicast-source-address;
description description
"Multicast source IPv4 address."; "Multicast source IPv4 address.";
skipping to change at page 69, line 16 skipping to change at line 3023
} }
leaf version { leaf version {
type identityref { type identityref {
base vpn-common:igmp-version; base vpn-common:igmp-version;
} }
default "vpn-common:igmpv2"; default "vpn-common:igmpv2";
description description
"Indicates the IGMP version."; "Indicates the IGMP version.";
reference reference
"RFC 1112: Host Extensions for IP Multicasting "RFC 1112: Host Extensions for IP Multicasting
RFC 2236: Internet Group Management Protocol, Version 2 RFC 2236: Internet Group Management Protocol,
RFC 3376: Internet Group Management Protocol, Version 3"; Version 2
RFC 3376: Internet Group Management Protocol,
Version 3";
} }
} }
container mld { container mld {
if-feature "vpn-common:mld and vpn-common:ipv6"; if-feature "vpn-common:mld and vpn-common:ipv6";
description description
"Includes MLD-related parameters."; "Includes MLD-related parameters.";
list static-group { list static-group {
key "group-addr"; key "group-addr";
description description
"Multicast static source/group associated with the "Multicast static source/group associated with the
skipping to change at page 70, line 11 skipping to change at line 3068
} }
leaf version { leaf version {
type identityref { type identityref {
base vpn-common:mld-version; base vpn-common:mld-version;
} }
default "vpn-common:mldv2"; default "vpn-common:mldv2";
description description
"Indicates the MLD protocol version."; "Indicates the MLD protocol version.";
reference reference
"RFC 2710: Multicast Listener Discovery (MLD) for IPv6 "RFC 2710: Multicast Listener Discovery (MLD) for IPv6
RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) RFC 3810: Multicast Listener Discovery Version 2
for IPv6"; (MLDv2) for IPv6";
} }
} }
container pim { container pim {
if-feature "vpn-common:pim"; if-feature "vpn-common:pim";
description description
"Only applies when protocol type is PIM."; "Only applies when the protocol type is 'pim'.";
leaf hello-interval { leaf hello-interval {
type rt-types:timer-value-seconds16; type rt-types:timer-value-seconds16;
default "30"; default "30";
description description
"PIM hello-messages interval. If set to "Interval between PIM Hello messages. If set to
'infinity' or 'not-set', no periodic 'infinity' or 'not-set', no periodic Hello messages
Hello messages are sent."; are sent.";
reference reference
"RFC 7761: Protocol Independent Multicast - Sparse "RFC 7761: Protocol Independent Multicast - Sparse
Mode (PIM-SM): Protocol Specification (Revised), Mode (PIM-SM): Protocol Specification
Section 4.11"; (Revised), Section 4.11
RFC 8294: Common YANG Data Types for the Routing
Area";
} }
leaf dr-priority { leaf dr-priority {
type uint32; type uint32;
default "1"; default "1";
description description
"Indicates the preference in the Designated Router (DR) "Indicates the preference associated with the
election process. A larger value has a higher Designated Router (DR) election process. A larger
priority over a smaller value."; value has a higher priority over a smaller value.";
reference reference
"RFC 7761: Protocol Independent Multicast - Sparse "RFC 7761: Protocol Independent Multicast - Sparse
Mode (PIM-SM): Protocol Specification (Revised), Mode (PIM-SM): Protocol Specification
Section 4.3.2"; (Revised), Section 4.3.2";
} }
} }
} }
} }
/* Main Blocks */ /* Main Blocks */
/* Main l3vpn-ntw */ /* Main l3vpn-ntw */
container l3vpn-ntw { container l3vpn-ntw {
description description
"Main container for L3VPN services management."; "Main container for management of Layer 3 Virtual Private
Network (L3VPN) services.";
container vpn-profiles { container vpn-profiles {
description description
"Contains a set of valid VPN profiles to reference in the VPN "Contains a set of valid VPN profiles to reference
service."; in the VPN service.";
uses vpn-common:vpn-profile-cfg; uses vpn-common:vpn-profile-cfg;
} }
container vpn-services { container vpn-services {
description description
"Container for the VPN services."; "Container for the VPN services.";
list vpn-service { list vpn-service {
key "vpn-id"; key "vpn-id";
description description
"List of VPN services."; "List of VPN services.";
uses vpn-common:vpn-description; uses vpn-common:vpn-description;
leaf parent-service-id { leaf parent-service-id {
type vpn-common:vpn-id; type vpn-common:vpn-id;
description description
"Pointer to the parent service, if any. "Pointer to the parent service, if any.
A parent service can be an L3SM, a slice request, a VPN+ A parent service can be an L3SM, a slice request,
service, etc."; a VPN+ service, etc.";
} }
leaf vpn-type { leaf vpn-type {
type identityref { type identityref {
base vpn-common:service-type; base vpn-common:service-type;
} }
description description
"Indicates the service type."; "Indicates the service type.";
} }
leaf vpn-service-topology { leaf vpn-service-topology {
type identityref { type identityref {
skipping to change at page 72, line 19 skipping to change at line 3175
} }
default "vpn-common:any-to-any-role"; default "vpn-common:any-to-any-role";
description description
"Role of the VPN node in the VPN."; "Role of the VPN node in the VPN.";
} }
uses vpn-instance-profile; uses vpn-instance-profile;
} }
} }
container underlay-transport { container underlay-transport {
description description
"Container for underlay transport."; "Container for the underlay transport.";
uses vpn-common:underlay-transport; uses vpn-common:underlay-transport;
} }
container external-connectivity { container external-connectivity {
if-feature "vpn-common:external-connectivity"; if-feature "vpn-common:external-connectivity";
description description
"Container for external connectivity."; "Container for external connectivity.";
choice profile { choice profile {
description description
"Choice for the external connectivity profile."; "Choice for the external connectivity profile.";
case profile { case profile {
leaf profile-name { leaf profile-name {
type leafref { type leafref {
path "/l3vpn-ntw/vpn-profiles" path "/l3vpn-ntw/vpn-profiles"
+ "/valid-provider-identifiers" + "/valid-provider-identifiers"
+ "/external-connectivity-identifier/id"; + "/external-connectivity-identifier/id";
} }
description description
"Name of the service provider's profile to be applied "Name of the service provider's profile to be
at the VPN service level."; applied at the VPN service level.";
} }
} }
} }
} }
container vpn-nodes { container vpn-nodes {
description description
"Container for VPN nodes."; "Container for VPN nodes.";
list vpn-node { list vpn-node {
key "vpn-node-id"; key "vpn-node-id";
description description
skipping to change at page 73, line 15 skipping to change at line 3219
"An identifier of the VPN node."; "An identifier of the VPN node.";
} }
leaf description { leaf description {
type string; type string;
description description
"Textual description of the VPN node."; "Textual description of the VPN node.";
} }
leaf ne-id { leaf ne-id {
type string; type string;
description description
"Unique identifier of the network element where the VPN "Unique identifier of the network element where
node is deployed."; the VPN node is deployed.";
} }
leaf local-as { leaf local-as {
if-feature "vpn-common:rtg-bgp"; if-feature "vpn-common:rtg-bgp";
type inet:as-number; type inet:as-number;
description description
"Provider's AS number in case the customer requests BGP "Provider's AS number. Used if the customer
routing."; requests BGP routing.";
} }
leaf router-id { leaf router-id {
type rt-types:router-id; type rt-types:router-id;
description description
"A 32-bit number in the dotted-quad format that is used "A 32-bit number in the dotted-quad format that is
to uniquely identify a node within an autonomous used to uniquely identify a node within an AS.
system. This identifier is used for both IPv4 and This identifier is used for both IPv4 and IPv6.";
IPv6.";
} }
container active-vpn-instance-profiles { container active-vpn-instance-profiles {
description description
"Container for active VPN instance profiles."; "Container for active VPN instance profiles.";
list vpn-instance-profile { list vpn-instance-profile {
key "profile-id"; key "profile-id";
description description
"Includes a list of active VPN instance profiles."; "Includes a list of active VPN instance
profiles.";
leaf profile-id { leaf profile-id {
type leafref { type leafref {
path "/l3vpn-ntw/vpn-services/vpn-service" path "/l3vpn-ntw/vpn-services/vpn-service"
+ "/vpn-instance-profiles/vpn-instance-profile" + "/vpn-instance-profiles"
+ "/profile-id"; + "/vpn-instance-profile/profile-id";
} }
description description
"Node's active VPN instance profile."; "Node's active VPN instance profile.";
} }
list router-id { list router-id {
key "address-family"; key "address-family";
description description
"Router-id per address family."; "Router ID per address family.";
leaf address-family { leaf address-family {
type identityref { type identityref {
base vpn-common:address-family; base vpn-common:address-family;
} }
description description
"Indicates the address family for which the "Indicates the address family for which the
Router-ID applies."; Router ID applies.";
} }
leaf router-id { leaf router-id {
type inet:ip-address; type inet:ip-address;
description description
"The router-id information can be an IPv4 or IPv6 "The 'router-id' information can be an IPv4
address. This can be used, for example, to or IPv6 address. This can be used,
configure an IPv6 address as a router-id for example, to configure an IPv6 address
when such capability is supported by underlay as a Router ID when such a capability is
routers. In such case, the configured value supported by underlay routers. In such a
overrides the generic one defined at the VPN case, the configured value overrides the
node level."; generic value defined at the VPN node
level.";
} }
} }
uses vpn-instance-profile; uses vpn-instance-profile;
} }
} }
container msdp { container msdp {
if-feature "msdp"; if-feature "msdp";
description description
"Includes MSDP-related parameters."; "Includes MSDP-related parameters.";
leaf peer { leaf peer {
skipping to change at page 75, line 18 skipping to change at line 3319
type vpn-common:vpn-id; type vpn-common:vpn-id;
description description
"Identifier for the network access."; "Identifier for the network access.";
} }
leaf interface-id { leaf interface-id {
type string; type string;
description description
"Identifier for the physical or logical "Identifier for the physical or logical
interface. interface.
The identification of the sub-interface The identification of the sub-interface
is provided at the connection and/or IP is provided at the connection level and/or
connection levels."; the IP connection level.";
} }
leaf description { leaf description {
type string; type string;
description description
"Textual description of the network access."; "Textual description of the network access.";
} }
leaf vpn-network-access-type { leaf vpn-network-access-type {
type identityref { type identityref {
base vpn-common:site-network-access-type; base vpn-common:site-network-access-type;
} }
default "vpn-common:point-to-point"; default "vpn-common:point-to-point";
description description
"Describes the type of connection, e.g., "Describes the type of connection, e.g.,
point-to-point."; point to point.";
} }
leaf vpn-instance-profile { leaf vpn-instance-profile {
type leafref { type leafref {
path "/l3vpn-ntw/vpn-services/vpn-service/vpn-nodes" path "/l3vpn-ntw/vpn-services/vpn-service"
+ "/vpn-node/active-vpn-instance-profiles" + "/vpn-nodes/vpn-node"
+ "/active-vpn-instance-profiles"
+ "/vpn-instance-profile/profile-id"; + "/vpn-instance-profile/profile-id";
} }
description description
"An identifier of an active VPN instance profile."; "An identifier of an active VPN instance
profile.";
} }
uses vpn-common:service-status; uses vpn-common:service-status;
container connection { container connection {
description description
"Defines layer 2 protocols and parameters that are "Defines Layer 2 protocols and parameters that
required to enable connectivity between the PE are required to enable connectivity between
and the CE."; the PE and the CE.";
container encapsulation { container encapsulation {
description description
"Container for layer 2 encapsulation."; "Container for Layer 2 encapsulation.";
leaf type { leaf type {
type identityref { type identityref {
base vpn-common:encapsulation-type; base vpn-common:encapsulation-type;
} }
default "vpn-common:priority-tagged"; default "vpn-common:priority-tagged";
description description
"Encapsulation type. By default, the type of "Encapsulation type. By default, the type
the tagged interface is 'priority-tagged'."; of the tagged interface is
'priority-tagged'.";
} }
container dot1q { container dot1q {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:dot1q')" { + "'vpn-common:dot1q')" {
description description
"Only applies when the type of the "Only applies when the type of the
tagged interface is 'dot1q'."; tagged interface is 'dot1q'.";
} }
description description
"Tagged interface."; "Tagged interface.";
leaf tag-type { leaf tag-type {
type identityref { type identityref {
base vpn-common:tag-type; base vpn-common:tag-type;
} }
default "vpn-common:c-vlan"; default "vpn-common:c-vlan";
description description
"Tag type. By default, the tag type is "Tag type. By default, the tag type is
'c-vlan'."; 'c-vlan'.";
} }
leaf cvlan-id { leaf cvlan-id {
type uint16 { type uint16 {
range "1..4094"; range "1..4094";
} }
description description
"VLAN identifier."; "VLAN identifier.";
} }
} }
container priority-tagged { container priority-tagged {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:priority-tagged')" { + "'vpn-common:priority-tagged')" {
description description
"Only applies when the type of the "Only applies when the type of
tagged interface is 'priority-tagged'."; the tagged interface is
'priority-tagged'.";
} }
description description
"Priority tagged."; "Priority tagged.";
leaf tag-type { leaf tag-type {
type identityref { type identityref {
base vpn-common:tag-type; base vpn-common:tag-type;
} }
default "vpn-common:c-vlan"; default "vpn-common:c-vlan";
description description
"Tag type. By default, the tag type is "Tag type. By default, the tag type is
'c-vlan'."; 'c-vlan'.";
} }
} }
container qinq { container qinq {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:qinq')" { + "'vpn-common:qinq')" {
description description
"Only applies when the type of the tagged "Only applies when the type of the
interface is QinQ."; tagged interface is 'qinq'.";
} }
description description
"Includes QinQ parameters."; "Includes QinQ parameters.";
leaf tag-type { leaf tag-type {
type identityref { type identityref {
base vpn-common:tag-type; base vpn-common:tag-type;
} }
default "vpn-common:s-c-vlan"; default "vpn-common:s-c-vlan";
description description
"Tag type. By default, the tag type is "Tag type.";
'c-s-vlan'.";
} }
leaf svlan-id { leaf svlan-id {
type uint16; type uint16;
mandatory true; mandatory true;
description description
"S-VLAN identifier."; "Service VLAN (S-VLAN) identifier.";
} }
leaf cvlan-id { leaf cvlan-id {
type uint16; type uint16;
mandatory true; mandatory true;
description description
"C-VLAN identifier."; "Customer VLAN (C-VLAN) identifier.";
} }
} }
} }
choice l2-service { choice l2-service {
description description
"The layer 2 connectivity service can be "The Layer 2 connectivity service can be
provided by indicating a pointer to an L2VPN or provided by indicating a pointer to an
by specifying a layer 2 tunnel service."; L2VPN or by specifying a Layer 2 tunnel
service.";
container l2-tunnel-service { container l2-tunnel-service {
description description
"Defines a layer 2 tunnel termination. "Defines a Layer 2 tunnel termination.
It is only applicable when a tunnel is It is only applicable when a tunnel is
required. The supported values are: required. The supported values are
pseudowire, VPLS, and VXLAN. Other 'pseudowire', 'vpls', and 'vxlan'. Other
values may be defined, if needed."; values may be defined, if needed.";
leaf type { leaf type {
type identityref { type identityref {
base l2-tunnel-type; base l2-tunnel-type;
} }
description description
"Selects the tunnel termiantion option for "Selects the tunnel termination option
each vpn-network-access."; for each VPN network access.";
} }
container pseudowire { container pseudowire {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'pseudowire')" { + "'pseudowire')" {
description description
"Only applies when the type of the layer 2 "Only applies when the Layer 2 service
service type is pseudowire ."; type is 'pseudowire'.";
} }
description description
"Includes pseudowire termination parameters."; "Includes pseudowire termination
parameters.";
leaf vcid { leaf vcid {
type uint32; type uint32;
description description
"Indicates a PW or VC identifier."; "Indicates a pseudowire (PW) or
virtual circuit (VC) identifier.";
} }
leaf far-end { leaf far-end {
type union { type union {
type uint32; type uint32;
type inet:ip-address; type inet:ip-address;
} }
description description
"Neighbor reference."; "Neighbor reference.";
reference reference
"RFC 8077: Pseudowire Setup and Maintenance "RFC 8077: Pseudowire Setup and
Using the Label Distribution Maintenance Using the Label
Protocol (LDP), Section 6.1"; Distribution Protocol
(LDP), Section 6.1";
} }
} }
container vpls { container vpls {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpls')" { + "'vpls')" {
description description
"Only applies when the type of the layer 2 "Only applies when the Layer 2 service
service type is VPLS."; type is 'vpls'.";
} }
description description
"VPLS termination parameters."; "VPLS termination parameters.";
leaf vcid { leaf vcid {
type uint32; type uint32;
description description
"VC Identifier."; "VC identifier.";
} }
leaf-list far-end { leaf-list far-end {
type union { type union {
type uint32; type uint32;
type inet:ip-address; type inet:ip-address;
} }
description description
"Neighbor reference."; "Neighbor reference.";
} }
} }
container vxlan { container vxlan {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vxlan')" { + "'vxlan')" {
description description
"Only applies when the type of the layer 2 "Only applies when the Layer 2 service
service type is VXLAN."; type is 'vxlan'.";
} }
description description
"VXLAN termination parameters."; "VXLAN termination parameters.";
leaf vni-id { leaf vni-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"VXLAN Network Identifier (VNI)."; "VXLAN Network Identifier (VNI).";
} }
leaf peer-mode { leaf peer-mode {
type identityref { type identityref {
base vpn-common:vxlan-peer-mode; base vpn-common:vxlan-peer-mode;
} }
default "vpn-common:static-mode"; default "vpn-common:static-mode";
description description
"Specifies the VXLAN access mode. By "Specifies the VXLAN access mode. By
default, the peer mode is set to default, the peer mode is set to
'static-mode'."; 'static-mode'.";
} }
leaf-list peer-ip-address { leaf-list peer-ip-address {
type inet:ip-address; type inet:ip-address;
description description
"List of peer's IP addresses."; "List of a peer's IP addresses.";
} }
} }
} }
case l2vpn { case l2vpn {
leaf l2vpn-id { leaf l2vpn-id {
type vpn-common:vpn-id; type vpn-common:vpn-id;
description description
"Indicates the L2VPN service associated with "Indicates the L2VPN service associated
an Integrated Routing and Bridging (IRB) with an Integrated Routing and Bridging
interface."; (IRB) interface.";
} }
} }
} }
leaf l2-termination-point { leaf l2-termination-point {
type string; type string;
description description
"Specifies a reference to a local layer 2 "Specifies a reference to a local Layer 2
termination point such as a layer 2 termination point, such as a Layer 2
sub-interface."; sub-interface.";
} }
leaf local-bridge-reference { leaf local-bridge-reference {
type string; type string;
description description
"Specifies a local bridge reference to "Specifies a local bridge reference to
accommodate, for example, implementations accommodate, for example, implementations
that require internal bridging. that require internal bridging.
A reference may be a local bridge domain."; A reference may be a local bridge domain.";
} }
leaf bearer-reference { leaf bearer-reference {
if-feature "vpn-common:bearer-reference"; if-feature "vpn-common:bearer-reference";
type string; type string;
description description
"This is an internal reference for the service "This is an internal reference for the
provider to identify the bearer associated service provider to identify the bearer
with this VPN."; associated with this VPN.";
} }
container lag-interface { container lag-interface {
if-feature "vpn-common:lag-interface"; if-feature "vpn-common:lag-interface";
description description
"Container of LAG interface attributes "Container for configuration of Link
configuration."; Aggregation Group (LAG) interface
attributes.";
leaf lag-interface-id { leaf lag-interface-id {
type string; type string;
description description
"LAG interface identifier."; "LAG interface identifier.";
} }
container member-link-list { container member-link-list {
description description
"Container of Member link list."; "Container for the member link list.";
list member-link { list member-link {
key "name"; key "name";
description description
"Member link."; "Member link.";
leaf name { leaf name {
type string; type string;
description description
"Member link name."; "Member link name.";
} }
} }
} }
} }
} }
container ip-connection { container ip-connection {
description description
"Defines IP connection parameters."; "Defines IP connection parameters.";
leaf l3-termination-point { leaf l3-termination-point {
type string; type string;
description description
"Specifies a reference to a local layer 3 "Specifies a reference to a local Layer 3
termination point such as a bridge domain termination point, such as a bridge domain
interface."; interface.";
} }
container ipv4 { container ipv4 {
if-feature "vpn-common:ipv4"; if-feature "vpn-common:ipv4";
description description
"IPv4-specific parameters."; "IPv4-specific parameters.";
leaf local-address { leaf local-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"The IP address used at the provider's "The IP address used at the provider's
skipping to change at page 81, line 46 skipping to change at line 3643
description description
"Subnet prefix length expressed in bits. "Subnet prefix length expressed in bits.
It is applied to both local and customer It is applied to both local and customer
addresses."; addresses.";
} }
leaf address-allocation-type { leaf address-allocation-type {
type identityref { type identityref {
base address-allocation-type; base address-allocation-type;
} }
must "not(derived-from-or-self(current(), " must "not(derived-from-or-self(current(), "
+ "'slaac') or derived-from-or-self(current()," + "'slaac') or "
+ " 'provider-dhcp-slaac'))" { + "derived-from-or-self(current(), "
error-message + "'provider-dhcp-slaac'))" {
"SLAAC is only applicable to IPv6."; error-message "SLAAC is only applicable "
+ "to IPv6.";
} }
description description
"Defines how addresses are allocated to the "Defines how addresses are allocated to
peer site. the peer site.
If there is no value for the address If there is no value for the address
allocation type, then IPv4 addressing is not allocation type, then IPv4 addressing
enabled."; is not enabled.";
} }
choice allocation-type { choice allocation-type {
description description
"Choice of the IPv4 address allocation."; "Choice of the IPv4 address allocation.";
case provider-dhcp { case provider-dhcp {
description description
"DHCP allocated addresses related "Parameters related to DHCP-allocated
parameters. IP addresses are allocated addresses. IP addresses are allocated
by DHCP that is operated by the provider"; by DHCP, which is provided by the
operator.";
leaf dhcp-service-type { leaf dhcp-service-type {
type enumeration { type enumeration {
enum server { enum server {
description description
"Local DHCP server."; "Local DHCP server.";
} }
enum relay { enum relay {
description description
"Local DHCP relay. DHCP requests are "Local DHCP relay. DHCP requests
relayed to a provider's server."; are relayed to a provider's
server.";
} }
} }
description description
"Indicates the type of DHCP service to "Indicates the type of DHCP service to
be enabled on this access."; be enabled on this access.";
} }
choice service-type { choice service-type {
description description
"Choice based on the DHCP service type."; "Choice based on the DHCP service
type.";
case relay { case relay {
description description
"Container for list of provider's DHCP "Container for a list of the
servers (i.e., dhcp-service-type is set provider's DHCP servers (i.e.,
to relay)."; 'dhcp-service-type' is set to
'relay').";
leaf-list server-ip-address { leaf-list server-ip-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 addresses of the provider's DHCP "IPv4 addresses of the provider's
server to use by the local DHCP DHCP server, for use by the local
relay."; DHCP relay.";
} }
} }
case server { case server {
description description
"A choice about how addresses are assigned "A choice for how addresses are
when a local DHCP server is enabled."; assigned when a local DHCP server
is enabled.";
choice address-assign { choice address-assign {
default "number"; default "number";
description description
"Choice for how IPv4 addresses are "A choice for how IPv4 addresses
assigned."; are assigned.";
case number { case number {
leaf number-of-dynamic-address { leaf number-of-dynamic-address {
type uint16; type uint16;
default "1"; default "1";
description description
"Specifies the number of IP "Specifies the number of IP
addresses to be assigned to the addresses to be assigned to
customer on this access."; the customer on this
access.";
} }
} }
case explicit { case explicit {
container customer-addresses { container customer-addresses {
description description
"Container for customer "Container for customer
addresses to be allocated addresses to be allocated
using DHCP."; using DHCP.";
list address-pool { list address-pool {
key "pool-id"; key "pool-id";
description description
"Describes IP addresses to be "Describes IP addresses to
allocated by DHCP. be allocated by DHCP.
When only start-address is When only 'start-address'
present, it represents a single is present, it represents a
address. single address.
When both start-address and When both 'start-address'
end-address are specified, it and 'end-address' are
implies a range inclusive of both specified, it implies a
range inclusive of both
addresses."; addresses.";
leaf pool-id { leaf pool-id {
type string; type string;
description description
"A pool identifier for the "A pool identifier for the
address range from start- address range from
address to end-address."; 'start-address' to
'end-address'.";
} }
leaf start-address { leaf start-address {
type inet:ipv4-address; type inet:ipv4-address;
mandatory true; mandatory true;
description description
"Indicates the first address "Indicates the first
in the pool."; address in the pool.";
} }
leaf end-address { leaf end-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Indicates the last address "Indicates the last
in the pool."; address in the pool.";
} }
} }
} }
} }
} }
} }
} }
} }
case dhcp-relay { case dhcp-relay {
description description
"DHCP relay is provided by the operator."; "The DHCP relay is provided by the
operator.";
container customer-dhcp-servers { container customer-dhcp-servers {
description description
"Container for a list of customer's DHCP "Container for a list of the
servers."; customer's DHCP servers.";
leaf-list server-ip-address { leaf-list server-ip-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 addresses of the customer's DHCP "IPv4 addresses of the customer's
server."; DHCP server.";
} }
} }
} }
case static-addresses { case static-addresses {
description description
"Lists the IPv4 addresses that are used."; "Lists the IPv4 addresses that are
used.";
leaf primary-address { leaf primary-address {
type leafref { type leafref {
path "../address/address-id"; path "../address/address-id";
} }
description description
"Primary address of the connection."; "Primary address of the connection.";
} }
list address { list address {
key "address-id"; key "address-id";
description description
"Lists the IPv4 addresses that are used."; "Lists the IPv4 addresses that are
used.";
leaf address-id { leaf address-id {
type string; type string;
description description
"An identifier of the static IPv4 "An identifier of the static IPv4
address."; address.";
} }
leaf customer-address { leaf customer-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 address at the customer side."; "IPv4 address of the customer
side.";
} }
} }
} }
} }
} }
container ipv6 { container ipv6 {
if-feature "vpn-common:ipv6"; if-feature "vpn-common:ipv6";
description description
"IPv6-specific parameters."; "IPv6-specific parameters.";
leaf local-address { leaf local-address {
skipping to change at page 85, line 47 skipping to change at line 3849
base address-allocation-type; base address-allocation-type;
} }
description description
"Defines how addresses are allocated. "Defines how addresses are allocated.
If there is no value for the address If there is no value for the address
allocation type, then IPv6 addressing is allocation type, then IPv6 addressing is
disabled."; disabled.";
} }
choice allocation-type { choice allocation-type {
description description
"A choice based on the IPv6 allocation type."; "A choice based on the IPv6 allocation
type.";
container provider-dhcp { container provider-dhcp {
when "derived-from-or-self(../address-allo" when "derived-from-or-self(../address-allo"
+ "cation-type, 'provider-dhcp') " + "cation-type, 'provider-dhcp') or "
+ "or derived-from-or-self(../address-allo" + "derived-from-or-self(../address-allo"
+ "cation-type, 'provider-dhcp-slaac')" { + "cation-type, 'provider-dhcp-slaac')" {
description description
"Only applies when addresses are "Only applies when addresses are
allocated by DHCPv6 provided by the allocated by DHCPv6 as provided by
operator."; the operator.";
} }
description description
"DHCPv6 allocated addresses related "Parameters related to DHCP-allocated
parameters."; addresses.";
leaf dhcp-service-type { leaf dhcp-service-type {
type enumeration { type enumeration {
enum server { enum server {
description description
"Local DHCPv6 server."; "Local DHCPv6 server.";
} }
enum relay { enum relay {
description description
"DHCPv6 relay."; "DHCPv6 relay.";
} }
} }
description description
"Indicates the type of the DHCPv6 service to "Indicates the type of the DHCPv6
be enabled on this access."; service to be enabled on this
access.";
} }
choice service-type { choice service-type {
description description
"Choice based on the DHCPv6 service type."; "Choice based on the DHCPv6 service
type.";
case relay { case relay {
leaf-list server-ip-address { leaf-list server-ip-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 addresses of the provider's "IPv6 addresses of the provider's
DHCPv6 server."; DHCPv6 server.";
} }
} }
case server { case server {
choice address-assign { choice address-assign {
default "number"; default "number";
description description
"Choice about how IPv6 prefixes are "Choice for how IPv6 prefixes are
assigned by the DHCPv6 server."; assigned by the DHCPv6 server.";
case number { case number {
leaf number-of-dynamic-address { leaf number-of-dynamic-address {
type uint16; type uint16;
default "1"; default "1";
description description
"Describes the number of IPv6 "Describes the number of IPv6
prefixes that are allocated to prefixes that are allocated
the customer on this access."; to the customer on this
access.";
} }
} }
case explicit { case explicit {
container customer-addresses { container customer-addresses {
description description
"Container for customer IPv6 "Container for customer IPv6
addresses allocated by DHCPv6."; addresses allocated by
DHCPv6.";
list address-pool { list address-pool {
key "pool-id"; key "pool-id";
description description
"Describes IPv6 addresses "Describes IPv6 addresses
allocated by DHCPv6. allocated by DHCPv6.
When only start-address is When only 'start-address'
present, it represents a single is present, it represents a
address. single address.
When both start-address and When both 'start-address'
end-address are specified, it and 'end-address' are
implies a range inclusive of specified, it implies a
both addresses."; range inclusive of both
addresses.";
leaf pool-id { leaf pool-id {
type string; type string;
description description
"Pool identifier for the address "A pool identifier for the
range from identified by start- address range from
address and end-address."; 'start-address' to
'end-address'.";
} }
leaf start-address { leaf start-address {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description description
"Indicates the first address."; "Indicates the first
address.";
} }
leaf end-address { leaf end-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Indicates the last address."; "Indicates the last
address.";
} }
} }
} }
} }
} }
} }
} }
} }
case dhcp-relay { case dhcp-relay {
description description
"DHCPv6 relay provided by the operator."; "DHCPv6 relay provided by the
operator.";
container customer-dhcp-servers { container customer-dhcp-servers {
description description
"Container for a list of customer DHCP "Container for a list of the
servers."; customer's DHCP servers.";
leaf-list server-ip-address { leaf-list server-ip-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Contains the IP addresses of the customer "Contains the IP addresses of the
DHCPv6 server."; customer's DHCPv6 server.";
} }
} }
} }
case static-addresses { case static-addresses {
description description
"IPv6-specific parameters for static "IPv6-specific parameters for static
allocation."; allocation.";
leaf primary-address { leaf primary-address {
type leafref { type leafref {
path "../address/address-id"; path "../address/address-id";
} }
description description
"Principal address of the connection"; "Principal address of the
connection.";
} }
list address { list address {
key "address-id"; key "address-id";
description description
"Describes IPv6 addresses that are used."; "Describes IPv6 addresses that are
used.";
leaf address-id { leaf address-id {
type string; type string;
description description
"An identifier of an IPv6 address."; "An identifier of an IPv6 address.";
} }
leaf customer-address { leaf customer-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"An IPv6 address of the customer side."; "An IPv6 address of the customer
side.";
} }
} }
} }
} }
} }
} }
container routing-protocols { container routing-protocols {
description description
"Defines routing protocols."; "Defines routing protocols.";
list routing-protocol { list routing-protocol {
key "id"; key "id";
description description
"List of routing protocols used on "List of routing protocols used on the
the CE/PE link. This list can be augmented."; CE-PE link. This list can be augmented.";
leaf id { leaf id {
type string; type string;
description description
"Unique identifier for routing protocol."; "Unique identifier for the routing
protocol.";
} }
leaf type { leaf type {
type identityref { type identityref {
base vpn-common:routing-protocol-type; base vpn-common:routing-protocol-type;
} }
description description
"Type of routing protocol."; "Type of routing protocol.";
} }
list routing-profiles { list routing-profiles {
key "id"; key "id";
skipping to change at page 89, line 45 skipping to change at line 4053
base vpn-common:ie-type; base vpn-common:ie-type;
} }
description description
"Import, export, or both."; "Import, export, or both.";
} }
} }
container static { container static {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:static-routing')" { + "'vpn-common:static-routing')" {
description description
"Only applies when protocol is static."; "Only applies when the protocol is a
static routing protocol.";
} }
description description
"Configuration specific to static routing."; "Configuration specific to static
routing.";
container cascaded-lan-prefixes { container cascaded-lan-prefixes {
description description
"LAN prefixes from the customer."; "LAN prefixes from the customer.";
list ipv4-lan-prefixes { list ipv4-lan-prefixes {
if-feature "vpn-common:ipv4"; if-feature "vpn-common:ipv4";
key "lan next-hop"; key "lan next-hop";
description description
"List of LAN prefixes for the site."; "List of LAN prefixes for the site.";
leaf lan { leaf lan {
type inet:ipv4-prefix; type inet:ipv4-prefix;
description description
"LAN prefixes."; "LAN prefixes.";
} }
skipping to change at page 90, line 27 skipping to change at line 4084
description description
"Internal tag to be used in VPN "Internal tag to be used in VPN
policies."; policies.";
} }
leaf next-hop { leaf next-hop {
type union { type union {
type inet:ip-address; type inet:ip-address;
type predefined-next-hop; type predefined-next-hop;
} }
description description
"The next-hop that is to be used "The next hop that is to be used
for the static route. This may be for the static route. This may be
specified as an IP address or a specified as an IP address or a
pre-defined next-hop type (e.g., predefined next-hop type (e.g.,
discard or local-link)."; 'discard' or 'local-link').";
} }
leaf bfd-enable { leaf bfd-enable {
if-feature "vpn-common:bfd"; if-feature "vpn-common:bfd";
type boolean; type boolean;
description description
"Enables BFD."; "Enables Bidirectional Forwarding
Detection (BFD).";
} }
leaf metric { leaf metric {
type uint32; type uint32;
description description
"Indicates the metric associated with "Indicates the metric associated
the static route."; with the static route.";
} }
leaf preference { leaf preference {
type uint32; type uint32;
description description
"Indicates the preference of the static "Indicates the preference associated
routes."; with the static route.";
} }
uses vpn-common:service-status; uses vpn-common:service-status;
} }
list ipv6-lan-prefixes { list ipv6-lan-prefixes {
if-feature "vpn-common:ipv6"; if-feature "vpn-common:ipv6";
key "lan next-hop"; key "lan next-hop";
description description
"List of LAN prefixes for the site."; "List of LAN prefixes for the site.";
leaf lan { leaf lan {
type inet:ipv6-prefix; type inet:ipv6-prefix;
skipping to change at page 91, line 26 skipping to change at line 4133
description description
"Internal tag to be used in VPN "Internal tag to be used in VPN
policies."; policies.";
} }
leaf next-hop { leaf next-hop {
type union { type union {
type inet:ip-address; type inet:ip-address;
type predefined-next-hop; type predefined-next-hop;
} }
description description
"The next-hop that is to be used for the "The next hop that is to be used for
static route. This may be specified as the static route. This may be
an IP address or a pre-defined next-hop specified as an IP address or a
type (e.g., discard or local-link)."; predefined next-hop type (e.g.,
'discard' or 'local-link').";
} }
leaf bfd-enable { leaf bfd-enable {
if-feature "vpn-common:bfd"; if-feature "vpn-common:bfd";
type boolean; type boolean;
description description
"Enables BFD."; "Enables BFD.";
} }
leaf metric { leaf metric {
type uint32; type uint32;
description description
"Indicates the metric associated with "Indicates the metric associated
the static route."; with the static route.";
} }
leaf preference { leaf preference {
type uint32; type uint32;
description description
"Indicates the preference associated "Indicates the preference associated
with the static route."; with the static route.";
} }
uses vpn-common:service-status; uses vpn-common:service-status;
} }
} }
skipping to change at page 92, line 4 skipping to change at line 4160
} }
leaf preference { leaf preference {
type uint32; type uint32;
description description
"Indicates the preference associated "Indicates the preference associated
with the static route."; with the static route.";
} }
uses vpn-common:service-status; uses vpn-common:service-status;
} }
} }
} }
container bgp { container bgp {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:bgp-routing')" { + "'vpn-common:bgp-routing')" {
description description
"Only applies when protocol is BGP."; "Only applies when the protocol is
BGP.";
} }
description description
"BGP-specific configuration."; "Configuration specific to BGP.";
leaf description { leaf description {
type string; type string;
description description
"Includes a description of the BGP session. "Includes a description of the BGP
session.
This description is meant to be used for This description is meant to be used
diagnosis purposes. The semantic of the for diagnostic purposes. The semantic
description is local to an of the description is local to an
implementation."; implementation.";
} }
leaf local-as { leaf local-as {
type inet:as-number; type inet:as-number;
description description
"Indicates a local AS Number (ASN) if a "Indicates a local AS Number (ASN), if
distinct ASN than the one configured at an ASN distinct from the ASN configured
the VPN node level is needed."; at the VPN node level is needed.";
} }
leaf peer-as { leaf peer-as {
type inet:as-number; type inet:as-number;
mandatory true; mandatory true;
description description
"Indicates the customer's ASN when "Indicates the customer's ASN when
the customer requests BGP routing."; the customer requests BGP routing.";
} }
leaf address-family { leaf address-family {
type identityref { type identityref {
base vpn-common:address-family; base vpn-common:address-family;
} }
description description
"This node contains the address families to be "This node contains the address families
activated. Dual-stack means that both IPv4 to be activated. 'dual-stack' means
and IPv6 will be activated."; that both IPv4 and IPv6 will be
activated.";
} }
leaf local-address { leaf local-address {
type union { type union {
type inet:ip-address; type inet:ip-address;
type if:interface-ref; type if:interface-ref;
} }
description description
"Set the local IP address to use for the BGP "Sets the local IP address to use for
transport session. This may be expressed as the BGP transport session. This may be
either an IP address or a reference to an expressed as either an IP address or a
interface."; reference to an interface.";
} }
leaf-list neighbor { leaf-list neighbor {
type inet:ip-address; type inet:ip-address;
description description
"IP address(es) of the BGP neighbor. IPv4 "IP address(es) of the BGP neighbor.
and IPv6 neighbors may be indicated if IPv4 and IPv6 neighbors may be
two sessions will be used for IPv4 and indicated if two sessions will be used
IPv6."; for IPv4 and IPv6.";
} }
leaf multihop { leaf multihop {
type uint8; type uint8;
description description
"Describes the number of IP hops allowed "Describes the number of IP hops allowed
between a given BGP neighbor and the PE."; between a given BGP neighbor and
the PE.";
} }
leaf as-override { leaf as-override {
type boolean; type boolean;
default "false"; default "false";
description description
"Defines whether ASN override is enabled, "Defines whether ASN override is
i.e., replace the ASN of the customer enabled, i.e., replacing the ASN of
specified in the AS_Path attribute with the customer specified in the AS_PATH
the local ASN."; attribute with the local ASN.";
} }
leaf allow-own-as { leaf allow-own-as {
type uint8; type uint8;
default "0"; default "0";
description description
"Specifies the number of occurrences "If set, specifies the maximum number of
of the provider's ASN that can occur occurrences of the provider's ASN that
within the AS_PATH before it are permitted within the AS_PATH
is rejected."; before it is rejected.";
} }
leaf prepend-global-as { leaf prepend-global-as {
type boolean; type boolean;
default "false"; default "false";
description description
"In some situations, the ASN that is "In some situations, the ASN that is
provided at the VPN node level may be provided at the VPN node level may be
distinct from the one configured at the distinct from the ASN configured at the
VPN network access level. When such VPN network access level. When such
ASNs are provided, they are both ASNs are provided, they are both
prepended to the BGP route updates prepended to the BGP route updates
for this access. To disable that for this access. To disable that
behavior, the prepend-global-as behavior, 'prepend-global-as'
must be set to 'false'. In such a case, must be set to 'false'. In such a
the ASN that is provided at case, the ASN that is provided at
the VPN node level is not prepended to the VPN node level is not prepended
the BGP route updates for this access."; to the BGP route updates for
this access.";
} }
leaf send-default-route { leaf send-default-route {
type boolean; type boolean;
default "false"; default "false";
description description
"Defines whether default routes can be "Defines whether default routes can be
advertised to its peer. If set, the advertised to a peer. If set, the
default routes are advertised to its default routes are advertised to a
peer."; peer.";
} }
leaf site-of-origin { leaf site-of-origin {
when "../address-family = 'vpn-common:ipv4' or " when "../address-family = 'vpn-common:ipv4' "
+ "'vpn-common:dual-stack'" { + "or 'vpn-common:dual-stack'" {
description description
"Only applies if IPv4 is activated."; "Only applies if IPv4 is activated.";
} }
type rt-types:route-origin; type rt-types:route-origin;
description description
"The Site of Origin attribute is encoded as "The Site of Origin attribute is encoded
a Route Origin Extended Community. It is as a Route Origin Extended Community.
meant to uniquely identify the set of routes It is meant to uniquely identify the
learned from a site via a particular CE/PE set of routes learned from a site via a
connection and is used to prevent routing particular CE-PE connection and is used
loops."; to prevent routing loops.";
reference reference
"RFC 4364: BGP/MPLS IP Virtual Private "RFC 4364: BGP/MPLS IP Virtual Private
Networks (VPNs), Section 7"; Networks (VPNs), Section 7";
} }
leaf ipv6-site-of-origin { leaf ipv6-site-of-origin {
when "../address-family = 'vpn-common:ipv6' or " when "../address-family = 'vpn-common:ipv6' "
+ "'vpn-common:dual-stack'" { + "or 'vpn-common:dual-stack'" {
description description
"Only applies if IPv6 is activated."; "Only applies if IPv6 is activated.";
} }
type rt-types:ipv6-route-origin; type rt-types:ipv6-route-origin;
description description
"IPv6 Route Origins are IPv6 Address Specific "The IPv6 Site of Origin attribute is
BGP Extended that are meant to the Site of encoded as an IPv6 Route Origin
Origin for VRF information."; Extended Community. It is meant to
uniquely identify the set of routes
learned from a site via VRF
information.";
reference reference
"RFC 5701: IPv6 Address Specific BGP Extended "RFC 5701: IPv6 Address Specific BGP
Community Attribute"; Extended Community
Attribute";
} }
list redistribute-connected { list redistribute-connected {
key "address-family"; key "address-family";
description description
"Indicates the per-AF policy to follow "Indicates, per address family, the
for connected routes."; policy to follow for connected
routes.";
leaf address-family { leaf address-family {
type identityref { type identityref {
base vpn-common:address-family; base vpn-common:address-family;
} }
description description
"Indicates the address family."; "Indicates the address family.";
} }
leaf enable { leaf enable {
type boolean; type boolean;
description description
"Enables to redistribute connected "Enables the redistribution of
routes."; connected routes.";
} }
} }
container bgp-max-prefix { container bgp-max-prefix {
description description
"Controls the behavior when a prefix "Controls the behavior when a prefix
maximum is reached."; maximum is reached.";
leaf max-prefix { leaf max-prefix {
type uint32; type uint32;
default "5000"; default "5000";
description description
"Indicates the maximum number of BGP "Indicates the maximum number of BGP
prefixes allowed in the BGP session. prefixes allowed in the BGP session.
It allows control of how many prefixes It allows control of how many
can be received from a neighbor. prefixes can be received from a
neighbor.
If the limit is exceeded, the action If the limit is exceeded, the action
indicated in violate-action will be indicated in 'violate-action' will be
followed."; followed.";
reference reference
"RFC 4271: A Border Gateway Protocol 4 "RFC 4271: A Border Gateway Protocol 4
(BGP-4), Section 8.2.2"; (BGP-4), Section 8.2.2";
} }
leaf warning-threshold { leaf warning-threshold {
type decimal64 { type decimal64 {
fraction-digits 5; fraction-digits 5;
range "0..100"; range "0..100";
} }
skipping to change at page 96, line 23 skipping to change at line 4382
exceeded."; exceeded.";
} }
enum discard-extra-paths { enum discard-extra-paths {
description description
"Discards extra paths when the "Discards extra paths when the
limit is exceeded."; limit is exceeded.";
} }
enum restart { enum restart {
description description
"The BGP session restarts after "The BGP session restarts after
a time interval."; the indicated time interval.";
} }
} }
description description
"BGP neighbor max-prefix violate "If the BGP neighbor 'max-prefix'
action."; limit is reached, the action
indicated in 'violate-action'
will be followed.";
} }
leaf restart-timer { leaf restart-timer {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"Time interval after which the BGP "Time interval after which the BGP
session will be reestablished."; session will be reestablished.";
} }
} }
container bgp-timers { container bgp-timers {
description description
"Includes two BGP timers that can be "Includes two BGP timers that can be
customized when building a VPN service customized when building a VPN service
with BGP used as CE-PE routing with BGP used as the CE-PE routing
protocol."; protocol.";
leaf keepalive { leaf keepalive {
type uint16 { type uint16 {
range "0..21845"; range "0..21845";
} }
units "seconds"; units "seconds";
default "30"; default "30";
description description
"This timer indicates the KEEPALIVE "This timer indicates the KEEPALIVE
messages' frequency between a PE messages' frequency between a PE
and a BGP peer. and a BGP peer.
If set to '0', it indicates KEEPALIVE If set to '0', it indicates that
messages are disabled. KEEPALIVE messages are disabled.
It is suggested that the maximum time It is suggested that the maximum
between KEEPALIVE messages would be time between KEEPALIVE messages be
one third of the Hold Time interval."; one-third of the Hold Time
interval.";
reference reference
"RFC 4271: A Border Gateway Protocol 4 "RFC 4271: A Border Gateway Protocol 4
(BGP-4), Section 4.4"; (BGP-4), Section 4.4";
} }
leaf hold-time { leaf hold-time {
type uint16 { type uint16 {
range "0 | 3..65535"; range "0 | 3..65535";
} }
units "seconds"; units "seconds";
default "90"; default "90";
description description
"It indicates the maximum number of "Indicates the maximum number of
seconds that may elapse between the seconds that may elapse between the
receipt of successive KEEPALIVE receipt of successive KEEPALIVE
and/or UPDATE messages from the peer. and/or UPDATE messages from the peer.
The Hold Time must be either zero or The Hold Time must be either zero or
at least three seconds."; at least three seconds.";
reference reference
"RFC 4271: A Border Gateway Protocol 4 "RFC 4271: A Border Gateway Protocol 4
(BGP-4), Section 4.2"; (BGP-4), Section 4.2";
} }
skipping to change at page 97, line 49 skipping to change at line 4459
parameters between a PE and a CE."; parameters between a PE and a CE.";
leaf enable { leaf enable {
type boolean; type boolean;
default "false"; default "false";
description description
"Enables or disables authentication."; "Enables or disables authentication.";
} }
container keying-material { container keying-material {
when "../enable = 'true'"; when "../enable = 'true'";
description description
"Container for describing how a BGP routing "Container for describing how a BGP
session is to be secured between a PE and routing session is to be secured
a CE."; between a PE and a CE.";
choice option { choice option {
description description
"Choice of authentication options."; "Choice of authentication options.";
case ao { case ao {
description description
"Uses TCP-Authentication Option "Uses the TCP Authentication
(TCP-AO)."; Option (TCP-AO).";
reference reference
"RFC 5925: The TCP Authentication "RFC 5925: The TCP Authentication
Option."; Option";
leaf enable-ao { leaf enable-ao {
type boolean; type boolean;
description description
"Enables TCP-AO."; "Enables the TCP-AO.";
} }
leaf ao-keychain { leaf ao-keychain {
type key-chain:key-chain-ref; type key-chain:key-chain-ref;
description description
"Reference to the TCP-AO key chain."; "Reference to the TCP-AO key
chain.";
reference reference
"RFC 8177: YANG Key Chain."; "RFC 8177: YANG Data Model for
Key Chains";
} }
} }
case md5 { case md5 {
description description
"Uses MD5 to secure the session."; "Uses MD5 to secure the session.";
reference reference
"RFC 4364: BGP/MPLS IP Virtual Private "RFC 4364: BGP/MPLS IP Virtual
Networks (VPNs), Private Networks
Section 13.2"; (VPNs), Section 13.2";
leaf md5-keychain { leaf md5-keychain {
type key-chain:key-chain-ref; type key-chain:key-chain-ref;
description description
"Reference to the MD5 key chain."; "Reference to the MD5 key
chain.";
reference reference
"RFC 8177: YANG Key Chain"; "RFC 8177: YANG Data Model for
Key Chains";
} }
} }
case explicit { case explicit {
leaf key-id { leaf key-id {
type uint32; type uint32;
description description
"Key Identifier."; "Key identifier.";
} }
leaf key { leaf key {
type string; type string;
description description
"BGP authentication key. "BGP authentication key.
This model only supports the
This model only supports the subset subset of keys that are
of keys that are representable as representable as ASCII
ASCII strings."; strings.";
} }
leaf crypto-algorithm { leaf crypto-algorithm {
type identityref { type identityref {
base key-chain:crypto-algorithm; base key-chain:crypto-algorithm;
} }
description description
"Indicates the cryptographic algorithm "Indicates the cryptographic
associated with the key."; algorithm associated with the
key.";
} }
} }
case ipsec { case ipsec {
description description
"Specifies a reference to an IKE "Specifies a reference to an
Security Association (SA)."; Internet Key Exchange Protocol
(IKE) Security Association
(SA).";
leaf sa { leaf sa {
type string; type string;
description description
"Indicates the administrator-assigned "Indicates the
name of the SA."; administrator-assigned name
of the SA.";
} }
} }
} }
} }
} }
uses vpn-common:service-status; uses vpn-common:service-status;
} }
container ospf { container ospf {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:ospf-routing')" { + "'vpn-common:ospf-routing')" {
description description
"Only applies when protocol is OSPF."; "Only applies when the protocol is
OSPF.";
} }
description description
"OSPF-specific configuration."; "Configuration specific to OSPF.";
leaf address-family { leaf address-family {
type identityref { type identityref {
base vpn-common:address-family; base vpn-common:address-family;
} }
description description
"Indicates whether IPv4, IPv6, or "Indicates whether IPv4, IPv6, or
both are to be activated."; both are to be activated.";
} }
leaf area-id { leaf area-id {
type yang:dotted-quad; type yang:dotted-quad;
skipping to change at page 100, line 19 skipping to change at line 4583
Virtual Private Networks Virtual Private Networks
(VPNs), Section 4.2.3 (VPNs), Section 4.2.3
RFC 6565: OSPFv3 as a Provider Edge to RFC 6565: OSPFv3 as a Provider Edge to
Customer Edge (PE-CE) Routing Customer Edge (PE-CE) Routing
Protocol, Section 4.2"; Protocol, Section 4.2";
} }
leaf metric { leaf metric {
type uint16; type uint16;
default "1"; default "1";
description description
"Metric of the PE-CE link. It is used "Metric of the PE-CE link. It is used
in the routing state calculation and in the routing state calculation and
path selection."; path selection.";
} }
container sham-links { container sham-links {
if-feature "vpn-common:rtg-ospf-sham-link"; if-feature "vpn-common:rtg-ospf-sham-link";
description description
"List of sham links."; "List of sham links.";
reference reference
"RFC 4577: OSPF as the Provider/Customer "RFC 4577: OSPF as the Provider/Customer
Edge Protocol for BGP/MPLS IP Edge Protocol for BGP/MPLS IP
Virtual Private Networks Virtual Private Networks
(VPNs), Section 4.2.7 (VPNs), Section 4.2.7
RFC 6565: OSPFv3 as a Provider Edge to RFC 6565: OSPFv3 as a Provider Edge to
Customer Edge (PE-CE) Routing Customer Edge (PE-CE) Routing
Protocol, Section 5"; Protocol, Section 5";
list sham-link { list sham-link {
key "target-site"; key "target-site";
description description
"Creates a sham link with another site."; "Creates a sham link with another
site.";
leaf target-site { leaf target-site {
type string; type string;
description description
"Target site for the sham link connection. "Target site for the sham link
The site is referred to by its connection. The site is referred
identifier."; to by its identifier.";
} }
leaf metric { leaf metric {
type uint16; type uint16;
default "1"; default "1";
description description
"Metric of the sham link. It is used in "Metric of the sham link. It is
the routing state calculation and path used in the routing state
selection. The default value is set calculation and path selection.
to 1."; The default value is set to '1'.";
reference reference
"RFC 4577: OSPF as the Provider/Customer "RFC 4577: OSPF as the
Edge Protocol for BGP/MPLS IP Provider/Customer Edge
Protocol for BGP/MPLS IP
Virtual Private Networks Virtual Private Networks
(VPNs), Section 4.2.7.3 (VPNs), Section 4.2.7.3
RFC 6565: OSPFv3 as a Provider Edge to RFC 6565: OSPFv3 as a Provider Edge
Customer Edge (PE-CE) Routing to Customer Edge (PE-CE)
Protocol, Section 5.2"; Routing Protocol,
Section 5.2";
} }
} }
} }
leaf max-lsa { leaf max-lsa {
type uint32 { type uint32 {
range "1..4294967294"; range "1..4294967294";
} }
description description
"Maximum number of allowed LSAs OSPF."; "Maximum number of allowed Link State
Advertisements (LSAs) that the OSPF
instance will accept.";
} }
container authentication { container authentication {
description description
"Authentication configuration."; "Authentication configuration.";
leaf enable { leaf enable {
type boolean; type boolean;
default "false"; default "false";
description description
"Enables or disables authentication."; "Enables or disables authentication.";
} }
skipping to change at page 101, line 46 skipping to change at line 4663
"Container for describing how an OSPF "Container for describing how an OSPF
session is to be secured between a CE session is to be secured between a CE
and a PE."; and a PE.";
choice option { choice option {
description description
"Options for OSPF authentication."; "Options for OSPF authentication.";
case auth-key-chain { case auth-key-chain {
leaf key-chain { leaf key-chain {
type key-chain:key-chain-ref; type key-chain:key-chain-ref;
description description
"key-chain name."; "Name of the key chain.";
} }
} }
case auth-key-explicit { case auth-key-explicit {
leaf key-id { leaf key-id {
type uint32; type uint32;
description description
"Key identifier."; "Key identifier.";
} }
leaf key { leaf key {
type string; type string;
description description
"OSPF authentication key. "OSPF authentication key.
This model only supports the subset This model only supports the
of keys that are representable as subset of keys that are
ASCII strings."; representable as ASCII
strings.";
} }
leaf crypto-algorithm { leaf crypto-algorithm {
type identityref { type identityref {
base key-chain:crypto-algorithm; base key-chain:crypto-algorithm;
} }
description description
"Indicates the cryptographic algorithm "Indicates the cryptographic
associated with the key."; algorithm associated with the
key.";
} }
} }
case ipsec { case ipsec {
leaf sa { leaf sa {
type string; type string;
description description
"Indicates the administrator-assigned "Indicates the
name of the SA."; administrator-assigned name
of the SA.";
reference reference
"RFC 4552: Authentication "RFC 4552: Authentication/
/Confidentiality for Confidentiality for
OSPFv3"; OSPFv3";
} }
} }
} }
} }
} }
uses vpn-common:service-status; uses vpn-common:service-status;
} }
container isis { container isis {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:isis-routing')" { + "'vpn-common:isis-routing')" {
description description
"Only applies when protocol is IS-IS."; "Only applies when the protocol is
IS-IS.";
} }
description description
"IS-IS specific configuration."; "Configuration specific to IS-IS.";
leaf address-family { leaf address-family {
type identityref { type identityref {
base vpn-common:address-family; base vpn-common:address-family;
} }
description description
"Indicates whether IPv4, IPv6, or both "Indicates whether IPv4, IPv6, or both
are to be activated."; are to be activated.";
} }
leaf area-address { leaf area-address {
type area-address; type area-address;
mandatory true; mandatory true;
description description
"Area address."; "Area address.";
skipping to change at page 103, line 21 skipping to change at line 4737
type area-address; type area-address;
mandatory true; mandatory true;
description description
"Area address."; "Area address.";
} }
leaf level { leaf level {
type identityref { type identityref {
base vpn-common:isis-level; base vpn-common:isis-level;
} }
description description
"Can be level-1, level-2, or level-1-2."; "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 { leaf metric {
type uint16; type uint16;
default "1"; default "1";
description description
"Metric of the PE-CE link. It is used "Metric of the PE-CE link. It is used
in the routing state calculation and in the routing state calculation and
path selection."; path selection.";
} }
leaf mode { leaf mode {
type enumeration { type enumeration {
enum active { enum active {
description description
"Interface sends or receives IS-IS "The interface sends or receives
protocol control packets."; IS-IS protocol control packets.";
} }
enum passive { enum passive {
description description
"Suppresses the sending of IS-IS "Suppresses the sending of IS-IS
updates through the specified updates through the specified
interface."; interface.";
} }
} }
default "active"; default "active";
description description
skipping to change at page 104, line 22 skipping to change at line 4791
"Container for describing how an IS-IS "Container for describing how an IS-IS
session is to be secured between a CE session is to be secured between a CE
and a PE."; and a PE.";
choice option { choice option {
description description
"Options for IS-IS authentication."; "Options for IS-IS authentication.";
case auth-key-chain { case auth-key-chain {
leaf key-chain { leaf key-chain {
type key-chain:key-chain-ref; type key-chain:key-chain-ref;
description description
"key-chain name."; "Name of the key chain.";
} }
} }
case auth-key-explicit { case auth-key-explicit {
leaf key-id { leaf key-id {
type uint32; type uint32;
description description
"Key Identifier."; "Key identifier.";
} }
leaf key { leaf key {
type string; type string;
description description
"IS-IS authentication key. "IS-IS authentication key.
This model only supports the subset This model only supports the
of keys that are representable as subset of keys that are
ASCII strings."; representable as ASCII
strings.";
} }
leaf crypto-algorithm { leaf crypto-algorithm {
type identityref { type identityref {
base key-chain:crypto-algorithm; base key-chain:crypto-algorithm;
} }
description description
"Indicates the cryptographic algorithm "Indicates the cryptographic
associated with the key."; algorithm associated with the
key.";
} }
} }
} }
} }
} }
uses vpn-common:service-status; uses vpn-common:service-status;
} }
container rip { container rip {
when "derived-from-or-self(../type, " when "derived-from-or-self(../type, "
+ "'vpn-common:rip-routing')" { + "'vpn-common:rip-routing')" {
description description
"Only applies when the protocol is RIP. "Only applies when the protocol is RIP.
For IPv4, the model assumes that RIP For IPv4, the model assumes that RIP
version 2 is used."; version 2 is used.";
} }
description description
skipping to change at page 105, line 36 skipping to change at line 4854
"Indicates the RIP timers."; "Indicates the RIP timers.";
reference reference
"RFC 2453: RIP Version 2"; "RFC 2453: RIP Version 2";
leaf update-interval { leaf update-interval {
type uint16 { type uint16 {
range "1..32767"; range "1..32767";
} }
units "seconds"; units "seconds";
default "30"; default "30";
description description
"Indicates the RIP update time. "Indicates the RIP update time, i.e.,
That is, the amount of time for which the amount of time for which RIP
RIP updates are sent."; updates are sent.";
} }
leaf invalid-interval { leaf invalid-interval {
type uint16 { type uint16 {
range "1..32767"; range "1..32767";
} }
units "seconds"; units "seconds";
default "180"; default "180";
description description
"Is the interval before a route is declared "The interval before a route is
invalid after no updates are received. declared invalid after no updates are
This value is at least three times received. This value is at least
the value for the update-interval three times the value for the
argument."; 'update-interval' argument.";
} }
leaf holddown-interval { leaf holddown-interval {
type uint16 { type uint16 {
range "1..32767"; range "1..32767";
} }
units "seconds"; units "seconds";
default "180"; default "180";
description description
"Specifies the interval before better routes "Specifies the interval before better
are released."; routes are released.";
} }
leaf flush-interval { leaf flush-interval {
type uint16 { type uint16 {
range "1..32767"; range "1..32767";
} }
units "seconds"; units "seconds";
default "240"; default "240";
description description
"Indicates the RIP flush timer. That is, "Indicates the RIP flush timer, i.e.,
the amount of time that must elapse before the amount of time that must elapse
a route is removed from the routing before a route is removed from the
table."; routing table.";
} }
} }
leaf default-metric { leaf default-metric {
type uint8 { type uint8 {
range "0..16"; range "0..16";
} }
default "1"; default "1";
description description
"Sets the default metric."; "Sets the default metric.";
} }
skipping to change at page 107, line 4 skipping to change at line 4919
<