draft-ietf-bess-l2vpn-yang-09.txt   draft-ietf-bess-l2vpn-yang-10.txt 
BESS Working Group H. Shah, Ed. BESS Working Group H. Shah, Ed.
Internet-Draft Ciena Corporation Internet-Draft Ciena Corporation
Intended status: Standards Track P. Brissette, Ed. Intended status: Standards Track P. Brissette, Ed.
Expires: April 25, 2019 Cisco Systems, Inc. Expires: January 3, 2020 Cisco Systems, Inc.
I. Chen, Ed. I. Chen, Ed.
Individual Contributor The MITRE Corporation
I. Hussain, Ed. I. Hussain, Ed.
Infinera Corporation Infinera Corporation
B. Wen, Ed. B. Wen, Ed.
Comcast Comcast
K. Tiruveedhula, Ed. K. Tiruveedhula, Ed.
Juniper Networks Juniper Networks
October 22, 2018 July 02, 2019
YANG Data Model for MPLS-based L2VPN YANG Data Model for MPLS-based L2VPN
draft-ietf-bess-l2vpn-yang-09.txt draft-ietf-bess-l2vpn-yang-10.txt
Abstract Abstract
This document describes a YANG data model for Layer 2 VPN (L2VPN) This document describes a YANG data model for Layer 2 VPN (L2VPN)
services over MPLS networks. These services include point-to-point services over MPLS networks. These services include point-to-point
Virtual Private Wire Service (VPWS) and multipoint Virtual Private Virtual Private Wire Service (VPWS) and multipoint Virtual Private
LAN service (VPLS) that uses LDP and BGP signaled Pseudowires. It is LAN service (VPLS) that uses LDP and BGP signaled Pseudowires. It is
expected that this model will be used by the management tools run by expected that this model will be used by the management tools run by
the network operators in order to manage and monitor the network the network operators in order to manage and monitor the network
resources that they use to deliver L2VPN services. resources that they use to deliver L2VPN services.
skipping to change at page 1, line 49 skipping to change at page 1, line 49
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on April 25, 2019. This Internet-Draft will expire on January 3, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2019 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 Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Specification of Requirements . . . . . . . . . . . . . . . . 4 2. Specification of Requirements . . . . . . . . . . . . . . . . 4
3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 4 3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Changes in this version . . . . . . . . . . . . . . . . . 7 3.2. Latest addition . . . . . . . . . . . . . . . . . . . . . 7
3.3. Open issues and next steps . . . . . . . . . . . . . . . 8 3.3. Open issues and next steps . . . . . . . . . . . . . . . 8
3.4. Pseudowire Common . . . . . . . . . . . . . . . . . . . . 8 3.4. Pseudowire Common . . . . . . . . . . . . . . . . . . . . 8
3.4.1. Pseudowire . . . . . . . . . . . . . . . . . . . . . 8 3.4.1. Pseudowire . . . . . . . . . . . . . . . . . . . . . 8
3.4.2. pw-templates . . . . . . . . . . . . . . . . . . . . 8 3.4.2. pw-templates . . . . . . . . . . . . . . . . . . . . 8
3.5. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8 3.5. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8
3.5.1. redundancy-group-templates . . . . . . . . . . . . . 8 3.5.1. redundancy-group-templates . . . . . . . . . . . . . 8
3.6. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 8 3.6. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 9
3.6.1. common attributes . . . . . . . . . . . . . . . . . . 9 3.6.1. common attributes . . . . . . . . . . . . . . . . . . 9
3.6.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 9 3.6.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 9
3.6.3. List of endpoints . . . . . . . . . . . . . . . . . . 9 3.6.3. List of endpoints . . . . . . . . . . . . . . . . . . 9
3.6.4. point-to-point or multipoint service . . . . . . . . 10 3.6.4. point-to-point or multipoint service . . . . . . . . 10
3.6.5. multi-segment pseudowire . . . . . . . . . . . . . . 11 3.6.5. multi-segment pseudowire . . . . . . . . . . . . . . 11
3.7. Operational State . . . . . . . . . . . . . . . . . . . . 11 3.7. Operational State . . . . . . . . . . . . . . . . . . . . 11
3.8. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 11 3.8. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 11
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 14 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 14
5. Security Considerations . . . . . . . . . . . . . . . . . . . 43 5. Security Considerations . . . . . . . . . . . . . . . . . . . 43
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 43 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 43
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 44
8.1. Normative References . . . . . . . . . . . . . . . . . . 43 8.1. Normative References . . . . . . . . . . . . . . . . . . 44
8.2. Informative References . . . . . . . . . . . . . . . . . 43 8.2. Informative References . . . . . . . . . . . . . . . . . 44
Appendix A. Example Configuration . . . . . . . . . . . . . . . 46 Appendix A. Example Configuration . . . . . . . . . . . . . . . 47
Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 46 Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 47
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 48 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 48
1. Introduction 1. Introduction
The Network Configuration Protocol (NETCONF) [RFC6241] is a network The Network Configuration Protocol (NETCONF) [RFC6241] is a network
management protocol that defines mechanisms to manage network management protocol that defines mechanisms to manage network
devices. YANG [RFC6020] is a modular language that represents data devices. YANG [RFC7950] is a modular language that represents data
structures in an XML or JSON tree format, and is used as a data structures in an XML or JSON tree format, and is used as a data
modeling language for the NETCONF. modeling language for the NETCONF.
This document defines a YANG data model for MPLS based Layer 2 VPN This document defines a YANG data model for MPLS based Layer 2 VPN
services (L2VPN) [RFC4664] and includes switching between the local services (L2VPN) [RFC4664] and includes switching between the local
attachment circuits. The L2VPN model covers point-to-point VPWS and attachment circuits. The L2VPN model covers point-to-point VPWS and
Multipoint VPLS services. These services use signaling of Multipoint VPLS services. These services use signaling of
Pseudowires across MPLS networks using LDP [RFC8077][RFC4762] or Pseudowires across MPLS networks using LDP [RFC8077][RFC4762] or
BGP[RFC4761]. BGP[RFC4761].
Initially, the data model covers Ethernet based Layer 2 services. The data model covers Ethernet based Layer 2 services. The Ethernet
The Ethernet Attachment Circuits are not defined. Instead, they are Attachment Circuits are not defined. Instead, they are leveraged
leveraged from other standards organizations such as IEEE802.1 and from other standards organizations such as IEEE802.1 and Metro
Metro Ethernet Forum (MEF). Ethernet Forum (MEF).
Other Layer 2 services, such as ATM, Frame Relay, TDM, etc are Other Layer 2 services, such as ATM, Frame Relay, TDM, etc are
included in the scope but will be covered as the future work items. included in the scope but will be covered as the future work items.
The objective of the model is to define building blocks that can be The objective of the model is to define building blocks that can
easily assembled in different order to realize different services. easily be assembled in different order to realize different services.
The data model uses following constructs for configuration and The data model uses following constructs for configuration and
management: management:
o Configuration o Configuration
o Operational State o Operational State
o Executables (Actions) o Executables (Actions)
o Notifications o Notifications
The current document focuses on definition of configuration, state This document focuses on definition of configuration, state and
and notification objects. notification objects.
The L2VPN data object model uses the instance centric approach. The The L2VPN data object model uses the instance centric approach. The
L2VPN instance is recognized by network instance model. The network- L2VPN instance is recognized by network instance model. The network-
instance container is defined in network instance model [I-D.ietf- instance container is defined in network instance model [I-D.ietf-
netmod-ni-model]. netmod-ni-model].
Within this network instance, L2VPN container contains a set of Within this network instance, L2VPN container contains definitions of
common parameters, a list of PWs and a list of endpoints are defined. a set of common parameters, a list of PWs and a list of endpoints. A
special constraint is added for the VPWS configuration such that only
A special constraint is added for the VPWS configuration such that two endpoints are allowed in the list of endpoints.
only two endpoints are allowed in the list of endpoints.
The Pseudowire data object model is defined independent of the L2VPN The Pseudowire data object model is defined independent of the L2VPN
data object model to allow its inclusion in the Ethernet Segment and data object model to allow its inclusion in the Ethernet Segment and
EVPN data objects. EVPN data objects.
The L2VPN data object model augments Psuedowire data object for its The L2VPN data object model augments Psuedowire data object for its
definition. definition.
The document also includes Notifications used by the L2VPN object The document also includes Notifications used by the L2VPN object
model model
skipping to change at page 4, line 28 skipping to change at page 4, line 27
2. Specification of Requirements 2. Specification of Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
3. L2VPN YANG Model 3. L2VPN YANG Model
3.1. Overview 3.1. Overview
In this version of the document, for configuration, one single The document defines configuration of one single container for L2VPN.
container, l2vpn, is defined. Within the l2vpn container, common Within the l2vpn container, common parameters and a list of endpoints
parameters and a list of endpoints are defined. For the point-to- are defined. For the point-to-point VPWS configuration, endpoint
point VPWS configuration, endpoint list is used with the constraint list is used with the constraint that limits the number of endpoints
that limits the number of endpoints to be two. For the multipoint to be two. For the multipoint service, endpoint list is used. Each
service, endpoint list is used. Each endpoint contains the common endpoint contains the common definition that is either an attachment
definition that is either an attachment circuit, a pseudowire or a circuit, a pseudowire or a redundancy group. The previous versions
redundancy group. The YANG data model for l2vpn in this document is of this document represented VPWS service with definition of
greatly simplified by by removing separate definition of endpoint-a endpoint-a and endpoint-z while VPLS with a list of endpoints. This
and endpoint-z that was specific for VPWS service in the previous duplicattion is removed with simplified version whereby list of
versions. The same endpoint list is used by both the VPLS and VPWS endpoints is used for both. When defining VPWS, the numnber of
service with the exception that VPWS uses only two entries. endpoints is constrained to two endpoints.
The l2vpn container also includes definition of common building The l2vpn container also includes definition of common building
blocks for redundancy-grp templates and pseudowire-templates. blocks for redundancy-grp templates and pseudowire-templates.
The State objects have been consolidated with the configuration The State objects have been consolidated with the configuration
object as per the recommendations provided by the Guidelines for Yang object as per the recommendations provided by the Guidelines for Yang
Module Authors document. Module Authors document.
The IETF working group has defined the VPWS and VPLS services that The IETF working group has defined the VPWS and VPLS services that
leverages the pseudowire technologies defined by the PWE3 working leverages the pseudowire technologies defined by the PWE3 working
skipping to change at page 7, line 42 skipping to change at page 7, line 42
VPWS-constraints // rule to limit number of endpoints to two VPWS-constraints // rule to limit number of endpoints to two
// List of endpoints, where each member endpoint container is - // List of endpoints, where each member endpoint container is -
PW // reference PW // reference
redundancy-grp // container redundancy-grp // container
AC // eventual reference to standard AC AC // eventual reference to standard AC
PW // reference PW // reference
Figure 1 Figure 1
3.2. Changes in this version 3.2. Latest addition
Pseudowire module is extended to include, Pseudowire module is extended to include,
Multi-segment PW - a new attribute is added to pseudowire that Multi-segment PW - a new attribute is added to pseudowire that
identifies the pseudowire as a member of the multi-segment identifies the pseudowire as a member of the multi-segment
pseudowire. Two pseudowire members in a VPWS, configures a multi- pseudowire. Two pseudowire members in a VPWS, configures a multi-
segment pseudowire at the switching PE. segment pseudowire at the switching PE.
Pseudowire load-balancing - The load-balancing behaviour for a Pseudowire load-balancing - The load-balancing behaviour for a
pseudowire can be configured either using the FAT label that resides pseudowire can be configured either using the FAT label that resides
below the pseudowire label or Entropy label with Entropy label below the pseudowire label or Entropy label with Entropy label
indicator above the pseudowire label. By default, the load-balancing indicator above the pseudowire label. By default, the load-balancing
is disabled. is disabled.
FEC 129 related - AGI, SAII and TAII string configurations is added FEC 129 related - AGI, SAII and TAII string configurations is added
to faciliate FEC 129 based pseudowire configuration. to faciliate FEC 129 based pseudowire configuration.
3.3. Open issues and next steps 3.3. Open issues and next steps
Most of the open issues have been resolved in this document. There This section provides updates on open issues and will be removed
are some items for considerations, such as PW headend, VPLS IRB. before publication. Authors believes the document has covered the
These may or may not be convered in this document. If the working topics within the scope of the document. However, there are items,
group intends these topics be addressed in a separate document, such as PW Headend, VPLS IRB, etc that can be candidate for
authors will proceed to finalize this document with comments received inclusion. The authors would like to progress the document to
on the definitions included in the current document. publication for general availability with current content and tackle
the other topics in a follow up document.
3.4. Pseudowire Common 3.4. Pseudowire Common
3.4.1. Pseudowire 3.4.1. Pseudowire
Pseudowire definitions is moved to a seperate container in order to Pseudowire definitions is moved to a seperate container in order to
allow Ethernet Segment and EVPN models can refer without having to allow Ethernet Segment and EVPN models can refer without having to
pull down L2VPN container. pull down L2VPN container.
3.4.2. pw-templates 3.4.2. pw-templates
skipping to change at page 9, line 5 skipping to change at page 9, line 11
The redundancy-group-template contains a list of templates. Each The redundancy-group-template contains a list of templates. Each
template defines common attributes related to redundancy such as template defines common attributes related to redundancy such as
protection mode, reversion parameters, etc. protection mode, reversion parameters, etc.
3.6. L2VPN instance 3.6. L2VPN instance
The network instance container defined in the network instance model The network instance container defined in the network instance model
[I-D.ietf-rtgwg-ni-model] identifies the L2VPN instance. One of the [I-D.ietf-rtgwg-ni-model] identifies the L2VPN instance. One of the
value defined by the ni-type used in the instance model refers to VSI value defined by the ni-type used in the instance model refers to VSI
(Virtual Switch Instance) to denote the L2VPN instance. The name (Virtual Switch Instance) to denote the L2VPN instance. The name
attribute is used as the key to refer to specific network instance. attribute field is used as the key to refer to specific network
Network Instance of type VSI anchors L2VPN container with a list of instance. Network Instance of type VSI anchors L2VPN container with
endpoints which when limited to two entries represents point to point a list of endpoints which when limited to two entries represents
service (i.e. VPWS) while more than two endpoints represent point to point service (i.e. VPWS) while more than two endpoints
multipoint service (i.e. VPLS). Within a service instance, a set of represent multipoint service (i.e. VPLS). Within a service
common attributes are defined, followed by a list of PWs and a list instance, a set of common attributes are defined, followed by a list
of endpoints. of PWs and a list of endpoints.
3.6.1. common attributes 3.6.1. common attributes
The common attributes apply to entire L2VPN instance. These The common attributes apply to entire L2VPN instance. These
attributes typically include attributes such as mac-aging-timer, BGP attributes typically include attributes such as mac-aging-timer, BGP
related parameters (if using BGP signaling), discovery-type, etc. related parameters (if using BGP signaling), discovery-type, etc.
3.6.2. PW list 3.6.2. PW list
The PW list is the number of PWs that are being used for a given The PW list is the number of PWs that are being used for a given
skipping to change at page 9, line 41 skipping to change at page 9, line 47
service. In the case of VPWS, the list is limited to two entries service. In the case of VPWS, the list is limited to two entries
while for VPLS, there could be many. while for VPLS, there could be many.
Each entry in the endpoint list, may hold AC, PW or redundancy-grp Each entry in the endpoint list, may hold AC, PW or redundancy-grp
references. The core aspect of endpoint container is its flexible references. The core aspect of endpoint container is its flexible
personality based on what user decides to include in it. It is personality based on what user decides to include in it. It is
future-proofed with possible extensions that can be included in the future-proofed with possible extensions that can be included in the
endpoint container such as Integrated Route Bridging (IRB), PW endpoint container such as Integrated Route Bridging (IRB), PW
Headend, Virtual Switch Instance, etc. Headend, Virtual Switch Instance, etc.
The endpoint entry also defines the split-horizon attribute which The endpoint entry also includes the split-horizon attribute which
defines the frame forwarding restrictions between the endpoints defines the frame forwarding restrictions between the endpoints
belonging to same split-horizon group. This construct permits belonging to same split-horizon group. This construct permits
multiple instances of split horizon groups with its own endpoint multiple instances of split horizon groups with its own endpoint
members. The frame forwarding restrictions does not apply between members. The frame forwarding restrictions does not apply between
endpoints that belong to two different split horizon groups. endpoints that belong to two different split horizon groups.
3.6.3.1. ac 3.6.3.1. ac
Attachment Circuit (AC)resides within endpoint entry either as an Attachment Circuit (AC)resides within endpoint entry either as an
independent entity or as a member of the redundancy group. AC is not independent entity or as a member of the redundancy group. AC is not
defined in this document but references the definitions being defined in this document but references the definitions specified by
specified by other working groups and standard bodies. other working groups and standard bodies.
3.6.3.2. pw 3.6.3.2. pw
The Pseudo-wire resides within endpoint entry either as an The Pseudo-wire resides within endpoint entry either as an
independent entity or as a member of the redundancy group. The PW independent entity or as a member of the redundancy group. The PW
refers to one of the entry in the list of PWs defined with the L2VPN refers to one of the entry in the list of PWs defined with the L2VPN
instance. instance.
3.6.3.3. redundancy-grp choice 3.6.3.3. redundancy-grp choice
skipping to change at page 10, line 46 skipping to change at page 10, line 46
3.6.4. point-to-point or multipoint service 3.6.4. point-to-point or multipoint service
The point-to-point service as defined for VPWS is represented by a The point-to-point service as defined for VPWS is represented by a
list of endpoints and is limited to two entries by the VPWS constrain list of endpoints and is limited to two entries by the VPWS constrain
rules rules
The multipoint service as defined for VPLS is represented by a list The multipoint service as defined for VPLS is represented by a list
of endpoints. of endpoints.
The list of endpoints with one entry is invalid.
The augmentation of ietf-l2vpn module is TBD. All IP addresses The augmentation of ietf-l2vpn module is TBD. All IP addresses
defined in this module are currently scoped under global VRF/table. defined in this module are currently scoped under global VRF/table.
3.6.5. multi-segment pseudowire 3.6.5. multi-segment pseudowire
The multi-segment pseudowire is expressed as configuration of two The multi-segment pseudowire is expressed as configuration of two
pseudowire segments at the switching PEs that provides end-to-end PW pseudowire segments at the switching PEs that provides end-to-end PW
path between two terminating PEs consisting of multiple pseudowire path between two terminating PEs consisting of multiple pseudowire
segments. segments.
skipping to change at page 12, line 17 skipping to change at page 12, line 17
| +--:(bgp-ad-pw) | +--:(bgp-ad-pw)
| +--rw remote-ve-id? uint16 | +--rw remote-ve-id? uint16
+--rw pw-templates +--rw pw-templates
+--rw pw-template* [name] +--rw pw-template* [name]
+--rw name string +--rw name string
+--rw mtu? uint16 +--rw mtu? uint16
+--rw cw-negotiation? cw-negotiation-type +--rw cw-negotiation? cw-negotiation-type
+--rw tunnel-policy? string +--rw tunnel-policy? string
module: ietf-l2vpn module: ietf-l2vpn
+--rw l2vpn +--rw l2vpn
+--rw redundancy-group-templates +--rw redundancy-group-templates
+--rw redundancy-group-template* [name] +--rw redundancy-group-template* [name]
+--rw name string +--rw name string
+--rw protection-mode? enumeration +--rw protection-mode? enumeration
+--rw reroute-mode? enumeration +--rw reroute-mode? enumeration
+--rw dual-receive? boolean +--rw dual-receive? boolean
+--rw revert? boolean +--rw revert? boolean
+--rw reroute-delay? uint16 +--rw reroute-delay? uint16
+--rw revert-delay? uint16 +--rw revert-delay? uint16
augment /ni:network-instances/ni:network-instance/ni:ni-type: augment /ni:network-instances/ni:network-instance/ni:ni-type:
+--:(l2vpn) +--:(l2vpn)
+--rw type? identityref +--rw type? identityref
+--rw mtu? uint16 +--rw mtu? uint16
+--rw mac-aging-timer? uint32 +--rw mac-aging-timer? uint32
+--rw service-type? l2vpn-service-type +--rw service-type? l2vpn-service-type
+--rw discovery-type? l2vpn-discovery-type +--rw discovery-type? l2vpn-discovery-type
+--rw signaling-type l2vpn-signaling-type +--rw signaling-type l2vpn-signaling-type
+--rw bgp-auto-discovery +--rw bgp-parameters
| +--rw route-distinguisher? rt-types:route-distinguisher | +--rw vpn-id? string
| +--rw vpn-id? string | +--rw rd-rt
| +--rw vpn-target* [route-target] | +--rw route-distinguisher? rt-types:route-distinguisher
| +--rw route-target rt-types:route-target | +--rw vpn-target* [route-target]
| +--rw route-target-type rt-types:route-target-type | +--rw route-target rt-types:route-target
| +--rw route-target-type rt-types:route-target-type
+--rw bgp-signaling +--rw bgp-signaling
| +--rw site-id? uint16 | +--rw site-id? uint16
| +--rw site-range? uint16 | +--rw site-range? uint16
+--rw endpoint* [name] +--rw endpoint* [name]
| +--rw name string | +--rw name string
| +--rw (ac-or-pw-or-redundancy-grp)? | +--rw (ac-or-pw-or-redundancy-grp)?
| | +--:(ac) | | +--:(ac)
| | | +--rw ac* [name] | | | +--rw ac* [name]
| | | +--rw name if:interface-ref | | | +--rw name if:interface-ref
| | | +--ro state? operational-state-type | | | +--ro state? operational-state-type
| | +--:(pw) | | +--:(pw)
| | | +--rw pw* [name] | | | +--rw pw* [name]
| | | +--rw name pw:pseudowire-ref | | | +--rw name pw:pseudowire-ref
| | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state
| | +--:(redundancy-grp) | | +--:(redundancy-grp)
skipping to change at page 13, line 28 skipping to change at page 13, line 29
| | +--rw (backup)? | | +--rw (backup)?
| | | +--:(backup-ac) | | | +--:(backup-ac)
| | | | +--rw backup-ac | | | | +--rw backup-ac
| | | | +--rw name? if:interface-ref | | | | +--rw name? if:interface-ref
| | | | +--ro state? operational-state-type | | | | +--ro state? operational-state-type
| | | +--:(backup-pw) | | | +--:(backup-pw)
| | | +--rw backup-pw* [name] | | | +--rw backup-pw* [name]
| | | +--rw name pw:pseudowire-ref | | | +--rw name pw:pseudowire-ref
| | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state
| | | +--rw precedence? uint32 | | | +--rw precedence? uint32
| | +--rw template? redundancy-group-template-ref | | +--rw template? redundancy-group-template-ref
| | +--rw protection-mode? enumeration | | +--rw protection-mode? enumeration
| | +--rw reroute-mode? enumeration | | +--rw reroute-mode? enumeration
| | +--rw dual-receive? boolean | | +--rw dual-receive? boolean
| | +--rw revert? boolean | | +--rw revert? boolean
| | +--rw reroute-delay? uint16 | | +--rw reroute-delay? uint16
| | +--rw revert-delay? uint16 | | +--rw revert-delay? uint16
| +--rw split-horizon-group? string | +--rw split-horizon-group? string
+--rw vpws-constraints +--rw vpws-constraints
+--rw pbb-parameters +--rw pbb-parameters
+--rw (component-type)? +--rw (component-type)?
+--:(i-component) +--:(i-component)
| +--rw i-sid? i-sid-type | +--rw i-sid? i-sid-type
| +--rw backbone-src-mac? yang:mac-address | +--rw backbone-src-mac? yang:mac-address
+--:(b-component) +--:(b-component)
+--rw bind-b-component-name? l2vpn-instance-name-ref +--rw bind-b-component-name? l2vpn-instance-name-ref
+--ro bind-b-component-type? identityref +--ro bind-b-component-type? identityref
augment /pw:pseudowires/pw:pseudowire: augment /pw:pseudowires/pw:pseudowire:
skipping to change at page 13, line 51 skipping to change at page 14, line 4
| +--rw backbone-src-mac? yang:mac-address | +--rw backbone-src-mac? yang:mac-address
+--:(b-component) +--:(b-component)
+--rw bind-b-component-name? l2vpn-instance-name-ref +--rw bind-b-component-name? l2vpn-instance-name-ref
+--ro bind-b-component-type? identityref +--ro bind-b-component-type? identityref
augment /pw:pseudowires/pw:pseudowire: augment /pw:pseudowires/pw:pseudowire:
+--rw vccv-ability? boolean +--rw vccv-ability? boolean
+--rw request-vlanid? uint16 +--rw request-vlanid? uint16
+--rw vlan-tpid? string +--rw vlan-tpid? string
+--rw ttl? uint8 +--rw ttl? uint8
augment /pw:pseudowires/pw:pseudowire/pw:pw-type: augment /pw:pseudowires/pw:pseudowire/pw:pw-type:
+--:(bgp-pw) +--:(bgp-pw)
| +--rw bgp-pw | +--rw bgp-pw
| +--rw remote-pe-id? inet:ip-address | +--rw remote-pe-id? inet:ip-address
+--:(bgp-ad-pw) +--:(bgp-ad-pw)
+--rw bgp-ad-pw +--rw bgp-ad-pw
+--rw remote-ve-id? uint16 +--rw remote-ve-id? uint16
notifications: notifications:
+---n l2vpn-state-change-notification +---n l2vpn-state-change-notification
+--ro l2vpn-instance-name? l2vpn-instance-name-ref +--ro l2vpn-instance-name? l2vpn-instance-name-ref
+--ro l2vpn-instance-type? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:type +--ro l2vpn-instance-type? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:type
+--ro endpoint? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint/name +--ro endpoint? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint/name
+--ro (ac-or-pw-or-redundancy-grp)? +--ro (ac-or-pw-or-redundancy-grp)?
| +--:(ac) | +--:(ac)
| | +--ro ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/ac/name | | +--ro ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/ac/name
| +--:(pw) | +--:(pw)
| | +--ro pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/pw/name | | +--ro pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/pw/name
| +--:(redundancy-grp) | +--:(redundancy-grp)
| +--ro (primary) | +--ro (primary)
| | +--:(primary-ac) | | +--:(primary-ac)
| | | +--ro primary-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-ac/name | | | +--ro primary-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-ac/name
| | +--:(primary-pw) | | +--:(primary-pw)
| | +--ro primary-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-pw/name | | +--ro primary-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-pw/name
| +--ro (backup)? | +--ro (backup)?
| +--:(backup-ac) | +--:(backup-ac)
| | +--ro backup-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-ac/name | | +--ro backup-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-ac/name
| +--:(backup-pw) | +--:(backup-pw)
| +--ro backup-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-pw/name | +--ro backup-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-pw/name
+--ro state? identityref +--ro state? identityref
Figure 2 Figure 2
4. YANG Module 4. YANG Module
The L2VPN configuration container is logically divided into following The L2VPN configuration container is logically divided into following
high level config areas: high level config areas:
<CODE BEGINS> file "ietf-pseudowires@2018-10-22.yang" <CODE BEGINS> file "ietf-pseudowires@2018-10-17.yang"
module ietf-pseudowires { module ietf-pseudowires {
namespace "urn:ietf:params:xml:ns:yang:ietf-pseudowires"; namespace "urn:ietf:params:xml:ns:yang:ietf-pseudowires";
prefix "pw"; prefix "pw";
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix "rt-types";
} }
organization "ietf"; organization "ietf";
contact "ietf"; contact "ietf";
description "Pseudowire YANG model"; description "Pseudowire YANG model";
revision "2018-10-22" { revision "2018-10-17" {
description "Second revision " + description "Second revision " +
" - Added group-id and attachment identifiers " + " - Added group-id and attachment identifiers " +
""; "";
reference ""; reference "";
} }
revision "2017-06-26" { revision "2017-06-26" {
description "Initial revision " + description "Initial revision " +
" - Created a new model for pseudowires, which used " + " - Created a new model for pseudowires, which used " +
" to be defined within the L2VPN model " + " to be defined within the L2VPN model " +
skipping to change at page 20, line 4 skipping to change at page 20, line 5
} }
leaf tunnel-policy { leaf tunnel-policy {
type string; type string;
description "tunnel policy name"; description "tunnel policy name";
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-l2vpn@2018-02-06.yang" <CODE BEGINS> file "ietf-l2vpn@2019-05-28.yang"
module ietf-l2vpn { module ietf-l2vpn {
namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn"; namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn";
prefix "l2vpn"; prefix "l2vpn";
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
skipping to change at page 20, line 37 skipping to change at page 20, line 38
} }
import ietf-pseudowires { import ietf-pseudowires {
prefix "pw"; prefix "pw";
} }
organization "ietf"; organization "ietf";
contact "ietf"; contact "ietf";
description "l2vpn"; description "l2vpn";
revision "2019-05-28" {
description "Nineth revision " +
" - Used bgp parameters hierarchy common to L2VPN and EVPN " +
"";
reference "";
}
revision "2018-02-06" { revision "2018-02-06" {
description "Eighth revision " + description "Eighth revision " +
" - Incorporated ietf-network-instance model " + " - Incorporated ietf-network-instance model " +
" - change the type of attachment circuit to " + " - change the type of attachment circuit to " +
" if:interface-ref " + " if:interface-ref " +
""; "";
reference ""; reference "";
} }
revision "2017-09-21" { revision "2017-09-21" {
description "Seventh revision " + description "Seventh revision " +
" - Fixed yangdump errors " + " - Fixed yangdump errors " +
""; "";
reference ""; reference "";
} }
revision "2017-06-26" { revision "2017-06-26" {
description "Sixth revision " + description "Sixth revision " +
skipping to change at page 33, line 43 skipping to change at page 34, line 4
leaf name { leaf name {
type string; type string;
description "name"; description "name";
} }
uses redundancy-group-properties-grp; uses redundancy-group-properties-grp;
} }
} }
} }
/* augments */ /* augments */
augment "/ni:network-instances/ni:network-instance/ni:ni-type" { augment "/ni:network-instances/ni:network-instance/ni:ni-type" {
description description
"Augmentation for L2VPN instance"; "Augmentation for L2VPN instance";
case l2vpn { case l2vpn {
description "An L2VPN service instance"; description "An L2VPN service instance";
uses l2vpn-common-parameters-grp; uses l2vpn-common-parameters-grp;
container bgp-auto-discovery { container bgp-parameters {
description "BGP auto-discovery parameters"; when "../discovery-type = 'l2vpn:bgp-auto-discovery'" {
leaf route-distinguisher { description "Parameters used when discovery type is " +
type rt-types:route-distinguisher; "bgp-auto-discovery";
description "BGP route distinguisher";
} }
description "BGP auto-discovery parameters";
leaf vpn-id { leaf vpn-id {
type string; type string;
description "VPN ID"; description "VPN ID";
} }
uses rt-types:vpn-route-targets; container rd-rt {
leaf route-distinguisher {
type rt-types:route-distinguisher;
description "BGP route distinguisher";
}
uses rt-types:vpn-route-targets;
description "Route distiguisher and " +
"corresponding VPN route targets";
}
} }
container bgp-signaling { container bgp-signaling {
when "../signaling-type = 'bgp-signaling'" { when "../signaling-type = 'l2vpn:bgp-signaling'" {
description "Check signaling type: " + description "Check signaling type: " +
"Can only configure BGP signaling if " + "Can only configure BGP signaling if " +
"signaling type is BGP"; "signaling type is BGP";
} }
description "BGP signaling parameters"; description "BGP signaling parameters";
uses bgp-signaling-parameters-grp; uses bgp-signaling-parameters-grp;
} }
list endpoint { list endpoint {
key "name"; key "name";
description "An endpoint"; description "An endpoint";
skipping to change at page 39, line 23 skipping to change at page 39, line 39
augment "/ni:network-instances/ni:network-instance/ni:ni-type" + augment "/ni:network-instances/ni:network-instance/ni:ni-type" +
"/l2vpn:l2vpn" { "/l2vpn:l2vpn" {
when "l2vpn:type = 'l2vpn:vpws-instance-type'" { when "l2vpn:type = 'l2vpn:vpws-instance-type'" {
description "Constraints only for VPWS pseudowires"; description "Constraints only for VPWS pseudowires";
} }
description "Augment for VPWS instance"; description "Augment for VPWS instance";
container vpws-constraints { container vpws-constraints {
must "(count(../endpoint) <= 2) and " + must "(count(../endpoint) <= 2) and " +
"(count(../endpoint/pw) <= 1) and " + "(count(../endpoint/pw) <= 1) and " +
"(count(../endpoint/ac) <= 1) and " + "(count(../endpoint/ac) <= 1) and " +
"(count(../endpoint/primary-pw) <= 1) and " + "(count(../endpoint/primary-pw) <= 1) and " +
"(count(../endpoint/backup-pw) <= 1) " { "(count(../endpoint/backup-pw) <= 1) " {
description "A VPWS L2VPN instance has at most 2 endpoints " + description "A VPWS L2VPN instance has at most 2 endpoints " +
"and each endpoint has at most 1 pseudowire or " + "and each endpoint has at most 1 pseudowire or " +
"1 attachment circuit"; "1 attachment circuit";
} }
description "VPWS constraints"; description "VPWS constraints";
} }
} }
augment "/ni:network-instances/ni:network-instance/ni:ni-type" + augment "/ni:network-instances/ni:network-instance/ni:ni-type" +
"/l2vpn:l2vpn" { "/l2vpn:l2vpn" {
skipping to change at page 43, line 35 skipping to change at page 44, line 5
6. IANA Considerations 6. IANA Considerations
None. None.
7. Acknowledgments 7. Acknowledgments
The authors would like to acknowledge Giles Heron and others for The authors would like to acknowledge Giles Heron and others for
their useful comments. their useful comments.
MITRE has approved this document for Public Release, Distribution
Unlimited, with Public Release Case Number 19-0683.
8. References 8. References
8.1. Normative References 8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
8.2. Informative References 8.2. Informative References
skipping to change at page 45, line 15 skipping to change at page 45, line 30
[RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed., [RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed.,
"Requirements for Multi-Segment Pseudowire Emulation Edge- "Requirements for Multi-Segment Pseudowire Emulation Edge-
to-Edge (PWE3)", RFC 5254, DOI 10.17487/RFC5254, October to-Edge (PWE3)", RFC 5254, DOI 10.17487/RFC5254, October
2008, <https://www.rfc-editor.org/info/rfc5254>. 2008, <https://www.rfc-editor.org/info/rfc5254>.
[RFC5659] Bocci, M. and S. Bryant, "An Architecture for Multi- [RFC5659] Bocci, M. and S. Bryant, "An Architecture for Multi-
Segment Pseudowire Emulation Edge-to-Edge", RFC 5659, Segment Pseudowire Emulation Edge-to-Edge", RFC 5659,
DOI 10.17487/RFC5659, October 2009, DOI 10.17487/RFC5659, October 2009,
<https://www.rfc-editor.org/info/rfc5659>. <https://www.rfc-editor.org/info/rfc5659>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010,
<https://www.rfc-editor.org/info/rfc6020>.
[RFC6073] Martini, L., Metz, C., Nadeau, T., Bocci, M., and M. [RFC6073] Martini, L., Metz, C., Nadeau, T., Bocci, M., and M.
Aissaoui, "Segmented Pseudowire", RFC 6073, Aissaoui, "Segmented Pseudowire", RFC 6073,
DOI 10.17487/RFC6073, January 2011, DOI 10.17487/RFC6073, January 2011,
<https://www.rfc-editor.org/info/rfc6073>. <https://www.rfc-editor.org/info/rfc6073>.
[RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo, [RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo,
"Provisioning, Auto-Discovery, and Signaling in Layer 2 "Provisioning, Auto-Discovery, and Signaling in Layer 2
Virtual Private Networks (L2VPNs)", RFC 6074, Virtual Private Networks (L2VPNs)", RFC 6074,
DOI 10.17487/RFC6074, January 2011, DOI 10.17487/RFC6074, January 2011,
<https://www.rfc-editor.org/info/rfc6074>. <https://www.rfc-editor.org/info/rfc6074>.
skipping to change at page 46, line 32 skipping to change at page 46, line 44
Provider Edge (PE) Model for Provider Backbone Bridging", Provider Edge (PE) Model for Provider Backbone Bridging",
RFC 7041, DOI 10.17487/RFC7041, November 2013, RFC 7041, DOI 10.17487/RFC7041, November 2013,
<https://www.rfc-editor.org/info/rfc7041>. <https://www.rfc-editor.org/info/rfc7041>.
[RFC7361] Dutta, P., Balus, F., Stokes, O., Calvignac, G., and D. [RFC7361] Dutta, P., Balus, F., Stokes, O., Calvignac, G., and D.
Fedyk, "LDP Extensions for Optimized MAC Address Fedyk, "LDP Extensions for Optimized MAC Address
Withdrawal in a Hierarchical Virtual Private LAN Service Withdrawal in a Hierarchical Virtual Private LAN Service
(H-VPLS)", RFC 7361, DOI 10.17487/RFC7361, September 2014, (H-VPLS)", RFC 7361, DOI 10.17487/RFC7361, September 2014,
<https://www.rfc-editor.org/info/rfc7361>. <https://www.rfc-editor.org/info/rfc7361>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>.
[RFC8077] Martini, L., Ed. and G. Heron, Ed., "Pseudowire Setup and [RFC8077] Martini, L., Ed. and G. Heron, Ed., "Pseudowire Setup and
Maintenance Using the Label Distribution Protocol (LDP)", Maintenance Using the Label Distribution Protocol (LDP)",
STD 84, RFC 8077, DOI 10.17487/RFC8077, February 2017, STD 84, RFC 8077, DOI 10.17487/RFC8077, February 2017,
<https://www.rfc-editor.org/info/rfc8077>. <https://www.rfc-editor.org/info/rfc8077>.
[I-D.ietf-rtgwg-ni-model]
Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X.
Liu, "YANG Network Instances", draft-ietf-rtgwg-ni-
model-10 (work in progress), February 2018.
Appendix A. Example Configuration Appendix A. Example Configuration
This section shows an example configuration using the YANG data model This section shows an example configuration using the YANG data model
defined in the document. defined in the document.
Appendix B. Contributors Appendix B. Contributors
The editors gratefully acknowledge the following people for their The editors gratefully acknowledge the following people for their
contributions to this document. contributions to this document.
skipping to change at page 48, line 25 skipping to change at page 48, line 41
Ciena Corporation Ciena Corporation
Email: hshah@ciena.com Email: hshah@ciena.com
Patrice Brissette Patrice Brissette
Cisco Systems, Inc. Cisco Systems, Inc.
Email: pbrisset@cisco.com Email: pbrisset@cisco.com
Ing-When Chen Ing-When Chen
Individual Contributor The MITRE Corporation
Email: ichen.ietf@outlook.com Email: ingwherchen@mitre.org
Iftekar Hussain Iftekar Hussain
Infinera Corporation Infinera Corporation
Email: ihussain@infinera.com Email: ihussain@infinera.com
Bin Wen Bin Wen
Comcast Comcast
Email: Bin_Wen@cable.comcast.com Email: Bin_Wen@cable.comcast.com
Kishore Tiruveedhula Kishore Tiruveedhula
Juniper Networks Juniper Networks
Email: kishoret@juniper.net Email: kishoret@juniper.net
 End of changes. 53 change blocks. 
125 lines changed or deleted 143 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/