rfc9291.original | rfc9291.txt | |||
---|---|---|---|---|
OPSAWG M. Boucadair, Ed. | Internet Engineering Task Force (IETF) M. Boucadair, Ed. | |||
Internet-Draft Orange | Request for Comments: 9291 Orange | |||
Intended status: Standards Track O. Gonzalez de Dios, Ed. | Category: Standards Track O. Gonzalez de Dios, Ed. | |||
Expires: 4 December 2022 S. Barguil | ISSN: 2070-1721 S. Barguil | |||
Telefonica | Telefonica | |||
L. Munoz | L. Munoz | |||
Vodafone | Vodafone | |||
2 June 2022 | September 2022 | |||
A YANG Network Data Model for Layer 2 VPNs | A YANG Network Data Model for Layer 2 VPNs | |||
draft-ietf-opsawg-l2nm-19 | ||||
Abstract | Abstract | |||
This document defines an L2VPN Network YANG Model (L2NM) which can be | This document defines an L2VPN Network Model (L2NM) that can be used | |||
used to manage the provisioning of Layer 2 Virtual Private Network | to manage the provisioning of Layer 2 Virtual Private Network (L2VPN) | |||
services within a network (e.g., service provider network). The L2NM | services within a network (e.g., a service provider network). The | |||
complements the Layer 2 Service Model (L2SM) by providing a network- | L2NM complements the L2VPN Service Model (L2SM) by providing a | |||
centric view of the service that is internal to a service provider. | network-centric view of the service that is internal to a service | |||
The L2NM is particularly meant to be used by a network controller to | provider. The L2NM is particularly meant to be used by a network | |||
derive the configuration information that will be sent to relevant | controller to derive the configuration information that will be sent | |||
network devices. | to relevant network devices. | |||
Also, this document defines a YANG module to manage Ethernet segments | Also, this document defines a YANG module to manage Ethernet segments | |||
and the initial versions of two IANA-maintained modules that include | and the initial versions of two IANA-maintained modules that include | |||
a set of identities of BGP Layer 2 encapsulation types and pseudowire | a set of identities of BGP Layer 2 encapsulation types and pseudowire | |||
types. | types. | |||
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: A YANG Network Data Model for Layer 2 VPNs"; | ||||
* reference: RFC XXXX | ||||
Also, please update the "revision" date of the YANG modules. | ||||
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 4 December 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/rfc9291. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 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 Revised BSD License text as | to this document. Code Components extracted from this document must | |||
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 Revised 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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology | |||
3. Acronyms and Abbreviations . . . . . . . . . . . . . . . . . 6 | 3. Acronyms and Abbreviations | |||
4. Reference Architecture . . . . . . . . . . . . . . . . . . . 6 | 4. Reference Architecture | |||
5. Relationship to Other YANG Data Models . . . . . . . . . . . 11 | 5. Relationship to Other YANG Data Models | |||
6. Description of the Ethernet Segment YANG Module . . . . . . . 12 | 6. Description of the Ethernet Segment YANG Module | |||
7. Description of the L2NM YANG Module . . . . . . . . . . . . . 15 | 7. Description of the L2NM YANG Module | |||
7.1. Overall Structure of the Module . . . . . . . . . . . . . 15 | 7.1. Overall Structure of the Module | |||
7.2. VPN Profiles . . . . . . . . . . . . . . . . . . . . . . 16 | 7.2. VPN Profiles | |||
7.3. VPN Services . . . . . . . . . . . . . . . . . . . . . . 17 | 7.3. VPN Services | |||
7.4. Global Parameters Profiles . . . . . . . . . . . . . . . 21 | 7.4. Global Parameters Profiles | |||
7.5. VPN Nodes . . . . . . . . . . . . . . . . . . . . . . . . 25 | 7.5. VPN Nodes | |||
7.5.1. BGP Auto-Discovery . . . . . . . . . . . . . . . . . 28 | 7.5.1. BGP Auto-Discovery | |||
7.5.2. Signaling Options . . . . . . . . . . . . . . . . . . 29 | 7.5.2. Signaling Options | |||
7.5.2.1. BGP . . . . . . . . . . . . . . . . . . . . . . . 31 | 7.5.2.1. BGP | |||
7.5.2.2. LDP . . . . . . . . . . . . . . . . . . . . . . . 33 | 7.5.2.2. LDP | |||
7.5.2.3. L2TP . . . . . . . . . . . . . . . . . . . . . . 34 | 7.5.2.3. L2TP | |||
7.6. VPN Network Accesses . . . . . . . . . . . . . . . . . . 34 | 7.6. VPN Network Accesses | |||
7.6.1. Connection . . . . . . . . . . . . . . . . . . . . . 36 | 7.6.1. Connection | |||
7.6.2. EVPN-VPWS Service Instance . . . . . . . . . . . . . 39 | 7.6.2. EVPN-VPWS Service Instance | |||
7.6.3. Ethernet OAM . . . . . . . . . . . . . . . . . . . . 41 | 7.6.3. Ethernet OAM | |||
7.6.4. Services . . . . . . . . . . . . . . . . . . . . . . 42 | 7.6.4. Services | |||
8. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 48 | 8. YANG Modules | |||
8.1. IANA-Maintained Module for BGP Layer 2 Encapsulation | 8.1. IANA-Maintained Module for BGP Layer 2 Encapsulation Types | |||
Types . . . . . . . . . . . . . . . . . . . . . . . . . . 48 | 8.2. IANA-Maintained Module for Pseudowire Types | |||
8.2. IANA-Maintained Module for Pseudowire Types . . . . . . . 54 | 8.3. Ethernet Segments | |||
8.3. Ethernet Segments . . . . . . . . . . . . . . . . . . . . 61 | 8.4. L2NM | |||
8.4. L2NM . . . . . . . . . . . . . . . . . . . . . . . . . . 69 | 9. Security Considerations | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 123 | 10. IANA Considerations | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 124 | 10.1. Registering YANG Modules | |||
10.1. Registering YANG Modules . . . . . . . . . . . . . . . . 124 | 10.2. BGP Layer 2 Encapsulation Types | |||
10.2. BGP Layer 2 Encapsulation Types . . . . . . . . . . . . 126 | 10.3. Pseudowire Types | |||
10.3. Pseudowire Types . . . . . . . . . . . . . . . . . . . . 126 | 11. References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 127 | 11.1. Normative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 127 | 11.2. Informative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 130 | Appendix A. Examples | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 136 | A.1. BGP-Based VPLS | |||
A.1. BGP-based VPLS . . . . . . . . . . . . . . . . . . . . . 136 | A.2. BGP-Based VPWS with LDP Signaling | |||
A.2. BGP-based VPWS with LDP Signaling . . . . . . . . . . . . 142 | A.3. LDP-Based VPLS | |||
A.3. LDP-based VPLS . . . . . . . . . . . . . . . . . . . . . 145 | A.4. VPWS-EVPN Service Instance | |||
A.4. VPWS-EVPN Service Instance . . . . . . . . . . . . . . . 149 | A.5. Automatic ESI Assignment | |||
A.5. Automatic ESI Assignment . . . . . . . . . . . . . . . . 155 | A.6. VPN Network Access Precedence | |||
A.6. VPN Network Access Precedence . . . . . . . . . . . . . . 158 | Acknowledgements | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 161 | Contributors | |||
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 161 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 162 | ||||
1. Introduction | 1. Introduction | |||
[RFC8466] defines an L2VPN Service Model (L2SM) YANG data model that | [RFC8466] defines an L2VPN Service Model (L2SM) YANG data model that | |||
can be used between customers and service providers for ordering | can be used between customers and service providers for ordering | |||
Layer 2 Virtual Private Network (L2VPN) services. This document | Layer 2 Virtual Private Network (L2VPN) services. This document | |||
complements the L2SM by creating a network-centric view of the | complements the L2SM by creating a network-centric view of the | |||
service: the L2VPN Network Model (L2NM). | service: the L2VPN Network Model (L2NM). | |||
Also, this document defines the initial versions of two IANA- | Also, this document defines the initial versions of two IANA- | |||
maintained modules that define a set of identities of BGP Layer 2 | maintained modules that define a set of identities of BGP Layer 2 | |||
encapsulation types (Section 8.1) and pseudowire types (Section 8.2). | encapsulation types (Section 8.1) and pseudowire types (Section 8.2). | |||
These types are used in the L2NM to identify a Layer 2 encapsulation | These types are used in the L2NM to identify a Layer 2 encapsulation | |||
type as a function of the signalling option used to deliver an L2VPN | type as a function of the signaling option used to deliver an L2VPN | |||
service. Relying upon these IANA-maintained modules is meant to | service. Relying upon these IANA-maintained modules is meant to | |||
provide more flexibility in handling new types rather than being | provide more flexibility in handling new types rather than being | |||
limited by a set of identities defined in the L2NM itself. | limited by a set of identities defined in the L2NM itself. | |||
Section 8.3 defines another YANG module to manage Ethernet Segments | Section 8.3 defines another YANG module to manage Ethernet Segments | |||
(ESes) that are required for instantiating Ethernet VPNs (EVPNs). | (ESes) that are required for instantiating Ethernet VPNs (EVPNs). | |||
References to Ethernet segments that are created using the module in | References to Ethernet segments that are created using the module in | |||
Section 8.3 can be included in the L2NM for EVPNs. | Section 8.3 can be included in the L2NM for EVPNs. | |||
The L2NM (Section 8.4) can be exposed, for example, by a network | The L2NM (Section 8.4) can be exposed, for example, by a network | |||
controller to a service controller within the service provider's | controller to a service controller within the service provider's | |||
network. In particular, the model can be used in the communication | network. In particular, the model can be used in the communication | |||
interface between the entity that interacts directly with the | interface between the entity that interacts directly with the | |||
customer (i.e., the service orchestrator) and the entity in charge of | customer (i.e., the service orchestrator) and the entity in charge of | |||
network orchestration and control (a.k.a., network controller/ | network orchestration and control (a.k.a., network controller/ | |||
orchestrator) by allowing for more network-centric information to be | orchestrator) by allowing for more network-centric information to be | |||
included. | included. | |||
The L2NM supports capabilities, such as exposing operational | The L2NM supports capabilities such as exposing operational | |||
parameters, transport protocols selection, and precedence. It can | parameters, transport protocols selection, and precedence. It can | |||
also serve as a multi-domain orchestration interface. | also serve as a multi-domain orchestration interface. | |||
The L2NM is scoped for a variety of Layer 2 Virtual Private Networks, | The L2NM is scoped for a variety of Layer 2 Virtual Private Networks | |||
such as: | such as: | |||
* Virtual Private LAN Service (VPLS) [RFC4761][RFC4762] | * Virtual Private LAN Service (VPLS) [RFC4761] [RFC4762] | |||
* Virtual Private Wire Service (VPWS) (Section 3.1.1 of [RFC4664]) | * Virtual Private Wire Service (VPWS) (Section 3.1.1 of [RFC4664]) | |||
* Various flavors of EVPNs: | * Various flavors of EVPNs: | |||
- VPWS EVPN [RFC8214], | - VPWS EVPN [RFC8214], | |||
- Provider Backbone Bridging Ethernet VPNs (PBB EVPNs) [RFC7623], | - Provider Backbone Bridging Combined with Ethernet VPNs (PBB- | |||
EVPNs) [RFC7623], | ||||
- EVPN over MPLS [RFC7432], and | - EVPN over MPLS [RFC7432], and | |||
- EVPN over Virtual eXtensible Local Area Network (VXLAN) | - EVPN over Virtual Extensible LAN (VXLAN) [RFC8365]. | |||
[RFC8365]. | ||||
The L2NM is designed to easily support future Layer 2 VPN flavors and | The L2NM is designed to easily support future Layer 2 VPN flavors and | |||
procedures (e.g., advanced configuration such as pseudowires | procedures (e.g., advanced configuration such as pseudowires | |||
resilience or Multi-Segment pseudowires [RFC7267]). A set of | resilience or multi-segment pseudowires [RFC7267]). A set of | |||
examples to illustrate the use of the L2NM are provided in | examples to illustrate the use of the L2NM are provided in | |||
Appendix A. | Appendix A. | |||
This document uses the common Virtual Private Network (VPN) YANG | This document uses the common Virtual Private Network (VPN) YANG | |||
module defined in [RFC9181]. | module defined in [RFC9181]. | |||
The YANG data models in this document conforms to the Network | The YANG data models in this document conform to the Network | |||
Management Datastore Architecture (NMDA) defined in [RFC8342]. | Management Datastore Architecture (NMDA) defined in [RFC8342]. | |||
2. Terminology | 2. Terminology | |||
This document assumes that the reader is familiar with [RFC6241], | This document assumes that the reader is familiar with [RFC6241], | |||
[RFC7950], [RFC8466], [RFC4026], and [RFC8309]. This document uses | [RFC7950], [RFC8466], [RFC4026], and [RFC8309]. This document uses | |||
terminology from those documents. | terminology from those documents. | |||
This document uses the term "network model" as defined in Section 2.1 | This document uses the term "network model" as defined in Section 2.1 | |||
of [RFC8969]. | of [RFC8969]. | |||
The meanings of the symbols in YANG tree diagrams is defined in | The meanings of the symbols in the YANG tree diagrams are defined in | |||
[RFC8340]. | [RFC8340]. | |||
This document makes use of the following terms: | This document makes use of the following terms: | |||
Ethernet segment (ES): Refers to the set of the Ethernet links that | Ethernet Segment (ES): Refers to the set of Ethernet links that are | |||
are used by a customer site (device or network) to connect to one | used by a customer site (device or network) to connect to one or | |||
or more Provider Edges (PEs). | more Provider Edges (PEs). | |||
Layer 2 VPN Service Model (L2SM): Describes the service | L2VPN Service Model (L2SM): Describes the service characterization | |||
characterization of an L2VPN that interconnects a set of sites | of an L2VPN that interconnects a set of sites from the customer's | |||
from the customer's perspective. The customer service model does | perspective. The customer service model does not provide details | |||
not provide details on the service provider network. An L2VPN | on the service provider network. An L2VPN customer service model | |||
customer service model is defined in [RFC8466]. | is defined in [RFC8466]. | |||
Layer 2 VPN Network Model (L2NM): Refers to the YANG data model that | L2VPN Network Model (L2NM): Refers to the YANG data model that | |||
describes an L2VPN service with a network-centric view. It | describes an L2VPN service with a network-centric view. It | |||
contains information on the service provider network and might | contains information on the service provider network and might | |||
include allocated resources. Network controllers can use it to | include allocated resources. Network controllers can use it to | |||
manage the Layer 2 VPN service configuration in the service | manage the Layer 2 VPN service configuration in the service | |||
provider's network. The corresponding YANG module can be used by | provider's network. The corresponding YANG module can be used by | |||
a service orchestrator to request a VPN service to a network | a service orchestrator to request a VPN service to a network | |||
controller or to expose the list of active L2VPN services. The | controller or to expose the list of active L2VPN services. The | |||
L2NM can also be used to retrieve a set of L2VPN-related state | L2NM can also be used to retrieve a set of L2VPN-related state | |||
information (including OAM). | information (including Operations, Administration, and Maintenance | |||
(OAM)). | ||||
MAC-VRF: Refers to a Virtual Routing and Forwarding (VRF) table for | MAC-VRF: Refers to a Virtual Routing and Forwarding (VRF) table for | |||
Media Access Control (MAC) addresses on a PE. | Media Access Control (MAC) addresses on a PE. | |||
Network controller: Denotes a functional entity responsible for the | Network controller: Denotes a functional entity responsible for the | |||
management of the service provider network. | management of the service provider network. | |||
Service orchestrator: Refers to a functional entity that interacts | Service orchestrator: Refers to a functional entity that interacts | |||
with the customer of an L2VPN relying upon, e.g., the L2SM. The | with the customer of an L2VPN relying upon, e.g., the L2SM. The | |||
service orchestrator is responsible for the Customer Edge - to | service orchestrator is responsible for the Customer Edge to | |||
Provider Edge (CE-PE) attachment circuits, the PE selection, and | Provider Edge (CE-PE) attachment circuits, the PE selection, and | |||
requesting the activation of the L2VPN service to a network | requesting the activation of the L2VPN service to a network | |||
controller. | controller. | |||
Service provider network: Is a network able to provide L2VPN-related | Service provider network: A network that is able to provide L2VPN- | |||
services. | related services. | |||
VPN node: Is an abstraction that represents a set of policies | VPN node: An abstraction that represents a set of policies applied | |||
applied on a PE and belonging to a single VPN service. A VPN | on a PE and belongs to a single VPN service. A VPN service | |||
service involves one or more VPN nodes. The VPN node will | involves one or more VPN nodes. The VPN node will identify the | |||
identify the service providers' node on which the VPN is deployed. | service providers' node on which the VPN is deployed. | |||
VPN network access: Is an abstraction that represents the network | VPN network access: An abstraction that represents the network | |||
interfaces that are associated with 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 Customer Edges (CEs) and | attachment circuits (bearers) between CEs and PEs are terminated | |||
Provider Edges (PEs) are terminated in the VPN network access. | in the VPN network access. | |||
VPN service provider: Is a service provider that offers L2VPN- | VPN service provider: A service provider that offers L2VPN-related | |||
related services. | services. | |||
3. Acronyms and Abbreviations | 3. Acronyms and Abbreviations | |||
The following acronyms and abbreviations are used in this document: | The following acronyms and abbreviations are used in this document: | |||
ACL Access Control List | ACL Access Control List | |||
BGP Border Gateway Protocol | BGP Border Gateway Protocol | |||
BUM Broadcast, unknown unicast, or multicast | BUM Broadcast, Unknown Unicast, or Multicast | |||
CE Customer Edge | CE Customer Edge | |||
ES Ethernet Segment | ES Ethernet Segment | |||
ESI Ethernet Segment Identifier | ESI Ethernet Segment Identifier | |||
EVPN Ethernet VPN | EVPN Ethernet VPN | |||
L2VPN Layer 2 Virtual Private Network | L2VPN Layer 2 Virtual Private Network | |||
L2SM L2VPN Service Model | L2SM L2VPN Service Model | |||
L2NM L2VPN Network Model | L2NM L2VPN Network Model | |||
MAC Media Access Control | MAC Media Access Control | |||
PBB Provider Backbone Bridging | PBB Provider Backbone Bridging | |||
PCP Priority Code Point | PCP Priority Code Point | |||
skipping to change at page 7, line 6 ¶ | skipping to change at line 270 ¶ | |||
[RFC8466] and decomposes the box marked "orchestration" in that | [RFC8466] and decomposes the box marked "orchestration" in that | |||
figure into three separate functional components called "Service | figure into three separate functional components called "Service | |||
Orchestration", "Network Orchestration", and "Domain Orchestration". | Orchestration", "Network Orchestration", and "Domain Orchestration". | |||
Similar to Section 3 of [RFC8466], CE to PE attachment is achieved | Similar to Section 3 of [RFC8466], CE to PE attachment is achieved | |||
through a bearer with a Layer 2 connection on top. The bearer refers | through a bearer with a Layer 2 connection on top. The bearer refers | |||
to properties of the attachment that are below Layer 2, while the | to properties of the attachment that are below Layer 2, while the | |||
connection refers to Layer 2 protocol-oriented properties. | connection refers to Layer 2 protocol-oriented properties. | |||
The reader may refer to [RFC8309] for the distinction between the | The reader may refer to [RFC8309] for the distinction between the | |||
"Customer Service Model", the "Service Delivery Model", the "Network | "Customer Service Model", "Service Delivery Model", "Network | |||
Configuration Model", and the "Device Configuration Model". The | Configuration Model", and "Device Configuration Model". The "Domain | |||
"Domain Orchestration" and "Config Manager" roles may be performed by | Orchestration" and "Config Manager" roles may be performed by "SDN | |||
"SDN Controllers". | Controllers". | |||
+---------------+ | +---------------+ | |||
| Customer | | | Customer | | |||
+-------+-------+ | +-------+-------+ | |||
Customer Service Model | | Customer Service Model | | |||
e.g., l2vpn-svc | | e.g., l2vpn-svc | | |||
+-------+-------+ | +-------+-------+ | |||
| Service | | | Service | | |||
| Orchestration | | | Orchestration | | |||
+-------+-------+ | +-------+-------+ | |||
skipping to change at page 9, line 11 ¶ | skipping to change at line 327 ¶ | |||
CLI: Command-Line Interface | CLI: Command-Line Interface | |||
Figure 1: L2SM and L2NM Interaction | Figure 1: L2SM and L2NM Interaction | |||
The customer may use various means to request a service that may | The customer may use various means to request a service that may | |||
trigger the instantiation of an L2NM. The customer may use the L2SM | trigger the instantiation of an L2NM. The customer may use the L2SM | |||
or may rely upon more abstract models to request a service that | or may rely upon more abstract models to request a service that | |||
relies upon an L2VPN service. For example, the customer may supply | relies upon an L2VPN service. For example, the customer may supply | |||
an IP Connectivity Provisioning Profile (CPP) that characterizes the | an IP 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 | [VPN+-FRAMEWORK], or an IETF network slice service [IETF-NET-SLICES]. | |||
[I-D.ietf-teas-ietf-network-slices]. | ||||
Note also that both the L2SM and the L2NM may be used in the context | Note also that both the L2SM and L2NM may be used in the context of | |||
of the Abstraction and Control of TE Networks (ACTN) framework | 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), and the Provisioning Network | |||
Controller (PNC). | Controller (PNC). | |||
+----------------------------------+ | +----------------------------------+ | |||
| Customer | | | Customer | | |||
| +-----------------------------+ | | | +-----------------------------+ | | |||
| | CNC | | | | | CNC | | | |||
| +-----------------------------+ | | | +-----------------------------+ | | |||
+----+-----------------------+-----+ | +----+-----------------------+-----+ | |||
skipping to change at page 11, line 9 ¶ | skipping to change at line 381 ¶ | |||
+----+---+ +----+---+ | +----+---+ +----+---+ | |||
| Device | | Device | | | Device | | Device | | |||
+--------+ +--------+ | +--------+ +--------+ | |||
Figure 2: L2SM and L2NM in the Context of ACTN | Figure 2: L2SM and L2NM in the Context of ACTN | |||
5. Relationship to Other YANG Data Models | 5. Relationship to Other YANG Data Models | |||
The "ietf-vpn-common" module [RFC9181] includes a set of identities, | The "ietf-vpn-common" module [RFC9181] includes a set of identities, | |||
types, and groupings that are meant to be reused by VPN-related YANG | types, and groupings that are meant to be reused by VPN-related YANG | |||
modules independently of the layer (e.g., Layer 2, Layer 3) and the | modules independently of the layer (e.g., Layer 2 or Layer 3) and the | |||
type of the module (e.g., network model, service model) including | type of the module (e.g., network model or service model) including | |||
future revisions of existing models (e.g., [RFC8466]). The L2NM | future revisions of existing models (e.g., [RFC8466]). The L2NM | |||
reuses these common types and groupings. | reuses these common types and groupings. | |||
Also, the L2NM uses the IANA-maintained modules "iana-bgp-l2-encaps" | Also, the L2NM uses the IANA-maintained modules "iana-bgp-l2-encaps" | |||
(Section 8.1) and "iana-pseudowire-types" (Section 8.2) to identify | (Section 8.1) and "iana-pseudowire-types" (Section 8.2) to identify | |||
Layer 2 encapsulation and pseudowire types. More details are | Layer 2 encapsulation and pseudowire types. More details are | |||
provided in Sections 7.5.2.1 and 7.5.2.3. | provided in Sections 7.5.2.1 and 7.5.2.3. | |||
For the particular case of EVPN, the L2NM includes a name that refers | For the particular case of EVPN, the L2NM includes a name that refers | |||
to an Ethernet segment that is created using the "ietf-ethernet- | to an Ethernet segment that is created using the "ietf-ethernet- | |||
skipping to change at page 11, line 34 ¶ | skipping to change at line 406 ¶ | |||
As discussed in Section 4, the L2NM is used to manage L2VPN services | As discussed in Section 4, the L2NM is used to manage L2VPN services | |||
within a service provider network. The module provides a network | within a service provider network. The module provides a network | |||
view of the L2VPN service. Such a view is only visible to the | view of the L2VPN service. Such a view is only visible to the | |||
service provider and is not exposed outside (to customers, for | service provider and is not exposed outside (to customers, for | |||
example). The following discusses how the L2NM interfaces with other | example). The following discusses how the L2NM interfaces with other | |||
YANG modules: | YANG modules: | |||
L2SM: The L2NM is not a customer service model. | L2SM: The L2NM is not a customer service model. | |||
The internal view of the service (i.e., the L2NM) may be mapped to | The internal view of the service (i.e., the L2NM) may be mapped to | |||
an external view which is visible to customers: L2VPN Service | an external view that is visible to customers: L2VPN Service Model | |||
Model (L2SM) [RFC8466]. | (L2SM) [RFC8466]. | |||
The L2NM can be fed with inputs that are requested by customers, | The L2NM can be fed with inputs that are requested by customers | |||
typically, relying upon an L2SM template. Concretely, some parts | and that typically rely on an L2SM template. Concretely, some | |||
of the L2SM module can be directly mapped into the L2NM while | parts of the L2SM module can be directly mapped into the L2NM | |||
other parts are generated as a function of the requested service | while other parts are generated as a function of the requested | |||
and local guidelines. Finally, there are parts local to the | service and local guidelines. Finally, there are parts local to | |||
service provider and do not map directly to the L2SM. | the service provider, and they do not map directly to the L2SM. | |||
Note that using the L2NM within a service provider does not | Note that using the L2NM within a service provider does not | |||
assume, nor does it preclude, exposing the VPN service via the | assume, nor does it preclude, exposing the VPN service via the | |||
L2SM. This is deployment specific. Nevertheless, the design of | L2SM. This is deployment specific. Nevertheless, the design of | |||
L2NM tries to align as much as possible with the features | L2NM tries to align as much as possible with the features | |||
supported by the L2SM to ease the grafting of both the L2NM and | supported by the L2SM to ease the grafting of both the L2NM and | |||
the L2SM for the sake of highly automated VPN service provisioning | the L2SM for the sake of highly automated VPN service provisioning | |||
and delivery. | and delivery. | |||
Network Topology Modules: An L2VPN involves nodes that are part of a | Network Topology Modules: An L2VPN involves nodes that are part of a | |||
topology managed by the service provider network. Such a topology | topology managed by the service provider network. Such a topology | |||
can be represented using the network topology module in [RFC8345] | can be represented using the network topology module in [RFC8345] | |||
or its extension, such as a network YANG module for Service | or its extension, such as a network YANG module for Service | |||
Attachment Points (SAPs) [I-D.ietf-opsawg-sap]. | Attachment Points (SAPs) [YANG-SAPS]. | |||
Device Modules: The L2NM is not a device model. | Device Modules: The L2NM is not a device model. | |||
Once a global VPN service is captured by means of the L2NM, the | Once a global VPN service is captured by means of the L2NM, the | |||
actual activation and provisioning of the VPN service will involve | actual activation and provisioning of the VPN service will involve | |||
a variety of device modules to tweak the required functions for | a variety of device modules to tweak the required functions for | |||
the delivery of the service. These functions are supported by the | the delivery of the service. These functions are supported by the | |||
VPN 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: | |||
* Interfaces [RFC8343]. | * Interfaces [RFC8343] | |||
* BGP [I-D.ietf-idr-bgp-model]. | * BGP [BGP-YANG-MODEL] | |||
* MPLS [RFC8960]. | * MPLS [RFC8960] | |||
* Access Control Lists (ACLs) [RFC8519]. | * Access Control Lists (ACLs) [RFC8519] | |||
How the L2NM is used to derive device-specific actions is | How the L2NM is used to derive device-specific actions is | |||
implementation specific. | implementation specific. | |||
6. Description of the Ethernet Segment YANG Module | 6. Description of the Ethernet Segment YANG Module | |||
The 'ietf-ethernet-segment' module (Figure 3) is used to manage a set | The 'ietf-ethernet-segment' module (Figure 3) is used to manage a set | |||
of Ethernet segments in the context of an EVPN service. | of Ethernet segments in the context of an EVPN service. | |||
module: ietf-ethernet-segment | module: ietf-ethernet-segment | |||
+--rw ethernet-segments | +--rw ethernet-segments | |||
+--rw ethernet-segment* [name] | +--rw ethernet-segment* [name] | |||
+--rw name string | +--rw name string | |||
+--rw esi-type? identityref | +--rw esi-type? identityref | |||
+--rw (esi-choice)? | +--rw (esi-choice)? | |||
| +--:(directly-assigned) | | +--:(directly-assigned) | |||
| | +--rw ethernet-segment-identifier? yang:hex-string | | | +--rw ethernet-segment-identifier? yang:hex-string | |||
| +--:(auto-assigned) | | +--:(auto-assigned) | |||
| +--rw esi-auto | | +--rw esi-auto | |||
| +--rw (auto-mode)? | | +--rw (auto-mode)? | |||
| | +--:(from-pool) | | | +--:(from-pool) | |||
| | | +--rw esi-pool-name? string | | | | +--rw esi-pool-name? string | |||
| | +--:(full-auto) | | | +--:(full-auto) | |||
| | +--rw auto? empty | | | +--rw auto? empty | |||
| +--ro auto-ethernet-segment-identifier? | | +--ro auto-ethernet-segment-identifier? | |||
| yang:hex-string | | yang:hex-string | |||
+--rw esi-redundancy-mode? identityref | +--rw esi-redundancy-mode? identityref | |||
+--rw df-election | +--rw df-election | |||
| +--rw df-election-method? identityref | | +--rw df-election-method? identityref | |||
| +--rw revertive? boolean | | +--rw revertive? boolean | |||
| +--rw election-wait-time? uint32 | | +--rw election-wait-time? uint32 | |||
+--rw split-horizon-filtering? boolean | +--rw split-horizon-filtering? boolean | |||
+--rw pbb | +--rw pbb | |||
| +--rw backbone-src-mac? yang:mac-address | | +--rw backbone-src-mac? yang:mac-address | |||
+--rw member* [ne-id interface-id] | +--rw member* [ne-id interface-id] | |||
+--rw ne-id string | +--rw ne-id string | |||
+--rw interface-id string | +--rw interface-id string | |||
Figure 3: Ethernet Segments Tree Structure | Figure 3: Ethernet Segments Tree Structure | |||
The descriptions of the data nodes depicted in Figure 3 are as | The descriptions of the data nodes depicted in Figure 3 are as | |||
follows: | follows: | |||
'name': Sets a name to uniquely identify an ES within a service | 'name': Sets a name to uniquely identify an ES within a service | |||
provider network. In order to ease referencing ESes by their name | provider network. In order to ease referencing ESes by their name | |||
in other modules, "es-ref" typedef is defined. | in other modules, "es-ref" typedef is defined. | |||
skipping to change at page 14, line 39 ¶ | skipping to change at line 537 ¶ | |||
segment-identifier'. | segment-identifier'. | |||
'esi-redundancy-mode': Specifies the EVPN redundancy mode for a | 'esi-redundancy-mode': Specifies the EVPN redundancy mode for a | |||
given ES. The following modes are supported: Single-Active | given ES. The following modes are supported: Single-Active | |||
(Section 14.1.1 of [RFC7432]) or All-Active (Section 14.1.2 of | (Section 14.1.1 of [RFC7432]) or All-Active (Section 14.1.2 of | |||
[RFC7432]). | [RFC7432]). | |||
'df-election': Specifies a set of parameters related to the | 'df-election': Specifies a set of parameters related to the | |||
Designated Forwarder (DF) election (Section 8.5 of [RFC7432]). | Designated Forwarder (DF) election (Section 8.5 of [RFC7432]). | |||
For example, this data node can be used to indicate an election | For example, this data node can be used to indicate an election | |||
method (e.g., [RFC8584] or [I-D.ietf-bess-evpn-pref-df]). If no | method (e.g., [RFC8584] or [EVPN-PERF-DF]). If no election method | |||
election method is indicated, the default method defined in | is indicated, the default method defined in Section 8.5 of | |||
Section 8.5 of [RFC7432] is used. | [RFC7432] is used. | |||
As discussed in Section 1.3.2 of [RFC8584], the default behavior | As discussed in Section 1.3.2 of [RFC8584], the default behavior | |||
is to trigger the DF election procedure when a DF fails (e.g., | is to trigger the DF election procedure when a DF fails (e.g., | |||
link failure). The former DF will take over when it is available | link failure). The former DF will take over when it is available | |||
again. Such a mode is called revertive. The behavior can be | again. Such a mode is called 'revertive'. The behavior can be | |||
overridden by setting the 'revertive' leaf to 'false'. | overridden by setting the 'revertive' leaf to 'false'. | |||
Also, this data node can be used to configure a DF Wait timer | Also, this data node can be used to configure a DF Wait timer | |||
('election-wait-time') (Section 2.1 of [RFC8584]). | ('election-wait-time') (Section 2.1 of [RFC8584]). | |||
'split-horizon-filtering': Controls the activation of the split- | 'split-horizon-filtering': Controls the activation of the split- | |||
horizon filtering for an ES (Section 8.3 of [RFC7432]). | horizon filtering for an ES (Section 8.3 of [RFC7432]). | |||
'pbb': Indicates data nodes that are specific to PBB [IEEE-802-1ah]: | 'pbb': Indicates data nodes that are specific to PBB [IEEE-802-1ah]: | |||
'backbone-src-mac': Associates a Provider Backbone MAC (B-MAC) | 'backbone-src-mac': Associates a Provider Backbone MAC (B-MAC) | |||
address with an ES. This is particularly useful for All-Active | address with an ES. This is particularly useful for All-Active | |||
multihomed ESes (Section 9.1 of [RFC7623]). | multihomed ESes (Section 9.1 of [RFC7623]). | |||
'member': Lists the members of an ES in a service provider network. | 'member': Lists the members of an ES in a service provider network. | |||
7. Description of the L2NM YANG Module | 7. Description of the L2NM YANG Module | |||
The L2NM ('ietf-l2vpn-ntw', Section 8.4) is used to manage L2VPNs | The L2NM ('ietf-l2vpn-ntw'; see Section 8.4) is used to manage L2VPNs | |||
within a service provider network. In particular, the 'ietf-l2vpn- | within a service provider network. In particular, the 'ietf-l2vpn- | |||
ntw' module can be used to create, modify, delete and retrieve L2VPN | ntw' module can be used to create, modify, delete, and retrieve L2VPN | |||
services in a network controller. The module is designed to minimize | services in a network controller. The module is designed to minimize | |||
the amount of customer-related information. | the amount of customer-related information. | |||
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. | |||
Note that the following subsections introduce some data nodes that | Note that the following subsections introduce some data nodes that | |||
enclose textual descriptions (e.g., VPN service (Section 7.3), VPN | enclose textual descriptions (e.g., VPN service (Section 7.3), VPN | |||
skipping to change at page 16, line 5 ¶ | skipping to change at line 597 ¶ | |||
The 'vpn-profiles' container is used by the provider to define and | The 'vpn-profiles' container is used by the provider to define and | |||
maintain a set of common VPN profiles that apply to VPN services | maintain a set of common VPN profiles that apply to VPN services | |||
(Section 7.2). | (Section 7.2). | |||
The 'vpn-services' container maintains the set of L2VPN services | The 'vpn-services' container maintains the set of L2VPN services | |||
managed in the service provider network. The module allows creating | managed in the service provider network. The module allows creating | |||
a new L2VPN service by adding a new instance of 'vpn-service'. The | a new L2VPN service by adding a new instance of 'vpn-service'. The | |||
'vpn-service' is the data structure that abstracts the VPN service | 'vpn-service' is the data structure that abstracts the VPN service | |||
(Section 7.3). | (Section 7.3). | |||
module: ietf-l2vpn-ntw | module: ietf-l2vpn-ntw | |||
+--rw l2vpn-ntw | +--rw l2vpn-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 4: Overall L2NM Tree Structure | Figure 4: Overall L2NM Tree Structure | |||
7.2. VPN Profiles | 7.2. VPN Profiles | |||
The 'vpn-profiles' container (Figure 5) is used by a VPN service | The 'vpn-profiles' container (Figure 5) is used by a VPN service | |||
provider to define and maintain a set of VPN profiles [RFC9181] that | provider to define and maintain a set of VPN profiles [RFC9181] that | |||
apply to one or several VPN services. | apply to one or several VPN services. | |||
+--rw l2vpn-ntw | +--rw l2vpn-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 5: VPN Profiles Subtree Structure | Figure 5: VPN Profiles Subtree Structure | |||
The exact definition of these profiles is local to each VPN service | The exact definition of these profiles is local to each VPN service | |||
provider. The model only includes an identifier for these profiles | provider. The model only includes an identifier for these profiles | |||
in order to ease identifying and binding local policies when building | in order to ease identifying and binding local policies when building | |||
a VPN service. As shown in Figure 5, the following identifiers can | a VPN service. As shown in Figure 5, the following identifiers can | |||
be included: | 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). External connectivity may be | service (or a subset of VPN sites). External connectivity may be | |||
access to the Internet or restricted connectivity, such as access | access to the Internet or restricted connectivity such as 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 as set of policies, such as classification, marking, and | to a set of policies such as classification, marking, and actions | |||
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 policies [RFC5880] 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 ACLs. | VPN. Such policies may consist of, for example, applying 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 an L2VPN | The 'vpn-service' is the data structure that abstracts an L2VPN | |||
service in the service provider network. Each 'vpn-service' is | service in the service provider network. Each 'vpn-service' is | |||
uniquely identified by an identifier: 'vpn-id'. Such a 'vpn-id' is | uniquely identified by an identifier: 'vpn-id'. Such a 'vpn-id' is | |||
only meaningful locally within the network controller. The subtree | only meaningful locally within the network controller. The subtree | |||
of the 'vpn-services' is shown in Figure 6. | of the 'vpn-services' is shown in Figure 6. | |||
+--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 bgp-ad-enabled? boolean | +--rw bgp-ad-enabled? boolean | |||
+--rw signaling-type? identityref | +--rw signaling-type? identityref | |||
+--rw global-parameters-profiles | +--rw global-parameters-profiles | |||
| ... | | ... | |||
+--rw underlay-transport | +--rw underlay-transport | |||
| +--rw (type)? | | +--rw (type)? | |||
| +--:(abstract) | | +--:(abstract) | |||
| | +--rw transport-instance-id? string | | | +--rw transport-instance-id? string | |||
| | +--rw instance-type? identityref | | | +--rw instance-type? identityref | |||
| +--:(protocol) | | +--:(protocol) | |||
| +--rw protocol* identityref | | +--rw protocol* 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-nodes | +--rw vpn-nodes | |||
... | ... | |||
Figure 6: VPN Services Subtree | Figure 6: VPN Services Subtree | |||
The descriptions of the VPN service data nodes that are depicted in | The descriptions of the VPN service data nodes that are depicted in | |||
Figure 6 are as follows: | Figure 6 are as follows: | |||
'vpn-id': An identifier that is used to uniquely identify the L2VPN | 'vpn-id': An identifier that is used to uniquely identify the L2VPN | |||
service within the L2NM scope. | service within the L2NM scope. | |||
'vpn-name': Associates a name with the service in order to | 'vpn-name': Associates a name with the service in order to | |||
skipping to change at page 19, line 6 ¶ | skipping to change at line 730 ¶ | |||
'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., the L2SM, IETF network slice, VPN+) that triggered the | (e.g., the L2SM, IETF network slice, and VPN+) that triggered the | |||
creation of the L2VPN service. This identifier is used to easily | creation of the L2VPN service. This identifier is used to easily | |||
correlate the (network) service as built in the network with a | correlate the (network) service as built in the network with a | |||
service order. A controller can use that correlation to enrich or | service 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 L2VPN type. The following types, defined | 'vpn-type': Indicates the L2VPN type. The following types, defined | |||
in [RFC9181], can be used for the L2NM: | in [RFC9181], can be used for the L2NM: | |||
'vpls': Virtual Private LAN Service (VPLS) as defined in | 'vpls': Virtual Private LAN Service (VPLS) as defined in | |||
[RFC4761] or [RFC4762]. This type is also used for | [RFC4761] or [RFC4762]. This type is also used for | |||
hierarchical VPLS (H-VPLS) (Section 10 of [RFC4762]). | hierarchical VPLS (H-VPLS) (Section 10 of [RFC4762]). | |||
'vpws': Virtual Private Wire Service (VPWS) as defined in | 'vpws': Virtual Private Wire Service (VPWS) as defined in | |||
Section 3.1.1 of [RFC4664]. | Section 3.1.1 of [RFC4664]. | |||
'vpws-evpn': VPWS as defined in [RFC8214]. | 'vpws-evpn': VPWS EVPNs as defined in [RFC8214]. | |||
'pbb-evpn': Provider Backbone Bridging (PBB) EVPNs as defined in | 'pbb-evpn': Provider Backbone Bridging (PBB) EVPNs as defined in | |||
[RFC7623]. | [RFC7623]. | |||
'mpls-evpn': MPLS-based EVPNs [RFC7432]. | 'mpls-evpn': MPLS-based EVPNs [RFC7432]. | |||
'vxlan-evpn': VXLAN based EVPNs [RFC8365]. | 'vxlan-evpn': VXLAN-based EVPNs [RFC8365]. | |||
The type is used as a condition for the presence of some data | The type is used as a condition for the presence of some data | |||
nodes in the L2NM. | nodes in the L2NM. | |||
'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. These types are | service: hub-spoke, any-to-any, or custom. These types are | |||
defined in [RFC9181]. | defined in [RFC9181]. | |||
'bgp-ad-enabled': Controls whether BGP auto-discovery is enabled. | 'bgp-ad-enabled': Controls whether BGP auto-discovery is enabled. | |||
If so, additional data nodes are included (Section 7.5.1). | If so, additional data nodes are included (Section 7.5.1). | |||
skipping to change at page 19, line 52 ¶ | skipping to change at line 776 ¶ | |||
'signaling-type': Indicates the signaling that is used for setting | 'signaling-type': Indicates the signaling that is used for setting | |||
up pseudowires. Signaling type values are taken from [RFC9181]. | up pseudowires. Signaling type values are taken from [RFC9181]. | |||
The following signaling options are supported: | The following signaling options are supported: | |||
'bgp-signaling': The L2NM supports two flavors of BGP-signaled | 'bgp-signaling': The L2NM supports two flavors of BGP-signaled | |||
L2VPNs: | L2VPNs: | |||
'l2vpn-bgp': The service is a Multipoint VPLS that uses a BGP | 'l2vpn-bgp': The service is a Multipoint VPLS that uses a BGP | |||
control plane as described in [RFC4761] and [RFC6624]. | control plane as described in [RFC4761] and [RFC6624]. | |||
'evpn-bgp': The service is a Multipoint VPLS that uses also a | 'evpn-bgp': The service is a Multipoint VPLS that uses a BGP | |||
BGP control plane, but also includes the additional EVPN | control plane but also includes the additional EVPN features | |||
features and related parameters [RFC7432] and [RFC7209]. | and related parameters as described in [RFC7432] and | |||
[RFC7209]. | ||||
'ldp-signaling': A Multipoint VPLS that uses a mesh of LDP- | 'ldp-signaling': A Multipoint VPLS that uses a mesh of LDP- | |||
signaled Pseudowires [RFC6074]. | signaled pseudowires [RFC6074]. | |||
'l2tp-signaling': The L2NM uses L2TP-signaled Pseudowires as | 'l2tp-signaling': The L2NM uses L2TP-signaled pseudowires as | |||
described in [RFC6074]. | described in [RFC6074]. | |||
Table 1 summarizes the allowed signaling types for each VPN | Table 1 summarizes the allowed signaling types for each VPN | |||
service type ('vpn-type'). See Section 7.5.2 for more details. | service type ('vpn-type'). See Section 7.5.2 for more details. | |||
+============+================================+ | +============+================================+ | |||
| VPN Type | Signaling Options | | | VPN Type | Signaling Options | | |||
+============+================================+ | +============+================================+ | |||
| vpls | l2tp-signaling, ldp-signaling, | | | vpls | l2tp-signaling, ldp-signaling, | | |||
| | bgp-signaling (l2vpn-bgp) | | | | bgp-signaling (l2vpn-bgp) | | |||
skipping to change at page 20, line 34 ¶ | skipping to change at line 808 ¶ | |||
+------------+--------------------------------+ | +------------+--------------------------------+ | |||
| vpws-evpn | bgp-signaling (evpn-bgp) | | | vpws-evpn | bgp-signaling (evpn-bgp) | | |||
+------------+--------------------------------+ | +------------+--------------------------------+ | |||
| pbb-evpn | bgp-signaling (evpn-bgp) | | | pbb-evpn | bgp-signaling (evpn-bgp) | | |||
+------------+--------------------------------+ | +------------+--------------------------------+ | |||
| mpls-evpn | bgp-signaling (evpn-bgp) | | | mpls-evpn | bgp-signaling (evpn-bgp) | | |||
+------------+--------------------------------+ | +------------+--------------------------------+ | |||
| vxlan-evpn | bgp-signaling (evpn-bgp) | | | vxlan-evpn | bgp-signaling (evpn-bgp) | | |||
+------------+--------------------------------+ | +------------+--------------------------------+ | |||
Table 1: Signaling Options per VPN | Table 1: Signaling Options per VPN Service Type | |||
Service Type | ||||
'global-parameters-profiles': Defines reusable parameters for the | 'global-parameters-profiles': Defines reusable parameters for the | |||
same L2VPN service. | same L2VPN 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 (or how such an underlay is set up) are defined | underlay transport (or how such an underlay is set up) are defined | |||
in [RFC9181]. | in [RFC9181]. | |||
The model defined in Section 6.3.2 of | The model defined in Section 6.3.2 of [TE-SERVICE-MAPPING] may be | |||
[I-D.ietf-teas-te-service-mapping-yang] may be used if specific | used if specific protection and availability requirements are | |||
protection and availability requirements are needed between PEs. | needed between PEs. | |||
'status': Used to track the overall status of a given VPN service. | 'status': Used to track the overall status of a given VPN service. | |||
Both operational and administrative status are maintained together | Both operational and administrative status are maintained together | |||
with a timestamp. For example, a service can be created, but not | with a timestamp. For example, a service can be created but not | |||
put into effect. | put into effect. | |||
Administrative and operational status can be used as a trigger to | Administrative and operational status can be used as a trigger to | |||
detect service anomalies. For example, a service that is declared | detect service anomalies. For example, a service that is declared | |||
at the service layer as being created but still inactive at the | at the service layer as being created but still inactive at the | |||
network layer is an indication that network provisioning actions | network layer is an indication that network provisioning actions | |||
are needed to align the observed service status with the expected | are needed to align the observed service status with the expected | |||
service status. | service status. | |||
'vpn-node': An abstraction that represents a set of policies applied | 'vpn-node': An abstraction that represents a set of policies applied | |||
skipping to change at page 21, line 39 ¶ | skipping to change at line 858 ¶ | |||
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, as this is a network data model, the information about | |||
customers sites is not required in the model. Such information is | customers sites is not required in the model. Such information is | |||
rather relevant in the L2SM. Whether that information is included | rather relevant in the L2SM. Whether that information is included | |||
in the L2NM, e.g., to populate the various 'description' data | in the L2NM, e.g., to populate the various 'description' data | |||
nodes is implementation specific. | nodes, is implementation specific. | |||
More details are provided in Section 7.5. | More details are provided in Section 7.5. | |||
7.4. Global Parameters Profiles | 7.4. Global Parameters Profiles | |||
The 'global-parameters-profile' defines reusable parameters for the | The 'global-parameters-profile' defines reusable parameters for the | |||
same L2VPN service instance ('vpn-service'). Global parameters | same L2VPN service instance ('vpn-service'). Global parameters | |||
profiles are defined at the VPN service level, activated at the VPN | profiles are defined at the VPN service level, activated at the VPN | |||
node level, and then an activated VPN profile may be used at the VPN | node level, and then an activated VPN profile may be used at the VPN | |||
network access level. Each VPN instance profile is identified by | network access level. Each VPN instance profile is identified by | |||
'profile-id'. Some of the data nodes can be adjusted at the VPN node | 'profile-id'. Some of the data nodes can be adjusted at the VPN node | |||
or VPN network access levels. These adjusted values take precedence | or VPN network access levels. These adjusted values take precedence | |||
over the global values. The subtree of 'global-parameters-profile' | over the global values. The subtree of 'global-parameters-profile' | |||
is depicted in Figure 7. | is depicted in Figure 7. | |||
... | ... | |||
+--rw vpn-services | +--rw vpn-services | |||
+--rw vpn-service* [vpn-id] | +--rw vpn-service* [vpn-id] | |||
... | ... | |||
+--rw global-parameters-profiles | +--rw global-parameters-profiles | |||
| +--rw global-parameters-profile* [profile-id] | | +--rw global-parameters-profile* [profile-id] | |||
| +--rw profile-id string | | +--rw profile-id string | |||
| +--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 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 rt-types:route-target | | | | +--rw 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 local-autonomous-system? inet:as-number | | +--rw local-autonomous-system? inet:as-number | |||
| +--rw svc-mtu? uint32 | | +--rw svc-mtu? uint32 | |||
| +--rw ce-vlan-preservation? boolean | | +--rw ce-vlan-preservation? boolean | |||
| +--rw ce-vlan-cos-preservation? boolean | | +--rw ce-vlan-cos-preservation? boolean | |||
| +--rw control-word-negotiation? boolean | | +--rw control-word-negotiation? boolean | |||
| +--rw mac-policies | | +--rw mac-policies | |||
| | +--rw mac-addr-limit | | | +--rw mac-addr-limit | |||
| | | +--rw limit-number? uint16 | | | | +--rw limit-number? uint16 | |||
| | | +--rw time-interval? uint32 | | | | +--rw time-interval? uint32 | |||
| | | +--rw action? identityref | | | | +--rw action? identityref | |||
| | +--rw mac-loop-prevention | | | +--rw mac-loop-prevention | |||
| | +--rw window? uint32 | | | +--rw window? uint32 | |||
| | +--rw frequency? uint32 | | | +--rw frequency? uint32 | |||
| | +--rw retry-timer? uint32 | | | +--rw retry-timer? uint32 | |||
| | +--rw protection-type? identityref | | | +--rw protection-type? identityref | |||
| +--rw multicast {vpn-common:multicast}? | | +--rw multicast {vpn-common:multicast}? | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw customer-tree-flavors | | +--rw customer-tree-flavors | |||
| +--rw tree-flavor* identityref | | +--rw tree-flavor* identityref | |||
... | ... | |||
Figure 7: Global Parameters Profiles Subtree | Figure 7: Global Parameters Profiles Subtree | |||
The description of the global parameters profile is as follows: | The description of the global parameters profile is as follows: | |||
'profile-id': Uniquely identifies a global parameter profile in the | 'profile-id': Uniquely identifies a global parameter profile in the | |||
context of an L2VPN service. | context of an L2VPN service. | |||
'rd': As defined in [RFC9181], these RD assignment modes are | 'rd': As defined in [RFC9181], these RD assignment modes are | |||
supported: direct assignment, automatic assignment from a given | supported: direct assignment, automatic assignment from a given | |||
pool, full automatic assignment, and no assignment. | pool, full automatic assignment, and no assignment. | |||
Also, the module accommodates deployments where only the Assigned | Also, the module accommodates deployments where only the Assigned | |||
Number subfield of RDs is assigned from a pool while the | Number subfield of RDs is assigned from a pool while the | |||
Administrator subfield is set to, e.g., the Router ID that is | Administrator subfield is set to, e.g., the Router ID that is | |||
assigned to a VPN node. The module supports these modes for | assigned to a VPN node. The module supports these modes to manage | |||
managing the Assigned Number subfield: explicit assignment, auto- | the Assigned Number subfield: explicit assignment, auto-assignment | |||
assignment from a pool, and full auto-assignment. | from a pool, and full auto-assignment. | |||
'vpn-targets': Specifies RT import/export rules for the VPN service. | 'vpn-targets': Specifies RT import/export rules for the VPN service. | |||
'local-autonomous-system': Indicates the Autonomous System Number | 'local-autonomous-system': Indicates the Autonomous System Number | |||
(ASN) that is configured for the VPN node. The ASN can be used to | (ASN) that is configured for the VPN node. The ASN can be used to | |||
auto-derive some other attributes such as RDs or Ethernet Segment | auto-derive some other attributes such as RDs or Ethernet Segment | |||
Identifiers (ESIs). | Identifiers (ESIs). | |||
'svc-mtu': Is the service MTU for an L2VPN service (i.e., Layer 2 | 'svc-mtu': Is the service MTU for an L2VPN service (i.e., a Layer 2 | |||
MTU including L2 frame header/trailer). It is also known as the | MTU including an L2 frame header/trailer). It is also known as | |||
maximum transmission unit or maximum frame size. It is expressed | the maximum transmission unit or maximum frame size. It is | |||
in bytes. | expressed in bytes. | |||
'ce-vlan-preservation': Is set to preserve the Customer Edge VLAN | 'ce-vlan-preservation': Is set to preserve the Customer Edge VLAN | |||
IDs (CE-VLAN IDs) from ingress to egress, i.e., CE-VLAN tag of the | (CE VLAN) IDs from ingress to egress, i.e., CE VLAN tags of the | |||
egress frame are identical to those of the ingress frame that | egress frame are identical to those of the ingress frame that | |||
yielded this egress service frame. If all-to-one bundling within | yielded this egress service frame. If all-to-one bundling within | |||
a site is enabled, then preservation applies to all ingress | a site is enabled, then preservation applies to all ingress | |||
service frames. If all-to-one bundling is disabled, then | service frames. If all-to-one bundling is disabled, then | |||
preservation applies to tagged Ingress service frames having CE- | preservation applies to tagged Ingress service frames having CE | |||
VLAN ID 1 through 4094. | VLAN ID 1 through 4094. | |||
'ce-vlan-cos-preservation': Controls the CE VLAN CoS preservation. | 'ce-vlan-cos-preservation': Controls the CE VLAN Class of Service | |||
When set, Priority Code Point (PCP) bits in the CE-VLAN tag of the | (CoS) preservation. When set, Priority Code Point (PCP) bits in | |||
egress frame are identical to those of the ingress frame that | the CE VLAN tag of the egress frame are identical to those of the | |||
yielded this egress service frame. | ingress frame that yielded this egress service frame. | |||
'control-word-negotiation': Controls whether control-word | 'control-word-negotiation': Controls whether control-word | |||
negotiation is enabled (if set to true) or not (if set to false). | negotiation is enabled (if set to true) or not (if set to false). | |||
Refer to Section 7 of [RFC8077] for more details. | Refer to Section 7 of [RFC8077] for more details. | |||
'mac-policies': Includes a set of MAC policies that apply to the | 'mac-policies': Includes a set of MAC policies that apply to the | |||
service: | service: | |||
'mac-addr-limit': Is a container of MAC address limit | 'mac-addr-limit': Is a container of MAC address limit | |||
configuration. It includes the following data nodes: | configuration. It includes the following data nodes: | |||
skipping to change at page 25, line 10 ¶ | skipping to change at line 1020 ¶ | |||
the duplicate MAC address will be flushed from the MAC-VRF. | the duplicate MAC address will be flushed from the MAC-VRF. | |||
'protection-type': It defines the loop prevention type (e.g., | 'protection-type': It defines the loop prevention type (e.g., | |||
shut). | shut). | |||
'multicast': Controls whether multicast is allowed in the service. | 'multicast': Controls whether multicast is allowed in the service. | |||
7.5. VPN Nodes | 7.5. VPN Nodes | |||
The 'vpn-node' (Figure 8) is an abstraction that represents a set of | The 'vpn-node' (Figure 8) is an abstraction that represents a set of | |||
policies/configurations applied to a network node and that belong to | policies applied to a network node that belongs to a single 'vpn- | |||
a single 'vpn-service'. A 'vpn-node' contains 'vpn-network- | service'. A 'vpn-node' contains 'vpn-network-accesses', which are | |||
accesses', which are the interfaces involved in the creation of the | the interfaces involved in the creation of the VPN. The customer | |||
VPN. The customer sites are connected to the 'vpn-network-accesses'. | sites are connected to the 'vpn-network-accesses'. | |||
+--rw l2vpn-ntw | +--rw l2vpn-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 | |||
+--rw description? string | +--rw description? string | |||
+--rw ne-id? string | +--rw ne-id? string | |||
+--rw role? identityref | +--rw role? identityref | |||
+--rw router-id? rt-types:router-id | +--rw router-id? rt-types:router-id | |||
+--rw active-global-parameters-profiles | +--rw active-global-parameters-profiles | |||
| +--rw global-parameters-profile* [profile-id] | | +--rw global-parameters-profile* [profile-id] | |||
| +--rw profile-id leafref | | +--rw profile-id leafref | |||
| +--rw local-autonomous-system? | | +--rw local-autonomous-system? | |||
| | inet:as-number | | | inet:as-number | |||
| +--rw svc-mtu? uint32 | | +--rw svc-mtu? uint32 | |||
| +--rw ce-vlan-preservation? boolean | | +--rw ce-vlan-preservation? boolean | |||
| +--rw ce-vlan-cos-preservation? boolean | | +--rw ce-vlan-cos-preservation? boolean | |||
| +--rw control-word-negotiation? boolean | | +--rw control-word-negotiation? boolean | |||
| +--rw mac-policies | | +--rw mac-policies | |||
| | +--rw mac-addr-limit | | | +--rw mac-addr-limit | |||
| | | +--rw limit-number? uint16 | | | | +--rw limit-number? uint16 | |||
| | | +--rw time-interval? uint32 | | | | +--rw time-interval? uint32 | |||
| | | +--rw action? identityref | | | | +--rw action? identityref | |||
| | +--rw mac-loop-prevention | | | +--rw mac-loop-prevention | |||
| | +--rw window? uint32 | | | +--rw window? uint32 | |||
| | +--rw frequency? uint32 | | | +--rw frequency? uint32 | |||
| | +--rw retry-timer? uint32 | | | +--rw retry-timer? uint32 | |||
| | +--rw protection-type? identityref | | | +--rw protection-type? identityref | |||
| +--rw multicast {vpn-common:multicast}? | | +--rw multicast {vpn-common:multicast}? | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw customer-tree-flavors | | +--rw customer-tree-flavors | |||
| +--rw tree-flavor* identityref | | +--rw tree-flavor* identityref | |||
+--rw status | +--rw status | |||
| ... | | ... | |||
+--rw bgp-auto-discovery | +--rw bgp-auto-discovery | |||
| ... | | ... | |||
+--rw signaling-option | +--rw signaling-option | |||
| ... | | ... | |||
+--rw vpn-network-accesses | +--rw vpn-network-accesses | |||
... | ... | |||
Figure 8: VPN Nodes Subtree | Figure 8: VPN Nodes Subtree | |||
The descriptions of VPN node data nodes are as follows: | The descriptions of VPN node data nodes are as follows: | |||
'vpn-node-id': Used to uniquely identify a node that enables a VPN | 'vpn-node-id': Used to uniquely identify a node that enables a VPN | |||
network access. | network access. | |||
'description': Provides a textual description of the VPN node. | 'description': Provides a textual description of the VPN node. | |||
'ne-id': Includes an identifier of the network element where the VPN | 'ne-id': Includes an identifier of the network element where the VPN | |||
node is deployed. | node is deployed. | |||
'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 [RFC9181] (e.g., 'any-to-any-role', | Role values are defined in [RFC9181] (e.g., 'any-to-any-role', | |||
'spoke-role', 'hub-role'). | 'spoke-role', and 'hub-role'). | |||
'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 (AS). | identify a router within an AS. | |||
'active-global-parameters-profiles': Lists the set of active global | 'active-global-parameters-profiles': Lists the set of active global | |||
VPN parameters profiles for this VPN node. Concretely, one or | VPN parameter profiles for this VPN node. Concretely, one or more | |||
more global profiles that are defined at the VPN service level | global profiles that are defined at the VPN service level (i.e., | |||
(i.e., under 'l2vpn-ntw/vpn-services/vpn-service' level) can be | under 'l2vpn-ntw/vpn-services/vpn-service' level) can be activated | |||
activated at the VPN node level; each of these profiles is | at the VPN node level; each of these profiles is uniquely | |||
uniquely identified by means of 'profile-id'. The structure of | identified by means of 'profile-id'. The structure of 'active- | |||
'active-global-parameters-profiles' uses the same data nodes as | global-parameters-profiles' uses the same data nodes as | |||
Section 7.4 except RD and RT related data nodes. | Section 7.4 with the exception of the data nodes related to RD and | |||
RT. | ||||
Values defined in 'active-global-parameters-profiles' overrides | Values defined in 'active-global-parameters-profiles' override the | |||
the values defined in the VPN service level. | values defined in the VPN service level. | |||
'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 and administrative status are maintained. A | |||
mismatch between the administrative status vs. the operational | 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. | |||
'bgp-auto-discovery': See Section 7.5.1. | 'bgp-auto-discovery': See Section 7.5.1. | |||
'signaling-option': See Section 7.5.2. | 'signaling-option': See Section 7.5.2. | |||
'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 the L2SM, the L2NM does not need to model the | Note that, unlike the L2SM, the L2NM does not need to model the | |||
customer site -- only the points that receive traffic from the | customer site; only the points that receive traffic from the site | |||
site are covered (i.e., the PE side of Provider Edge to Customer | are covered (i.e., the PE side of Provider Edge to Customer Edge | |||
Edge (PE-CE) connections). Hence, the VPN network access contains | (PE-CE) connections). Hence, the VPN network access contains the | |||
the connectivity information between the provider's network and | connectivity information between the provider's network and the | |||
the customer premises. The VPN profiles ('vpn-profiles') have a | customer premises. The VPN profiles ('vpn-profiles') have a set | |||
set of routing policies that can be applied during the service | of routing policies that can be applied during the service | |||
creation. | creation. | |||
See Section 7.6 for more details. | See Section 7.6 for more details. | |||
7.5.1. BGP Auto-Discovery | 7.5.1. BGP Auto-Discovery | |||
The 'bgp-auto-discovery' container (Figure 9) includes the required | The 'bgp-auto-discovery' container (Figure 9) includes the required | |||
information for the activation of BGP auto-discovery | information for the activation of BGP auto-discovery | |||
[RFC4761][RFC6624]. | [RFC4761][RFC6624]. | |||
skipping to change at page 29, line 24 ¶ | skipping to change at line 1191 ¶ | |||
| +--rw vpn-policies | | +--rw vpn-policies | |||
| +--rw import-policy? string | | +--rw import-policy? string | |||
| +--rw export-policy? string | | +--rw export-policy? string | |||
+--rw signaling-option | +--rw signaling-option | |||
| ... | | ... | |||
+--rw vpn-network-accesses | +--rw vpn-network-accesses | |||
... | ... | |||
Figure 9: BGP Auto-Discovery Subtree | Figure 9: BGP Auto-Discovery Subtree | |||
As discussed in Section 1 of [RFC6624], all of BGP-based methods | As discussed in Section 1 of [RFC6624], all BGP-based methods include | |||
include the notion of a VPN identifier that serves to unify | the notion of a VPN identifier that serves to unify components of a | |||
components of a given VPN and the concept of auto-discovery; hence | given VPN and the concept of auto-discovery, hence the support of the | |||
the support of the data node 'vpn-id'. | data node 'vpn-id'. | |||
For the particular case of EVPN, the L2NM supports RT auto-derivation | For the particular case of EVPN, the L2NM supports RT auto-derivation | |||
based on the Ethernet Tag ID specified in Section 7.10.1 of | based on the Ethernet Tag ID specified in Section 7.10.1 of | |||
[RFC7432]. A VPN service provider can enable/disable this | [RFC7432]. A VPN service provider can enable/disable this | |||
functionality by means of 'auto-rt-enable'. The assigned RT can be | functionality by means of 'auto-rt-enable'. The assigned RT can be | |||
retrieved using 'auto-route-target'. | retrieved using 'auto-route-target'. | |||
For all BGP-based L2VPN flavors, other data nodes such as RD and RT | For all BGP-based L2VPN flavors, other data nodes such as RD and RT | |||
are used. These data nodes have the same structure as the one | are used. These data nodes have the same structure as the one | |||
discussed in Section 7.4. | discussed in Section 7.4. | |||
7.5.2. Signaling Options | 7.5.2. Signaling Options | |||
The 'signaling-option' container (Figure 10) defines a set of data | The 'signaling-option' container (Figure 10) defines a set of data | |||
nodes for a given signaling protocol that is used for an L2VPN | nodes for a given signaling protocol that is used for an L2VPN | |||
service. As discussed in Section 7.3, several signaling options to | service. As discussed in Section 7.3, several signaling options to | |||
exchange membership information between PEs of an L2VPN are | exchange membership information between PEs of an L2VPN are | |||
supported. The signaling type to be used for an L2VPN service is | supported. The signaling type to be used for an L2VPN service is | |||
controlled at the VPN service level by means of 'signaling-type'. | controlled at the VPN service level by means of 'signaling-type'. | |||
... | ... | |||
+--rw vpn-nodes | +--rw vpn-nodes | |||
+--rw vpn-node* [vpn-node-id] | +--rw vpn-node* [vpn-node-id] | |||
... | ... | |||
+--rw signaling-option | +--rw signaling-option | |||
| +--rw advertise-mtu? boolean | | +--rw advertise-mtu? boolean | |||
| +--rw mtu-allow-mismatch? boolean | | +--rw mtu-allow-mismatch? boolean | |||
| +--rw signaling-type? leafref | | +--rw signaling-type? leafref | |||
| +--rw (signaling-option)? | | +--rw (signaling-option)? | |||
| +--:(bgp) | | +--:(bgp) | |||
| | ... | | | ... | |||
| +--:(ldp-or-l2tp) | | +--:(ldp-or-l2tp) | |||
| +--rw ldp-or-l2tp | | +--rw ldp-or-l2tp | |||
| ... | | ... | |||
| +--rw (ldp-or-l2tp)? | | +--rw (ldp-or-l2tp)? | |||
| +--:(ldp) | | +--:(ldp) | |||
| | ... | | | ... | |||
| +--:(l2tp) | | +--:(l2tp) | |||
| ... | | ... | |||
Figure 10: Signaling Option Overall Subtree | Figure 10: Signaling Option Overall Subtree | |||
The following signaling data nodes are supported: | The following signaling data nodes are supported: | |||
'advertise-mtu': Controls whether MTU is advertised when setting a | 'advertise-mtu': Controls whether MTU is advertised when setting a | |||
pseudowire (e.g., Section 4.3 of [RFC4667], Section 5.1 of | pseudowire (e.g., Section 4.3 of [RFC4667], Section 5.1 of | |||
[RFC6624], or Section 6.1 of [RFC4762]). | [RFC6624], or Section 6.1 of [RFC4762]). | |||
'mtu-allow-mismatch': When set to true, it allows MTU mismatch for a | 'mtu-allow-mismatch': When set to true, it allows an MTU mismatch | |||
pseudowire (see, e.g., Section 4.3 of [RFC4667]). | for a pseudowire (see, e.g., Section 4.3 of [RFC4667]). | |||
'signaling-type': Indicates the signaling type. This type inherits | 'signaling-type': Indicates the signaling type. This type inherits | |||
the value of 'signaling-type' defined at the service level | the value of 'signaling-type' defined at the service level | |||
(Section 7.3). | (Section 7.3). | |||
'bgp': Is provided when BGP is used for L2VPN signaling. Refer to | 'bgp': Is provided when BGP is used for L2VPN signaling. Refer to | |||
Section 7.5.2.1 for more details. | Section 7.5.2.1 for more details. | |||
'ldp': The model supports the configuration of the parameters that | 'ldp': The model supports the configuration of the parameters that | |||
are discussed in Section 6 of [RFC4762]. Refer to Section 7.5.2.2 | are discussed in Section 6 of [RFC4762]. Refer to Section 7.5.2.2 | |||
skipping to change at page 31, line 13 ¶ | skipping to change at line 1269 ¶ | |||
for more details. | for more details. | |||
Note that LDP and L2TP choices are bundled ("ldp-or-l2tp") because | Note that LDP and L2TP choices are bundled ("ldp-or-l2tp") because | |||
they share a set of common parameters that are further detailed in | they share a set of common parameters that are further detailed in | |||
Sections 7.5.2.2 and 7.5.2.3. | Sections 7.5.2.2 and 7.5.2.3. | |||
7.5.2.1. BGP | 7.5.2.1. BGP | |||
The structure of the BGP-related data nodes is provided in Figure 11. | The structure of the BGP-related data nodes is provided in Figure 11. | |||
... | ... | |||
| +--rw (signaling-option)? | | +--rw (signaling-option)? | |||
| ... | | ... | |||
| +--:(bgp) | | +--:(bgp) | |||
| | +--rw (bgp-type)? | | | +--rw (bgp-type)? | |||
| | +--:(l2vpn-bgp) | | | +--:(l2vpn-bgp) | |||
| | | +--rw ce-range? uint16 | | | | +--rw ce-range? uint16 | |||
| | | +--rw pw-encapsulation-type? | | | | +--rw pw-encapsulation-type? | |||
| | | | identityref | | | | | identityref | |||
| | | +--rw vpls-instance | | | | +--rw vpls-instance | |||
| | | +--rw vpls-edge-id? uint16 | | | | +--rw vpls-edge-id? uint16 | |||
| | | +--rw vpls-edge-id-range? uint16 | | | | +--rw vpls-edge-id-range? uint16 | |||
| | +--:(evpn-bgp) | | | +--:(evpn-bgp) | |||
| | +--rw evpn-type? leafref | | | +--rw evpn-type? leafref | |||
| | +--rw service-interface-type? | | | +--rw service-interface-type? | |||
| | | identityref | | | | identityref | |||
| | +--rw evpn-policies | | | +--rw evpn-policies | |||
| | +--rw mac-learning-mode? | | | +--rw mac-learning-mode? | |||
| | | identityref | | | | identityref | |||
| | +--rw ingress-replication? | | | +--rw ingress-replication? | |||
| | | boolean | | | | boolean | |||
| | +--rw p2mp-replication? | | | +--rw p2mp-replication? | |||
| | | boolean | | | | boolean | |||
| | +--rw arp-proxy {vpn-common:ipv4}? | | | +--rw arp-proxy {vpn-common:ipv4}? | |||
| | | +--rw enable? boolean | | | | +--rw enable? boolean | |||
| | | +--rw arp-suppression? | | | | +--rw arp-suppression? | |||
| | | | boolean | | | | | boolean | |||
| | | +--rw ip-mobility-threshold? | | | | +--rw ip-mobility-threshold? | |||
| | | | uint16 | | | | | uint16 | |||
| | | +--rw duplicate-ip-detection-interval? | | | | +--rw duplicate-ip-detection-interval? | |||
| | | uint16 | | | | uint16 | |||
| | +--rw nd-proxy {vpn-common:ipv6}? | | | +--rw nd-proxy {vpn-common:ipv6}? | |||
| | | +--rw enable? boolean | | | | +--rw enable? boolean | |||
| | | +--rw nd-suppression? | | | | +--rw nd-suppression? | |||
| | | | boolean | | | | | boolean | |||
| | | +--rw ip-mobility-threshold? | | | | +--rw ip-mobility-threshold? | |||
| | | | uint16 | | | | | uint16 | |||
| | | +--rw duplicate-ip-detection-interval? | | | | +--rw duplicate-ip-detection-interval? | |||
| | | uint16 | | | | uint16 | |||
| | +--rw underlay-multicast? | | | +--rw underlay-multicast? | |||
| | | boolean | | | | boolean | |||
| | +--rw flood-unknown-unicast-supression? | | | +--rw flood-unknown-unicast-suppression? | |||
| | | boolean | | | | boolean | |||
| | +--rw vpws-vlan-aware? boolean | | | +--rw vpws-vlan-aware? boolean | |||
| | +--rw bum-management | | | +--rw bum-management | |||
| | | +--rw discard-broadcast? | | | | +--rw discard-broadcast? | |||
| | | | boolean | | | | | boolean | |||
| | | +--rw discard-unknown-multicast? | | | | +--rw discard-unknown-multicast? | |||
| | | | boolean | | | | | boolean | |||
| | | +--rw discard-unknown-unicast? | | | | +--rw discard-unknown-unicast? | |||
| | | boolean | | | | boolean | |||
| | +--rw pbb | | | +--rw pbb | |||
| | +--rw backbone-src-mac? | | | +--rw backbone-src-mac? | |||
| | yang:mac-address | | | yang:mac-address | |||
| +--:(ldp-or-l2tp) | | +--:(ldp-or-l2tp) | |||
| ... | | ... | |||
Figure 11: Signaling Option Subtree (BGP) | Figure 11: Signaling Option Subtree (BGP) | |||
Remote CEs that are entitled to connect to the same VPN should fit | Remote CEs that are entitled to connect to the same VPN should fit | |||
with the CE range ('ce-range') as discussed in Section 2.2.3 of | with the CE range ('ce-range') as discussed in Section 2.2.3 of | |||
[RFC6624]. 'pw-encapsulation-type' is used to control the pseudowire | [RFC6624]. 'pw-encapsulation-type' is used to control the pseudowire | |||
encapsulation type (Section 3 of [RFC6624]). The value of the 'pw- | encapsulation type (Section 3 of [RFC6624]). The value of the 'pw- | |||
encapsulation-type' are taken from the IANA-maintained "iana-bgp- | encapsulation-type' is taken from the IANA-maintained "iana-bgp- | |||
l2-encaps" module (Section 8.1). | l2-encaps" module (Section 8.1). | |||
For the specific case of VPLS, the VPLS Edge ID (VE ID, 'vpls-edge- | For the specific case of VPLS, the VPLS Edge Identifier (VE ID) | |||
id') and a VE ID range ('vpls-edge-id-range') are provided as per | ('vpls-edge-id') and a VE ID range ('vpls-edge-id-range') are | |||
Section 3.2 of [RFC4761]. If different VE IDs are required (e.g., | provided as per Section 3.2 of [RFC4761]. If different VE IDs are | |||
multihoming as per Section 3.5 of [RFC4761]), these IDs are | required (e.g., multihoming as per Section 3.5 of [RFC4761]), these | |||
configured at the VPN network access level (under 'signaling-option' | IDs are configured at the VPN network access level (under 'signaling- | |||
in Section 7.6). | option' in Section 7.6). | |||
For EVPN-related L2VPNs, 'service-interface-type' indicates whether | For EVPN-related L2VPNs, 'service-interface-type' indicates whether | |||
this is a VLAN-based, VLAN bundle, or VLAN-aware bundle service | this is a VLAN-based, VLAN-aware, or VLAN bundle service interface | |||
interface (Section 6 of [RFC7432]). Moreover, a set of policies can | (Section 6 of [RFC7432]). Moreover, a set of policies can be | |||
be provided such as MAC address learning mode (Section 9 of | provided such as the MAC address learning mode (Section 9 of | |||
[RFC7432]), ingress replication (Section 12.1 of [RFC7432]), Address | [RFC7432]), ingress replication (Section 12.1 of [RFC7432]), the | |||
Resolution Protocol (ARP) and Nighbor Discovery (ND) proxy | Address Resolution Protocol (ARP) and Neighbor Discovery (ND) proxy | |||
(Section 10 of [RFC7432]), processing of Broadcast, unknown unicast, | (Section 10 of [RFC7432]), the processing of Broadcast, Unknown | |||
or multicast (BUM) (Section 12 of [RFC7432]), etc. | Unicast, or Multicast (BUM) (Section 12 of [RFC7432]), etc. | |||
7.5.2.2. LDP | 7.5.2.2. LDP | |||
The model supports the configuration of the parameters that are | The L2NM supports the configuration of the parameters that are | |||
discussed in Section 6 of [RFC4762]. Such parameters include an | discussed in Section 6 of [RFC4762]. Such parameters include an | |||
Attachment Group Identifier (AGI) (a.k.a., VPLS-id), a Source | Attachment Group Identifier (AGI) (a.k.a., VPLS-id), a Source | |||
Attachment Individual Identifier (SAII), a list of peers that are | Attachment Individual Identifier (SAII), a list of peers that are | |||
associated with a Target Attachment Individual Identifier (TAII), a | associated with a Target Attachment Individual Identifier (TAII), a | |||
pseudowire type, and a pseudowire description (Figure 12). Unlike | pseudowire type, and a pseudowire description (Figure 12). Unlike | |||
BGP, only Ethernet and Ethernet tagged mode are supported. The AGI, | BGP, only Ethernet and Ethernet tagged mode are supported. The AGI, | |||
SAII, and TAII are encoded following the types defined in Section 3.4 | SAII, and TAII are encoded following the types defined in Section 3.4 | |||
of [RFC4446]. | of [RFC4446]. | |||
... | ... | |||
| +--rw (signaling-option)? | | +--rw (signaling-option)? | |||
| ... | | ... | |||
| +--:(bgp) | | +--:(bgp) | |||
| | ... | | | ... | |||
| +--:(ldp-or-l2tp) | | +--:(ldp-or-l2tp) | |||
| +--rw ldp-or-l2tp | | +--rw ldp-or-l2tp | |||
| +--rw agi? | | +--rw agi? | |||
| | rt-types:route-distinguisher | | | rt-types:route-distinguisher | |||
| +--rw saii? uint32 | | +--rw saii? uint32 | |||
| +--rw remote-targets* [taii] | | +--rw remote-targets* [taii] | |||
| | +--rw taii uint32 | | | +--rw taii uint32 | |||
| | +--rw peer-addr inet:ip-address | | | +--rw peer-addr inet:ip-address | |||
| +--rw (ldp-or-l2tp)? | | +--rw (ldp-or-l2tp)? | |||
| +--:(ldp) | | +--:(ldp) | |||
| | +--rw t-ldp-pw-type? | | | +--rw t-ldp-pw-type? | |||
| | | identityref | | | | identityref | |||
| | +--rw pw-type? identityref | | | +--rw pw-type? identityref | |||
| | +--rw pw-description? string | | | +--rw pw-description? string | |||
| | +--rw mac-addr-withdraw? boolean | | | +--rw mac-addr-withdraw? boolean | |||
| | +--rw pw-peer-list* | | | +--rw pw-peer-list* | |||
| | | [peer-addr vc-id] | | | | [peer-addr vc-id] | |||
| | | +--rw peer-addr | | | | +--rw peer-addr | |||
| | | | inet:ip-address | | | | | inet:ip-address | |||
| | | +--rw vc-id string | | | | +--rw vc-id string | |||
| | | +--rw pw-priority? uint32 | | | | +--rw pw-priority? uint32 | |||
| | +--rw qinq | | | +--rw qinq | |||
| | +--rw s-tag dot1q-types:vlanid | | | +--rw s-tag dot1q-types:vlanid | |||
| | +--rw c-tag dot1q-types:vlanid | | | +--rw c-tag dot1q-types:vlanid | |||
| +--:(l2tp) | | +--:(l2tp) | |||
| ... | | ... | |||
... | ... | |||
Figure 12: Signaling Option Subtree (LDP) | Figure 12: Signaling Option Subtree (LDP) | |||
7.5.2.3. L2TP | 7.5.2.3. L2TP | |||
The model supports the configuration of the parameters that are | The L2NM supports the configuration of the parameters that are | |||
discussed in Section 4 of [RFC4667]. Such parameters include a | discussed in Section 4 of [RFC4667]. Such parameters include a | |||
Router ID that is used to uniquely identify a PE, a pseudowire type, | Router ID that is used to uniquely identify a PE, a pseudowire type, | |||
an AGI, an SAII, and a list of peers that are associated with a TAII | an AGI, an SAII, and a list of peers that are associated with a TAII | |||
(Figure 13). The pseudowire type ('pseudowire-type') value is taken | (Figure 13). The pseudowire type ('pseudowire-type') value is taken | |||
from the IANA-maintained "iana-pseudowire-types" module | from the IANA-maintained "iana-pseudowire-types" module | |||
(Section 8.2). | (Section 8.2). | |||
... | ... | |||
| +--rw (signaling-option)? | | +--rw (signaling-option)? | |||
| ... | | ... | |||
| +--:(bgp) | | +--:(bgp) | |||
| | ... | | | ... | |||
| +--:(ldp-or-l2tp) | | +--:(ldp-or-l2tp) | |||
| +--rw ldp-or-l2tp | | +--rw ldp-or-l2tp | |||
| +--rw agi? | | +--rw agi? | |||
| | rt-types:route-distinguisher | | | rt-types:route-distinguisher | |||
| +--rw saii? uint32 | | +--rw saii? uint32 | |||
| +--rw remote-targets* [taii] | | +--rw remote-targets* [taii] | |||
| | +--rw taii uint32 | | | +--rw taii uint32 | |||
| | +--rw peer-addr inet:ip-address | | | +--rw peer-addr inet:ip-address | |||
| +--rw (ldp-or-l2tp)? | | +--rw (ldp-or-l2tp)? | |||
| +--:(ldp) | | +--:(ldp) | |||
| | ... | | | ... | |||
| +--:(l2tp) | | +--:(l2tp) | |||
| +--rw router-id? | | +--rw router-id? | |||
| | rt-types:router-id | | | rt-types:router-id | |||
| +--rw pseudowire-type? | | +--rw pseudowire-type? | |||
| identityref | | identityref | |||
... | ... | |||
Figure 13: Signaling Option Subtree (L2TP) | Figure 13: Signaling Option Subtree (L2TP) | |||
7.6. VPN Network Accesses | 7.6. VPN Network Accesses | |||
A 'vpn-network-access' (Figure 14) represents an entry point to a VPN | A 'vpn-network-access' (Figure 14) represents an entry point to a VPN | |||
service. In other words, this container encloses the parameters that | service. In other words, this container encloses the parameters that | |||
describe the access information for the traffic that belongs to a | describe the access information for the traffic that belongs to a | |||
particular L2VPN. | particular L2VPN. | |||
A 'vpn-network-access' includes information such as the connection on | A 'vpn-network-access' includes information such as the connection on | |||
which the access is defined, the specific Layer 2 service | which the access is defined, the specific Layer 2 service | |||
requirements, etc. | requirements, etc. | |||
... | ... | |||
+--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 id vpn-common:vpn-id | +--rw id vpn-common:vpn-id | |||
+--rw description? string | +--rw description? string | |||
+--rw interface-id? string | +--rw interface-id? string | |||
+--rw active-vpn-node-profile? leafref | +--rw active-vpn-node-profile? leafref | |||
+--rw status | +--rw status | |||
| ... | | ... | |||
+--rw connection | +--rw connection | |||
| ... | | ... | |||
+--rw (signaling-option)? | +--rw (signaling-option)? | |||
| +--:(bgp) | | +--:(bgp) | |||
| +--rw (bgp-type)? | | +--rw (bgp-type)? | |||
| +--:(l2vpn-bgp) | | +--:(l2vpn-bgp) | |||
| | +--rw ce-id? uint16 | | | +--rw ce-id? uint16 | |||
| | +--rw remote-ce-id? uint16 | | | +--rw remote-ce-id? uint16 | |||
| | +--rw vpls-instance | | | +--rw vpls-instance | |||
| | +--rw vpls-edge-id? uint16 | | | +--rw vpls-edge-id? uint16 | |||
| +--:(evpn-bgp) | | +--:(evpn-bgp) | |||
| +--rw df-preference? uint16 | | +--rw df-preference? uint16 | |||
| +--rw vpws-service-instance | | +--rw vpws-service-instance | |||
| ... | | ... | |||
+--rw group* [group-id] | +--rw group* [group-id] | |||
| +--rw group-id string | | +--rw group-id string | |||
| +--rw precedence? identityref | | +--rw precedence? identityref | |||
| +--rw ethernet-segment-identifier? | | +--rw ethernet-segment-identifier? | |||
| l2vpn-es:es-ref | | l2vpn-es:es-ref | |||
+--rw ethernet-service-oam | +--rw ethernet-service-oam | |||
| ... | | ... | |||
+--rw service | +--rw service | |||
... | ... | |||
Figure 14: VPN Network Access Subtree | Figure 14: VPN Network Access Subtree | |||
The VPN network access comprises: | The VPN network access is comprised of the following: | |||
'id': Includes an identifier of the VPN network access. | 'id': Includes an identifier of the VPN network access. | |||
'description': Includes a textual description of the VPN network | 'description': Includes a textual description of the VPN network | |||
access. | access. | |||
'interface-id': Indicates the interface on which the VPN network | 'interface-id': Indicates the interface on which the VPN network | |||
access is bound. | access is bound. | |||
'active-vpn-node-profile': Provides a pointer to an active 'global- | 'active-vpn-node-profile': Provides a pointer to an active 'global- | |||
skipping to change at page 36, line 17 ¶ | skipping to change at line 1504 ¶ | |||
'global-parameters-profile' implies that all associated data nodes | 'global-parameters-profile' implies that all associated data nodes | |||
will be inherited by the VPN network access. However, some of the | will be inherited by the VPN network access. However, some of the | |||
inherited data nodes (e.g., ACL policies) can be overridden at the | inherited data nodes (e.g., ACL policies) can be overridden at the | |||
VPN network access level. In such case, adjusted values take | VPN network access level. In such case, adjusted values take | |||
precedence over inherited values. | precedence over inherited values. | |||
'status': Indicates the administrative and operational status of the | 'status': Indicates the administrative and operational status of the | |||
VPN network access. | 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 L2VPN in a particular VPN Network | from where the traffic of the L2VPN in a particular VPN network | |||
access is coming. See Section 7.6.1. | access is coming. See Section 7.6.1. | |||
'signaling-option': Indicates a set of signaling options that are | 'signaling-option': Indicates a set of signaling options that are | |||
specific to a given VPN network access, e.g., a CE ID ('ce-id' | specific to a given VPN network access, e.g., a CE ID ('ce-id' | |||
identifying the CE within the VPN) and a remote CE ID as discussed | identifying the CE within the VPN) and a remote CE ID as discussed | |||
in Section 2.2.2 of [RFC6624]. | in Section 2.2.2 of [RFC6624]. | |||
It can also include a set of data nodes that are required for the | It can also include a set of data nodes that are required for the | |||
configuration of a VPWS-EVPN [RFC8214]. See Section 7.6.2. | configuration of a VPWS-EVPN [RFC8214]. See Section 7.6.2. | |||
skipping to change at page 36, line 40 ¶ | skipping to change at line 1527 ¶ | |||
used to differentiate the primary and secondary accesses for a | used to differentiate the primary and secondary accesses for a | |||
service with multiple accesses. An example to illustrate the use | service with multiple accesses. An example to illustrate the use | |||
of this container for redundancy purposes is provided in | of this container for redundancy purposes is provided in | |||
Appendix A.6. This container is also used to identify the link of | Appendix A.6. This container is also used to identify the link of | |||
an ES by allocating the same ESI. An example to illustrate this | an ES by allocating the same ESI. An example to illustrate this | |||
functionality is provided in Appendices A.4 and A.5. | functionality is provided in Appendices A.4 and A.5. | |||
'ethernet-service-oam': Carries information about the service OAM. | 'ethernet-service-oam': Carries information about the service OAM. | |||
See Section 7.6.3. | See Section 7.6.3. | |||
'service': Specifies the service parameters (e.g., QoS, multicast) | 'service': Specifies the service parameters (e.g., QoS and | |||
to apply for a given VPN network access. See Section 7.6.4. | multicast) to apply for a given VPN network access. See | |||
Section 7.6.4. | ||||
7.6.1. Connection | 7.6.1. Connection | |||
The 'connection' container (Figure 15) is used to configure the | The 'connection' container (Figure 15) is used to configure the | |||
relevant properties of the interface to which the L2VPN instance is | relevant properties of the interface to which the L2VPN instance is | |||
attached to (e.g., encapsulation type, Link Aggregation Group (LAG) | attached to (e.g., encapsulation type, Link Aggregation Group (LAG) | |||
interfaces, split-horizon). The L2NM supports tag manipulation | interfaces, and split-horizon). The L2NM supports tag manipulation | |||
operations (e.g., tag rewrite). | operations (e.g., tag rewrite). | |||
Note that the 'connection' container does not include the physical- | Note that the 'connection' container does not include the physical- | |||
specific configuration as this is assumed to be directly handled | specific configuration as this is assumed to be directly handled | |||
using device modules (e.g., interfaces module). Moreover, this | using device modules (e.g., an interfaces module). Moreover, this | |||
design is also meant to avoid manipulated global parameters at the | design is also meant to avoid manipulated global parameters at the | |||
service level and lower the risk of impacting other services sharing | service level and lower the risk of impacting other services sharing | |||
the same physical interface. | the same physical interface. | |||
A reference to the bearer is maintained to allow keeping the link | A reference to the bearer is maintained to allow keeping the link | |||
between the L2SM and the L2NM when both data models are used in a | between the L2SM and the L2NM when both data models are used in a | |||
given deployment. | given deployment. | |||
Some consistency checks should be ensured by implementations | Some consistency checks should be ensured by implementations | |||
(typically, network controllers) for LAG interface as the same | (typically, network controllers) for LAG interfaces, as the same | |||
information (e.g., LACP system-id) should be provided to the involved | information (e.g., LACP system-id) should be provided to the involved | |||
nodes. | nodes. | |||
The L2NM inherits the 'member-link-list' structure from the L2SM | The L2NM inherits the 'member-link-list' structure from the L2SM | |||
(including indication of OAM 802.3ah support [IEEE-802-3ah]). | (including indication of OAM 802.3ah support [IEEE-802-3ah]). | |||
... | ... | |||
+--rw vpn-nodes | +--rw vpn-nodes | |||
+--rw vpn-node* [vpn-node-id] | +--rw vpn-node* [vpn-node-id] | |||
... | ... | |||
skipping to change at page 41, line 12 ¶ | skipping to change at line 1709 ¶ | |||
Figure 16: EVPN-VPWS Service Instance Subtree | Figure 16: EVPN-VPWS Service Instance Subtree | |||
7.6.3. Ethernet OAM | 7.6.3. Ethernet OAM | |||
Ethernet OAM refers to both [IEEE-802-1ag] and [ITU-T-Y-1731]. | Ethernet OAM refers to both [IEEE-802-1ag] and [ITU-T-Y-1731]. | |||
As shown in Figure 17, the L2NM inherits the same structure as in | As shown in Figure 17, the L2NM inherits the same structure as in | |||
Section 5.3.2.2.6 of [RFC8466] for OAM matters. | Section 5.3.2.2.6 of [RFC8466] for OAM matters. | |||
+--rw l2vpn-ntw | +--rw l2vpn-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] | |||
... | ... | |||
+--rw ethernet-service-oam | +--rw ethernet-service-oam | |||
| +--rw md-name? string | | +--rw md-name? string | |||
| +--rw md-level? uint8 | | +--rw md-level? uint8 | |||
| +--rw cfm-802.1-ag | | +--rw cfm-802.1-ag | |||
| | +--rw n2-uni-c* [maid] | | | +--rw n2-uni-c* [maid] | |||
| | | +--rw maid string | | | | +--rw maid string | |||
| | | +--rw mep-id? uint32 | | | | +--rw mep-id? uint32 | |||
| | | +--rw mep-level? uint32 | | | | +--rw mep-level? uint32 | |||
| | | +--rw mep-up-down? | | | | +--rw mep-up-down? | |||
| | | | enumeration | | | | | enumeration | |||
| | | +--rw remote-mep-id? uint32 | | | | +--rw remote-mep-id? uint32 | |||
| | | +--rw cos-for-cfm-pdus? uint32 | | | | +--rw cos-for-cfm-pdus? uint32 | |||
| | | +--rw ccm-interval? uint32 | | | | +--rw ccm-interval? uint32 | |||
| | | +--rw ccm-holdtime? uint32 | | | | +--rw ccm-holdtime? uint32 | |||
| | | +--rw ccm-p-bits-pri? | | | | +--rw ccm-p-bits-pri? | |||
| | | ccm-priority-type | | | | ccm-priority-type | |||
| | +--rw n2-uni-n* [maid] | | | +--rw n2-uni-n* [maid] | |||
| | +--rw maid string | | | +--rw maid string | |||
| | +--rw mep-id? uint32 | | | +--rw mep-id? uint32 | |||
| | +--rw mep-level? uint32 | | | +--rw mep-level? uint32 | |||
| | +--rw mep-up-down? | | | +--rw mep-up-down? | |||
| | | enumeration | | | | enumeration | |||
| | +--rw remote-mep-id? uint32 | | | +--rw remote-mep-id? uint32 | |||
| | +--rw cos-for-cfm-pdus? uint32 | | | +--rw cos-for-cfm-pdus? uint32 | |||
| | +--rw ccm-interval? uint32 | | | +--rw ccm-interval? uint32 | |||
| | +--rw ccm-holdtime? uint32 | | | +--rw ccm-holdtime? uint32 | |||
| | +--rw ccm-p-bits-pri? | | | +--rw ccm-p-bits-pri? | |||
| | ccm-priority-type | | | ccm-priority-type | |||
| +--rw y-1731* [maid] | | +--rw y-1731* [maid] | |||
| +--rw maid string | | +--rw maid string | |||
| +--rw mep-id? uint32 | | +--rw mep-id? uint32 | |||
| +--rw pm-type? identityref | | +--rw pm-type? identityref | |||
| +--rw remote-mep-id? uint32 | | +--rw remote-mep-id? uint32 | |||
| +--rw message-period? uint32 | | +--rw message-period? uint32 | |||
| +--rw measurement-interval? uint32 | | +--rw measurement-interval? uint32 | |||
| +--rw cos? uint32 | | +--rw cos? uint32 | |||
| +--rw loss-measurement? boolean | | +--rw loss-measurement? boolean | |||
| +--rw synthethic-loss-measurement? | | +--rw synthetic-loss-measurement? | |||
| | boolean | | | boolean | |||
| +--rw delay-measurement | | +--rw delay-measurement | |||
| | +--rw enable-dm? boolean | | | +--rw enable-dm? boolean | |||
| | +--rw two-way? boolean | | | +--rw two-way? boolean | |||
| +--rw frame-size? uint32 | | +--rw frame-size? uint32 | |||
| +--rw session-type? enumeration | | +--rw session-type? enumeration | |||
... | ... | |||
Figure 17: OAM Subtree | Figure 17: OAM Subtree | |||
7.6.4. Services | 7.6.4. Services | |||
The 'service' container (Figure 18) provides a set of service- | The 'service' container (Figure 18) provides a set of service- | |||
specific configuration such as Quality of Service (QoS). | specific configurations such as QoS. | |||
+--rw l2vpn-ntw | +--rw l2vpn-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] | |||
... | ... | |||
+--rw service | +--rw service | |||
+--rw mtu? uint32 | +--rw mtu? uint32 | |||
+--rw svc-pe-to-ce-bandwidth | +--rw svc-pe-to-ce-bandwidth | |||
| {vpn-common:inbound-bw}? | | {vpn-common:inbound-bw}? | |||
| ... | | ... | |||
+--rw svc-ce-to-pe-bandwidth | +--rw svc-ce-to-pe-bandwidth | |||
| {vpn-common:outbound-bw}? | | {vpn-common:outbound-bw}? | |||
| ... | | ... | |||
+--rw qos {vpn-common:qos}? | +--rw qos {vpn-common:qos}? | |||
| ... | | ... | |||
+--rw mac-policies | +--rw mac-policies | |||
| ... | | ... | |||
+--rw broadcast-unknown-unicast-multicast | +--rw broadcast-unknown-unicast-multicast | |||
... | ... | |||
Figure 18: Service Overall Subtree | Figure 18: Service Overall Subtree | |||
The description of the service data nodes is as follows: | The description of the service data nodes is as follows: | |||
'mtu': Specifies the Layer 2 MTU, in bytes, for the VPN network | 'mtu': Specifies the Layer 2 MTU, in bytes, for the VPN network | |||
access. | access. | |||
'svc-pe-to-ce-bandwidth' and 'svc-ce-to-pe-bandwidth': Specify the | 'svc-pe-to-ce-bandwidth' and 'svc-ce-to-pe-bandwidth': Specify the | |||
service bandwidth for the L2VPN service. | service bandwidth for the L2VPN service. | |||
skipping to change at page 44, line 9 ¶ | skipping to change at line 1827 ¶ | |||
provider). | provider). | |||
'svc-pe-to-ce-bandwidth' and 'svc-ce-to-pe-bandwidth' can be | 'svc-pe-to-ce-bandwidth' and 'svc-ce-to-pe-bandwidth' can be | |||
represented using the Committed Information Rate (CIR), the Excess | represented using the Committed Information Rate (CIR), the Excess | |||
Information Rate (EIR), or the Peak Information Rate (PIR). | Information Rate (EIR), or the Peak Information Rate (PIR). | |||
As shown in Figure 19, the structure of service bandwidth data | As shown in Figure 19, the structure of service bandwidth data | |||
nodes is inherited from the L2SM [RFC8466]. The following types, | nodes is inherited from the L2SM [RFC8466]. The following types, | |||
defined in [RFC9181], can be used to indicate the bandwidth type: | defined in [RFC9181], can be used to indicate the bandwidth type: | |||
'bw-per-cos': The bandwidth is per Class of Service (CoS). | 'bw-per-cos': The bandwidth is per CoS. | |||
'bw-per-port': The bandwidth is per VPN network access. | 'bw-per-port': The bandwidth is per VPN network access. | |||
'bw-per-site': The bandwidth is to all VPN network accesses that | 'bw-per-site': The bandwidth is to all VPN network accesses that | |||
belong to the same site. | belong to the same site. | |||
'bw-per-service': The bandwidth is per L2VPN service. | 'bw-per-service': The bandwidth is per L2VPN service. | |||
+--rw service | +--rw service | |||
... | ... | |||
+--rw svc-pe-to-ce-bandwidth | +--rw svc-pe-to-ce-bandwidth | |||
| {vpn-common:inbound-bw}? | | {vpn-common:inbound-bw}? | |||
| +--rw pe-to-ce-bandwidth* [bw-type] | | +--rw pe-to-ce-bandwidth* [bw-type] | |||
| +--rw bw-type identityref | | +--rw bw-type identityref | |||
| +--rw (type)? | | +--rw (type)? | |||
| +--:(per-cos) | | +--:(per-cos) | |||
| | +--rw cos* [cos-id] | | | +--rw cos* [cos-id] | |||
| | +--rw cos-id uint8 | | | +--rw cos-id uint8 | |||
| | +--rw cir? uint64 | | | +--rw cir? uint64 | |||
| | +--rw cbs? uint64 | | | +--rw cbs? uint64 | |||
| | +--rw eir? uint64 | | | +--rw eir? uint64 | |||
| | +--rw ebs? uint64 | | | +--rw ebs? uint64 | |||
| | +--rw pir? uint64 | | | +--rw pir? uint64 | |||
| | +--rw pbs? uint64 | | | +--rw pbs? uint64 | |||
| +--:(other) | | +--:(other) | |||
| +--rw cir? uint64 | | +--rw cir? uint64 | |||
| +--rw cbs? uint64 | | +--rw cbs? uint64 | |||
| +--rw eir? uint64 | | +--rw eir? uint64 | |||
| +--rw ebs? uint64 | | +--rw ebs? uint64 | |||
| +--rw pir? uint64 | | +--rw pir? uint64 | |||
| +--rw pbs? uint64 | | +--rw pbs? uint64 | |||
+--rw svc-ce-to-pe-bandwidth | +--rw svc-ce-to-pe-bandwidth | |||
| {vpn-common:outbound-bw}? | | {vpn-common:outbound-bw}? | |||
| +--rw ce-to-pe-bandwidth* [bw-type] | | +--rw ce-to-pe-bandwidth* [bw-type] | |||
| +--rw bw-type identityref | | +--rw bw-type identityref | |||
| +--rw (type)? | | +--rw (type)? | |||
| +--:(per-cos) | | +--:(per-cos) | |||
| | +--rw cos* [cos-id] | | | +--rw cos* [cos-id] | |||
| | +--rw cos-id uint8 | | | +--rw cos-id uint8 | |||
| | +--rw cir? uint64 | | | +--rw cir? uint64 | |||
| | +--rw cbs? uint64 | | | +--rw cbs? uint64 | |||
| | +--rw eir? uint64 | | | +--rw eir? uint64 | |||
| | +--rw ebs? uint64 | | | +--rw ebs? uint64 | |||
| | +--rw pir? uint64 | | | +--rw pir? uint64 | |||
| | +--rw pbs? uint64 | | | +--rw pbs? uint64 | |||
| +--:(other) | | +--:(other) | |||
| +--rw cir? uint64 | | +--rw cir? uint64 | |||
| +--rw cbs? uint64 | | +--rw cbs? uint64 | |||
| +--rw eir? uint64 | | +--rw eir? uint64 | |||
| +--rw ebs? uint64 | | +--rw ebs? uint64 | |||
| +--rw pir? uint64 | | +--rw pir? uint64 | |||
| +--rw pbs? uint64 | | +--rw pbs? uint64 | |||
... | ... | |||
Figure 19: Service Bandwidth Subtree | Figure 19: Service Bandwidth Subtree | |||
'qos': Is used to define a set of QoS policies to apply on a given | 'qos': Is used to define a set of QoS policies to apply on a given | |||
VPN network access (Figure 20). The QoS classification can be | VPN network access (Figure 20). The QoS classification can be | |||
based on many criteria such as source MAC address, destination MAC | based on many criteria such as source MAC address, destination MAC | |||
address, etc. See also Section 5.10.2.1 of [RFC8466] for more | address, etc. See also Section 5.10.2.1 of [RFC8466] for more | |||
discussion of QoS classification including the use of color types. | discussion of QoS classification including the use of color types. | |||
+--rw service | +--rw 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 match-flow | | | | | +--rw match-flow | |||
skipping to change at page 46, line 40 ¶ | skipping to change at line 1919 ¶ | |||
| | | +--:(match-application) | | | | +--:(match-application) | |||
| | | +--rw match-application? | | | | +--rw match-application? | |||
| | | identityref | | | | identityref | |||
| | +--rw target-class-id? string | | | +--rw target-class-id? string | |||
| +--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 20: QoS Subtree | Figure 20: QoS Subtree | |||
'mac-policies': Lists a set of MAC-related policies such as MAC | 'mac-policies': Lists a set of MAC-related policies such as MAC | |||
ACLs. Similar to [RFC8519], an ACL match can be based upon source | ACLs. Similar to [RFC8519], an ACL match can be based upon source | |||
MAC address, source MAC address mask, destination MAC address, | MAC address, source MAC address mask, destination MAC address, | |||
destination MAC address mask, or a combination thereof. | destination MAC address mask, or a combination thereof. | |||
A data frame that matches an ACL can be dropped, flooded, or | A data frame that matches an ACL can be dropped, be flooded, or | |||
trigger an alarm. A rate-limit policy can be defined for handling | trigger an alarm. A rate-limit policy can be defined for handling | |||
frames that match an ACL entry with 'flood' action. | frames that match an ACL entry with 'flood' action. | |||
When 'mac-loop-prevention' or 'mac-addr-limit' data nodes are | When 'mac-loop-prevention' or 'mac-addr-limit' data nodes are | |||
provided, they take precedence over the ones inlcuded in the | provided, they take precedence over the ones included in the | |||
'global-parameters-profile' at the VPN service or VPN node levels. | 'global-parameters-profile' at the VPN service or VPN node levels. | |||
+--rw service | +--rw service | |||
... | ... | |||
+--rw mac-policies | +--rw mac-policies | |||
| +--rw access-control-list* [name] | | +--rw access-control-list* [name] | |||
| | +--rw name string | | | +--rw name string | |||
| | +--rw src-mac-address* | | | +--rw src-mac-address* | |||
| | | yang:mac-address | | | | yang:mac-address | |||
| | +--rw src-mac-address-mask* | | | +--rw src-mac-address-mask* | |||
| | | yang:mac-address | | | | yang:mac-address | |||
| | +--rw dst-mac-address* | | | +--rw dst-mac-address* | |||
| | | yang:mac-address | | | | yang:mac-address | |||
| | +--rw dst-mac-address-mask* | | | +--rw dst-mac-address-mask* | |||
| | | yang:mac-address | | | | yang:mac-address | |||
| | +--rw action? identityref | | | +--rw action? identityref | |||
| | +--rw rate-limit? decimal64 | | | +--rw rate-limit? decimal64 | |||
| +--rw mac-loop-prevention | | +--rw mac-loop-prevention | |||
| | +--rw window? uint32 | | | +--rw window? uint32 | |||
| | +--rw frequency? uint32 | | | +--rw frequency? uint32 | |||
| | +--rw retry-timer? uint32 | | | +--rw retry-timer? uint32 | |||
| | +--rw protection-type? identityref | | | +--rw protection-type? identityref | |||
| +--rw mac-addr-limit | | +--rw mac-addr-limit | |||
| +--rw limit-number? uint16 | | +--rw limit-number? uint16 | |||
| +--rw time-interval? uint32 | | +--rw time-interval? uint32 | |||
| +--rw action? identityref | | +--rw action? identityref | |||
... | ... | |||
Figure 21: MAC Policies Subtree | Figure 21: MAC Policies Subtree | |||
'broadcast-unknown-unicast-multicast': Defines the type of site in | 'broadcast-unknown-unicast-multicast': Defines the type of site in | |||
the customer multicast service topology: source, receiver, or | the customer multicast service topology: source, receiver, or | |||
both. It is also used to define multicast group-to-port mappings. | both. It is also used to define multicast group-to-port mappings. | |||
+--rw service | +--rw service | |||
... | ... | |||
+--rw broadcast-unknown-unicast-multicast | +--rw broadcast-unknown-unicast-multicast | |||
+--rw multicast-site-type? | +--rw multicast-site-type? | |||
| enumeration | | enumeration | |||
+--rw multicast-gp-address-mapping* [id] | +--rw multicast-gp-address-mapping* [id] | |||
| +--rw id uint16 | | +--rw id uint16 | |||
| +--rw vlan-id uint32 | | +--rw vlan-id uint32 | |||
| +--rw mac-gp-address | | +--rw mac-gp-address | |||
| | yang:mac-address | | | yang:mac-address | |||
| +--rw port-lag-number? uint32 | | +--rw port-lag-number? uint32 | |||
+--rw bum-overall-rate? uint64 | +--rw bum-overall-rate? uint64 | |||
Figure 22: BUM Subtree | Figure 22: BUM Subtree | |||
8. YANG Modules | 8. YANG Modules | |||
8.1. IANA-Maintained Module for BGP Layer 2 Encapsulation Types | 8.1. IANA-Maintained Module for BGP Layer 2 Encapsulation Types | |||
The "iana-bgp-l2-encaps" YANG module echoes the registry available at | The "iana-bgp-l2-encaps" YANG module matches the "BGP Layer 2 | |||
[IANA-BGP-L2]. | Encapsulation Types" registry [IANA-BGP-L2]. | |||
This module references [RFC3032], [RFC4446], [RFC4448], [RFC4553], | This module references [RFC3032], [RFC4446], [RFC4448], [RFC4553], | |||
[RFC4618], [RFC4619], [RFC4717], [RFC4761], [RFC4816], [RFC4842], and | [RFC4618], [RFC4619], [RFC4717], [RFC4761], [RFC4816], [RFC4842], and | |||
[RFC5086]. | [RFC5086]. | |||
<CODE BEGINS> | <CODE BEGINS> file "iana-bgp-l2-encaps@2022-09-20.yang" | |||
file "iana-bgp-l2-encaps@2021-07-05.yang" | ||||
module iana-bgp-l2-encaps { | module iana-bgp-l2-encaps { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps"; | namespace "urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps"; | |||
prefix iana-bgp-l2-encaps; | prefix iana-bgp-l2-encaps; | |||
organization | organization | |||
"IANA"; | "IANA"; | |||
contact | contact | |||
"Internet Assigned Numbers Authority | "Internet Assigned Numbers Authority | |||
Postal: ICANN | Postal: ICANN | |||
12025 Waterfront Drive, Suite 300 | 12025 Waterfront Drive, Suite 300 | |||
Los Angeles, CA 90094-2536 | Los Angeles, CA 90094-2536 | |||
United States of America | United States of America | |||
Tel: +1 310 301 5800 | Tel: +1 310 301 5800 | |||
<mailto:iana@iana.org>"; | <mailto:iana@iana.org>"; | |||
description | description | |||
"This module contains a collection of IANA-maintained YANG | "This YANG module contains a collection of IANA-maintained YANG | |||
data types that are used for referring to BGP Layer 2 | data types that are used for referring to BGP Layer 2 | |||
encapsulation types. | encapsulation types. | |||
Copyright (c) 2022 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 Revised 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 | |||
(https://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 9291; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2021-07-05 { | revision 2022-09-20 { | |||
description | description | |||
"First revision."; | "First revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Network Data Model for Layer 2 VPNs."; | "RFC 9291: A YANG Network Data Model for Layer 2 VPNs."; | |||
} | } | |||
identity bgp-l2-encaps-type { | identity bgp-l2-encaps-type { | |||
description | description | |||
"Base BGP Layer 2 encapsulation type."; | "Base BGP Layer 2 encapsulation type."; | |||
reference | reference | |||
"RFC 6624: Layer 2 Virtual Private Networks Using BGP for | "RFC 6624: Layer 2 Virtual Private Networks Using BGP for | |||
Auto-Discovery and Signaling"; | Auto-Discovery and Signaling"; | |||
} | } | |||
skipping to change at page 54, line 7 ¶ | skipping to change at line 2264 ¶ | |||
reference | reference | |||
"RFC 5086: Structure-Aware Time Division Multiplexed (TDM) | "RFC 5086: Structure-Aware Time Division Multiplexed (TDM) | |||
Circuit Emulation Service over Packet Switched | Circuit Emulation Service over Packet Switched | |||
Network (CESoPSN)"; | Network (CESoPSN)"; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
8.2. IANA-Maintained Module for Pseudowire Types | 8.2. IANA-Maintained Module for Pseudowire Types | |||
The initial version of the "iana-pseudowire-types" YANG module echoes | The initial version of the "iana-pseudowire-types" YANG module | |||
the registry available at [IANA-PW-Types]. | matches the "MPLS Pseudowire Types Registry" [IANA-PW-TYPES]. | |||
This module references [MFA], [RFC2507], [RFC2508], [RFC3032], | This module references [MFA], [RFC2507], [RFC2508], [RFC3032], | |||
[RFC3545], [RFC4448], [RFC4618], [RFC4619], [RFC4717], [RFC4842], | [RFC3545], [RFC4448], [RFC4553], [RFC4618], [RFC4619], [RFC4717], | |||
[RFC4863], [RFC4901], [RFC5086], [RFC5087], [RFC5143], [RFC5795], and | [RFC4842], [RFC4863], [RFC4901], [RFC5086], [RFC5087], [RFC5143], | |||
[RFC6307]. | [RFC5795], and [RFC6307]. | |||
<CODE BEGINS> | <CODE BEGINS> file "iana-pseudowire-types@2022-09-20.yang" | |||
file "iana-pseudowire-types@2021-07-05.yang" | ||||
module iana-pseudowire-types { | module iana-pseudowire-types { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:iana-pseudowire-types"; | namespace "urn:ietf:params:xml:ns:yang:iana-pseudowire-types"; | |||
prefix iana-pw-types; | prefix iana-pw-types; | |||
organization | organization | |||
"IANA"; | "IANA"; | |||
contact | contact | |||
"Internet Assigned Numbers Authority | "Internet Assigned Numbers Authority | |||
skipping to change at page 54, line 47 ¶ | skipping to change at line 2303 ¶ | |||
Copyright (c) 2022 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 Revised 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 | |||
(https://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 9291; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2021-07-05 { | revision 2022-09-20 { | |||
description | description | |||
"First revision."; | "First revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Network Data Model for Layer 2 VPNs."; | "RFC RFC 9291: A YANG Network Data Model for Layer 2 VPNs."; | |||
} | } | |||
identity iana-pw-types { | identity iana-pw-types { | |||
description | description | |||
"Base Pseudowire Layer 2 encapsulation type."; | "Base Pseudowire Layer 2 encapsulation type."; | |||
} | } | |||
identity frame-relay { | identity frame-relay { | |||
base iana-pw-types; | base iana-pw-types; | |||
description | description | |||
skipping to change at page 61, line 37 ¶ | skipping to change at line 2631 ¶ | |||
"RFC 4863: Wildcard Pseudowire Type"; | "RFC 4863: Wildcard Pseudowire Type"; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
8.3. Ethernet Segments | 8.3. Ethernet Segments | |||
The "ietf-ethernet-segment" YANG module uses types defined in | The "ietf-ethernet-segment" YANG module uses types defined in | |||
[RFC6991]. | [RFC6991]. | |||
<CODE BEGINS> | <CODE BEGINS> file "ietf-ethernet-segment@2022-09-20.yang" | |||
file "ietf-ethernet-segment@2022-05-25.yang" | ||||
module ietf-ethernet-segment { | module ietf-ethernet-segment { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-ethernet-segment"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ethernet-segment"; | |||
prefix l2vpn-es; | prefix l2vpn-es; | |||
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 (see Section 3)"; | |||
} | } | |||
organization | organization | |||
"IETF OPSA (Operations and Management Area) Working Group"; | "IETF OPSA (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> | |||
Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
<mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
Editor: Samier Barguil | Editor: Samier Barguil | |||
<mailto:samier.barguilgiraldo.ext@telefonica.com> | <mailto:samier.barguilgiraldo.ext@telefonica.com> | |||
Author: Oscar Gonzalez de Dios | Author: Oscar Gonzalez de Dios | |||
<mailto:oscar.gonzalezdedios@telefonica.com>"; | <mailto:oscar.gonzalezdedios@telefonica.com>"; | |||
description | description | |||
"This YANG module defines a model for Ethernet Segments. | "This YANG module defines a model for Ethernet Segments. | |||
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 Revised 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 | |||
(https://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 9291; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2022-05-25 { | revision 2022-09-20 { | |||
description | description | |||
"Initial version."; | "Initial version."; | |||
reference | reference | |||
"RFC XXXX: A YANG Network Data Model for Layer 2 VPNs."; | "RFC 9291: A YANG Network Data Model for Layer 2 VPNs."; | |||
} | } | |||
/* Typedefs */ | /* Typedefs */ | |||
typedef es-ref { | typedef es-ref { | |||
type leafref { | type leafref { | |||
path "/l2vpn-es:ethernet-segments/l2vpn-es:ethernet-segment" | path "/l2vpn-es:ethernet-segments/l2vpn-es:ethernet-segment" | |||
+ "/l2vpn-es:name"; | + "/l2vpn-es:name"; | |||
} | } | |||
description | description | |||
"Defines a type for referencing an Ethernet segment in | "Defines a type for referencing an Ethernet segment in | |||
other modules."; | other modules."; | |||
} | } | |||
/* Identities */ | /* Identities */ | |||
identity esi-type { | identity esi-type { | |||
description | description | |||
"T-(Ethernet Segment Identifier (ESI) Type) is a 1-octet field | "T (Ethernet Segment Identifier (ESI) Type) is a 1-octet field | |||
(most significant octet) that specifies the format of the | (most significant octet) that specifies the format of the | |||
remaining 9 octets (ESI Value)."; | remaining 9 octets (ESI Value)."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, Section 5"; | "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 5"; | |||
} | } | |||
identity esi-type-0-operator { | identity esi-type-0-operator { | |||
base esi-type; | base esi-type; | |||
description | description | |||
"This type indicates an arbitrary 9-octet ESI value, | "This type indicates an arbitrary 9-octet ESI value, | |||
which is managed and configured by the operator."; | which is managed and configured by the operator."; | |||
} | } | |||
identity esi-type-1-lacp { | identity esi-type-1-lacp { | |||
base esi-type; | base esi-type; | |||
description | description | |||
"When IEEE 802.1AX Link Aggregation Control Protocol (LACP) | "When the IEEE 802.1AX Link Aggregation Control Protocol (LACP) | |||
is used between the Provider Edge (PE) and Customer Edge (CE) | is used between the Provider Edge (PE) and Customer Edge (CE) | |||
devices, this ESI type indicates an auto-generated ESI value | devices, this ESI type indicates an auto-generated ESI value | |||
determined from LACP."; | determined from LACP."; | |||
reference | reference | |||
"IEEE Std. 802.1AX: Link Aggregation"; | "IEEE Std 802.1AX: Link Aggregation"; | |||
} | } | |||
identity esi-type-2-bridge { | identity esi-type-2-bridge { | |||
base esi-type; | base esi-type; | |||
description | description | |||
"The ESI value is auto-generated and determined based | "The ESI value is auto-generated and determined based | |||
on the Layer 2 bridge protocol."; | on the Layer 2 bridge protocol."; | |||
} | } | |||
identity esi-type-3-mac { | identity esi-type-3-mac { | |||
skipping to change at page 64, line 40 ¶ | skipping to change at line 2780 ¶ | |||
description | description | |||
"The highest random weight (HRW) method."; | "The highest random weight (HRW) method."; | |||
reference | reference | |||
"RFC 8584: Framework for Ethernet VPN Designated | "RFC 8584: Framework for Ethernet VPN Designated | |||
Forwarder Election Extensibility, Section 3"; | Forwarder Election Extensibility, Section 3"; | |||
} | } | |||
identity preference { | identity preference { | |||
base df-election-methods; | base df-election-methods; | |||
description | description | |||
"The preference based method. PEs are assigned with | "The preference-based method. PEs are assigned with | |||
preferences to become the DF in the Ethernet Segment (ES). | preferences to become the DF in the Ethernet Segment (ES). | |||
The exact preference-based algorithm (e.g., lowest-preference | The exact preference-based algorithm (e.g., lowest-preference | |||
algorithm, highest-preference algorithm) to use is | algorithm or highest-preference algorithm) to use is | |||
signaled at the control plane."; | signaled at the control plane."; | |||
} | } | |||
identity es-redundancy-mode { | identity es-redundancy-mode { | |||
description | description | |||
"Base identity for ES redundancy modes."; | "Base identity for ES redundancy modes."; | |||
} | } | |||
identity single-active { | identity single-active { | |||
base es-redundancy-mode; | base es-redundancy-mode; | |||
description | description | |||
"Indicates Single-Active redundancy mode for a given ES."; | "Indicates Single-Active redundancy mode for a given ES."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, Section 14.1.1"; | "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 14.1.1"; | |||
} | } | |||
identity all-active { | identity all-active { | |||
base es-redundancy-mode; | base es-redundancy-mode; | |||
skipping to change at page 66, line 32 ¶ | skipping to change at line 2867 ¶ | |||
} | } | |||
} | } | |||
case auto-assigned { | case auto-assigned { | |||
description | description | |||
"The ESI is auto-assigned."; | "The ESI is auto-assigned."; | |||
container esi-auto { | container esi-auto { | |||
description | description | |||
"The ESI is auto-assigned."; | "The ESI is auto-assigned."; | |||
choice auto-mode { | choice auto-mode { | |||
description | description | |||
"Indicates the auto-assignment mode. ESI can be | "Indicates the auto-assignment mode. ESI can be | |||
automatically assigned either with or without | automatically assigned either with or without | |||
indicating a pool from which the ESI should be | indicating a pool from which the ESI should be | |||
taken. | taken. | |||
For both cases, the server will auto-assign an | For both cases, the server will auto-assign an | |||
ESI value 'auto-assigned-ESI' and use that value | ESI value 'auto-assigned-ESI' and use that value | |||
operationally."; | operationally."; | |||
case from-pool { | case from-pool { | |||
leaf esi-pool-name { | leaf esi-pool-name { | |||
type string; | type string; | |||
skipping to change at page 68, line 5 ¶ | skipping to change at line 2937 ¶ | |||
+ "'preference')" { | + "'preference')" { | |||
description | description | |||
"The revertive value is only applicable | "The revertive value is only applicable | |||
to the preference method."; | to the preference method."; | |||
} | } | |||
type boolean; | type boolean; | |||
default "true"; | default "true"; | |||
description | description | |||
"The default behavior is that the DF election | "The default behavior is that the DF election | |||
procedure is triggered upon PE failures following | procedure is triggered upon PE failures following | |||
configured preference values. Such a mode is called | configured preference values. Such a mode is called | |||
the revertive mode. This mode may not be suitable in | the 'revertive' mode. This mode may not be suitable in | |||
some scenarios where, e.g., an operator may want to | some scenarios where, e.g., an operator may want to | |||
maintain the new DF even if the former DF recovers. | maintain the new DF even if the former DF recovers. | |||
Such a mode is called the 'non-revertive' mode. | Such a mode is called the 'non-revertive' mode. | |||
The non-revertive mode can be configured by | The non-revertive mode can be configured by | |||
setting 'revertive' leaf to 'false'."; | setting 'revertive' leaf to 'false'."; | |||
reference | reference | |||
"RFC 8584: Framework for Ethernet VPN Designated | "RFC 8584: Framework for Ethernet VPN Designated | |||
Forwarder Election Extensibility, | Forwarder Election Extensibility, | |||
Section 1.3.2"; | Section 1.3.2"; | |||
} | } | |||
leaf election-wait-time { | leaf election-wait-time { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default "3"; | default "3"; | |||
description | description | |||
"Election wait timer."; | "Designated Forwarder Wait timer."; | |||
reference | reference | |||
"RFC 8584: Framework for Ethernet VPN Designated | "RFC 8584: Framework for Ethernet VPN Designated | |||
Forwarder Election Extensibility"; | Forwarder Election Extensibility"; | |||
} | } | |||
} | } | |||
leaf split-horizon-filtering { | leaf split-horizon-filtering { | |||
type boolean; | type boolean; | |||
description | description | |||
"Controls split-horizon filtering. It is enabled | "Controls split-horizon filtering. It is enabled | |||
when set to 'true'. | when set to 'true'. | |||
In order to achieve split-horizon filtering, every | In order to achieve split-horizon filtering, every | |||
Broadcast, unknown unicast, or multicast (BUM) | Broadcast, Unknown Unicast, or Multicast (BUM) | |||
packet originating from a non-DF PE is encapsulated | packet originating from a non-DF PE is encapsulated | |||
with an MPLS label that identifies the origin ES."; | with an MPLS label that identifies the origin ES."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, Section 8.3"; | "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 8.3"; | |||
} | } | |||
container pbb { | container pbb { | |||
description | description | |||
"Provider Backbone Bridging (PBB) parameters ."; | "Provider Backbone Bridging (PBB) parameters ."; | |||
reference | reference | |||
"IEEE 802.1ah: Provider Backbone Bridge"; | "IEEE 802.1ah: Provider Backbone Bridges"; | |||
leaf backbone-src-mac { | leaf backbone-src-mac { | |||
type yang:mac-address; | type yang:mac-address; | |||
description | description | |||
"The PEs connected to the same CE must share the | "The PEs connected to the same CE must share the | |||
same Provider Backbone (B-MAC) address in | same Provider Backbone (B-MAC) address in | |||
All-Active mode."; | All-Active mode."; | |||
reference | reference | |||
"RFC 7623: Provider Backbone Bridging Combined with | "RFC 7623: Provider Backbone Bridging Combined with | |||
Ethernet VPN (PBB-EVPN), Section 6.2.1.1"; | Ethernet VPN (PBB-EVPN), Section 6.2.1.1"; | |||
} | } | |||
skipping to change at page 69, line 34 ¶ | skipping to change at line 3014 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
8.4. L2NM | 8.4. L2NM | |||
The "ietf-l2vpn-ntw" YANG module uses types defined in [RFC6991], | The "ietf-l2vpn-ntw" YANG module uses types defined in [RFC6991], | |||
[RFC9181], [RFC8294], and [IEEE802.1Qcp-2018]. | [RFC9181], [RFC8294], and [IEEE802.1Qcp]. | |||
<CODE BEGINS> | <CODE BEGINS> file "ietf-l2vpn-ntw@2022-09-20.yang" | |||
file "ietf-l2vpn-ntw@2022-05-25.yang" | ||||
module ietf-l2vpn-ntw { | module ietf-l2vpn-ntw { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw"; | namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw"; | |||
prefix l2vpn-ntw; | prefix l2vpn-ntw; | |||
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"; | |||
} | } | |||
skipping to change at page 70, line 4 ¶ | skipping to change at line 3031 ¶ | |||
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-vpn-common { | import ietf-vpn-common { | |||
prefix vpn-common; | prefix vpn-common; | |||
reference | reference | |||
"RFC 9181: A Common YANG for Data Model for Layer 2 | "RFC 9181: A Common YANG for Data Model for Layer 2 | |||
and Layer 3 VPNs"; | and Layer 3 VPNs"; | |||
} | } | |||
import iana-bgp-l2-encaps { | import iana-bgp-l2-encaps { | |||
prefix iana-bgp-l2-encaps; | prefix iana-bgp-l2-encaps; | |||
reference | reference | |||
"RFC XXXX: A YANG Network Data Model for Layer 2 VPNs."; | "RFC 9291: A YANG Network Data Model for Layer 2 VPNs."; | |||
} | } | |||
import iana-pseudowire-types { | import iana-pseudowire-types { | |||
prefix iana-pw-types; | prefix iana-pw-types; | |||
reference | reference | |||
"RFC XXXX: A YANG Network Data Model for Layer 2 VPNs."; | "RFC 9291: A YANG Network Data Model for Layer 2 VPNs."; | |||
} | } | |||
import ietf-ethernet-segment { | import ietf-ethernet-segment { | |||
prefix l2vpn-es; | prefix l2vpn-es; | |||
reference | reference | |||
"RFC XXXX: A YANG Network Data Model for Layer 2 VPNs."; | "RFC 9291: A YANG Network Data Model for Layer 2 VPNs."; | |||
} | } | |||
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 ieee802-dot1q-types { | import ieee802-dot1q-types { | |||
prefix dot1q-types; | prefix dot1q-types; | |||
reference | reference | |||
"IEEE Std 802.1Qcp-2018: Bridges and Bridged Networks - | "IEEE Std 802.1Qcp: Bridges and Bridged Networks-- | |||
Amendment: YANG Data Model"; | Amendment 30: YANG Data Model"; | |||
} | } | |||
organization | organization | |||
"IETF OPSA (Operations and Management Area) Working Group"; | "IETF OPSA (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> | |||
Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
<mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
skipping to change at page 70, line 47 ¶ | skipping to change at line 3073 ¶ | |||
} | } | |||
organization | organization | |||
"IETF OPSA (Operations and Management Area) Working Group"; | "IETF OPSA (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> | |||
Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
<mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
Editor: Samier Barguil | Editor: Samier Barguil | |||
<mailto:samier.barguilgiraldo.ext@telefonica.com> | <mailto:samier.barguilgiraldo.ext@telefonica.com> | |||
Author: Oscar Gonzalez de Dios | Author: Oscar Gonzalez de Dios | |||
<mailto:oscar.gonzalezdedios@telefonica.com>"; | <mailto:oscar.gonzalezdedios@telefonica.com>"; | |||
description | description | |||
"This YANG module defines a network model for Layer 2 VPN | "This YANG module defines a network model for Layer 2 VPN | |||
services. | services. | |||
Copyright (c) 2022 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 Revised 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 | |||
(https://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 9291; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2022-05-25 { | revision 2022-09-20 { | |||
description | description | |||
"Initial version."; | "Initial version."; | |||
reference | reference | |||
"RFC XXXX: A YANG Network Data Model for Layer 2 VPNs."; | "RFC 9291: A YANG Network Data Model for Layer 2 VPNs."; | |||
} | } | |||
/* Features */ | /* Features */ | |||
feature oam-3ah { | feature oam-3ah { | |||
description | description | |||
"Indicates the support of OAM 802.3ah."; | "Indicates the support of OAM 802.3ah."; | |||
reference | reference | |||
"IEEE Std 802.3ah: Media Access Control Parameters, Physical | "IEEE Std 802.3ah: Media Access Control Parameters, Physical | |||
Layers, and Management Parameters for | Layers, and Management Parameters for | |||
skipping to change at page 71, line 47 ¶ | skipping to change at line 3125 ¶ | |||
/* Identities */ | /* Identities */ | |||
identity evpn-service-interface-type { | identity evpn-service-interface-type { | |||
description | description | |||
"Base identity for EVPN service interface type."; | "Base identity for EVPN service interface type."; | |||
} | } | |||
identity vlan-based-service-interface { | identity vlan-based-service-interface { | |||
base evpn-service-interface-type; | base evpn-service-interface-type; | |||
description | description | |||
"VLAN-Based Service Interface."; | "VLAN-based service interface."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.1"; | "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.1"; | |||
} | } | |||
identity vlan-bundle-service-interface { | identity vlan-bundle-service-interface { | |||
base evpn-service-interface-type; | base evpn-service-interface-type; | |||
description | description | |||
"VLAN Bundle Service Interface."; | "VLAN bundle service interface."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.2"; | "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.2"; | |||
} | } | |||
identity vlan-aware-bundle-service-interface { | identity vlan-aware-bundle-service-interface { | |||
base evpn-service-interface-type; | base evpn-service-interface-type; | |||
description | description | |||
"VLAN-Aware Bundle Service Interface."; | "VLAN-aware bundle service interface."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.3"; | "RFC 7432: BGP MPLS-Based Ethernet VPN, Section 6.3"; | |||
} | } | |||
identity mapping-type { | identity mapping-type { | |||
base vpn-common:multicast-gp-address-mapping; | base vpn-common:multicast-gp-address-mapping; | |||
description | description | |||
"Identity for multicast group mapping type."; | "Identity for multicast group mapping type."; | |||
} | } | |||
skipping to change at page 72, line 45 ¶ | skipping to change at line 3171 ¶ | |||
} | } | |||
identity trap { | identity trap { | |||
base loop-prevention-type; | base loop-prevention-type; | |||
description | description | |||
"Trap protection type."; | "Trap protection type."; | |||
} | } | |||
identity color-type { | identity color-type { | |||
description | description | |||
"Identity of color types. A type is assigned to a service frame | "Identity of color types. A type is assigned to a service | |||
to identify its QoS profile conformance."; | frame to identify its QoS profile conformance."; | |||
} | } | |||
identity green { | identity green { | |||
base color-type; | base color-type; | |||
description | description | |||
"'green' color type. A service frame is 'green' if it is | "'green' color type. A service frame is 'green' if it is | |||
conformant with the committed rate of the bandwidth profile."; | conformant with the committed rate of the bandwidth profile."; | |||
} | } | |||
identity yellow { | identity yellow { | |||
base color-type; | base color-type; | |||
description | description | |||
"'yellow' color type. A service frame is 'yellow' if it exceeds | "'yellow' color type. A service frame is 'yellow' if it | |||
the committed rate but is conformant with the excess rate | exceeds the committed rate but is conformant with the excess | |||
of the bandwidth profile."; | rate of the bandwidth profile."; | |||
} | } | |||
identity red { | identity red { | |||
base color-type; | base color-type; | |||
description | description | |||
"'red' color type. A service famre is 'red' if it is not | "'red' color type. A service frame is 'red' if it is not | |||
conformant with both the committed and excess rates of the | conformant with both the committed and excess rates of the | |||
bandwidth profile."; | bandwidth profile."; | |||
} | } | |||
identity t-ldp-pw-type { | identity t-ldp-pw-type { | |||
description | description | |||
"Identity for t-ldp-pw-type."; | "Identity for T-LDP pseudowire (PW) type."; | |||
} | } | |||
identity vpws-type { | identity vpws-type { | |||
base t-ldp-pw-type; | base t-ldp-pw-type; | |||
description | description | |||
"Virtual Private Wire Service (VPWS) t-ldp-pw-type."; | "Virtual Private Wire Service (VPWS) t-ldp-pw-type."; | |||
reference | reference | |||
"RFC 4664: Framework for Layer 2 Virtual Private Networks | "RFC 4664: Framework for Layer 2 Virtual Private Networks | |||
(L2VPNs), Section 3.3"; | (L2VPNs), Section 3.3"; | |||
} | } | |||
skipping to change at page 74, line 32 ¶ | skipping to change at line 3254 ¶ | |||
is initiated followed by an establishment of an | is initiated followed by an establishment of an | |||
Ethernet channel with the other end."; | Ethernet channel with the other end."; | |||
} | } | |||
identity lacp-passive { | identity lacp-passive { | |||
base lacp-mode; | base lacp-mode; | |||
description | description | |||
"LACP passive mode. | "LACP passive mode. | |||
This mode refers to the LACP mode where an endpoint does | This mode refers to the LACP mode where an endpoint does | |||
not initiate the negotiation, but only responds to LACP | not initiate the negotiation but only responds to LACP | |||
packets initiated by the other end (e.g., full duplex | packets initiated by the other end (e.g., full duplex | |||
or half duplex)"; | or half duplex)"; | |||
} | } | |||
identity pm-type { | identity pm-type { | |||
description | description | |||
"Identity for performance monitoring type."; | "Identity for performance monitoring type."; | |||
} | } | |||
identity loss { | identity loss { | |||
skipping to change at page 75, line 49 ¶ | skipping to change at line 3318 ¶ | |||
} | } | |||
identity warning { | identity warning { | |||
base mac-action; | base mac-action; | |||
description | description | |||
"Log a warning message as the MAC action."; | "Log a warning message as the MAC action."; | |||
} | } | |||
identity precedence-type { | identity precedence-type { | |||
description | description | |||
"Redundancy type. The service can be created | "Redundancy type. The service can be created | |||
with primary and secondary signalization."; | with primary and secondary signalization."; | |||
} | } | |||
identity primary { | identity primary { | |||
base precedence-type; | base precedence-type; | |||
description | description | |||
"Identifies the main VPN network access."; | "Identifies the main VPN network access."; | |||
} | } | |||
identity secondary { | identity secondary { | |||
base precedence-type; | base precedence-type; | |||
description | description | |||
"Identifies the secondary VPN network access."; | "Identifies the secondary VPN network access."; | |||
skipping to change at page 76, line 44 ¶ | skipping to change at line 3362 ¶ | |||
"PW Ethernet tagged mode type."; | "PW Ethernet tagged mode type."; | |||
} | } | |||
/* Typedefs */ | /* Typedefs */ | |||
typedef ccm-priority-type { | typedef ccm-priority-type { | |||
type uint8 { | type uint8 { | |||
range "0..7"; | range "0..7"; | |||
} | } | |||
description | description | |||
"A 3-bit priority value to be used in the VLAN tag, | "A 3-bit priority value to be used in the VLAN tag | |||
if present in the transmitted frame. A larger value | if present in the transmitted frame. A larger value | |||
indicates a higher priority."; | indicates a higher priority."; | |||
} | } | |||
/* Groupings */ | /* Groupings */ | |||
grouping cfm-802 { | grouping cfm-802 { | |||
description | description | |||
"Grouping for 802.1ag Connectivity Fault Management (CFM) | "Grouping for 802.1ag Connectivity Fault Management (CFM) | |||
attributes."; | attributes."; | |||
reference | reference | |||
"IEEE Std 802-1ag: Virtual Bridged Local Area Networks | "IEEE Std 802.1ag: Virtual Bridged Local Area Networks | |||
Amendment 5: Connectivity Fault Management"; | Amendment 5: Connectivity Fault Management"; | |||
leaf maid { | leaf maid { | |||
type string; | type string; | |||
description | description | |||
"Maintenance Association Identifier (MAID)."; | "Maintenance Association Identifier (MAID)."; | |||
} | } | |||
leaf mep-id { | leaf mep-id { | |||
type uint32; | type uint32; | |||
description | description | |||
"Local Maintenance Entity Group End Point (MEP) ID."; | "Local Maintenance Entity Group End Point (MEP) ID."; | |||
skipping to change at page 77, line 48 ¶ | skipping to change at line 3414 ¶ | |||
"MEP up/down."; | "MEP up/down."; | |||
} | } | |||
leaf remote-mep-id { | leaf remote-mep-id { | |||
type uint32; | type uint32; | |||
description | description | |||
"Remote MEP ID."; | "Remote MEP ID."; | |||
} | } | |||
leaf cos-for-cfm-pdus { | leaf cos-for-cfm-pdus { | |||
type uint32; | type uint32; | |||
description | description | |||
"Class of service for CFM PDUs."; | "Class of Service for CFM PDUs."; | |||
} | } | |||
leaf ccm-interval { | leaf ccm-interval { | |||
type uint32; | type uint32; | |||
units "milliseconds"; | units "milliseconds"; | |||
default "10000"; | default "10000"; | |||
description | description | |||
"Continuity Check Message (CCM) interval."; | "Continuity Check Message (CCM) interval."; | |||
} | } | |||
leaf ccm-holdtime { | leaf ccm-holdtime { | |||
type uint32; | type uint32; | |||
units "milliseconds"; | units "milliseconds"; | |||
default "35000"; | default "35000"; | |||
description | description | |||
"CCM hold time."; | "CCM hold time."; | |||
} | } | |||
leaf ccm-p-bits-pri { | leaf ccm-p-bits-pri { | |||
type ccm-priority-type; | type ccm-priority-type; | |||
description | description | |||
"The priority parameter for Continuity Check Messages (CCMs) | "The priority parameter for CCMs | |||
transmitted by the MEP."; | transmitted by the MEP."; | |||
} | } | |||
} | } | |||
grouping y-1731 { | grouping y-1731 { | |||
description | description | |||
"Grouping for Y-1731"; | "Grouping for Y-1731"; | |||
reference | reference | |||
"ITU-T Y-1731: Operations, administration and maintenance | "ITU-T G.8013/Y.1731: Operations, administration and | |||
(OAM) functions and mechanisms for | maintenance (OAM) functions and | |||
Ethernet-based networks"; | mechanisms for Ethernet-based | |||
networks"; | ||||
list y-1731 { | list y-1731 { | |||
key "maid"; | key "maid"; | |||
description | description | |||
"List of configured Y-1731 instances."; | "List of configured Y-1731 instances."; | |||
leaf maid { | leaf maid { | |||
type string; | type string; | |||
description | description | |||
"MAID."; | "MAID."; | |||
} | } | |||
leaf mep-id { | leaf mep-id { | |||
skipping to change at page 79, line 36 ¶ | skipping to change at line 3498 ¶ | |||
description | description | |||
"Identifies the Class of Service."; | "Identifies the Class of Service."; | |||
} | } | |||
leaf loss-measurement { | leaf loss-measurement { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Controls whether loss measurement is ('true') or | "Controls whether loss measurement is ('true') or | |||
disabled ('false')."; | disabled ('false')."; | |||
} | } | |||
leaf synthethic-loss-measurement { | leaf synthetic-loss-measurement { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Indicates whether synthetic loss measurement is enabled | "Indicates whether synthetic loss measurement is | |||
('true') or disabled ('false')."; | enabled ('true') or disabled ('false')."; | |||
} | } | |||
container delay-measurement { | container delay-measurement { | |||
description | description | |||
"Container for delay measurement"; | "Container for delay measurement."; | |||
leaf enable-dm { | leaf enable-dm { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Controls whether delay measurement is enabled ('true') | "Controls whether delay measurement is enabled | |||
or disabled ('false')."; | ('true') or disabled ('false')."; | |||
} | } | |||
leaf two-way { | leaf two-way { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Whether delay measurement is two-way ('true') of one- | "Whether delay measurement is two-way ('true') of one- | |||
way ('false')."; | way ('false')."; | |||
} | } | |||
} | } | |||
leaf frame-size { | leaf frame-size { | |||
skipping to change at page 80, line 48 ¶ | skipping to change at line 3559 ¶ | |||
"Container for per-service parameters."; | "Container for per-service parameters."; | |||
leaf local-autonomous-system { | leaf local-autonomous-system { | |||
type inet:as-number; | type inet:as-number; | |||
description | description | |||
"Indicates a local AS Number (ASN)."; | "Indicates a local AS Number (ASN)."; | |||
} | } | |||
leaf svc-mtu { | leaf svc-mtu { | |||
type uint32; | type uint32; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"Layer 2 service MTU. | "Layer 2 service MTU. It is also known | |||
It is also known as the maximum transmission | as the maximum transmission unit or | |||
unit or maximum frame size."; | maximum frame size."; | |||
} | } | |||
leaf ce-vlan-preservation { | leaf ce-vlan-preservation { | |||
type boolean; | type boolean; | |||
description | description | |||
"Preserve the CE-VLAN ID from ingress to egress, i.e., | "Preserves the CE VLAN ID from ingress to egress, i.e., | |||
CE-VLAN tag of the egress frame is identical to | the CE VLAN tag of the egress frame is identical to | |||
that of the ingress frame that yielded this egress | that of the ingress frame that yielded this egress | |||
service frame. If all-to-one bundling within a site | service frame. If all-to-one bundling within a site | |||
is enabled, then preservation applies to all ingress | is enabled, then preservation applies to all ingress | |||
service frames. If all-to-one bundling is disabled, | service frames. If all-to-one bundling is disabled, | |||
then preservation applies to tagged ingress service | then preservation applies to tagged ingress service | |||
frames having CE-VLAN ID 1 through 4094."; | frames having CE VLAN ID 1 through 4094."; | |||
} | } | |||
leaf ce-vlan-cos-preservation { | leaf ce-vlan-cos-preservation { | |||
type boolean; | type boolean; | |||
description | description | |||
"CE VLAN CoS preservation. Priority Code Point (PCP) bits | "CE VLAN CoS preservation. Priority Code Point (PCP) bits | |||
in the CE-VLAN tag of the egress frame are identical to | in the CE VLAN tag of the egress frame are identical to | |||
those of the ingress frame that yielded this egress | those of the ingress frame that yielded this egress | |||
service frame."; | service frame."; | |||
} | } | |||
leaf control-word-negotiation { | leaf control-word-negotiation { | |||
type boolean; | type boolean; | |||
description | description | |||
"Controls whether Control-word negotiation is enabled | "Controls whether control-word negotiation is enabled | |||
(if set to true) or not (if set to false)."; | (if set to true) or not (if set to false)."; | |||
reference | reference | |||
"RFC 8077: Pseudowire Setup and Maintenance | "RFC 8077: Pseudowire Setup and Maintenance | |||
Using the Label Distribution Protocol (LDP), | Using the Label Distribution Protocol (LDP), | |||
Section 7"; | Section 7"; | |||
} | } | |||
container mac-policies { | container mac-policies { | |||
description | description | |||
"Container of MAC policies."; | "Container of MAC policies."; | |||
container mac-addr-limit { | container mac-addr-limit { | |||
skipping to change at page 82, line 4 ¶ | skipping to change at line 3611 ¶ | |||
description | description | |||
"Maximum number of MAC addresses learned from | "Maximum number of MAC addresses learned from | |||
the customer for a single service instance. | the customer for a single service instance. | |||
The default value is '2' when this grouping | The default value is '2' when this grouping | |||
is used at the service level."; | is used at the service level."; | |||
} | } | |||
leaf time-interval { | leaf time-interval { | |||
type uint32; | type uint32; | |||
units "milliseconds"; | units "milliseconds"; | |||
description | description | |||
"The aging time of the mac address. | "The aging time of the MAC address. | |||
The default value is '300' when this grouping | The default value is '300' when this grouping | |||
is used at the service level."; | is used at the service level."; | |||
} | } | |||
leaf action { | leaf action { | |||
type identityref { | type identityref { | |||
base mac-action; | base mac-action; | |||
} | } | |||
description | description | |||
"Specifies the action when the upper limit is | "Specifies the action when the upper limit is | |||
exceeded: drop the packet, flood the packet, | exceeded: drop the packet, flood the packet, | |||
skipping to change at page 82, line 48 ¶ | skipping to change at line 3655 ¶ | |||
within the 'window' time interval and the duplicate | within the 'window' time interval and the duplicate | |||
MAC address has been added to a list of duplicate | MAC address has been added to a list of duplicate | |||
MAC addresses. | MAC addresses. | |||
The default value is '5' when this grouping is | The default value is '5' when this grouping is | |||
called at the service level."; | called at the service level."; | |||
} | } | |||
leaf retry-timer { | leaf retry-timer { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
description | description | |||
"The retry timer. When the retry timer expires, | "The retry timer. When the retry timer expires, | |||
the duplicate MAC address will be flushed from | the duplicate MAC address will be flushed from | |||
the MAC-VRF."; | the MAC-VRF."; | |||
} | } | |||
leaf protection-type { | leaf protection-type { | |||
type identityref { | type identityref { | |||
base loop-prevention-type; | base loop-prevention-type; | |||
} | } | |||
description | description | |||
"Protection type. | "Protection type. | |||
The default value is 'trap' when this grouping | The default value is 'trap' when this grouping | |||
skipping to change at page 83, line 46 ¶ | skipping to change at line 3701 ¶ | |||
} | } | |||
} | } | |||
grouping bandwidth-parameters { | grouping bandwidth-parameters { | |||
description | description | |||
"A grouping for bandwidth parameters."; | "A grouping for bandwidth parameters."; | |||
leaf cir { | leaf cir { | |||
type uint64; | type uint64; | |||
units "bps"; | units "bps"; | |||
description | description | |||
"Committed Information Rate. The maximum | "Committed Information Rate (CIR). The maximum | |||
number of bits that a port can receive or | number of bits that a port can receive or | |||
send during one-second over an | send during one second over an | |||
interface."; | interface."; | |||
} | } | |||
leaf cbs { | leaf cbs { | |||
type uint64; | type uint64; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"Committed Burst Size. CBS controls the | "Committed Burst Size (CBS). CBS controls the | |||
bursty nature of the traffic. Traffic | bursty nature of the traffic. Traffic | |||
that does not use the configured CIR | that does not use the configured CIR | |||
accumulates credits until the credits | accumulates credits until the credits | |||
reach the configured CBS."; | reach the configured CBS."; | |||
} | } | |||
leaf eir { | leaf eir { | |||
type uint64; | type uint64; | |||
units "bps"; | units "bps"; | |||
description | description | |||
"Excess Information Rate, i.e., excess | "Excess Information Rate (EIR), i.e., excess | |||
frame delivery allowed not subject to | frame delivery allowed not subject to | |||
SLA. The traffic rate can be limited | a Service Level Agreement (SLA). The | |||
by EIR."; | traffic rate can be limited by EIR."; | |||
} | } | |||
leaf ebs { | leaf ebs { | |||
type uint64; | type uint64; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"Excess Burst Size. The bandwidth | "Excess Burst Size (EBS). The bandwidth | |||
available for burst traffic from the | available for burst traffic from the | |||
EBS is subject to the amount of | EBS is subject to the amount of | |||
bandwidth that is accumulated during | bandwidth that is accumulated during | |||
periods when traffic allocated by the | periods when traffic allocated by the | |||
EIR policy is not used."; | EIR policy is not used."; | |||
} | } | |||
leaf pir { | leaf pir { | |||
type uint64; | type uint64; | |||
units "bps"; | units "bps"; | |||
description | description | |||
"Peak Information Rate, i.e., maximum | "Peak Information Rate (PIR), i.e., maximum | |||
frame delivery allowed. It is equal | frame delivery allowed. It is equal | |||
to or less than sum of CIR and EIR."; | to or less than sum of CIR and EIR."; | |||
} | } | |||
leaf pbs { | leaf pbs { | |||
type uint64; | type uint64; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"Peak Burst Size."; | "Peak Burst Size (PBS)."; | |||
} | } | |||
} | } | |||
/* Main L2NM Container */ | /* Main L2NM Container */ | |||
container l2vpn-ntw { | container l2vpn-ntw { | |||
description | description | |||
"Container for the L2NM."; | "Container for the L2NM."; | |||
container vpn-profiles { | container vpn-profiles { | |||
description | description | |||
skipping to change at page 85, line 41 ¶ | skipping to change at line 3792 ¶ | |||
error-message "L3VPN is only applicable in L3NM."; | error-message "L3VPN is only applicable in L3NM."; | |||
} | } | |||
description | description | |||
"Service type."; | "Service type."; | |||
} | } | |||
leaf vpn-service-topology { | leaf vpn-service-topology { | |||
type identityref { | type identityref { | |||
base vpn-common:vpn-topology; | base vpn-common:vpn-topology; | |||
} | } | |||
description | description | |||
"Defining service topology, such as | "Defines service topology such as | |||
any-to-any, hub-spoke, etc."; | any-to-any, hub-spoke, etc."; | |||
} | } | |||
leaf bgp-ad-enabled { | leaf bgp-ad-enabled { | |||
type boolean; | type boolean; | |||
description | description | |||
"Indicates whether BGP auto-discovery is enabled | "Indicates whether BGP auto-discovery is enabled | |||
or disabled."; | or disabled."; | |||
} | } | |||
leaf signaling-type { | leaf signaling-type { | |||
type identityref { | type identityref { | |||
skipping to change at page 87, line 6 ¶ | skipping to change at line 3853 ¶ | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"Textual description of a VPN node."; | "Textual description of a VPN node."; | |||
} | } | |||
leaf ne-id { | leaf ne-id { | |||
type string; | type string; | |||
description | description | |||
"An identifier of the network element where | "An identifier of the network element where | |||
the VPN node is deployed. This identifier | the VPN node is deployed. This identifier | |||
uniquely identifies the network element within | uniquely identifies the network element within | |||
an administrative domain."; | an administrative domain."; | |||
} | } | |||
leaf role { | leaf role { | |||
type identityref { | type identityref { | |||
base vpn-common:role; | base vpn-common:role; | |||
} | } | |||
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."; | |||
} | } | |||
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 | "A 32-bit number in the dotted-quad format that is | |||
used to uniquely identify a node within an | used to uniquely identify a node within an | |||
autonomous system (AS)."; | Autonomous System (AS)."; | |||
} | } | |||
container active-global-parameters-profiles { | container active-global-parameters-profiles { | |||
description | description | |||
"Container for a list of global parameters | "Container for a list of global parameters | |||
profiles."; | profiles."; | |||
list global-parameters-profile { | list global-parameters-profile { | |||
key "profile-id"; | key "profile-id"; | |||
description | description | |||
"List of active global parameters profiles."; | "List of active global parameters profiles."; | |||
leaf profile-id { | leaf profile-id { | |||
skipping to change at page 87, line 47 ¶ | skipping to change at line 3894 ¶ | |||
} | } | |||
description | description | |||
"Points to a global profile defined at the | "Points to a global profile defined at the | |||
service level."; | service level."; | |||
} | } | |||
uses parameters-profile; | uses parameters-profile; | |||
} | } | |||
} | } | |||
uses vpn-common:service-status; | uses vpn-common:service-status; | |||
container bgp-auto-discovery { | container bgp-auto-discovery { | |||
when "../../../bgp-ad-enabled = 'true'" { | when "../../../bgp-ad-enabled = 'true'" { | |||
description | description | |||
"Only applies when BGP auto-discovery is enabled."; | "Only applies when BGP auto-discovery is enabled."; | |||
} | } | |||
description | description | |||
"BGP is used for auto-discovery."; | "BGP is used for auto-discovery."; | |||
choice bgp-type { | choice bgp-type { | |||
description | description | |||
"Choice for the BGP type."; | "Choice for the BGP type."; | |||
case l2vpn-bgp { | case l2vpn-bgp { | |||
description | description | |||
"Container for BGP L2VPN."; | "Container for BGP L2VPN."; | |||
leaf vpn-id { | leaf vpn-id { | |||
type vpn-common:vpn-id; | type vpn-common:vpn-id; | |||
description | description | |||
"VPN Identifier. This identifier serves to | "VPN Identifier. This identifier serves to | |||
unify components of a given VPN for the | unify components of a given VPN for the | |||
sake of auto-discovery."; | sake of auto-discovery."; | |||
reference | reference | |||
"RFC 6624: Layer 2 Virtual Private Networks | "RFC 6624: Layer 2 Virtual Private Networks | |||
Using BGP for Auto-Discovery and | Using BGP for Auto-Discovery and | |||
Signaling"; | Signaling"; | |||
} | } | |||
} | } | |||
case evpn-bgp { | case evpn-bgp { | |||
description | description | |||
skipping to change at page 90, line 31 ¶ | skipping to change at line 4022 ¶ | |||
when "derived-from-or-self(../../../../" | when "derived-from-or-self(../../../../" | |||
+ "vpn-type, 'vpn-common:vpls')" { | + "vpn-type, 'vpn-common:vpls')" { | |||
description | description | |||
"Only applies for VPLS."; | "Only applies for VPLS."; | |||
} | } | |||
description | description | |||
"VPLS instance."; | "VPLS instance."; | |||
leaf vpls-edge-id { | leaf vpls-edge-id { | |||
type uint16; | type uint16; | |||
description | description | |||
"VPLS Edge Identifier (VE ID). This is | "VPLS Edge Identifier (VE ID). This is | |||
used when the same VE ID is configured | used when the same VE ID is configured | |||
for the PE."; | for the PE."; | |||
reference | reference | |||
"RFC 4761: Virtual Private LAN Service | "RFC 4761: Virtual Private LAN Service | |||
(VPLS) Using BGP for Auto- | (VPLS) Using BGP for Auto- | |||
Discovery and Signaling, | Discovery and Signaling, | |||
Section 3.5"; | Section 3.5"; | |||
} | } | |||
leaf vpls-edge-id-range { | leaf vpls-edge-id-range { | |||
type uint16; | type uint16; | |||
skipping to change at page 91, line 42 ¶ | skipping to change at line 4080 ¶ | |||
base mac-learning-mode; | base mac-learning-mode; | |||
} | } | |||
description | description | |||
"Indicates through which plane MAC | "Indicates through which plane MAC | |||
addresses are advertised."; | addresses are advertised."; | |||
} | } | |||
leaf ingress-replication { | leaf ingress-replication { | |||
type boolean; | type boolean; | |||
description | description | |||
"Controls whether ingress replication is | "Controls whether ingress replication is | |||
enabled ('true') or disabled ('false')."; | enabled ('true') or disabled | |||
('false')."; | ||||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, | "RFC 7432: BGP MPLS-Based Ethernet VPN, | |||
Section 8.3.1.1"; | Section 8.3.1.1"; | |||
} | } | |||
leaf p2mp-replication { | leaf p2mp-replication { | |||
type boolean; | type boolean; | |||
description | description | |||
"Controles whether P2MP replication is | "Controls whether Point-to-Multipoint | |||
enabled ('true') or disabled ('false')"; | (P2MP) replication is enabled ('true') | |||
or disabled ('false')"; | ||||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, | "RFC 7432: BGP MPLS-Based Ethernet VPN, | |||
Section 8.3.1.2"; | Section 8.3.1.2"; | |||
} | } | |||
container arp-proxy { | container arp-proxy { | |||
if-feature "vpn-common:ipv4"; | if-feature "vpn-common:ipv4"; | |||
description | description | |||
"Top container for the ARP proxy."; | "Top container for the ARP proxy."; | |||
leaf enable { | leaf enable { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Enables (when set to 'true') or | "Enables (when set to 'true') or | |||
disables (when set to 'false') | disables (when set to 'false') | |||
ARP proxy."; | the ARP proxy."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, | "RFC 7432: BGP MPLS-Based Ethernet VPN, | |||
Section 10"; | Section 10"; | |||
} | } | |||
leaf arp-suppression { | leaf arp-suppression { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Enables (when set to 'true') or | "Enables (when set to 'true') or | |||
disables (when set to 'false') ARP | disables (when set to 'false') ARP | |||
suppression."; | suppression."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet | "RFC 7432: BGP MPLS-Based Ethernet | |||
VPN"; | VPN"; | |||
} | } | |||
leaf ip-mobility-threshold { | leaf ip-mobility-threshold { | |||
type uint16; | type uint16; | |||
description | description | |||
"It is possible for a given host (as | "It is possible for a given host (as | |||
defined by its IP address) to move | defined by its IP address) to move | |||
from one ES to another. | from one ES to another. The | |||
IP mobility threshold specifies the | IP mobility threshold specifies the | |||
number of IP mobility events | number of IP mobility events | |||
that are detected for a given IP | that are detected for a given IP | |||
address within the | address within the | |||
detection-threshold before it | detection-threshold before it | |||
is identified as a duplicate IP | is identified as a duplicate IP | |||
address. | address. Once the detection threshold | |||
Once the detection threshold is | is reached, updates for the IP address | |||
reached, updates for the IP address | ||||
are suppressed."; | are suppressed."; | |||
} | } | |||
leaf duplicate-ip-detection-interval { | leaf duplicate-ip-detection-interval { | |||
type uint16; | type uint16; | |||
units "seconds"; | units "seconds"; | |||
description | description | |||
"The time interval used in detecting a | "The time interval used in detecting a | |||
duplicate IP address. Duplicate IP | duplicate IP address. Duplicate IP | |||
address detection number of host moves | address detection number of host moves | |||
are allowed within this interval | are allowed within this interval | |||
period."; | period."; | |||
} | } | |||
} | } | |||
container nd-proxy { | container nd-proxy { | |||
if-feature "vpn-common:ipv6"; | if-feature "vpn-common:ipv6"; | |||
description | description | |||
"Top container for the ND proxy."; | "Top container for the ND proxy."; | |||
leaf enable { | leaf enable { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Enables (when set to 'true') or | "Enables (when set to 'true') or | |||
disables (when set to 'false') ND | disables (when set to 'false') the | |||
proxy."; | ND proxy."; | |||
reference | reference | |||
"RFC 7432: BGP MPLS-Based Ethernet VPN, | "RFC 7432: BGP MPLS-Based Ethernet VPN, | |||
Section 10"; | Section 10"; | |||
} | } | |||
leaf nd-suppression { | leaf nd-suppression { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Enables (when set to 'true') or | "Enables (when set to 'true') or | |||
disables (when set to 'false') | disables (when set to 'false') | |||
Neighbor Discovery (ND) message | Neighbor Discovery (ND) message | |||
suppression. | suppression. | |||
ND suppression is a technique that | ND suppression is a technique that | |||
is used to reduce the amount of ND | is used to reduce the amount of ND | |||
packets flooding within individual | packets flooding within individual | |||
segments, that is between hosts | segments between hosts | |||
connected to the same logical | connected to the same logical | |||
switch."; | switch."; | |||
} | } | |||
leaf ip-mobility-threshold { | leaf ip-mobility-threshold { | |||
type uint16; | type uint16; | |||
description | description | |||
"It is possible for a given host (as | "It is possible for a given host (as | |||
defined by its IP address) to move | defined by its IP address) to move | |||
from one ES to another. | from one ES to another. The | |||
IP mobility threshold specifies the | IP mobility threshold specifies the | |||
number of IP mobility events | number of IP mobility events | |||
that are detected for a given IP | that are detected for a given IP | |||
address within the | address within the | |||
detection-threshold before it | detection-threshold before it | |||
is identified as a duplicate IP | is identified as a duplicate IP | |||
address. | address. | |||
Once the detection threshold is | Once the detection threshold is | |||
reached, updates for the IP address | reached, updates for the IP address | |||
are suppressed."; | are suppressed."; | |||
} | } | |||
leaf duplicate-ip-detection-interval { | leaf duplicate-ip-detection-interval { | |||
type uint16; | type uint16; | |||
units "seconds"; | units "seconds"; | |||
description | description | |||
"The time interval used in detecting a | "The time interval used in detecting a | |||
duplicate IP address. Duplicate IP | duplicate IP address. Duplicate IP | |||
address detection number of host moves | address detection number of host moves | |||
are allowed within this interval | are allowed within this interval | |||
period."; | period."; | |||
} | } | |||
} | } | |||
leaf underlay-multicast { | leaf underlay-multicast { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Enables (when set to 'true') or disables | "Enables (when set to 'true') or disables | |||
(when set to 'false') underlay | (when set to 'false') underlay | |||
multicast."; | multicast."; | |||
} | } | |||
leaf flood-unknown-unicast-supression { | leaf flood-unknown-unicast-suppression { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Enables (when set to 'true') or disables | "Enables (when set to 'true') or disables | |||
(when set to 'false') unknown flood | (when set to 'false') unknown flood | |||
unicast suppression."; | unicast suppression."; | |||
} | } | |||
leaf vpws-vlan-aware { | leaf vpws-vlan-aware { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Enables (when set to 'true') or disables | "Enables (when set to 'true') or disables | |||
(when set to 'false') VPWS VLAN-aware."; | (when set to 'false') VPWS VLAN-aware | |||
service for the EVPN instance."; | ||||
} | } | |||
container bum-management { | container bum-management { | |||
description | description | |||
"Broadcast-unknown-unicast-multicast | "Broadcast-unknown-unicast-multicast | |||
management."; | management."; | |||
leaf discard-broadcast { | leaf discard-broadcast { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Discards broadcast, when enabled."; | "Discards broadcast, when enabled."; | |||
skipping to change at page 95, line 32 ¶ | skipping to change at line 4265 ¶ | |||
} | } | |||
container pbb { | container pbb { | |||
when "derived-from-or-self(" | when "derived-from-or-self(" | |||
+ "../../evpn-type, 'pbb-evpn')" { | + "../../evpn-type, 'pbb-evpn')" { | |||
description | description | |||
"Only applies for PBB EVPN."; | "Only applies for PBB EVPN."; | |||
} | } | |||
description | description | |||
"PBB parameters container."; | "PBB parameters container."; | |||
reference | reference | |||
"IEEE 802.1ah: Provider Backbone Bridge"; | "IEEE 802.1ah: Provider Backbone | |||
Bridges"; | ||||
leaf backbone-src-mac { | leaf backbone-src-mac { | |||
type yang:mac-address; | type yang:mac-address; | |||
description | description | |||
"Includes provider backbone MAC (B-MAC) | "Includes Provider Backbone MAC (B-MAC) | |||
address."; | address."; | |||
reference | reference | |||
"RFC 7623: Provider Backbone Bridging | "RFC 7623: Provider Backbone Bridging | |||
Combined with Ethernet VPN | Combined with Ethernet VPN | |||
(PBB-EVPN), Section 8.1"; | (PBB-EVPN), Section 8.1"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
skipping to change at page 96, line 4 ¶ | skipping to change at line 4286 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container ldp-or-l2tp { | container ldp-or-l2tp { | |||
description | description | |||
"Container for LDP or L2TP-signaled PWs | "Container for LDP or L2TP-signaled PWs | |||
choice."; | choice."; | |||
leaf agi { | leaf agi { | |||
type rt-types:route-distinguisher; | type rt-types:route-distinguisher; | |||
description | description | |||
"Attachment Group Identifier. Also, called | "Attachment Group Identifier. Also, called | |||
VPLS-Id."; | VPLS-Id."; | |||
reference | reference | |||
"RFC 4667: Layer 2 Virtual Private Network | "RFC 4667: Layer 2 Virtual Private Network | |||
(L2VPN) Extensions for Layer 2 | (L2VPN) Extensions for Layer 2 | |||
Tunneling Protocol (L2TP), | Tunneling Protocol (L2TP), | |||
Section 4.3 | Section 4.3 | |||
RFC 4762: Virtual Private LAN Service (VPLS) | RFC 4762: Virtual Private LAN Service (VPLS) | |||
Using Label Distribution Protocol | Using Label Distribution Protocol | |||
(LDP) Signaling, Section 6.1.1"; | (LDP) Signaling, Section 6.1.1"; | |||
} | } | |||
skipping to change at page 96, line 34 ¶ | skipping to change at line 4315 ¶ | |||
reference | reference | |||
"RFC 4667: Layer 2 Virtual Private Network | "RFC 4667: Layer 2 Virtual Private Network | |||
(L2VPN) Extensions for Layer 2 | (L2VPN) Extensions for Layer 2 | |||
Tunneling Protocol (L2TP), | Tunneling Protocol (L2TP), | |||
Section 3"; | Section 3"; | |||
} | } | |||
list remote-targets { | list remote-targets { | |||
key "taii"; | key "taii"; | |||
description | description | |||
"List of allowed target Attachment Individual | "List of allowed target Attachment Individual | |||
Identifier (AII) and peers."; | Identifiers (AIIs) and peers."; | |||
reference | reference | |||
"RFC 4667: Layer 2 Virtual Private Network | "RFC 4667: Layer 2 Virtual Private Network | |||
(L2VPN) Extensions for Layer 2 | (L2VPN) Extensions for Layer 2 | |||
Tunneling Protocol (L2TP), | Tunneling Protocol (L2TP), | |||
Section 5"; | Section 5"; | |||
leaf taii { | leaf taii { | |||
type uint32; | type uint32; | |||
description | description | |||
"Target Attachment Individual Identifier."; | "Target Attachment Individual Identifier."; | |||
reference | reference | |||
skipping to change at page 97, line 36 ¶ | skipping to change at line 4366 ¶ | |||
reference | reference | |||
"RFC 4762: Virtual Private LAN Service | "RFC 4762: Virtual Private LAN Service | |||
(VPLS) Using Label Distribution | (VPLS) Using Label Distribution | |||
Protocol (LDP) Signaling, | Protocol (LDP) Signaling, | |||
Section 6.1.1"; | Section 6.1.1"; | |||
} | } | |||
leaf pw-description { | leaf pw-description { | |||
type string; | type string; | |||
description | description | |||
"Includes a human-readable description | "Includes a human-readable description | |||
of the interface. This may be used when | of the interface. This may be used when | |||
communicating with a remote peer."; | communicating with a remote peer."; | |||
reference | reference | |||
"RFC 4762: Virtual Private LAN Service | "RFC 4762: Virtual Private LAN Service | |||
(VPLS) Using Label Distribution | (VPLS) Using Label Distribution | |||
Protocol (LDP) Signaling, | Protocol (LDP) Signaling, | |||
Section 6.1.1"; | Section 6.1.1"; | |||
} | } | |||
leaf mac-addr-withdraw { | leaf mac-addr-withdraw { | |||
type boolean; | type boolean; | |||
description | description | |||
skipping to change at page 98, line 12 ¶ | skipping to change at line 4390 ¶ | |||
disabled."; | disabled."; | |||
reference | reference | |||
"RFC 4762: Virtual Private LAN Service | "RFC 4762: Virtual Private LAN Service | |||
(VPLS) Using Label Distribution | (VPLS) Using Label Distribution | |||
Protocol (LDP) Signaling, | Protocol (LDP) Signaling, | |||
Section 6.2"; | Section 6.2"; | |||
} | } | |||
list pw-peer-list { | list pw-peer-list { | |||
key "peer-addr vc-id"; | key "peer-addr vc-id"; | |||
description | description | |||
"List of AC and PW bindings."; | "List of attachment circuit (AC) and PW | |||
bindings."; | ||||
leaf peer-addr { | leaf peer-addr { | |||
type inet:ip-address; | type inet:ip-address; | |||
description | description | |||
"Indicates the peer's IP address."; | "Indicates the peer's IP address."; | |||
} | } | |||
leaf vc-id { | leaf vc-id { | |||
type string; | type string; | |||
description | description | |||
"VC label used to identify a PW."; | "VC label used to identify a PW."; | |||
} | } | |||
skipping to change at page 98, line 36 ¶ | skipping to change at line 4415 ¶ | |||
"Defines the priority for the PW. | "Defines the priority for the PW. | |||
The higher the pw-priority value, the | The higher the pw-priority value, the | |||
higher the preference of the PW will | higher the preference of the PW will | |||
be."; | be."; | |||
} | } | |||
} | } | |||
container qinq { | container qinq { | |||
when "derived-from-or-self(" | when "derived-from-or-self(" | |||
+ "../t-ldp-pw-type, 'hvpls')" { | + "../t-ldp-pw-type, 'hvpls')" { | |||
description | description | |||
"Only applies when t-ldp pw type | "Only applies when T-LDP PW type | |||
is h-vpls."; | is H-VPLS."; | |||
} | } | |||
description | description | |||
"Container for QinQ."; | "Container for QinQ."; | |||
leaf s-tag { | leaf s-tag { | |||
type dot1q-types:vlanid; | type dot1q-types:vlanid; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"S-TAG."; | "S-TAG."; | |||
} | } | |||
leaf c-tag { | leaf c-tag { | |||
skipping to change at page 99, line 50 ¶ | skipping to change at line 4476 ¶ | |||
container vpn-network-accesses { | container vpn-network-accesses { | |||
description | description | |||
"Main container for VPN network accesses."; | "Main container for VPN network accesses."; | |||
list vpn-network-access { | list vpn-network-access { | |||
key "id"; | key "id"; | |||
description | description | |||
"List of VPN network accesses."; | "List of VPN network accesses."; | |||
leaf id { | leaf id { | |||
type vpn-common:vpn-id; | type vpn-common:vpn-id; | |||
description | description | |||
"Identifier of the network access"; | "Identifier of the network access."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description | description | |||
"A textual description of the VPN network | "A textual description of the VPN network | |||
access."; | access."; | |||
} | } | |||
leaf interface-id { | leaf interface-id { | |||
type string; | type string; | |||
description | description | |||
"Refers to a physical or logical interface."; | "Refers to a physical or logical interface."; | |||
} | } | |||
leaf active-vpn-node-profile { | leaf active-vpn-node-profile { | |||
type leafref { | type leafref { | |||
path "../../.." | path "../../.." | |||
+ "/active-global-parameters-profiles" | + "/active-global-parameters-profiles" | |||
+ "/global-parameters-profile/profile-id"; | + "/global-parameters-profile/profile-id"; | |||
} | } | |||
description | description | |||
"An identifier of an active VPN instance | "An identifier of an active VPN instance | |||
profile."; | profile."; | |||
} | } | |||
uses vpn-common:service-status; | uses vpn-common:service-status; | |||
container connection { | container connection { | |||
description | description | |||
skipping to change at page 101, line 12 ¶ | skipping to change at line 4535 ¶ | |||
} | } | |||
container encapsulation { | container encapsulation { | |||
description | description | |||
"Container for Layer 2 encapsulation."; | "Container for Layer 2 encapsulation."; | |||
leaf encap-type { | leaf encap-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 | |||
"Tagged interface type. By default, the | "Tagged interface type. By default, the | |||
type of the tagged interface is | type of the tagged interface is | |||
'priority-tagged'."; | 'priority-tagged'."; | |||
} | } | |||
container dot1q { | container dot1q { | |||
when "derived-from-or-self(../encap-type, " | when "derived-from-or-self(../encap-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 dot1q-types:vlanid; | type dot1q-types:vlanid; | |||
description | description | |||
"VLAN identifier."; | "VLAN identifier."; | |||
} | } | |||
container tag-operations { | container tag-operations { | |||
description | description | |||
"Sets the tag manipulation policy for this | "Sets the tag manipulation policy for this | |||
VPN network access. It defines a set of | VPN network access. It defines a set of | |||
tag manipulations that allow for the | tag manipulations that allow for the | |||
insertion, removal, or rewriting | insertion, removal, or rewriting | |||
of 802.1Q VLAN tags. These operations are | of 802.1Q VLAN tags. These operations are | |||
indicated for the CE-PE direction. | indicated for the CE-PE direction. | |||
By default, tag operations are symmetric. | By default, tag operations are symmetric. | |||
As such, the reverse tag operation is | As such, the reverse tag operation is | |||
assumed on the PE-CE direction."; | assumed on the PE-CE direction."; | |||
choice op-choice { | choice op-choice { | |||
description | description | |||
"Selects the tag rewriting policy for a | "Selects the tag rewriting policy for a | |||
VPN network access."; | VPN network access."; | |||
leaf pop { | leaf pop { | |||
type empty; | type empty; | |||
description | description | |||
"Pop the outer tag."; | "Pop the outer tag."; | |||
} | } | |||
leaf push { | leaf push { | |||
type empty; | type empty; | |||
description | description | |||
"Push one or two tags defined by the | "Pushes one or two tags defined by the | |||
tag-1 and tag-2 leaves. It is | tag-1 and tag-2 leaves. It is | |||
assumed that, absent any policy, the | assumed that, absent any policy, the | |||
default value of 0 will be used for | default value of 0 will be used for | |||
PCP setting."; | the PCP setting."; | |||
} | } | |||
leaf translate { | leaf translate { | |||
type empty; | type empty; | |||
description | description | |||
"Translate the outer tag to one or two | "Translates the outer tag to one or two | |||
tags. PCP bits are preserved."; | tags. PCP bits are preserved."; | |||
} | } | |||
} | } | |||
leaf tag-1 { | leaf tag-1 { | |||
when 'not(../pop)'; | when 'not(../pop)'; | |||
type dot1q-types:vlanid; | type dot1q-types:vlanid; | |||
description | description | |||
"A first tag to be used for push or | "A first tag to be used for push or | |||
translate operations. This tag will be | translate operations. This tag will be | |||
used as the outermost tag as a result | used as the outermost tag as a result | |||
of the tag operation."; | of the tag operation."; | |||
} | } | |||
leaf tag-1-type { | leaf tag-1-type { | |||
type dot1q-types:dot1q-tag-type; | type dot1q-types:dot1q-tag-type; | |||
default "dot1q-types:s-vlan"; | default "dot1q-types:s-vlan"; | |||
description | description | |||
"Specifies a specific 802.1Q tag type | "Specifies a specific 802.1Q tag type | |||
of tag-1."; | of tag-1."; | |||
} | } | |||
skipping to change at page 103, line 26 ¶ | skipping to change at line 4645 ¶ | |||
tagged interface is 'priority-tagged'."; | tagged interface is 'priority-tagged'."; | |||
} | } | |||
description | description | |||
"Priority tagged container."; | "Priority tagged container."; | |||
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(../encap-type, " | when "derived-from-or-self(../encap-type, " | |||
+ "'vpn-common:qinq')" { | + "'vpn-common:qinq')" { | |||
description | description | |||
"Only applies when the type of the tagged | "Only applies when the type of the tagged | |||
interface is QinQ."; | 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. By default, the tag type is | |||
's-c-vlan'."; | 's-c-vlan'."; | |||
} | } | |||
leaf svlan-id { | leaf svlan-id { | |||
type dot1q-types:vlanid; | type dot1q-types:vlanid; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"S-VLAN identifier."; | "S-VLAN identifier."; | |||
} | } | |||
leaf cvlan-id { | leaf cvlan-id { | |||
type dot1q-types:vlanid; | type dot1q-types:vlanid; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"C-VLAN identifier."; | "C-VLAN identifier."; | |||
} | } | |||
container tag-operations { | container tag-operations { | |||
description | description | |||
"Sets the tag manipulation policy for this | "Sets the tag manipulation policy for this | |||
VPN network access. It defines a set of | VPN network access. It defines a set of | |||
tag manipulations that allow for the | tag manipulations that allow for the | |||
insertion, removal, or rewriting | insertion, removal, or rewriting | |||
of 802.1Q VLAN tags. These operations are | of 802.1Q VLAN tags. These operations are | |||
indicated for the CE-PE direction. | indicated for the CE-PE direction. | |||
By default, tag operations are symmetric. | By default, tag operations are symmetric. | |||
As such, the reverse tag operation is | As such, the reverse tag operation is | |||
assumed on the PE-CE direction."; | assumed on the PE-CE direction."; | |||
choice op-choice { | choice op-choice { | |||
description | description | |||
"Selects the tag rewriting policy for a | "Selects the tag rewriting policy for a | |||
VPN network access."; | VPN network access."; | |||
leaf pop { | leaf pop { | |||
type uint8 { | type uint8 { | |||
range "1|2"; | range "1|2"; | |||
} | } | |||
description | description | |||
"Pop one or two tags as a function | "Pops one or two tags as a function | |||
of the indicated pop value."; | of the indicated pop value."; | |||
} | } | |||
leaf push { | leaf push { | |||
type empty; | type empty; | |||
description | description | |||
"Push one or two tags defined by the | "Pushes one or two tags defined by the | |||
tag-1 and tag-2 leaves. It is | tag-1 and tag-2 leaves. It is | |||
assumed that, absent any policy, the | assumed that, absent any policy, the | |||
default value of 0 will be used for | default value of 0 will be used for | |||
PCP setting."; | PCP setting."; | |||
} | } | |||
leaf translate { | leaf translate { | |||
type uint8 { | type uint8 { | |||
range "1|2"; | range "1|2"; | |||
} | } | |||
description | description | |||
"Translate one or two outer tags. PCP | "Translates one or two outer tags. PCP | |||
bits are preserved. | bits are preserved. | |||
The following operations are | The following operations are | |||
supported: | supported: | |||
- translate 1 with tag-1 leaf is | - translate 1 with tag-1 leaf is | |||
provided: only the outermost tag is | provided: only the outermost tag is | |||
translated to the value in tag-1. | translated to the value in tag-1. | |||
- translate 2 with both tag-1 and | - translate 2 with both tag-1 and | |||
skipping to change at page 105, line 29 ¶ | skipping to change at line 4743 ¶ | |||
provided: the outer tag is popped | provided: the outer tag is popped | |||
while the inner tag is translated | while the inner tag is translated | |||
to the value in tag-1."; | to the value in tag-1."; | |||
} | } | |||
} | } | |||
leaf tag-1 { | leaf tag-1 { | |||
when 'not(../pop)'; | when 'not(../pop)'; | |||
type dot1q-types:vlanid; | type dot1q-types:vlanid; | |||
description | description | |||
"A first tag to be used for push or | "A first tag to be used for push or | |||
translate operations. This tag will be | translate operations. This tag will be | |||
used as the outermost tag as a result | used as the outermost tag as a result | |||
of the tag operation."; | of the tag operation."; | |||
} | } | |||
leaf tag-1-type { | leaf tag-1-type { | |||
type dot1q-types:dot1q-tag-type; | type dot1q-types:dot1q-tag-type; | |||
default "dot1q-types:s-vlan"; | default "dot1q-types:s-vlan"; | |||
description | description | |||
"Specifies a specific 802.1Q tag type | "Specifies a specific 802.1Q tag type | |||
of tag-1."; | of tag-1."; | |||
} | } | |||
skipping to change at page 106, line 40 ¶ | skipping to change at line 4802 ¶ | |||
base lacp-mode; | base lacp-mode; | |||
} | } | |||
description | description | |||
"Indicates the LACP mode."; | "Indicates the LACP mode."; | |||
} | } | |||
leaf speed { | leaf speed { | |||
type uint32; | type uint32; | |||
units "mbps"; | units "mbps"; | |||
default "10"; | default "10"; | |||
description | description | |||
"LACP speed. This low default value | "LACP speed. This low default value | |||
is inherited from the L2SM."; | is inherited from the L2SM."; | |||
} | } | |||
leaf mini-link-num { | leaf mini-link-num { | |||
type uint32; | type uint32; | |||
description | description | |||
"Defines the minimum number of links that | "Defines the minimum number of links that | |||
must be active before the aggregating | must be active before the aggregating | |||
link is put into service."; | link is put into service."; | |||
} | } | |||
leaf system-id { | leaf system-id { | |||
skipping to change at page 108, line 4 ¶ | skipping to change at line 4863 ¶ | |||
base vpn-common:neg-mode; | base vpn-common:neg-mode; | |||
} | } | |||
description | description | |||
"Negotiation mode."; | "Negotiation mode."; | |||
} | } | |||
leaf link-mtu { | leaf link-mtu { | |||
type uint32; | type uint32; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"Link MTU size."; | "Link MTU size."; | |||
} | } | |||
container oam-802.3ah-link { | container oam-802.3ah-link { | |||
if-feature "oam-3ah"; | if-feature "oam-3ah"; | |||
description | description | |||
"Container for oam 802.3ah link."; | "Container for the OAM 802.3ah | |||
link."; | ||||
leaf enable { | leaf enable { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Indicates support of OAM 802.3ah | "Indicates support of the OAM | |||
link."; | 802.3ah link."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
leaf flow-control { | leaf flow-control { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Indicates whether flow control is | "Indicates whether flow control is | |||
supported."; | supported."; | |||
} | } | |||
leaf lldp { | leaf lldp { | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"Indicates whether Link Layer Discovery | "Indicates whether the Link Layer | |||
Protocol (LLDP) is supported."; | Discovery Protocol (LLDP) is | |||
supported."; | ||||
} | } | |||
} | } | |||
container split-horizon { | container split-horizon { | |||
description | description | |||
"Configuration with split horizon enabled."; | "Configuration with Split Horizon enabled."; | |||
leaf group-name { | leaf group-name { | |||
type string; | type string; | |||
description | description | |||
"Group name of the Split Horizon."; | "Group name of the Split Horizon."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
choice signaling-option { | choice signaling-option { | |||
description | description | |||
skipping to change at page 110, line 9 ¶ | skipping to change at line 4966 ¶ | |||
"Used for EVPN."; | "Used for EVPN."; | |||
leaf df-preference { | leaf df-preference { | |||
type uint16; | type uint16; | |||
default "32767"; | default "32767"; | |||
description | description | |||
"Defines a 2-octet value that indicates | "Defines a 2-octet value that indicates | |||
the PE preference to become the DF in | the PE preference to become the DF in | |||
the ES. | the ES. | |||
The preference value is only applicable | The preference value is only applicable | |||
to the preference based method."; | to the preference-based method."; | |||
reference | reference | |||
"RFC 8584: Framework for Ethernet VPN | "RFC 8584: Framework for Ethernet VPN | |||
Designated Forwarder Election | Designated Forwarder Election | |||
Extensibility"; | Extensibility"; | |||
} | } | |||
container vpws-service-instance { | container vpws-service-instance { | |||
when "derived-from-or-self(../../../../../" | when "derived-from-or-self(../../../../../" | |||
+ "vpn-type, 'vpn-common:vpws-evpn')" { | + "vpn-type, 'vpn-common:vpws-evpn')" { | |||
description | description | |||
"Only applies for EVPN-VPWS."; | "Only applies for EVPN-VPWS."; | |||
skipping to change at page 110, line 51 ¶ | skipping to change at line 5008 ¶ | |||
} | } | |||
case auto-assigned { | case auto-assigned { | |||
description | description | |||
"The local VSI is auto-assigned."; | "The local VSI is auto-assigned."; | |||
container local-vsi-auto { | container local-vsi-auto { | |||
description | description | |||
"The local VSI is auto-assigned."; | "The local VSI is auto-assigned."; | |||
choice auto-mode { | choice auto-mode { | |||
description | description | |||
"Indicates the auto-assignment | "Indicates the auto-assignment | |||
mode of local VSI. VSI can be | mode of local VSI. VSI can be | |||
automatically assigned either | automatically assigned either | |||
with or without indicating a | with or without indicating a | |||
pool from which the VSI | pool from which the VSI | |||
should be taken. | should be taken. | |||
For both cases, the server | For both cases, the server | |||
will auto-assign a local VSI | will auto-assign a local VSI | |||
value and use that value."; | value and use that value."; | |||
case from-pool { | case from-pool { | |||
leaf vsi-pool-name { | leaf vsi-pool-name { | |||
skipping to change at page 112, line 17 ¶ | skipping to change at line 5070 ¶ | |||
} | } | |||
case auto-assigned { | case auto-assigned { | |||
description | description | |||
"The remote VSI is auto-assigned."; | "The remote VSI is auto-assigned."; | |||
container remote-vsi-auto { | container remote-vsi-auto { | |||
description | description | |||
"The remote VSI is auto-assigned."; | "The remote VSI is auto-assigned."; | |||
choice auto-mode { | choice auto-mode { | |||
description | description | |||
"Indicates the auto-assignment | "Indicates the auto-assignment | |||
mode of remote VSI. VSI can be | mode of remote VSI. VSI can be | |||
automatically assigned either | automatically assigned either | |||
with or without indicating a | with or without indicating a | |||
pool from which the VSI | pool from which the VSI | |||
should be taken. | should be taken. | |||
For both cases, the server | For both cases, the server | |||
will auto-assign a remote VSI | will auto-assign a remote VSI | |||
value and use that value."; | value and use that value."; | |||
case from-pool { | case from-pool { | |||
leaf vsi-pool-name { | leaf vsi-pool-name { | |||
skipping to change at page 113, line 28 ¶ | skipping to change at line 5128 ¶ | |||
type string; | type string; | |||
description | description | |||
"Indicates the group-id to which the network | "Indicates the group-id to which the network | |||
access belongs to."; | access belongs to."; | |||
} | } | |||
leaf precedence { | leaf precedence { | |||
type identityref { | type identityref { | |||
base precedence-type; | base precedence-type; | |||
} | } | |||
description | description | |||
"Defining service redundancy in transport | "Defines service redundancy in transport | |||
network."; | network."; | |||
} | } | |||
leaf ethernet-segment-identifier { | leaf ethernet-segment-identifier { | |||
type l2vpn-es:es-ref; | type l2vpn-es:es-ref; | |||
description | description | |||
"Reference to the ESI associated with the VPN | "Reference to the ESI associated with the VPN | |||
network access."; | network access."; | |||
} | } | |||
} | } | |||
container ethernet-service-oam { | container ethernet-service-oam { | |||
skipping to change at page 114, line 27 ¶ | skipping to change at line 5176 ¶ | |||
} | } | |||
uses y-1731; | uses y-1731; | |||
} | } | |||
container service { | container service { | |||
description | description | |||
"Container for service"; | "Container for service"; | |||
leaf mtu { | leaf mtu { | |||
type uint32; | type uint32; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"Layer 2 MTU, it is also known as the maximum | "Layer 2 MTU; it is also known as the maximum | |||
transmission unit or maximum frame size."; | transmission unit or maximum frame size."; | |||
} | } | |||
container svc-pe-to-ce-bandwidth { | container svc-pe-to-ce-bandwidth { | |||
if-feature "vpn-common:inbound-bw"; | if-feature "vpn-common:inbound-bw"; | |||
description | description | |||
"From the customer site's perspective, the | "From the customer site's perspective, the | |||
service inbound bandwidth of the connection | service inbound bandwidth of the connection | |||
or download bandwidth from the service | or download bandwidth from the service | |||
provider the site. Note that the L2SM uses | provider to the site. Note that the L2SM uses | |||
'input-bandwidth' to refer to the same | 'input-bandwidth' to refer to the same | |||
concept."; | concept."; | |||
list pe-to-ce-bandwidth { | list pe-to-ce-bandwidth { | |||
key "bw-type"; | key "bw-type"; | |||
description | description | |||
"List for PE-to-CE bandwidth data nodes."; | "List for PE-to-CE bandwidth data nodes."; | |||
leaf bw-type { | leaf bw-type { | |||
type identityref { | type identityref { | |||
base vpn-common:bw-type; | base vpn-common:bw-type; | |||
} | } | |||
skipping to change at page 115, line 11 ¶ | skipping to change at line 5208 ¶ | |||
} | } | |||
choice type { | choice type { | |||
description | description | |||
"Choice based upon bandwidth type."; | "Choice based upon bandwidth type."; | |||
case per-cos { | case per-cos { | |||
description | description | |||
"Bandwidth per CoS."; | "Bandwidth per CoS."; | |||
list cos { | list cos { | |||
key "cos-id"; | key "cos-id"; | |||
description | description | |||
"List of class of services."; | "List of Class of Services."; | |||
leaf cos-id { | leaf cos-id { | |||
type uint8; | type uint8; | |||
description | description | |||
"Identifier of the CoS, indicated by | "Identifier of the CoS, indicated by | |||
DSCP or a CE-CLAN CoS (802.1p) value | a Differentiated Services Code Point | |||
in the service frame."; | (DSCP) or a CE-CLAN CoS (802.1p) | |||
value in the service frame."; | ||||
reference | reference | |||
"IEEE Std 802.1Q: Bridges and Bridged | "IEEE Std 802.1Q: Bridges and Bridged | |||
Networks"; | Networks"; | |||
} | } | |||
uses bandwidth-parameters; | uses bandwidth-parameters; | |||
} | } | |||
} | } | |||
case other { | case other { | |||
description | description | |||
"Other bandwidth types."; | "Other bandwidth types."; | |||
skipping to change at page 115, line 39 ¶ | skipping to change at line 5237 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container svc-ce-to-pe-bandwidth { | container svc-ce-to-pe-bandwidth { | |||
if-feature "vpn-common:outbound-bw"; | if-feature "vpn-common:outbound-bw"; | |||
description | description | |||
"From the customer site's perspective, | "From the customer site's perspective, | |||
the service outbound bandwidth of the | the service outbound bandwidth of the | |||
connection or upload bandwidth from | connection or upload bandwidth from | |||
the CE to the PE. Note that the L2SM uses | the CE to the PE. Note that the L2SM uses | |||
'output-bandwidth' to refer to the same | 'output-bandwidth' to refer to the same | |||
concept."; | concept."; | |||
list ce-to-pe-bandwidth { | list ce-to-pe-bandwidth { | |||
key "bw-type"; | key "bw-type"; | |||
description | description | |||
"List for CE-to-PE bandwidth."; | "List for CE-to-PE bandwidth."; | |||
leaf bw-type { | leaf bw-type { | |||
type identityref { | type identityref { | |||
base vpn-common:bw-type; | base vpn-common:bw-type; | |||
} | } | |||
skipping to change at page 116, line 4 ¶ | skipping to change at line 5250 ¶ | |||
list ce-to-pe-bandwidth { | list ce-to-pe-bandwidth { | |||
key "bw-type"; | key "bw-type"; | |||
description | description | |||
"List for CE-to-PE bandwidth."; | "List for CE-to-PE bandwidth."; | |||
leaf bw-type { | leaf bw-type { | |||
type identityref { | type identityref { | |||
base vpn-common:bw-type; | base vpn-common:bw-type; | |||
} | } | |||
description | description | |||
"Indicates the bandwidth type."; | "Indicates the bandwidth type."; | |||
} | } | |||
choice type { | choice type { | |||
description | description | |||
"Choice based upon bandwidth type."; | "Choice based upon bandwidth type."; | |||
case per-cos { | case per-cos { | |||
description | description | |||
"Bandwidth per CoS."; | "Bandwidth per CoS."; | |||
list cos { | list cos { | |||
key "cos-id"; | key "cos-id"; | |||
description | description | |||
"List of class of services."; | "List of Class of Services."; | |||
leaf cos-id { | leaf cos-id { | |||
type uint8; | type uint8; | |||
description | description | |||
"Identifier of the CoS, indicated by | "Identifier of the CoS, indicated by | |||
DSCP or a CE-CLAN CoS (802.1p) value | DSCP or a CE-CLAN CoS (802.1p) value | |||
in the service frame."; | in the service frame."; | |||
reference | reference | |||
"IEEE Std 802.1Q: Bridges and Bridged | "IEEE Std 802.1Q: Bridges and Bridged | |||
Networks"; | Networks"; | |||
} | } | |||
skipping to change at page 118, line 39 ¶ | skipping to change at line 5381 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
container qos-profile { | container qos-profile { | |||
description | description | |||
"QoS profile configuration."; | "QoS profile configuration."; | |||
list qos-profile { | list qos-profile { | |||
key "profile"; | key "profile"; | |||
description | description | |||
"QoS profile. | "QoS profile. | |||
Can be standard profile or customized | Can be a standard or customized | |||
profile."; | profile."; | |||
leaf profile { | leaf profile { | |||
type leafref { | type leafref { | |||
path "/l2vpn-ntw/vpn-profiles" | path "/l2vpn-ntw/vpn-profiles" | |||
+ "/valid-provider-identifiers" | + "/valid-provider-identifiers" | |||
+ "/qos-profile-identifier/id"; | + "/qos-profile-identifier/id"; | |||
} | } | |||
description | description | |||
"QoS profile to be used."; | "QoS profile to be used."; | |||
} | } | |||
skipping to change at page 119, line 20 ¶ | skipping to change at line 5410 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container mac-policies { | container mac-policies { | |||
description | description | |||
"Container for MAC-related policies."; | "Container for MAC-related policies."; | |||
list access-control-list { | list access-control-list { | |||
key "name"; | key "name"; | |||
description | description | |||
"Container for access control List."; | "Container for the Access Control List | |||
(ACL)."; | ||||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"Specifies the name of the ACL."; | "Specifies the name of the ACL."; | |||
} | } | |||
leaf-list src-mac-address { | leaf-list src-mac-address { | |||
type yang:mac-address; | type yang:mac-address; | |||
description | description | |||
"Specifies the source MAC address."; | "Specifies the source MAC address."; | |||
} | } | |||
skipping to change at page 120, line 48 ¶ | skipping to change at line 5487 ¶ | |||
duplication, where a 'duplicate MAC | duplication, where a 'duplicate MAC | |||
address' situation has occurred and | address' situation has occurred and | |||
the duplicate MAC address has been | the duplicate MAC address has been | |||
added to a list of duplicate MAC | added to a list of duplicate MAC | |||
addresses."; | addresses."; | |||
} | } | |||
leaf retry-timer { | leaf retry-timer { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
description | description | |||
"The retry timer. When the retry timer | "The retry timer. When the retry timer | |||
expires, the duplicate MAC address will | expires, the duplicate MAC address will | |||
be flushed from the MAC-VRF."; | be flushed from the MAC-VRF."; | |||
} | } | |||
leaf protection-type { | leaf protection-type { | |||
type identityref { | type identityref { | |||
base loop-prevention-type; | base loop-prevention-type; | |||
} | } | |||
default "trap"; | default "trap"; | |||
description | description | |||
"Protection type"; | "Protection type"; | |||
} | } | |||
} | } | |||
container mac-addr-limit { | container mac-addr-limit { | |||
description | description | |||
"Container of MAC-Addr limit configurations"; | "Container of MAC-Addr limit | |||
configurations."; | ||||
leaf limit-number { | leaf limit-number { | |||
type uint16; | type uint16; | |||
default "2"; | default "2"; | |||
description | description | |||
"Maximum number of MAC addresses learned | "Maximum number of MAC addresses learned | |||
from the subscriber for a single service | from the subscriber for a single service | |||
instance."; | instance."; | |||
} | } | |||
leaf time-interval { | leaf time-interval { | |||
type uint32; | type uint32; | |||
units "milliseconds"; | units "milliseconds"; | |||
default "300"; | default "300"; | |||
description | description | |||
"The aging time of the mac address."; | "The aging time of the MAC address."; | |||
} | } | |||
leaf action { | leaf action { | |||
type identityref { | type identityref { | |||
base mac-action; | base mac-action; | |||
} | } | |||
default "warning"; | default "warning"; | |||
description | description | |||
"Specifies the action when the upper limit | "Specifies the action when the upper limit | |||
is exceeded: drop the packet, flood the | is exceeded: drop the packet, flood the | |||
packet, or log a warning message (without | packet, or log a warning message (without | |||
dropping the packet)."; | dropping the packet)."; | |||
} | } | |||
} | } | |||
} | } | |||
container broadcast-unknown-unicast-multicast { | container broadcast-unknown-unicast-multicast { | |||
description | description | |||
"Container of broadcast, unknown unicast, and | "Container of broadcast, unknown unicast, or | |||
multicast configurations"; | multicast configurations."; | |||
leaf multicast-site-type { | leaf multicast-site-type { | |||
type enumeration { | type enumeration { | |||
enum receiver-only { | enum receiver-only { | |||
description | description | |||
"The site only has receivers."; | "The site only has receivers."; | |||
} | } | |||
enum source-only { | enum source-only { | |||
description | description | |||
"The site only has sources."; | "The site only has sources."; | |||
} | } | |||
skipping to change at page 122, line 23 ¶ | skipping to change at line 5559 ¶ | |||
receivers."; | receivers."; | |||
} | } | |||
} | } | |||
default "source-receiver"; | default "source-receiver"; | |||
description | description | |||
"Type of the multicast site."; | "Type of the multicast site."; | |||
} | } | |||
list multicast-gp-address-mapping { | list multicast-gp-address-mapping { | |||
key "id"; | key "id"; | |||
description | description | |||
"List of Port to group mappings."; | "List of port-to-group mappings."; | |||
leaf id { | leaf id { | |||
type uint16; | type uint16; | |||
description | description | |||
"Unique identifier for the mapping."; | "Unique identifier for the mapping."; | |||
} | } | |||
leaf vlan-id { | leaf vlan-id { | |||
type uint32; | type uint32; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The VLAN ID of the multicast group."; | "The VLAN ID of the multicast group."; | |||
skipping to change at page 123, line 20 ¶ | skipping to change at line 5604 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
9. Security Considerations | 9. Security Considerations | |||
The YANG modules specified in this document defines schemas for data | The YANG modules specified in this document define schemas for data | |||
that are designed to be accessed via network management protocols | that are designed to be accessed via network management protocols | |||
such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF | such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF | |||
layer is the secure transport layer, and the mandatory-to-implement | layer is the secure transport layer, and the mandatory-to-implement | |||
secure transport is Secure Shell (SSH) [RFC6242]. The lowest | secure transport is Secure Shell (SSH) [RFC6242]. The lowest | |||
RESTCONF layer is HTTPS, and the mandatory-to-implement secure | RESTCONF layer is HTTPS, and the mandatory-to-implement secure | |||
transport is TLS [RFC8446]. | transport is TLS [RFC8446]. | |||
The Network Configuration Access Control Model (NACM) [RFC8341] | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
provides the means to restrict access for particular NETCONF or | provides the means to restrict access for particular NETCONF or | |||
RESTCONF users to a preconfigured subset of all available NETCONF or | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
RESTCONF protocol operations and content. | RESTCONF protocol operations and content. | |||
There are a number of data nodes defined in "ietf-l2vpn-ntw" and | There are a number of data nodes defined in the "ietf-l2vpn-ntw" and | |||
"ietf-ethernet-segment" YANG modules that are writable/creatable/ | "ietf-ethernet-segment" YANG modules that are writable/creatable/ | |||
deletable (i.e., config true, which is the default). These data | deletable (i.e., config true, which is the default). These data | |||
nodes may be considered sensitive or vulnerable in some network | nodes may be considered sensitive or vulnerable in some network | |||
environments. Write operations (e.g., edit-config) and delete | environments. Write operations (e.g., edit-config) and delete | |||
operations to these data nodes without proper protection or | operations to these data nodes without proper protection or | |||
authentication can have a negative effect on network operations. | authentication can have a negative effect on network operations. | |||
These are the subtrees and data nodes and their sensitivity/ | These are the subtrees and data nodes and their sensitivity/ | |||
vulnerability in the "ietf-l2vpn-ntw" and "ietf-ethernet-segment" | vulnerability in the "ietf-l2vpn-ntw" and "ietf-ethernet-segment" | |||
modules: | modules: | |||
* 'vpn-profiles': This container includes a set of sensitive data | 'vpn-profiles': This container includes a set of sensitive data that | |||
that influence how the L3VPN service is delivered. For example, | influences how the L3VPN service is delivered. For example, an | |||
an attacker who has access to these data nodes may be able to | attacker who has access to these data nodes may be able to | |||
manipulate routing policies, QoS policies, or encryption | manipulate routing policies, QoS policies, or encryption | |||
properties. These data nodes are defined with "nacm:default-deny- | properties. These data nodes are defined with "nacm:default-deny- | |||
write" tagging [RFC9181]. | write" tagging [RFC9181]. | |||
* 'ethernet-segments' and 'vpn-services': An attacker who is able to | 'ethernet-segments' and 'vpn-services': An attacker who is able to | |||
access network nodes can undertake various attacks, such as | access network nodes can undertake various attacks, such as | |||
deleting a running L2VPN service, interrupting all the traffic of | deleting a running L2VPN service, interrupting all the traffic of | |||
a client. In addition, an attacker may modify the attributes of a | a client. In addition, an attacker may modify the attributes of a | |||
running service (e.g., QoS, bandwidth) or an ES, leading to | running service (e.g., QoS, bandwidth) or an ES, leading to | |||
malfunctioning of the service and therefore to SLA violations. In | malfunctioning of the service and therefore to SLA violations. In | |||
addition, an attacker could attempt to create an L2VPN service, | addition, an attacker could attempt to create an L2VPN service, | |||
add a new network access, or intercept/redirect the traffic to a | add a new network access, or intercept/redirect the traffic to a | |||
non-authorized node. In addition to using NACM to prevent | non-authorized node. In addition to using NACM to prevent | |||
authorized access, such activity can be detected by adequately | authorized access, such activity can be detected by adequately | |||
monitoring and tracking network configuration changes. | monitoring and tracking network configuration changes. | |||
Some of the readable data nodes in the "ietf-l2vpn-ntw" YANG module | Some of the readable data nodes in the "ietf-l2vpn-ntw" YANG module | |||
may be considered sensitive or vulnerable in some network | may be considered sensitive or vulnerable in some network | |||
environments. It is thus important to control read access (e.g., via | environments. It is thus important to control read access (e.g., via | |||
get, get-config, or notification) to these data nodes. These are the | get, get-config, or notification) to these data nodes. These are the | |||
subtrees and data nodes and their sensitivity/vulnerability: | subtrees and data nodes and their sensitivity/vulnerability: | |||
* 'customer-name' and 'ip-connection': An attacker can retrieve | 'customer-name' and 'ip-connection': An attacker can retrieve | |||
privacy-related information which can be used to track a customer. | privacy-related information that can be used to track a customer. | |||
Disclosing such information may be considered as a violation of | Disclosing such information may be considered a violation of the | |||
the customer-provider trust relationship. | customer-provider trust relationship. | |||
Both "iana-bgp-l2-encaps" and "iana-pseudowire-types" modules define | Both "iana-bgp-l2-encaps" and "iana-pseudowire-types" modules define | |||
YANG identities for encapsulation/pseudowires types. These | YANG identities for encapsulation/pseudowires types. These | |||
identities are intended to be referenced by other YANG modules, and | identities are intended to be referenced by other YANG modules and by | |||
by themselves do not expose any nodes which are writable, contain | themselves do not expose any nodes that are writable or contain read- | |||
read-only state, or RPCs. | only state or RPCs. | |||
10. IANA Considerations | 10. IANA Considerations | |||
10.1. Registering YANG Modules | 10.1. Registering YANG Modules | |||
This document requests IANA to register the following URIs in the | IANA has registered the following URIs in the "ns" subregistry within | |||
"ns" subregistry within the "IETF XML Registry" [RFC3688]: | the "IETF XML Registry" [RFC3688]: | |||
URI: urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps | URI: urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
URI: urn:ietf:params:xml:ns:yang:iana-pseudowire-types | URI: urn:ietf:params:xml:ns:yang:iana-pseudowire-types | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
URI: urn:ietf:params:xml:ns:yang:ietf-ethernet-segment | URI: urn:ietf:params:xml:ns:yang:ietf-ethernet-segment | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
URI: urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw | URI: urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
This document requests IANA to register the following YANG modules in | IANA has registered the following YANG modules in the "YANG Module | |||
the "YANG Module Names" subregistry [RFC6020] within the "YANG | Names" subregistry [RFC6020] within the "YANG Parameters" registry: | |||
Parameters" registry: | ||||
name: iana-bgp-l2-encaps | name: iana-bgp-l2-encaps | |||
namespace: urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps | namespace: urn:ietf:params:xml:ns:yang:iana-bgp-l2-encaps | |||
maintained by IANA: Y | maintained by IANA: Y | |||
prefix: iana-bgp-l2-encaps | prefix: iana-bgp-l2-encaps | |||
reference: RFC XXXX | reference: RFC 9291 | |||
name: iana-pseudowire-types | name: iana-pseudowire-types | |||
namespace: urn:ietf:params:xml:ns:yang:iana-pseudowire-types | namespace: urn:ietf:params:xml:ns:yang:iana-pseudowire-types | |||
maintained by IANA: Y | maintained by IANA: Y | |||
prefix: iana-pw-types | prefix: iana-pw-types | |||
reference: RFC XXXX | reference: RFC 9291 | |||
name: ietf-ethernet-segment | name: ietf-ethernet-segment | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-ethernet-segment | namespace: urn:ietf:params:xml:ns:yang:ietf-ethernet-segment | |||
maintained by IANA: N | maintained by IANA: N | |||
prefix: l2vpn-es | prefix: l2vpn-es | |||
reference: RFC XXXX | reference: RFC 9291 | |||
name: ietf-l2vpn-ntw | name: ietf-l2vpn-ntw | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw | namespace: urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw | |||
maintained by IANA: N | maintained by IANA: N | |||
prefix: l2vpn-ntw | prefix: l2vpn-ntw | |||
reference: RFC XXXX | reference: RFC 9291 | |||
10.2. BGP Layer 2 Encapsulation Types | 10.2. BGP Layer 2 Encapsulation Types | |||
This document defines the initial version of the IANA-maintained | This document defines the initial version of the IANA-maintained | |||
"iana-bgp-l2-encaps" YANG module (Section 8.1). IANA is requested to | "iana-bgp-l2-encaps" YANG module (Section 8.1). IANA has added this | |||
add this note to the registry: | note to the "YANG Module Names" registry: | |||
BGP Layer 2 encapsulation types must not be directly added to the | BGP Layer 2 encapsulation types must not be directly added to the | |||
"iana-bgp-l2-encaps" YANG module. They must instead be added to | "iana-bgp-l2-encaps" YANG module. They must instead be added to | |||
the "BGP Layer 2 Encapsulation Types" registry [IANA-BGP-L2]. | the "BGP Layer 2 Encapsulation Types" registry at [IANA-BGP-L2]. | |||
When a Layer 2 encapsulation type is added to the "BGP Layer 2 | When a Layer 2 encapsulation type is added to the "BGP Layer 2 | |||
Encapsulation Types" registry, a new "identity" statement must be | Encapsulation Types" registry, a new "identity" statement must be | |||
added to the "iana-bgp-l2-encaps" YANG module. The name of the | added to the "iana-bgp-l2-encaps" YANG module. The name of the | |||
"identity" is a lower-case version of the encapsulation name provided | "identity" is a lower-case version of the encapsulation name provided | |||
in the description. The "identity" statement should have the | in the description. The "identity" statement should have the | |||
following sub-statements defined: | following sub-statements defined: | |||
"base": Contains 'bgp-l2-encaps-type'. | "base": Contains 'bgp-l2-encaps-type'. | |||
skipping to change at page 126, line 35 ¶ | skipping to change at line 5744 ¶ | |||
"reference": Replicates the reference from the registry with the | "reference": Replicates the reference from the registry with the | |||
title of the document added. | title of the document added. | |||
Unassigned or reserved values are not present in the module. | Unassigned or reserved values are not present in the module. | |||
When the "iana-bgp-l2-encaps" YANG module is updated, a new | When the "iana-bgp-l2-encaps" YANG module is updated, a new | |||
"revision" statement with a unique revision date must be added in | "revision" statement with a unique revision date must be added in | |||
front of the existing revision statements. | front of the existing revision statements. | |||
IANA is requested to add this note to [IANA-BGP-L2]: | IANA has added this note to [IANA-BGP-L2]: | |||
When this registry is modified, the YANG module "iana-bgp- | When this registry is modified, the YANG module "iana-bgp- | |||
l2-encaps" must be updated as defined in RFCXXXX. | l2-encaps" must be updated as defined in RFC 9291. | |||
10.3. Pseudowire Types | 10.3. Pseudowire Types | |||
This document defines the initial version of the IANA-maintained | This document defines the initial version of the IANA-maintained | |||
"iana-pseudowire-types" YANG module (Section 8.2). IANA is requested | "iana-pseudowire-types" YANG module (Section 8.2). IANA has added | |||
to add this note to the registry: | this note to the "YANG Module Names" registry: | |||
MPLS pseudowire types must not be directly added to the "iana-bgp- | MPLS pseudowire types must not be directly added to the "iana- | |||
l2-encaps" YANG module. They must instead be added to the "MPLS | pseudowire-types" YANG module. They must instead be added to the | |||
Pseudowire Types" registry [IANA-PW-Types]. | "MPLS Pseudowire Types" registry at [IANA-PW-TYPES]. | |||
When a pseudowire type is added to the "iana-pseudowire-types" | When a pseudowire type is added to the "iana-pseudowire-types" | |||
registry, a new "identity" statement must be added to the "iana- | registry, a new "identity" statement must be added to the "iana- | |||
pseudowire-types" YANG module. The name of the "identity" is a | pseudowire-types" YANG module. The name of the "identity" is a | |||
lower-case version of the encapsulation name provided in the | lower-case version of the encapsulation name provided in the | |||
description. The "identity" statement should have the following sub- | description. The "identity" statement should have the following sub- | |||
statements defined: | statements defined: | |||
"base": Contains 'iana-pw-types'. | "base": Contains 'iana-pw-types'. | |||
"description": Replicates the description from the registry. | "description": Replicates the description from the registry. | |||
"reference": Replicates the reference from the registry with the | "reference": Replicates the reference from the registry with the | |||
title of the document added | title of the document added. | |||
Unassigned or reserved values are not present in the module. | Unassigned or reserved values are not present in the module. | |||
When the "iana-pseudowire-types" YANG module is updated, a new | When the "iana-pseudowire-types" YANG module is updated, a new | |||
"revision" statement with a unique revision date must be added in | "revision" statement with a unique revision date must be added in | |||
front of the existing revision statements. | front of the existing revision statements. | |||
IANA is requested to add this note to [IANA-PW-Types]: | IANA has added this note to [IANA-PW-TYPES]: | |||
When this registry is modified, the YANG module "iana-pseudowire- | When this registry is modified, the YANG module "iana-pseudowire- | |||
types" must be updated as defined in RFCXXXX. | types" must be updated as defined in RFC 9291. | |||
11. References | 11. References | |||
11.1. Normative References | 11.1. Normative References | |||
[IANA-BGP-L2] | [IANA-BGP-L2] | |||
IANA, "BGP Layer 2 Encapsulation Types", | IANA, "BGP Layer 2 Encapsulation Types", | |||
<https://www.iana.org/assignments/bgp-parameters/bgp- | <https://www.iana.org/assignments/bgp-parameters>. | |||
parameters.xhtml#bgp-l2-encapsulation-types-registry>. | ||||
[IANA-PW-Types] | [IANA-PW-TYPES] | |||
IANA, "MPLS Pseudowire Types Registry", | IANA, "MPLS Pseudowire Types Registry", | |||
<http://www.iana.org/assignments/pwe3-parameters/ | <http://www.iana.org/assignments/pwe3-parameters/>. | |||
pwe3-parameters.xhtml#pwe3-parameters-2>. | ||||
[IEEE-802-1ag] | [IEEE-802-1ag] | |||
IEEE, "802.1ag - 2007 - IEEE Standard for Local and | IEEE, "IEEE Standard for Local and Metropolitan Area | |||
Metropolitan Area Networks - Virtual Bridged Local Area | Networks - Virtual Bridged Local Area Networks Amendment | |||
Networks Amendment 5: Connectivity Fault Management", | 5: Connectivity Fault Management", | |||
2007, <DOI 10.1109/IEEESTD.2007.4431836>. | DOI 10.1109/IEEESTD.2007.4431836, IEEE Std 802.1ag-2007, | |||
December 2007, | ||||
<https://doi.org/10.1109/IEEESTD.2007.4431836>. | ||||
[IEEE802.1Qcp-2018] | [IEEE802.1Qcp] | |||
IEEE, "IEEE Standard for Local and metropolitan area | IEEE, "IEEE Standard for Local and metropolitan area | |||
networks--Bridges and Bridged Networks--Amendment 30: YANG | networks--Bridges and Bridged Networks--Amendment 30: YANG | |||
Data Model", September 2018, | Data Model", DOI 10.1109/IEEESTD.2018.8467507, IEEE Std | |||
<https://ieeexplore.ieee.org/document/8467507>. | 802.1Qcp-2018, September 2018, | |||
<https://doi.org/10.1109/IEEESTD.2018.8467507>. | ||||
[ITU-T-Y-1731] | [ITU-T-Y-1731] | |||
Union, I. T., "Operations, administration and maintenance | ITU-T, "Operation, administration and maintenance (OAM) | |||
(OAM) functions and mechanisms for Ethernet-based | functions and mechanisms for Ethernet-based networks", | |||
networks", August 2015, | ITU-T Recommendation G.8013/Y.1731, August 2015, | |||
<https://www.itu.int/rec/T-REC-Y.1731/en>. | <https://www.itu.int/rec/T-REC-Y.1731/en>. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
[RFC4026] Andersson, L. and T. Madsen, "Provider Provisioned Virtual | [RFC4026] Andersson, L. and T. Madsen, "Provider Provisioned Virtual | |||
Private Network (VPN) Terminology", RFC 4026, | Private Network (VPN) Terminology", RFC 4026, | |||
DOI 10.17487/RFC4026, March 2005, | DOI 10.17487/RFC4026, March 2005, | |||
<https://www.rfc-editor.org/info/rfc4026>. | <https://www.rfc-editor.org/info/rfc4026>. | |||
skipping to change at page 131, line 5 ¶ | skipping to change at line 5946 ¶ | |||
RFC 8584, DOI 10.17487/RFC8584, April 2019, | RFC 8584, DOI 10.17487/RFC8584, April 2019, | |||
<https://www.rfc-editor.org/info/rfc8584>. | <https://www.rfc-editor.org/info/rfc8584>. | |||
[RFC9181] Barguil, S., Gonzalez de Dios, O., Ed., Boucadair, M., | [RFC9181] Barguil, S., Gonzalez de Dios, O., Ed., Boucadair, M., | |||
Ed., and Q. Wu, "A Common YANG Data Model for Layer 2 and | Ed., and Q. Wu, "A Common YANG Data Model for Layer 2 and | |||
Layer 3 VPNs", RFC 9181, DOI 10.17487/RFC9181, February | Layer 3 VPNs", RFC 9181, DOI 10.17487/RFC9181, February | |||
2022, <https://www.rfc-editor.org/info/rfc9181>. | 2022, <https://www.rfc-editor.org/info/rfc9181>. | |||
11.2. Informative References | 11.2. Informative References | |||
[I-D.ietf-bess-evpn-pref-df] | [BGP-YANG-MODEL] | |||
Rabadan, J., Sathappan, S., Przygienda, T., Lin, W., | ||||
Drake, J., Sajassi, A., and S. Mohanty, "Preference-based | ||||
EVPN DF Election", Work in Progress, Internet-Draft, | ||||
draft-ietf-bess-evpn-pref-df-08, 23 September 2021, | ||||
<https://www.ietf.org/archive/id/draft-ietf-bess-evpn- | ||||
pref-df-08.txt>. | ||||
[I-D.ietf-bess-evpn-yang] | ||||
Brissette, P., Shah, H., Hussain, I., Tiruveedhula, K., | ||||
and J. Rabadan, "Yang Data Model for EVPN", Work in | ||||
Progress, Internet-Draft, draft-ietf-bess-evpn-yang-07, 11 | ||||
March 2019, <https://www.ietf.org/archive/id/draft-ietf- | ||||
bess-evpn-yang-07.txt>. | ||||
[I-D.ietf-idr-bgp-model] | ||||
Jethanandani, M., Patel, K., Hares, S., and J. Haas, "BGP | Jethanandani, M., Patel, K., Hares, S., and J. Haas, "BGP | |||
YANG Model for Service Provider Networks", Work in | YANG Model for Service Provider Networks", Work in | |||
Progress, Internet-Draft, draft-ietf-idr-bgp-model-13, 6 | Progress, Internet-Draft, draft-ietf-idr-bgp-model-14, 3 | |||
March 2022, <https://www.ietf.org/archive/id/draft-ietf- | July 2022, <https://datatracker.ietf.org/doc/html/draft- | |||
idr-bgp-model-13.txt>. | ietf-idr-bgp-model-14>. | |||
[I-D.ietf-opsawg-sap] | ||||
Boucadair, M., Dios, O. G. D., Barguil, S., Wu, Q., and V. | ||||
Lopez, "A Network YANG Model for Service Attachment Points | ||||
(SAPs)", Work in Progress, Internet-Draft, draft-ietf- | ||||
opsawg-sap-07, 20 May 2022, | ||||
<https://www.ietf.org/archive/id/draft-ietf-opsawg-sap- | ||||
07.txt>. | ||||
[I-D.ietf-teas-enhanced-vpn] | ||||
Dong, J., Bryant, S., Li, Z., Miyasaka, T., and Y. Lee, "A | ||||
Framework for Enhanced Virtual Private Network (VPN+) | ||||
Services", Work in Progress, Internet-Draft, draft-ietf- | ||||
teas-enhanced-vpn-10, 6 March 2022, | ||||
<https://www.ietf.org/archive/id/draft-ietf-teas-enhanced- | ||||
vpn-10.txt>. | ||||
[I-D.ietf-teas-ietf-network-slices] | [EVPN-PERF-DF] | |||
Farrel, A., Drake, J., Rokui, R., Homma, S., Makhijani, | Rabadan, J., Ed., Sathappan, S., Lin, W., Drake, J., and | |||
K., Contreras, L. M., and J. Tantsura, "Framework for IETF | A. Sajassi, "Preference-based EVPN DF Election", Work in | |||
Network Slices", Work in Progress, Internet-Draft, draft- | Progress, Internet-Draft, draft-ietf-bess-evpn-pref-df-10, | |||
ietf-teas-ietf-network-slices-10, 27 March 2022, | 2 September 2022, <https://datatracker.ietf.org/doc/html/ | |||
<https://www.ietf.org/archive/id/draft-ietf-teas-ietf- | draft-ietf-bess-evpn-pref-df-10>. | |||
network-slices-10.txt>. | ||||
[I-D.ietf-teas-te-service-mapping-yang] | [EVPN-YANG] | |||
Lee, Y., Dhody, D., Fioccola, G., Wu, Q., Ceccarelli, D., | Brissette, P., Ed., Shah, H., Ed., Chen, I., Ed., Hussain, | |||
and J. Tantsura, "Traffic Engineering (TE) and Service | I., Ed., Tiruveedhula, K., Ed., and J. Rabadan, Ed., "Yang | |||
Mapping YANG Model", Work in Progress, Internet-Draft, | Data Model for EVPN", Work in Progress, Internet-Draft, | |||
draft-ietf-teas-te-service-mapping-yang-10, 7 March 2022, | draft-ietf-bess-evpn-yang-07, 11 March 2019, | |||
<https://www.ietf.org/archive/id/draft-ietf-teas-te- | <https://datatracker.ietf.org/doc/html/draft-ietf-bess- | |||
service-mapping-yang-10.txt>. | evpn-yang-07>. | |||
[IEEE-802-1ah] | [IEEE-802-1ah] | |||
IEEE, "IEEE Standard for Local and metropolitan area | IEEE, "IEEE Standard for Local and metropolitan area | |||
networks -- Virtual Bridged Local Area Networks Amendment | networks -- Virtual Bridged Local Area Networks Amendment | |||
7: Provider Backbone Bridges", IEEE Std 801.3AH-2008, | 7: Provider Backbone Bridges", IEEE Std 801.3AH-2008, | |||
2008, | August 2008, | |||
<https://standards.ieee.org/standard/802_1ah-2008.html>. | <https://standards.ieee.org/standard/802_1ah-2008.html>. | |||
[IEEE-802-3ah] | [IEEE-802-3ah] | |||
IEEE, "802.3ah - 2004 - IEEE Standard for Information | IEEE, "IEEE Standard for Information technology-- Local | |||
technology-- Local and metropolitan area networks-- Part | and metropolitan area networks-- Part 3: CSMA/CD Access | |||
3: CSMA/CD Access Method and Physical Layer Specifications | Method and Physical Layer Specifications Amendment: Media | |||
Amendment: Media Access Control Parameters, Physical | Access Control Parameters, Physical Layers, and Management | |||
Layers, and Management Parameters for Subscriber Access | Parameters for Subscriber Access Networks", | |||
Networks", IEEE Std 802.3AH-2004, 2004, <DOI 10.1109/ | DOI 10.1109/IEEESTD.2004.94617, IEEE Std 802.3AH-2004, | |||
IEEESTD.2004.94617>. | September 2004, | |||
<https://doi.org/10.1109/IEEESTD.2004.94617>. | ||||
[IEEE802.1AX] | [IEEE802.1AX] | |||
"Link Aggregation", IEEE Std 802.1AX-2020, 2020. | IEEE, "IEEE Standard for Local and Metropolitan Area | |||
Networks--Link Aggregation", | ||||
DOI 10.1109/IEEESTD.2020.9105034, IEEE Std 802.1AX-2020, | ||||
May 2020, <https://doi.org/10.1109/IEEESTD.2020.9105034>. | ||||
[IEEE802.1Q] | [IEEE802.1Q] | |||
"Bridges and Bridged Networks", IEEE Std 802.1Q-2018, 6 | IEEE, "IEEE Standard for Local and Metropolitan Area | |||
July 2018, <https://ieeexplore.ieee.org/document/8403927>. | Network--Bridges and Bridged Networks", | |||
DOI 10.1109/IEEESTD.2018.8403927, IEEE Std 802.1Q-2018, | ||||
July 2018, <https://doi.org/10.1109/IEEESTD.2018.8403927>. | ||||
[MFA] "The Use of Virtual Trunks for ATM/MPLS Control Plane | [IETF-NET-SLICES] | |||
Interworking Specification", MFA Forum 9.0.0 , February | Farrel, A., Ed., Drake, J., Ed., Rokui, R., Homma, S., | |||
2006. | Makhijani, K., Contreras, L. M., and J. Tantsura, | |||
"Framework for IETF Network Slices", Work in Progress, | ||||
Internet-Draft, draft-ietf-teas-ietf-network-slices-14, 3 | ||||
August 2022, <https://datatracker.ietf.org/doc/html/draft- | ||||
ietf-teas-ietf-network-slices-14>. | ||||
[MFA] MFA Forum Technical Committee, "The Use of Virtual Trunks | ||||
for ATM/MPLS Control Plane Interworking Specification", | ||||
MFA Forum 9.0.0, February 2006. | ||||
[PYANG] "pyang", November 2020, | [PYANG] "pyang", November 2020, | |||
<https://github.com/mbj4668/pyang>. | <https://github.com/mbj4668/pyang>. | |||
[RFC2507] Degermark, M., Nordgren, B., and S. Pink, "IP Header | [RFC2507] Degermark, M., Nordgren, B., and S. Pink, "IP Header | |||
Compression", RFC 2507, DOI 10.17487/RFC2507, February | Compression", RFC 2507, DOI 10.17487/RFC2507, February | |||
1999, <https://www.rfc-editor.org/info/rfc2507>. | 1999, <https://www.rfc-editor.org/info/rfc2507>. | |||
[RFC2508] Casner, S. and V. Jacobson, "Compressing IP/UDP/RTP | [RFC2508] Casner, S. and V. Jacobson, "Compressing IP/UDP/RTP | |||
Headers for Low-Speed Serial Links", RFC 2508, | Headers for Low-Speed Serial Links", RFC 2508, | |||
skipping to change at page 136, line 25 ¶ | skipping to change at line 6185 ¶ | |||
[RFC8960] Saad, T., Raza, K., Gandhi, R., Liu, X., and V. Beeram, "A | [RFC8960] Saad, T., Raza, K., Gandhi, R., Liu, X., and V. Beeram, "A | |||
YANG Data Model for MPLS Base", RFC 8960, | YANG Data Model for MPLS Base", RFC 8960, | |||
DOI 10.17487/RFC8960, December 2020, | DOI 10.17487/RFC8960, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8960>. | <https://www.rfc-editor.org/info/rfc8960>. | |||
[RFC8969] Wu, Q., Ed., Boucadair, M., Ed., Lopez, D., Xie, C., and | [RFC8969] Wu, Q., Ed., Boucadair, M., Ed., Lopez, D., Xie, C., and | |||
L. Geng, "A Framework for Automating Service and Network | L. Geng, "A Framework for Automating Service and Network | |||
Management with YANG", RFC 8969, DOI 10.17487/RFC8969, | Management with YANG", RFC 8969, DOI 10.17487/RFC8969, | |||
January 2021, <https://www.rfc-editor.org/info/rfc8969>. | January 2021, <https://www.rfc-editor.org/info/rfc8969>. | |||
[TE-SERVICE-MAPPING] | ||||
Lee, Y., Ed., Dhody, D., Ed., Fioccola, G., Wu, Q., Ed., | ||||
Ceccarelli, D., and J. Tantsura, "Traffic Engineering (TE) | ||||
and Service Mapping YANG Data Model", Work in Progress, | ||||
Internet-Draft, draft-ietf-teas-te-service-mapping-yang- | ||||
11, 11 July 2022, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-teas-te-service-mapping-yang-11>. | ||||
[VPN+-FRAMEWORK] | ||||
Dong, J., Bryant, S., Li, Z., Miyasaka, T., and Y. Lee, "A | ||||
Framework for Enhanced Virtual Private Network (VPN+) | ||||
Services", Work in Progress, Internet-Draft, draft-ietf- | ||||
teas-enhanced-vpn-10, 6 March 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-teas- | ||||
enhanced-vpn-10>. | ||||
[YANG-SAPS] | ||||
Boucadair, M., Ed., Gonzalez de Dios, O., Barguil, S., Wu, | ||||
Q., and V. Lopez, "A YANG Network Model for Service | ||||
Attachment Points (SAPs)", Work in Progress, Internet- | ||||
Draft, draft-ietf-opsawg-sap-09, 28 July 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-opsawg- | ||||
sap-09>. | ||||
Appendix A. Examples | Appendix A. Examples | |||
This section includes a non-exhaustive list of examples to illustrate | This section includes a non-exhaustive list of examples to illustrate | |||
the use of the L2NM. | the use of the L2NM. | |||
In the following subsections, only the content of the message bodies | In the following subsections, only the content of the message bodies | |||
is shown using JSON notations [RFC7951]. | is shown using JSON notations [RFC7951]. | |||
The examples use the folding defined in [RFC8792] for long lines. | The examples use folding as defined in [RFC8792] for long lines. | |||
A.1. BGP-based VPLS | A.1. BGP-Based VPLS | |||
This section provides an example to illustrate how the L2NM can be | This section provides an example to illustrate how the L2NM can be | |||
used to manage BGP-based VPLS. We consider the sample VPLS service | used to manage BGP-based VPLS. We consider the sample VPLS service | |||
delivered using the architecture depicted in Figure 23. In | delivered using the architecture depicted in Figure 23. In | |||
accordance with [RFC4761], we assume that a full mesh is established | accordance with [RFC4761], we assume that a full mesh is established | |||
between all PEs. The details about such full mesh are not detailed | between all PEs. The details about such full mesh are not detailed | |||
here. | here. | |||
+-----+ +--------------+ +-----+ | +-----+ +--------------+ +-----+ | |||
+----+ | PE1 |===| |===| PE3 | +----+ | +----+ | PE1 |===| |===| PE3 | +----+ | |||
| CE1+-------+ | | | | +-------+ CE3| | | CE1+-------+ | | | | +-------+ CE3| | |||
+----+ +-----+ | | +-----+ +----+ | +----+ +-----+ | | +-----+ +----+ | |||
| Core | | | Core | | |||
+----+ +-----+ | | +-----+ +----+ | +----+ +-----+ | | +-----+ +----+ | |||
|CE2 +-------+ | | | | +-------+ CE4| | |CE2 +-------+ | | | | +-------+ CE4| | |||
+----+ | PE2 |===| |===| PE4 | +----+ | +----+ | PE2 |===| |===| PE4 | +----+ | |||
+-----+ +--------------+ +-----+ | +-----+ +--------------+ +-----+ | |||
Figure 23: An Example of VPLS | Figure 23: An Example of VPLS | |||
Figure 24 show an example of a message body used to configure a VPLS | Figure 24 shows an example of a message body used to configure a VPLS | |||
instance using the L2NM. In this example, BGP is used for both auto- | instance using the L2NM. In this example, BGP is used for both auto- | |||
discovery and signaling. The 'signaling-type' data node is set to | discovery and signaling. The 'signaling-type' data node is set to | |||
'vpn-common:bgp-signaling'. | 'vpn-common:bgp-signaling'. | |||
=============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
{ | ||||
"ietf-l2vpn-ntw:l2vpn-ntw": { | ||||
"vpn-services": { | ||||
"vpn-service": [ | ||||
{ | ||||
"vpn-id": "vpls7714825356", | ||||
"vpn-description": "Sample BGP-based VPLS", | ||||
"customer-name": "customer-7714825356", | ||||
"vpn-type": "ietf-vpn-common:vpls", | ||||
"bgp-ad-enabled": true, | ||||
"signaling-type": "ietf-vpn-common:bgp-signaling", | ||||
"global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile", | ||||
"local-autonomous-system": 65535, | ||||
"svc-mtu": 1518, | ||||
"rd-suffix": 1, | ||||
"vpn-target": [ | ||||
{ | ||||
"id": 1, | ||||
"route-targets": [ | ||||
{ | ||||
"route-target": "0:65535:1" | ||||
} | ||||
], | ||||
"route-target-type": "both" | ||||
} | ||||
] | ||||
} | { | |||
] | "ietf-l2vpn-ntw:l2vpn-ntw": { | |||
}, | "vpn-services": { | |||
"vpn-nodes": { | "vpn-service": [ | |||
"vpn-node": [ | { | |||
{ | "vpn-id": "vpls7714825356", | |||
"vpn-node-id": "pe1", | "vpn-description": "Sample BGP-based VPLS", | |||
"ne-id": "198.51.100.1", | "customer-name": "customer-7714825356", | |||
"active-global-parameters-profiles": { | "vpn-type": "ietf-vpn-common:vpls", | |||
"global-parameters-profile": [ | "bgp-ad-enabled": true, | |||
{ | "signaling-type": "ietf-vpn-common:bgp-signaling", | |||
"profile-id": "simple-profile" | "global-parameters-profiles": { | |||
} | "global-parameters-profile": [ | |||
] | { | |||
}, | "profile-id": "simple-profile", | |||
"bgp-auto-discovery": { | "local-autonomous-system": 65535, | |||
"vpn-id": "1" | "svc-mtu": 1518, | |||
}, | "rd-suffix": 1, | |||
"signaling-option": { | "vpn-target": [ | |||
"pw-encapsulation-type": "iana-bgp-l2-encaps:ethernet\ | { | |||
-tagged-mode", | "id": 1, | |||
"vpls-instance": { | "route-targets": [ | |||
"vpls-edge-id": 1, | { | |||
"vpls-edge-id-range": 100 | "route-target": "0:65535:1" | |||
} | } | |||
}, | ], | |||
"vpn-network-accesses": { | "route-target-type": "both" | |||
"vpn-network-access": [ | } | |||
{ | ] | |||
"id": "1/1/1.1", | } | |||
"interface-id": "1/1/1", | ] | |||
"description": "Interface to CE1", | }, | |||
"active-vpn-node-profile": "simple-profile", | "vpn-nodes": { | |||
"status": { | "vpn-node": [ | |||
"admin-status": { | { | |||
"status": "ietf-vpn-common:admin-up" | "vpn-node-id": "pe1", | |||
} | "ne-id": "198.51.100.1", | |||
}, | "active-global-parameters-profiles": { | |||
"connection": { | "global-parameters-profile": [ | |||
"encapsulation": { | { | |||
"encap-type": "ietf-vpn-common:dot1q", | "profile-id": "simple-profile" | |||
"dot1q": { | } | |||
"cvlan-id": 1 | ] | |||
} | }, | |||
} | "bgp-auto-discovery": { | |||
} | "vpn-id": "1" | |||
} | }, | |||
] | "signaling-option": { | |||
"pw-encapsulation-type": "iana-bgp-l2-encaps:\ | ||||
ethernet-tagged-mode", | ||||
"vpls-instance": { | ||||
"vpls-edge-id": 1, | ||||
"vpls-edge-id-range": 100 | ||||
} | ||||
}, | ||||
"vpn-network-accesses": { | ||||
"vpn-network-access": [ | ||||
{ | ||||
"id": "1/1/1.1", | ||||
"interface-id": "1/1/1", | ||||
"description": "Interface to CE1", | ||||
"active-vpn-node-profile": "simple-profile", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | ||||
}, | ||||
"connection": { | ||||
"encapsulation": { | ||||
"encap-type": "ietf-vpn-common:dot1q", | ||||
"dot1q": { | ||||
"cvlan-id": 1 | ||||
} | ||||
} | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"vpn-node-id": "pe2", | ||||
"ne-id": "198.51.100.2", | ||||
"active-global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile" | ||||
} | ||||
] | ||||
}, | ||||
"bgp-auto-discovery": { | ||||
"vpn-id": "1" | ||||
}, | ||||
"signaling-option": { | ||||
"pw-encapsulation-type": "iana-bgp-l2-encaps:\ | ||||
ethernet-tagged-mode", | ||||
"vpls-instance": { | ||||
"vpls-edge-id": 2, | ||||
"vpls-edge-id-range": 100 | ||||
} | ||||
}, | ||||
"vpn-network-accesses": { | ||||
"vpn-network-access": [ | ||||
{ | ||||
"id": "1/1/1.1", | ||||
"interface-id": "1/1/1", | ||||
"description": "Interface to CE2", | ||||
"active-vpn-node-profile": "simple-profile", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | ||||
}, | ||||
"connection": { | ||||
"encapsulation": { | ||||
"encap-type": "ietf-vpn-common:dot1q", | ||||
"dot1q": { | ||||
"cvlan-id": 1 | ||||
} | ||||
} | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"vpn-node-id": "pe3", | ||||
"ne-id": "198.51.100.3", | ||||
"active-global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile" | ||||
} | ||||
] | ||||
}, | ||||
"bgp-auto-discovery": { | ||||
"vpn-id": "1" | ||||
}, | ||||
"signaling-option": { | ||||
"pw-encapsulation-type": "iana-bgp-l2-encaps:\ | ||||
ethernet-tagged-mode", | ||||
"vpls-instance": { | ||||
"vpls-edge-id": 3, | ||||
"vpls-edge-id-range": 100 | ||||
} | ||||
}, | ||||
"vpn-network-accesses": { | ||||
"vpn-network-access": [ | ||||
{ | ||||
"id": "1/1/1.1", | ||||
"interface-id": "1/1/1", | ||||
"description": "Interface to CE3", | ||||
"active-vpn-node-profile": "simple-profile", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | ||||
}, | ||||
"connection": { | ||||
"encapsulation": { | ||||
"encap-type": "ietf-vpn-common:dot1q", | ||||
"dot1q": { | ||||
"cvlan-id": 1 | ||||
} | ||||
} | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"vpn-node-id": "pe4", | ||||
"ne-id": "198.51.100.4", | ||||
"active-global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile" | ||||
} | ||||
] | ||||
}, | ||||
"bgp-auto-discovery": { | ||||
"vpn-id": "1" | ||||
}, | ||||
"signaling-option": { | ||||
"pw-encapsulation-type": "iana-bgp-l2-encaps:\ | ||||
ethernet-tagged-mode", | ||||
"vpls-instance": { | ||||
"vpls-edge-id": 4, | ||||
"vpls-edge-id-range": 100 | ||||
} | ||||
}, | ||||
"vpn-network-accesses": { | ||||
"vpn-network-access": [ | ||||
{ | ||||
"id": "1/1/1.1", | ||||
"interface-id": "1/1/1", | ||||
"description": "Interface to CE4", | ||||
"active-vpn-node-profile": "simple-profile", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | ||||
}, | ||||
"connection": { | ||||
"encapsulation": { | ||||
"encap-type": "ietf-vpn-common:dot1q", | ||||
"dot1q": { | ||||
"cvlan-id": 1 | ||||
} | ||||
} | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
} | ||||
} | Figure 24: An Example of an L2NM Message Body to Configure a BGP- | |||
}, | Based VPLS | |||
{ | ||||
"vpn-node-id": "pe2", | ||||
"ne-id": "198.51.100.2", | ||||
"active-global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile" | ||||
} | ||||
] | ||||
}, | ||||
"bgp-auto-discovery": { | ||||
"vpn-id": "1" | ||||
}, | ||||
"signaling-option": { | ||||
"pw-encapsulation-type": "iana-bgp-l2-encaps:ethernet\ | ||||
-tagged-mode", | ||||
"vpls-instance": { | ||||
"vpls-edge-id": 2, | ||||
"vpls-edge-id-range": 100 | ||||
} | ||||
}, | ||||
"vpn-network-accesses": { | ||||
"vpn-network-access": [ | ||||
{ | ||||
"id": "1/1/1.1", | ||||
"interface-id": "1/1/1", | ||||
"description": "Interface to CE2", | ||||
"active-vpn-node-profile": "simple-profile", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | ||||
}, | ||||
"connection": { | ||||
"encapsulation": { | ||||
"encap-type": "ietf-vpn-common:dot1q", | ||||
"dot1q": { | ||||
"cvlan-id": 1 | ||||
} | ||||
} | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"vpn-node-id": "pe3", | ||||
"ne-id": "198.51.100.3", | ||||
"active-global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile" | ||||
} | ||||
] | ||||
}, | ||||
"bgp-auto-discovery": { | ||||
"vpn-id": "1" | ||||
}, | ||||
"signaling-option": { | ||||
"pw-encapsulation-type": "iana-bgp-l2-encaps:ethernet\ | ||||
-tagged-mode", | ||||
"vpls-instance": { | ||||
"vpls-edge-id": 3, | ||||
"vpls-edge-id-range": 100 | ||||
} | ||||
}, | ||||
"vpn-network-accesses": { | ||||
"vpn-network-access": [ | ||||
{ | ||||
"id": "1/1/1.1", | ||||
"interface-id": "1/1/1", | ||||
"description": "Interface to CE3", | ||||
"active-vpn-node-profile": "simple-profile", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | ||||
}, | ||||
"connection": { | ||||
"encapsulation": { | ||||
"encap-type": "ietf-vpn-common:dot1q", | ||||
"dot1q": { | ||||
"cvlan-id": 1 | ||||
} | ||||
} | ||||
} | ||||
} | ||||
] | ||||
} | ||||
}, | ||||
{ | ||||
"vpn-node-id": "pe4", | ||||
"ne-id": "198.51.100.4", | ||||
"active-global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile" | ||||
} | ||||
] | ||||
}, | ||||
"bgp-auto-discovery": { | ||||
"vpn-id": "1" | ||||
}, | ||||
"signaling-option": { | ||||
"pw-encapsulation-type": "iana-bgp-l2-encaps:ethernet\ | ||||
-tagged-mode", | ||||
"vpls-instance": { | ||||
"vpls-edge-id": 4, | ||||
"vpls-edge-id-range": 100 | ||||
} | ||||
}, | ||||
"vpn-network-accesses": { | ||||
"vpn-network-access": [ | ||||
{ | ||||
"id": "1/1/1.1", | ||||
"interface-id": "1/1/1", | ||||
"description": "Interface to CE4", | ||||
"active-vpn-node-profile": "simple-profile", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | ||||
}, | ||||
"connection": { | ||||
"encapsulation": { | ||||
"encap-type": "ietf-vpn-common:dot1q", | ||||
"dot1q": { | ||||
"cvlan-id": 1 | ||||
} | ||||
} | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
] | ||||
} | ||||
} | ||||
} | ||||
Figure 24: Example of L2NM Message Body to Configure a BGP-based VPLS | ||||
A.2. BGP-based VPWS with LDP Signaling | A.2. BGP-Based VPWS with LDP Signaling | |||
Let's consider the simple architecture depicted in Figure 25 to offer | Let's consider the simple architecture depicted in Figure 25 to offer | |||
a VPWS between CE1 and CE2. The service uses BGP for auto-discovery | a VPWS between CE1 and CE2. The service uses BGP for auto-discovery | |||
and LDP for signaling. | and LDP for signaling. | |||
+-----+ +--------------+ +-----+ | +-----+ +--------------+ +-----+ | |||
+----+ | PE1 |===| |===| PE2 | +----+ | +----+ | PE1 |===| |===| PE2 | +----+ | |||
| CE1+-------+ | | Core | | +-------+ CE2| | | CE1+-------+ | | Core | | +-------+ CE2| | |||
+----+ +-----+ +--------------+ +-----+ +----+ | +----+ +-----+ +--------------+ +-----+ +----+ | |||
site1 site2 | site1 site2 | |||
skipping to change at page 145, line 4 ¶ | skipping to change at line 6612 ¶ | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
Figure 26: Example of L2NM Message Body to Configure a BGP-based | ||||
VPWS with LDP Signaling | ||||
A.3. LDP-based VPLS | Figure 26: An Example of an L2NM Message Body to Configure a BGP- | |||
Based VPWS with LDP Signaling | ||||
This section provides an example to illustrate how the L2NM can be | A.3. LDP-Based VPLS | |||
This section provides an example that illustrates how the L2NM can be | ||||
used to manage a VPLS with LDP signaling. The connectivity between | used to manage a VPLS with LDP signaling. The connectivity between | |||
the CE and the PE is direct using Dot1q encapsulation [IEEE802.1Q]. | the CE and the PE is direct using Dot1q encapsulation [IEEE802.1Q]. | |||
We consider the sample service delivered using the architecture | We consider the sample service delivered using the architecture | |||
depicted in Figure 27. | depicted in Figure 27. | |||
+---------- VPLS "1543" ----------+ | +---------- VPLS "1543" ----------+ | |||
+-----+ +--------------+ +-----+ | +-----+ +--------------+ +-----+ | |||
+----+ | PE1 |===| |===| PE2 | +----+ | +----+ | PE1 |===| |===| PE2 | +----+ | |||
| CE1 +-----+"450"| | MPLS | |"451"+-------+ CE2| | | CE1 +-----+"450"| | MPLS | |"451"+-------+ CE2| | |||
+----+ +-----+ | | +-----+ +----+ | +----+ +-----+ | | +-----+ +----+ | |||
| Core | | | Core | | |||
+--------------+ | +--------------+ | |||
Figure 27: An Example of VPLS topology | Figure 27: An Example of VPLS Topology | |||
Figure 28 shows how the L2NM is used to instruct both PE1 and PE2 to | Figure 28 shows how the L2NM is used to instruct both PE1 and PE2 to | |||
use the targeted LDP session between them to establish the VPLS | use the targeted LDP session between them to establish the VPLS | |||
"1543" between the ends. A single VPN service is created for this | "1543" between the ends. A single VPN service is created for this | |||
purpose. Additionally, two VPN Nodes and each with a corresponding | purpose. Additionally, two VPN Nodes that each have corresponding | |||
VPN network access is also created. | VPN network access are also created. | |||
=============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
{ | { | |||
"ietf-l2vpn-ntw:l2vpn-ntw": { | "ietf-l2vpn-ntw:l2vpn-ntw": { | |||
"vpn-services": { | "vpn-services": { | |||
"vpn-service": [ | "vpn-service": [ | |||
{ | { | |||
"vpn-id": "450", | "vpn-id": "450", | |||
"vpn-name": "CORPO-EXAMPLE", | "vpn-name": "CORPO-EXAMPLE", | |||
"vpn-description": "SEDE_CENTRO_450", | "vpn-description": "SEDE_CENTRO_450", | |||
"customer-name": "EXAMPLE", | "customer-name": "EXAMPLE", | |||
"vpn-type": "ietf-vpn-common:vpls", | "vpn-type": "ietf-vpn-common:vpls", | |||
"vpn-service-topology": "ietf-vpn-common:hub-spoke", | "vpn-service-topology": "ietf-vpn-common:hub-spoke", | |||
"bgp-ad-enabled": false, | "bgp-ad-enabled": false, | |||
"signaling-type": "ietf-vpn-common:ldp-signaling", | "signaling-type": "ietf-vpn-common:ldp-signaling", | |||
"global-parameters-profiles": { | "global-parameters-profiles": { | |||
"global-parameters-profile": [ | "global-parameters-profile": [ | |||
{ | { | |||
"profile-id": "simple-profile", | "profile-id": "simple-profile", | |||
"ce-vlan-preservation": true, | "ce-vlan-preservation": true, | |||
"ce-vlan-cos-preservation": true | "ce-vlan-cos-preservation": true | |||
} | } | |||
] | ] | |||
}, | }, | |||
"vpn-nodes": { | "vpn-nodes": { | |||
"vpn-node": [ | "vpn-node": [ | |||
{ | { | |||
"vpn-node-id": "450", | "vpn-node-id": "450", | |||
"description": "SEDE_CENTRO_450", | "description": "SEDE_CENTRO_450", | |||
"ne-id": "2001:db8:5::1", | "ne-id": "2001:db8:5::1", | |||
"role": "ietf-vpn-common:hub-role", | "role": "ietf-vpn-common:hub-role", | |||
"status": { | "status": { | |||
"admin-status": { | "admin-status": { | |||
"status": "ietf-vpn-common:admin-up" | "status": "ietf-vpn-common:admin-up" | |||
} | ||||
}, | ||||
"active-global-parameters-profiles": { | ||||
"global-parameters-profile": [ | ||||
{ | ||||
"profile-id": "simple-profile" | ||||
} | } | |||
] | }, | |||
}, | "active-global-parameters-profiles": { | |||
"signaling-option": { | "global-parameters-profile": [ | |||
"ldp-or-l2tp": { | ||||
"t-ldp-pw-type": "vpls-type", | ||||
"pw-peer-list": [ | ||||
{ | { | |||
"peer-addr": "2001:db8:50::1", | "profile-id": "simple-profile" | |||
"vc-id": "1543" | ||||
} | } | |||
] | ] | |||
} | }, | |||
}, | "signaling-option": { | |||
"vpn-network-accesses": { | "ldp-or-l2tp": { | |||
"vpn-network-access": [ | "t-ldp-pw-type": "vpls-type", | |||
{ | "pw-peer-list": [ | |||
"id": "4508671287", | { | |||
"description": "VPN_450_SNA", | "peer-addr": "2001:db8:50::1", | |||
"interface-id": "gigabithethernet0/0/1", | "vc-id": "1543" | |||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | } | |||
}, | ] | |||
"connection": { | } | |||
"l2-termination-point": "550", | }, | |||
"encapsulation": { | "vpn-network-accesses": { | |||
"encap-type": "ietf-vpn-common:dot1q", | "vpn-network-access": [ | |||
"dot1q": { | { | |||
"tag-type": "ietf-vpn-common:c-vlan", | "id": "4508671287", | |||
"cvlan-id": 550 | "description": "VPN_450_SNA", | |||
"interface-id": "gigabithethernet0/0/1", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | } | |||
} | ||||
}, | ||||
"service": { | ||||
"mtu": 1550, | ||||
"svc-pe-to-ce-bandwidth": { | ||||
"pe-to-ce-bandwidth": [ | ||||
{ | ||||
"bw-type": "ietf-vpn-common:bw-per-port", | ||||
"cir": "20480000" | ||||
} | ||||
] | ||||
}, | }, | |||
"svc-ce-to-pe-bandwidth": { | "connection": { | |||
"ce-to-pe-bandwidth": [ | "l2-termination-point": "550", | |||
{ | "encapsulation": { | |||
"bw-type": "ietf-vpn-common:bw-per-port", | "encap-type": "ietf-vpn-common:dot1q", | |||
"cir": "20480000" | "dot1q": { | |||
"tag-type": "ietf-vpn-common:c-vlan", | ||||
"cvlan-id": 550 | ||||
} | } | |||
] | } | |||
}, | }, | |||
"qos": { | "service": { | |||
"qos-profile": { | "mtu": 1550, | |||
"qos-profile": [ | "svc-pe-to-ce-bandwidth": { | |||
"pe-to-ce-bandwidth": [ | ||||
{ | { | |||
"profile": "QoS_Profile_A", | "bw-type": "ietf-vpn-common:\ | |||
"direction": "ietf-vpn-common:both" | bw-per-port", | |||
"cir": "20480000" | ||||
} | ||||
] | ||||
}, | ||||
"svc-ce-to-pe-bandwidth": { | ||||
"ce-to-pe-bandwidth": [ | ||||
{ | ||||
"bw-type": "ietf-vpn-common:\ | ||||
bw-per-port", | ||||
"cir": "20480000" | ||||
} | } | |||
] | ] | |||
}, | ||||
"qos": { | ||||
"qos-profile": { | ||||
"qos-profile": [ | ||||
{ | ||||
"profile": "QoS_Profile_A", | ||||
"direction": "ietf-vpn-common:both" | ||||
} | ||||
] | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | ] | |||
] | ||||
} | ||||
}, | ||||
{ | ||||
"vpn-node-id": "451", | ||||
"description": "SEDE_CHAPINERO_451", | ||||
"ne-id": "2001:db8:50::1", | ||||
"role": "ietf-vpn-common:spoke-role", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | } | |||
}, | }, | |||
"active-global-parameters-profiles": { | { | |||
"global-parameters-profile": [ | "vpn-node-id": "451", | |||
{ | "description": "SEDE_CHAPINERO_451", | |||
"profile-id": "simple-profile" | "ne-id": "2001:db8:50::1", | |||
"role": "ietf-vpn-common:spoke-role", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | } | |||
] | }, | |||
}, | "active-global-parameters-profiles": { | |||
"signaling-option": { | "global-parameters-profile": [ | |||
"ldp-or-l2tp": { | ||||
"t-ldp-pw-type": "vpls-type", | ||||
"pw-peer-list": [ | ||||
{ | { | |||
"peer-addr": "2001:db8:5::1", | "profile-id": "simple-profile" | |||
"vc-id": "1543" | ||||
} | } | |||
] | ] | |||
} | }, | |||
}, | "signaling-option": { | |||
"vpn-network-accesses": { | "ldp-or-l2tp": { | |||
"vpn-network-access": [ | "t-ldp-pw-type": "vpls-type", | |||
{ | "pw-peer-list": [ | |||
"id": "4508671288", | { | |||
"description": "VPN_450_SNA", | "peer-addr": "2001:db8:5::1", | |||
"interface-id": "gigabithethernet0/0/1", | "vc-id": "1543" | |||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | } | |||
}, | ] | |||
"connection": { | } | |||
"l2-termination-point": "550", | }, | |||
"encapsulation": { | "vpn-network-accesses": { | |||
"encap-type": "ietf-vpn-common:dot1q", | "vpn-network-access": [ | |||
"dot1q": { | { | |||
"tag-type": "ietf-vpn-common:c-vlan", | "id": "4508671288", | |||
"cvlan-id": 550 | "description": "VPN_450_SNA", | |||
"interface-id": "gigabithethernet0/0/1", | ||||
"status": { | ||||
"admin-status": { | ||||
"status": "ietf-vpn-common:admin-up" | ||||
} | } | |||
} | ||||
}, | ||||
"service": { | ||||
"mtu": 1550, | ||||
"svc-pe-to-ce-bandwidth": { | ||||
"pe-to-ce-bandwidth": [ | ||||
{ | ||||
"bw-type": "ietf-vpn-common:bw-per-port", | ||||
"cir": "20480000" | ||||
} | ||||
] | ||||
}, | }, | |||
"svc-ce-to-pe-bandwidth": { | "connection": { | |||
"ce-to-pe-bandwidth": [ | "l2-termination-point": "550", | |||
{ | "encapsulation": { | |||
"bw-type": "ietf-vpn-common:bw-per-port", | "encap-type": "ietf-vpn-common:dot1q", | |||
"cir": "20480000" | "dot1q": { | |||
"tag-type": "ietf-vpn-common:c-vlan", | ||||
"cvlan-id": 550 | ||||
} | } | |||
] | } | |||
}, | }, | |||
"qos": { | "service": { | |||
"qos-profile": { | "mtu": 1550, | |||
"qos-profile": [ | "svc-pe-to-ce-bandwidth": { | |||
"pe-to-ce-bandwidth": [ | ||||
{ | { | |||
"profile": "QoS_Profile_A", | "bw-type": "ietf-vpn-common:\ | |||
"direction": "ietf-vpn-common:both" | bw-per-port", | |||
"cir": "20480000" | ||||
} | ||||
] | ||||
}, | ||||
"svc-ce-to-pe-bandwidth": { | ||||
"ce-to-pe-bandwidth": [ | ||||
{ | ||||
"bw-type": "ietf-vpn-common:\ | ||||
bw-per-port", | ||||
"cir": "20480000" | ||||
} | } | |||
] | ] | |||
}, | ||||
"qos": { | ||||
"qos-profile": { | ||||
"qos-profile": [ | ||||
{ | ||||
"profile": "QoS_Profile_A", | ||||
"direction": "ietf-vpn-common:both" | ||||
} | ||||
] | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | ] | |||
] | } | |||
} | } | |||
} | ] | |||
] | } | |||
} | } | |||
} | ] | |||
] | } | |||
} | } | |||
} | } | |||
} | ||||
Figure 28: Example of L2NM Message Body for LDP-based VPLS | Figure 28: An Example of an L2NM Message Body for LDP-Based VPLS | |||
A.4. VPWS-EVPN Service Instance | A.4. VPWS-EVPN Service Instance | |||
Figure 29 depicts a sample architecture to offer VPWS-EVPN service | Figure 29 depicts a sample architecture to offer VPWS-EVPN service | |||
between CE1 and CE2. Both CEs are multi-homed. BGP sessions are | between CE1 and CE2. Both CEs are multihomed. BGP sessions are | |||
maintained between these PEs as per [RFC8214]. In this EVPN | maintained between these PEs as per [RFC8214]. In this EVPN | |||
instance, an All-Active redundancy mode is used. | instance, an All-Active redundancy mode is used. | |||
|<-------- EVPN Instance --------->| | |<-------- EVPN Instance --------->| | |||
| | | | | | |||
ESI1 V V ESI2 | ESI1 V V ESI2 | |||
| +-----+ +--------------+ +-----+ | | | +-----+ +--------------+ +-----+ | | |||
+----+ | | PE1 |===| |===| PE3 | | +----+ | +----+ | | PE1 |===| |===| PE3 | | +----+ | |||
| +-------+ | | | | +-------+ | | | +-------+ | | | | +-------+ | | |||
| | | +-----+ | | +-----+ | | | | | | | +-----+ | | +-----+ | | | | |||
skipping to change at page 150, line 32 ¶ | skipping to change at line 6879 ¶ | |||
Let's first suppose that the following ES was created (Figure 30). | Let's first suppose that the following ES was created (Figure 30). | |||
=============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
{ | { | |||
"ietf-ethernet-segment:ethernet-segments": { | "ietf-ethernet-segment:ethernet-segments": { | |||
"ethernet-segment": [ | "ethernet-segment": [ | |||
{ | { | |||
"name": "esi1", | "name": "esi1", | |||
"ethernet-segment-identifier": "00:11:11:11:11:11:11:\ | "ethernet-segment-identifier": "00:11:11:11:11:11:11:\ | |||
11:11:11", | 11:11:11", | |||
"esi-redundancy-mode": "all-active" | "esi-redundancy-mode": "all-active" | |||
}, | }, | |||
{ | { | |||
"name": "esi2", | "name": "esi2", | |||
"ethernet-segment-identifier": "00:22:22:22:22:22:22:\ | "ethernet-segment-identifier": "00:22:22:22:22:22:22:\ | |||
22:22:22", | 22:22:22", | |||
"esi-redundancy-mode": "all-active" | "esi-redundancy-mode": "all-active" | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
Figure 30: Example of L2NM Message Body to Configure an Ethernet | Figure 30: An Example of an L2NM Message Body to Configure an | |||
Segment | Ethernet Segment | |||
Figure 29 shows a simplified configuration to illustrate the use of | Figure 31 shows a simplified configuration to illustrate the use of | |||
the L2NM to configured VPWS-EVPN instance. | the L2NM to configure a VPWS-EVPN instance. | |||
{ | { | |||
"ietf-l2vpn-ntw:l2vpn-ntw": { | "ietf-l2vpn-ntw:l2vpn-ntw": { | |||
"vpn-services": { | "vpn-services": { | |||
"vpn-service": [ | "vpn-service": [ | |||
{ | { | |||
"vpn-id": "vpws15432855", | "vpn-id": "vpws15432855", | |||
"vpn-description": "Sample VPWS-EVPN", | "vpn-description": "Sample VPWS-EVPN", | |||
"customer-name": "customer_15432855", | "customer-name": "customer_15432855", | |||
"vpn-type": "ietf-vpn-common:vpws-evpn", | "vpn-type": "ietf-vpn-common:vpws-evpn", | |||
skipping to change at page 155, line 30 ¶ | skipping to change at line 7115 ¶ | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
Figure 31: Example of L2NM Message Body to Configure a VPWS-EVPN | Figure 31: An Example of an L2NM Message Body to Configure a | |||
Instance | VPWS-EVPN Instance | |||
A.5. Automatic ESI Assignment | A.5. Automatic ESI Assignment | |||
This section provides an example to illustrate how the L2NM can be | This section provides an example to illustrate how the L2NM can be | |||
used to manage ESI auto-assignment. We consider the sample EVPN | used to manage ESI auto-assignment. We consider the sample EVPN | |||
service delivered using the architecture depicted in Figure 32. | service delivered using the architecture depicted in Figure 32. | |||
ES | ES | |||
| +-----+ +--------------+ +-----+ | | +-----+ +--------------+ +-----+ | |||
+----+ | | PE1 |======| |===| PE3 | +----+ | +----+ | | PE1 |======| |===| PE3 | +----+ | |||
| +-------+ | | | | +-------+ CE3| | | +-------+ | | | | +-------+ CE3| | |||
| | | +-----+ | | +-----+ +----+ | | | | +-----+ | | +-----+ +----+ | |||
| CE1| | | Core | | | CE1| | | Core | | |||
| | | +-----+ | | +-----+ +----+ | | | | +-----+ | | +-----+ +----+ | |||
| +-------+ | | | | +-------+ CE2| | | +-------+ | | | | +-------+ CE2| | |||
+----+ | | PE2 |======| |===| PE4 | +----+ | +----+ | | PE2 |======| |===| PE4 | +----+ | |||
| +-----+ +--------------+ +-----+ | | +-----+ +--------------+ +-----+ | |||
LACP | LACP | |||
Figure 32: An Example of Automatic ESI Assignment | Figure 32: An Example of Automatic ESI Assignment | |||
Figure 33 and Figure 34 show how the L2NM is used to instruct both | Figures 33 and 34 show how the L2NM is used to instruct both PE1 and | |||
PE1 and PE2 to auto-assign the ESI to identify the ES used with CE1. | PE2 to auto-assign the ESI to identify the ES used with CE1. In this | |||
In this example, we suppose that LACP is enabled and that a Type 1 | example, we suppose that LACP is enabled and that a Type 1 (T=0x01) | |||
(T=0x01) is used as per Section 5 of [RFC7432]. Note that this | is used as per Section 5 of [RFC7432]. Note that this example does | |||
example does not include all the details to configure the EVPN | not include all the details to configure the EVPN service but focuses | |||
service, but focuses only on the ESI management part. | only on the ESI management part. | |||
{ | { | |||
"ietf-ethernet-segment:ethernet-segments": { | "ietf-ethernet-segment:ethernet-segments": { | |||
"ethernet-segment": [ | "ethernet-segment": [ | |||
{ | { | |||
"name": "esi1", | "name": "esi1", | |||
"esi-type": "esi-type-1-lacp", | "esi-type": "esi-type-1-lacp", | |||
"esi-redundancy-mode": "all-active" | "esi-redundancy-mode": "all-active" | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
Figure 33: Example of L2NM Message Body to Auto-Assign Ethernet | Figure 33: An Example of an L2NM Message Body to Auto-Assign | |||
Segment Identifiers | Ethernet Segment Identifiers | |||
{ | { | |||
"ietf-l2vpn-ntw:l2vpn-ntw": { | "ietf-l2vpn-ntw:l2vpn-ntw": { | |||
"ietf-l2vpn-ntw:vpn-services": { | "ietf-l2vpn-ntw:vpn-services": { | |||
"vpn-service": [ | "vpn-service": [ | |||
{ | { | |||
"vpn-id": "auto-esi-lacp", | "vpn-id": "auto-esi-lacp", | |||
"vpn-description": "Sample to illustrate auto-ESI", | "vpn-description": "Sample to illustrate auto-ESI", | |||
"vpn-type": "ietf-vpn-common:vpws-evpn", | "vpn-type": "ietf-vpn-common:vpws-evpn", | |||
"vpn-nodes": { | "vpn-nodes": { | |||
skipping to change at page 158, line 4 ¶ | skipping to change at line 7232 ¶ | |||
"lacp-state": true, | "lacp-state": true, | |||
"system-id": "11:00:11:00:11:11", | "system-id": "11:00:11:00:11:11", | |||
"admin-key": 154 | "admin-key": 154 | |||
} | } | |||
} | } | |||
}, | }, | |||
"group": [ | "group": [ | |||
{ | { | |||
"group-id": "gr1", | "group-id": "gr1", | |||
"ethernet-segment-identifier": "esi1" | "ethernet-segment-identifier": "esi1" | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
Figure 34: An Example of L2NM Message Body for ESI Auto-Assignment | Figure 34: An Example of an L2NM Message Body for ESI Auto-Assignment | |||
The auto-assigned ESI can be retrieved using, e.g., a GET RESTCONF | The auto-assigned ESI can be retrieved using, e.g., a GET RESTCONF | |||
method. The assigned value will be then returned as shown in the | method. The assigned value will then be returned as shown in the | |||
'esi-auto' data node in Figure 35. | 'esi-auto' data node in Figure 35. | |||
=============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
{ | { | |||
"ietf-ethernet-segment:ethernet-segments": { | "ietf-ethernet-segment:ethernet-segments": { | |||
"ethernet-segment": [ | "ethernet-segment": [ | |||
{ | { | |||
"name": "esi1", | "name": "esi1", | |||
"ethernet-segment-identifier": "esi-type-1-lacp", | "ethernet-segment-identifier": "esi-type-1-lacp", | |||
"esi-auto": { | "esi-auto": { | |||
"auto-ethernet-segment-identifier": "01:11:00:11:00:11:\ | "auto-ethernet-segment-identifier": "01:11:00:11:00:11:\ | |||
11:9a:00:00" | 11:9a:00:00" | |||
}, | }, | |||
"esi-redundancy-mode": "all-active" | "esi-redundancy-mode": "all-active" | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
Figure 35: An Example of L2NM Message Body to Retrieve the | Figure 35: An Example of an L2NM Message Body to Retrieve the | |||
Assigned ESI | Assigned ESI | |||
A.6. VPN Network Access Precedence | A.6. VPN Network Access Precedence | |||
In reference to the example depicted in Figure 36, an L2VPN service | In reference to the example depicted in Figure 36, an L2VPN service | |||
involves two VPN network accesses to sites that belong to the same | involves two VPN network accesses to sites that belong to the same | |||
customer. | customer. | |||
+--------------+ | +--------------+ | |||
|VPN-NODE | | |VPN-NODE | | |||
skipping to change at page 159, line 19 ¶ | skipping to change at line 7293 ¶ | |||
| | +------------------ | | | +------------------ | |||
| +--+-------+ | | +--+-------+ | |||
| | | | | | |||
| +--+-------+ | | +--+-------+ | |||
| | NET-ACC-2| Secondary | | | NET-ACC-2| Secondary | |||
| | +------------------ | | | +------------------ | |||
| +--+-------+ | | +--+-------+ | |||
| | | | | | |||
+--------------+ | +--------------+ | |||
Figure 36: Example of Multiple VPN Network Accesses | Figure 36: An Example of Multiple VPN Network Accesses | |||
In order to tag one of these VPN network accesses as "primary" and | In order to tag one of these VPN network accesses as "primary" and | |||
the other one as "secondary", Figure 37 shows an excerpt of the | the other one as "secondary", Figure 37 shows an excerpt of the | |||
corresponding L2NM configuration. In such a configuration, both | corresponding L2NM configuration. In such a configuration, both | |||
accesses are bound to the same "group-id" and the "precedence" data | accesses are bound to the same "group-id", and the "precedence" data | |||
node set as function of the intended role of each access (primary or | node is set as a function of the intended role of each access | |||
secondary). | (primary or secondary). | |||
{ | { | |||
"ietf-l2vpn-ntw:l2vpn-ntw": { | "ietf-l2vpn-ntw:l2vpn-ntw": { | |||
"vpn-services": { | "vpn-services": { | |||
"vpn-service": [ | "vpn-service": [ | |||
{ | { | |||
"vpn-id": "Sample-Service", | "vpn-id": "Sample-Service", | |||
"vpn-nodes": { | "vpn-nodes": { | |||
"vpn-node": [ | "vpn-node": [ | |||
{ | { | |||
skipping to change at page 161, line 4 ¶ | skipping to change at line 7348 ¶ | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
Figure 37: Example of Message Body to Associate Priority Levels | ||||
with VPN Network Accesses | Figure 37: An Example of a Message Body to Associate Priority | |||
Levels with VPN Network Accesses | ||||
Acknowledgements | Acknowledgements | |||
During the discussions of this work, helpful comments, suggestions, | During the discussions of this work, helpful comments, suggestions, | |||
and reviews were received from: Sergio Belotti, Italo Busi, Miguel | and reviews were received from: Sergio Belotti, Italo Busi, Miguel | |||
Cros Cecilia, Joe Clarke, Dhruv Dhody, Adrian Farrel, Roque Gagliano, | Cros Cecilia, Joe Clarke, Dhruv Dhody, Adrian Farrel, Roque Gagliano, | |||
Christian Jacquenet, Kireeti Kompella, Julian Lucek, Moti | Christian Jacquenet, Kireeti Kompella, Julian Lucek, Moti | |||
Morgenstern, Erez Segev, and Tom Petch. Many thanks to them. | Morgenstern, Tom Petch, and Erez Segev. Many thanks to them. | |||
Luay Jalil, Jichun Ma, Daniel King, and Zhang Guiyu contributed to an | Zhang Guiyu, Luay Jalil, Daniel King, and Jichun Ma contributed to an | |||
early version of this document. | early draft version of this document. | |||
Thanks to Yingzhen Qu and Himanshu Shah for the rtgdir reviews, | Thanks to Yingzhen Qu and Himanshu Shah for the rtgdir reviews, | |||
Ladislav Lhotka for the yangdoctors review, Chris Lonvick for the | Ladislav Lhotka for the yangdoctors review, Chris Lonvick for the | |||
secdir review, and Dale Worley for the gen-art review. Special | secdir review, and Dale Worley for the gen-art review. Special | |||
thanks to Adrian Farrel for the careful Shepherd review. | thanks to Adrian Farrel for the careful Shepherd review. | |||
Thanks to Robert Wilton for the careful AD review and various | Thanks to Robert Wilton for the careful AD review and various | |||
suggestions to enhance the model. | suggestions to enhance the model. | |||
Thanks to Lars Eggert, Erik Kline, Roman Danyliw, Francesca | Thanks to Roman Danyliw, Lars Eggert, Erik Kline, Francesca | |||
Palombini, Zaheduzzaman Sarker, and Eric Vyncke for the IESG review. | Palombini, Zaheduzzaman Sarker, and Éric Vyncke for the IESG review. | |||
A YANG module for Ethernet segments was first defined in the context | A YANG module for Ethernet segments was first defined in the context | |||
of the EVPN device module [I-D.ietf-bess-evpn-yang]. | of the EVPN device module [EVPN-YANG]. | |||
This work is partially supported by the European Commission under | This work is partially supported by the European Commission under | |||
Horizon 2020 grant agreement number 101015857 Secured autonomic | Horizon 2020 Secured autonomic traffic management for a Tera of SDN | |||
traffic management for a Tera of SDN flows (Teraflow). | flows (Teraflow) project (grant agreement number 101015857). | |||
Contributors | Contributors | |||
Victor Lopez | Victor Lopez | |||
Nokia | Nokia | |||
Email: victor.lopez@nokia.com | Email: victor.lopez@nokia.com | |||
Qin Wu | Qin Wu | |||
Huawei | Huawei | |||
Email: bill.wu@huawei.com | Email: bill.wu@huawei.com | |||
End of changes. 367 change blocks. | ||||
1523 lines changed or deleted | 1528 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |