draft-ietf-bess-l2vpn-yang-02.txt   draft-ietf-bess-l2vpn-yang-03.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: May 2, 2017 Cisco Systems, Inc. Expires: September 14, 2017 Cisco Systems, Inc.
I. Chen, Ed. I. Chen, Ed.
Ericsson Jabil
I. Hussain, Ed. I. Hussain, Ed.
Infinera Corporation Infinera Corporation
B. Wen, Ed. B. Wen, Ed.
Comcast Comcast
October 29, 2016 K. Tiruveedhula, Ed.
Juniper Networks
March 13, 2017
YANG Data Model for MPLS-based L2VPN YANG Data Model for MPLS-based L2VPN
draft-ietf-bess-l2vpn-yang-02.txt draft-ietf-bess-l2vpn-yang-03.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 43 skipping to change at page 1, line 45
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 http://datatracker.ietf.org/drafts/current/. Drafts is at http://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 May 2, 2017. This Internet-Draft will expire on September 14, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2017 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
(http://trustee.ietf.org/license-info) in effect on the date of (http://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 . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Specification of Requirements . . . . . . . . . . . . . . . . 3 2. Specification of Requirements . . . . . . . . . . . . . . . . 4
3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 3 3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 7 3.2. Open issues and next steps . . . . . . . . . . . . . . . 7
3.2.1. ac-templates . . . . . . . . . . . . . . . . . . . . 7 3.3. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2. pw-templates . . . . . . . . . . . . . . . . . . . . 7 3.3.1. pw-templates . . . . . . . . . . . . . . . . . . . . 8
3.3. Point-to-Point and Multipoint service . . . . . . . . . . 7 3.3.2. redundancy-group-templates . . . . . . . . . . . . . 8
3.3.1. ac list . . . . . . . . . . . . . . . . . . . . . . . 7 3.4. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 8
3.3.2. pw list . . . . . . . . . . . . . . . . . . . . . . . 7 3.4.1. common attributes . . . . . . . . . . . . . . . . . . 8
3.3.3. redundancy-grp choice . . . . . . . . . . . . . . . . 7 3.4.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 8
3.3.4. endpoint container . . . . . . . . . . . . . . . . . 8 3.4.3. List of endpoints . . . . . . . . . . . . . . . . . . 8
3.3.5. point-to-point or multipoint service . . . . . . . . 8 3.4.4. point-to-point or multipoint service . . . . . . . . 10
3.4. Operational State . . . . . . . . . . . . . . . . . . . . 8 3.5. Operational State . . . . . . . . . . . . . . . . . . . . 10
3.5. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 8 3.6. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 10
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 17 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 15
5. Security Considerations . . . . . . . . . . . . . . . . . . . 49 5. Security Considerations . . . . . . . . . . . . . . . . . . . 38
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.1. Normative References . . . . . . . . . . . . . . . . . . 49 8.1. Normative References . . . . . . . . . . . . . . . . . . 39
8.2. Informative References . . . . . . . . . . . . . . . . . 49 8.2. Informative References . . . . . . . . . . . . . . . . . 39
Appendix A. Example Configuration . . . . . . . . . . . . . . . 52 Appendix A. Example Configuration . . . . . . . . . . . . . . . 42
Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 52 Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 42
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 43
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 [RFC6020] 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
skipping to change at page 3, line 32 skipping to change at page 3, line 37
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 and state The current document focuses on definition of configuration and state
objects. The future revisions is expected to cover the actions and objects. The future revisions are expected to cover the actions and
notifications aspects of the model. notifications aspects of the model.
The L2VPN data object model uses the instance centric approach. The The L2VPN data object model uses the instance centric approach.
attributes of each service; VPWS, VPLS, etc are specified for a given Within an L2VPN instance; a set of common parameters, a list of PWs
service instance. and a list of endpoints are defined. A special constraint is added
for the VPWS configuration such that only two endpoints are allowed
in the list of endpoints. This deviates from the previous versions
where endpoint-a and endpoint-z were defined separately from the
endpoint list.
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, one single container, l2vpn, is In this version of the document, for configuration, one single
defined. Within the l2vpn container, endpoint-a, endpoint-z and a container, l2vpn, is defined. Within the l2vpn container, common
list of endpoints are defined. For the point-to-point VPWS parameters and a list of endpoints are defined. For the point-to-
configuration, endpoint-a and endpoint-z are used. For the point VPWS configuration, endpoint list is used with the constraint
multipoint service, endpoint list is used. Each endpoint contains that limits the number of endpoints to be two. For the multipoint
the definitions for attachment circuit, pseudowire and a redundancy service, endpoint list is used. Each endpoint contains the common
group. The yang data model for l2vpn in this document differs definition that is either an attachment circuit, a pseudowire or a
significantly from the previous version which used explicit redundancy group. The YANG data model for l2vpn in this document is
containers such as VPLS and VPWS within l2vpn, which in turn greatly simplified by by removing separate definition of endpoint-a
contained the definition of relevent endpoints. For example, VPWS and endpoint-z that was specific for VPWS service. The same endpoint
used endpoint-a and endpoint-z while VPLS used the bridge table list is used by both the VPLS and VPWS service with the exception
containing a list of endpoints. that VPWS uses only two entries.
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. The blocks for redundancy-grp templates and pseudowire-templates.
operations state object holds read-only information of objects that
has either been configured or dynamically created. The operations state object holds read-only information of objects
that has either been configured or dynamically created.
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
group. A large number of RFCs from these working groups cover this group. A large number of RFCs from these working groups cover this
subject matter. Hence, it is prudent that this document state the subject matter. Hence, it is prudent that this document state the
scope of the MPLS L2VPN object model definitions. scope of the MPLS L2VPN object model definitions.
The following documents are within the scope. This is not an The following documents are within the scope. This is not an
exhaustive list but a representation of documents that are covered exhaustive list but a representation of documents that are covered
for this work: for this work:
skipping to change at page 6, line 20 skipping to change at page 7, line 22
l2vpn-instances // containter l2vpn-instances // containter
common attributes common attributes
BGP-parameters // container BGP-parameters // container
common attributes common attributes
auto-discovery attributes auto-discovery attributes
signaling attributes signaling attributes
evpn-instance // reference
// list of PWs being used // list of PWs being used
PW // container PW // container
template-ref PW template-ref PW
attribute-override attribute-override
endpoint-A // container
redundancy-grp // container
AC // eventual reference to standard AC
PW // reference
endpoint-Z // container
redundancy-grp // container
AC // eventual reference to standard AC
PW // reference
PBB-parameters // container PBB-parameters // container
pbb specific attributes pbb specific attributes
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
l2vpn-state // read-only container l2vpn-state // read-only container
Figure 1 Figure 1
3.2. L2VPN Common 3.2. Open issues and next steps
3.2.1. ac-templates There are a number of additional defintitions that are in
considerations. These are VPLS IRB, PW headend, how evpn instance is
referenced within the scope of l2vpn instance and what parameters of
evpn are defined in l2vpn data model. Some of these are local and
remote VPWS service Ids, FXC, Designated Forwarder priorities, etc.
The ac-templates container does not exist. The AC will be referenced The contributors of this document intend to close on these
from definitions by IEEE and/or MEF. definitions during the ongoing design team meeting as well as face-
to-face meetings at the IETF.
3.2.2. pw-templates 3.3. L2VPN Common
3.3.1. pw-templates
The pw-templates container contains a list of pw-template. Each pw- The pw-templates container contains a list of pw-template. Each pw-
template defines a list of common pseudowire attributes such as PW template defines a list of common pseudowire attributes such as PW
MTU, control word support etc. MTU, control word support etc.
3.3. Point-to-Point and Multipoint service 3.3.2. redundancy-group-templates
3.3.1. ac list The redundancy-group-template contains a list of templates. Each
template defines common attributes related to redundancy such as
protection mode, reversion parameters, etc.
AC resides within endpoint container as member of ac-or-pw-or- 3.4. L2VPN instance
redundandancy-grp.
3.3.2. pw list A list of L2VPN instance is defined where each entry represent a
point to point or multipoint service. Within a service instance, a
set of common attributes are defined, followed by a list of PWs and a
list of endpoints.
Each endpoint instance defines a list of PWs which are participating 3.4.1. common attributes
members of the given service instance. Each entry of the PW consists
of one pw-template with pre-defined attributes and values, but also
defines attributes that override those defined in referenced pw-
template.
No restrictions are placed on type of signaling (i.e. LDP or BGP) The common attributes apply to entire L2VPN instance. These
used for a given PW. It is entirely possible to define two PWs, one attributes typically include attributes such as mac-aging-timer, BGP
signaled by LDP and other by BGP. related parameters (if using BGP signaling), discovery-type, etc.
The VPLS specific attribute(s) are present in the definition of the 3.4.2. PW list
PW that are member of VPLS instance only and not applicable to VPWS
service.
3.3.3. redundancy-grp choice The PW list is the number of PWs that are being used for a given
L2VPN instance. Each PW entry refers to PW template to inherit
common attributes for the PW. The one or more attributes from the
template can be overriden. It further extends definitions of more PW
specific attributes such as use of control word, mac withdraw, what
type of signaling (i.e. LDP or BGP), setting of the TTL, etc.
3.4.3. List of endpoints
The list of endpoints define the characteristics of the L2VPN
service. In the case of VPWS, the list is limited to two entries
while for VPLS, there could be many.
Each entry in the endpoint list, may hold AC, PW or redundancy-grp
references. The core aspect of endpoint container is its flexible
personality based on what user decides to include in it. It is
future-proofed with possible extensions that can be included in the
endpoint container such as Integrated Route Bridging (IRB), PW
Headend, Virtual Switch Instance, etc.
The endpoint entry also defines the split-horizon attribute which
defines the frame forwarding restrictions between the endpoints
belonging to same split-horizon group. This construct permits
multiple instances of split horizon groups with its own endpoint
members. The frame forwarding restrictions does not apply between
endpoints that belong to two different split horizon groups.
3.4.3.1. ac
Attachment Circuit (AC)resides within endpoint entry either as an
independent entity or as a member of the redundancy group. AC is not
defined in this document but references the definitions being
specified by other working groups and standard bodies.
3.4.3.2. pw
The Pseudo-wire resides within endpoint entry either as an
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
instance.
3.4.3.3. redundancy-grp choice
The redundancy-grp is a generic redundancy construct which can hold The redundancy-grp is a generic redundancy construct which can hold
primary and backup members of AC and PWs. This flexibility permits primary and backup members of AC and PWs. This flexibility permits
combinations of - combinations of -
o primary and backup AC o primary and backup AC
o primary and backup PW o primary and backup PW
o primary AC and backup PW o primary AC and backup PW
o primary PW and backup AC
3.3.4. endpoint container o primary PW and backup AC
The endpoint container in general holds AC, PW or redundancy-grp The redundancy group also defines attributes of the type of
references. The core aspect of endpoint container is its flexible redundancy, such as protection mode, reroute mode, reversion related
personality based on what user decides to include in it. It is parameters, etc.
future-proofed with possible extensions that can be included in the
endpoint container such as Integrated Route Bridging (IRB), PW
Headend, Virtual Switch Instance, etc.
3.3.5. point-to-point or multipoint service 3.4.4. point-to-point or multipoint service
The point-to-point service as defined for VPWS is represented by The point-to-point service as defined for VPWS is represented by a
endpoint-a and endpoint-z container that is representation of a layer list of endpoints and is limited to two entries by the VPWS constrain
2 cross-connect of two endpoints. rules
The multipoint service is represented by a list of endpoints. Each The multipoint service as defined for VPLS is represented by a list
endpoint container may contain a list of ACs or PWs as well as a of endpoints.
redundancy group. The endpoint has split-horizon attribute defined
and could be applicable to a list of PWs that are member of a given
endpoint.
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.4. Operational State 3.5. Operational State
The operational state of L2VPN can be queried and obtained from the The operational state of L2VPN can be queried and obtained from the
read-only container defined in this document as "l2vpn-state". This read-only container defined in this document as "l2vpn-state". This
container holds the runtime information of the bridge-table-instance container holds the runtime information of the bridge-table-instance
and vpws-instance. and vpws-instance.
3.5. Yang tree 3.6. Yang tree
module: ietf-l2vpn module: ietf-l2vpn
+--rw l2vpn +--rw l2vpn
| +--rw common | +--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 | +--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
| +--rw l2vpn-instances | +--rw l2vpn-instances
| +--rw l2vpn-instance* [name type] | +--rw l2vpn-instance* [name type]
| +--rw name string | +--rw name string
| +--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-auto-discovery
| | +--rw route-distinguisher? string | | +--rw route-distinguisher? rt-types:route-distinguisher
| | +--rw vpn-target* [rt-value]
| | | +--rw rt-value string
| | | +--rw rt-type bgp-rt-type
| | +--rw vpn-id? string | | +--rw vpn-id? string
| | +--rw vpn-target* [route-target]
| | +--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 pw* [name] | +--rw pw* [name]
| | +--rw name string | | +--rw name string
| | +--rw template? pw-template-ref | | +--rw template? pw-template-ref
| | +--rw mtu? uint16 | | +--rw mtu? uint16
| | +--rw mac-withdraw? boolean | | +--rw mac-withdraw? boolean
| | +--rw cw-negotiation? cw-negotiation-type | | +--rw cw-negotiation? cw-negotiation-type
| | +--rw tunnel-policy? string | | +--rw tunnel-policy? string
skipping to change at page 9, line 50 skipping to change at page 11, line 35
| | | | +--rw transmit-label? mpls:mpls-label | | | | +--rw transmit-label? mpls:mpls-label
| | | | +--rw receive-label? mpls:mpls-label | | | | +--rw receive-label? mpls:mpls-label
| | | +--:(bgp-pw) | | | +--:(bgp-pw)
| | | | +--rw remote-pe-id? inet:ip-address | | | | +--rw remote-pe-id? inet:ip-address
| | | +--:(bgp-ad-pw) | | | +--:(bgp-ad-pw)
| | | +--rw remote-ve-id? uint16 | | | +--rw remote-ve-id? uint16
| | +--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
| +--rw endpoint-a | +--rw endpoint* [name]
| | +--rw (ac-or-pw-or-redundancy-grp)? | | +--rw name string
| | +--:(ac)
| | | +--rw ac? string
| | +--:(pw)
| | | +--rw pw? -> ../../pw/name
| | +--:(redundancy-grp)
| | +--rw (primary)
| | | +--:(primary-ac)
| | | | +--rw primary-ac? string
| | | +--:(primary-pw)
| | | +--rw primary-pw? -> ../../pw/name
| | +--rw (backup)?
| | | +--:(backup-ac)
| | | | +--rw backup-ac? string
| | | +--:(backup-pw)
| | | +--rw backup-pw? -> ../../pw/name
| | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| | +--rw protection-mode? enumeration
| | +--rw reroute-mode? enumeration
| | +--rw dual-receive? boolean
| | +--rw revert? boolean
| | +--rw reroute-delay? uint16
| | +--rw revert-delay? uint16
| +--rw endpoint-z
| | +--rw (ac-or-pw-or-redundancy-grp)? | | +--rw (ac-or-pw-or-redundancy-grp)?
| | +--:(ac) | | | +--:(ac)
| | | +--rw ac? string | | | | +--rw ac* [name]
| | +--:(pw) | | | | +--rw name string
| | | +--rw pw? -> ../../pw/name | | | +--:(pw)
| | +--:(redundancy-grp) | | | | +--rw pw* [name]
| | +--rw (primary) | | | | +--rw name -> ../../../pw/name
| | | +--:(primary-ac) | | | +--:(redundancy-grp)
| | | | +--rw primary-ac? string | | | +--rw (primary)
| | | +--:(primary-pw) | | | | +--:(primary-ac)
| | | +--rw primary-pw? -> ../../pw/name | | | | | +--rw primary-ac? string
| | +--rw (backup)? | | | | +--:(primary-pw)
| | | +--:(backup-ac) | | | | +--rw primary-pw* [name]
| | | | +--rw backup-ac? string | | | | +--rw name -> ../../../pw/name
| | | +--:(backup-pw) | | | +--rw (backup)?
| | | +--rw backup-pw? -> ../../pw/name | | | | +--:(backup-ac)
| | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name | | | | | +--rw backup-ac? string
| | +--rw protection-mode? enumeration | | | | +--:(backup-pw)
| | +--rw reroute-mode? enumeration | | | | +--rw backup-pw* [name]
| | +--rw dual-receive? boolean | | | | +--rw name -> ../../../pw/name
| | +--rw revert? boolean | | | | +--rw precedence? uint32
| | +--rw reroute-delay? uint16 | | | +--rw template? -> /l2vpn/redundancy-group-templates/redundancy-group-template/name
| | +--rw revert-delay? uint16 | | | +--rw protection-mode? enumeration
| | | +--rw reroute-mode? enumeration
| | | +--rw dual-receive? boolean
| | | +--rw revert? boolean
| | | +--rw reroute-delay? uint16
| | | +--rw revert-delay? uint16
| | +--rw split-horizon-group? string
| +--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
| +--rw evpn-instance? string
| +--rw endpoint* [name]
| +--rw name string
| +--rw split-horizon-group? string
| +--rw (ac-or-pw-or-redundancy-grp)?
| +--:(ac)
| | +--rw ac* [name]
| | +--rw name string
| +--:(pw)
| | +--rw pw* [name]
| | +--rw name -> ../../../pw/name
| +--:(redundancy-grp)
| +--rw (primary)
| | +--:(primary-ac)
| | | +--rw primary-ac? string
| | +--:(primary-pw)
| | +--rw primary-pw* [name]
| | +--rw name -> ../../../pw/name
| +--rw (backup)?
| | +--:(backup-ac)
| | | +--rw backup-ac? string
| | +--:(backup-pw)
| | +--rw backup-pw* [name]
| | +--rw name -> ../../../pw/name
| | +--rw precedence? uint32
| +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| +--rw protection-mode? enumeration
| +--rw reroute-mode? enumeration
| +--rw dual-receive? boolean
| +--rw revert? boolean
| +--rw reroute-delay? uint16
| +--rw revert-delay? uint16
+--ro l2vpn-state +--ro l2vpn-state
+--ro l2vpn-instances +--ro l2vpn-instances-state
+--ro l2vpn-instance* +--ro l2vpn-instance*
+--ro name? string +--ro name? string
+--ro type? identityref +--ro type? identityref
+--ro mtu? uint16 +--ro mtu? uint16
+--ro mac-aging-timer? uint32 +--ro mac-aging-timer? uint32
+--ro service-type? l2vpn-service-type +--ro service-type? l2vpn-service-type
+--ro discovery-type? l2vpn-discovery-type +--ro discovery-type? l2vpn-discovery-type
+--ro signaling-type l2vpn-signaling-type +--ro signaling-type l2vpn-signaling-type
+--ro bgp-auto-discovery +--ro bgp-auto-discovery
| +--ro route-distinguisher? string | +--ro route-distinguisher? rt-types:route-distinguisher
| +--ro vpn-target* [rt-value]
| | +--ro rt-value string
| | +--ro rt-type bgp-rt-type
| +--ro vpn-id? string | +--ro vpn-id? string
| +--ro vpn-target* [route-target]
| +--ro route-target rt-types:route-target
| +--ro route-target-type rt-types:route-target-type
+--ro bgp-signaling +--ro bgp-signaling
| +--ro site-id? uint16 | +--ro site-id? uint16
| +--ro site-range? uint16 | +--ro site-range? uint16
+--ro endpoint-a +--ro endpoint* [name]
| +--ro (ac-or-pw-or-redundancy-grp)? | +--ro name string
| +--:(ac)
| | +--ro ac
| | +--ro name? string
| | +--ro state? operational-state-type
| +--:(pw)
| | +--ro pw
| | +--ro name? string
| | +--ro state? operational-state-type
| | +--ro mtu? uint16
| | +--ro mac-withdraw? boolean
| | +--ro cw-negotiation? cw-negotiation-type
| | +--ro vccv-ability? boolean
| | +--ro tunnel-policy? string
| | +--ro request-vlanid? uint16
| | +--ro vlan-tpid? string
| | +--ro ttl? uint8
| | +--ro (pw-type)?
| | +--:(ldp-or-static-pw)
| | | +--ro peer-ip? inet:ip-address
| | | +--ro pw-id? uint32
| | | +--ro icb? boolean
| | | +--ro transmit-label? mpls:mpls-label
| | | +--ro receive-label? mpls:mpls-label
| | +--:(bgp-pw)
| | | +--ro remote-pe-id? inet:ip-address
| | +--:(bgp-ad-pw)
| | +--ro remote-ve-id? uint16
| +--:(redundancy-grp)
| +--ro (primary)
| | +--:(primary-ac)
| | | +--ro primary-ac
| | | +--ro name? string
| | | +--ro state? operational-state-type
| | +--:(primary-pw)
| | +--ro primary-pw
| | +--ro name? string
| | +--ro state? operational-state-type
| | +--ro mtu? uint16
| | +--ro mac-withdraw? boolean
| | +--ro cw-negotiation? cw-negotiation-type
| | +--ro vccv-ability? boolean
| | +--ro tunnel-policy? string
| | +--ro request-vlanid? uint16
| | +--ro vlan-tpid? string
| | +--ro ttl? uint8
| | +--ro (pw-type)?
| | +--:(ldp-or-static-pw)
| | | +--ro peer-ip? inet:ip-address
| | | +--ro pw-id? uint32
| | | +--ro icb? boolean
| | | +--ro transmit-label? mpls:mpls-label
| | | +--ro receive-label? mpls:mpls-label
| | +--:(bgp-pw)
| | | +--ro remote-pe-id? inet:ip-address
| | +--:(bgp-ad-pw)
| | +--ro remote-ve-id? uint16
| +--ro (backup)?
| | +--:(backup-ac)
| | | +--ro backup-ac
| | | +--ro name? string
| | | +--ro state? operational-state-type
| | +--:(backup-pw)
| | +--ro backup-pw
| | +--ro name? string
| | +--ro state? operational-state-type
| | +--ro mtu? uint16
| | +--ro mac-withdraw? boolean
| | +--ro cw-negotiation? cw-negotiation-type
| | +--ro vccv-ability? boolean
| | +--ro tunnel-policy? string
| | +--ro request-vlanid? uint16
| | +--ro vlan-tpid? string
| | +--ro ttl? uint8
| | +--ro (pw-type)?
| | +--:(ldp-or-static-pw)
| | | +--ro peer-ip? inet:ip-address
| | | +--ro pw-id? uint32
| | | +--ro icb? boolean
| | | +--ro transmit-label? mpls:mpls-label
| | | +--ro receive-label? mpls:mpls-label
| | +--:(bgp-pw)
| | | +--ro remote-pe-id? inet:ip-address
| | +--:(bgp-ad-pw)
| | +--ro remote-ve-id? uint16
| +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| +--ro protection-mode? enumeration
| +--ro reroute-mode? enumeration
| +--ro dual-receive? boolean
| +--ro revert? boolean
| +--ro reroute-delay? uint16
| +--ro revert-delay? uint16
+--ro endpoint-z
| +--ro (ac-or-pw-or-redundancy-grp)? | +--ro (ac-or-pw-or-redundancy-grp)?
| +--:(ac) | | +--:(ac)
| | +--ro ac | | | +--ro ac*
| | +--ro name? string | | | +--ro name? string
| | +--ro state? operational-state-type | | | +--ro state? operational-state-type
| +--:(pw) | | +--:(pw)
| | +--ro pw | | | +--ro pw*
| | +--ro name? string | | | +--ro name? string
| | +--ro state? operational-state-type | | | +--ro state? operational-state-type
| | +--ro mtu? uint16 | | | +--ro mtu? uint16
| | +--ro mac-withdraw? boolean | | | +--ro mac-withdraw? boolean
| | +--ro cw-negotiation? cw-negotiation-type | | | +--ro cw-negotiation? cw-negotiation-type
| | +--ro vccv-ability? boolean | | | +--ro tunnel-policy? string
| | +--ro tunnel-policy? string | | | +--ro (pw-type)?
| | +--ro request-vlanid? uint16 | | | | +--:(ldp-or-static-pw)
| | +--ro vlan-tpid? string | | | | | +--ro peer-ip? inet:ip-address
| | +--ro ttl? uint8 | | | | | +--ro pw-id? uint32
| | +--ro (pw-type)? | | | | | +--ro icb? boolean
| | +--:(ldp-or-static-pw) | | | | | +--ro transmit-label? mpls:mpls-label
| | | +--ro peer-ip? inet:ip-address | | | | | +--ro receive-label? mpls:mpls-label
| | | +--ro pw-id? uint32 | | | | +--:(bgp-pw)
| | | +--ro icb? boolean | | | | | +--ro remote-pe-id? inet:ip-address
| | | +--ro transmit-label? mpls:mpls-label | | | | +--:(bgp-ad-pw)
| | | +--ro receive-label? mpls:mpls-label | | | | +--ro remote-ve-id? uint16
| | +--:(bgp-pw) | | | +--ro vccv-ability? boolean
| | | +--ro remote-pe-id? inet:ip-address | | | +--ro request-vlanid? uint16
| | +--:(bgp-ad-pw) | | | +--ro vlan-tpid? string
| | +--ro remote-ve-id? uint16 | | | +--ro ttl? uint8
| +--:(redundancy-grp) | | +--:(redundancy-grp)
| +--ro (primary) | | +--ro (primary)
| | +--:(primary-ac) | | | +--:(primary-ac)
| | | +--ro primary-ac | | | | +--ro primary-ac
| | | +--ro name? string | | | | +--ro name? string
| | | +--ro state? operational-state-type | | | | +--ro state? operational-state-type
| | +--:(primary-pw) | | | +--:(primary-pw)
| | +--ro primary-pw | | | +--ro primary-pw*
| | +--ro name? string | | | +--ro name? string
| | +--ro state? operational-state-type | | | +--ro state? operational-state-type
| | +--ro mtu? uint16 | | | +--ro mtu? uint16
| | +--ro mac-withdraw? boolean | | | +--ro mac-withdraw? boolean
| | +--ro cw-negotiation? cw-negotiation-type | | | +--ro cw-negotiation? cw-negotiation-type
| | +--ro vccv-ability? boolean | | | +--ro tunnel-policy? string
| | +--ro tunnel-policy? string | | | +--ro (pw-type)?
| | +--ro request-vlanid? uint16 | | | | +--:(ldp-or-static-pw)
| | +--ro vlan-tpid? string | | | | | +--ro peer-ip? inet:ip-address
| | +--ro ttl? uint8 | | | | | +--ro pw-id? uint32
| | +--ro (pw-type)? | | | | | +--ro icb? boolean
| | +--:(ldp-or-static-pw) | | | | | +--ro transmit-label? mpls:mpls-label
| | | +--ro peer-ip? inet:ip-address | | | | | +--ro receive-label? mpls:mpls-label
| | | +--ro pw-id? uint32 | | | | +--:(bgp-pw)
| | | +--ro icb? boolean | | | | | +--ro remote-pe-id? inet:ip-address
| | | +--ro transmit-label? mpls:mpls-label | | | | +--:(bgp-ad-pw)
| | | +--ro receive-label? mpls:mpls-label | | | | +--ro remote-ve-id? uint16
| | +--:(bgp-pw) | | | +--ro vccv-ability? boolean
| | | +--ro remote-pe-id? inet:ip-address | | | +--ro request-vlanid? uint16
| | +--:(bgp-ad-pw) | | | +--ro vlan-tpid? string
| | +--ro remote-ve-id? uint16 | | | +--ro ttl? uint8
| +--ro (backup)? | | +--ro (backup)?
| | +--:(backup-ac) | | | +--:(backup-ac)
| | | +--ro backup-ac | | | | +--ro backup-ac
| | | +--ro name? string | | | | +--ro name? string
| | | +--ro state? operational-state-type | | | | +--ro state? operational-state-type
| | +--:(backup-pw) | | | +--:(backup-pw)
| | +--ro backup-pw | | | +--ro backup-pw*
| | +--ro name? string | | | +--ro name? string
| | +--ro state? operational-state-type | | | +--ro state? operational-state-type
| | +--ro mtu? uint16 | | | +--ro mtu? uint16
| | +--ro mac-withdraw? boolean | | | +--ro mac-withdraw? boolean
| | +--ro cw-negotiation? cw-negotiation-type | | | +--ro cw-negotiation? cw-negotiation-type
| | +--ro vccv-ability? boolean | | | +--ro tunnel-policy? string
| | +--ro tunnel-policy? string | | | +--ro (pw-type)?
| | +--ro request-vlanid? uint16 | | | | +--:(ldp-or-static-pw)
| | +--ro vlan-tpid? string | | | | | +--ro peer-ip? inet:ip-address
| | +--ro ttl? uint8 | | | | | +--ro pw-id? uint32
| | +--ro (pw-type)? | | | | | +--ro icb? boolean
| | +--:(ldp-or-static-pw) | | | | | +--ro transmit-label? mpls:mpls-label
| | | +--ro peer-ip? inet:ip-address | | | | | +--ro receive-label? mpls:mpls-label
| | | +--ro pw-id? uint32 | | | | +--:(bgp-pw)
| | | +--ro icb? boolean | | | | | +--ro remote-pe-id? inet:ip-address
| | | +--ro transmit-label? mpls:mpls-label | | | | +--:(bgp-ad-pw)
| | | +--ro receive-label? mpls:mpls-label | | | | +--ro remote-ve-id? uint16
| | +--:(bgp-pw) | | | +--ro vccv-ability? boolean
| | | +--ro remote-pe-id? inet:ip-address | | | +--ro request-vlanid? uint16
| | +--:(bgp-ad-pw) | | | +--ro vlan-tpid? string
| | +--ro remote-ve-id? uint16 | | | +--ro ttl? uint8
| +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name | | | +--ro precedence? uint32
| +--ro protection-mode? enumeration | | +--ro template? -> /l2vpn/redundancy-group-templates/redundancy-group-template/name
| +--ro reroute-mode? enumeration | | +--ro protection-mode? enumeration
| +--ro dual-receive? boolean | | +--ro reroute-mode? enumeration
| +--ro revert? boolean | | +--ro dual-receive? boolean
| +--ro reroute-delay? uint16 | | +--ro revert? boolean
| +--ro revert-delay? uint16 | | +--ro reroute-delay? uint16
| | +--ro revert-delay? uint16
| +--ro split-horizon-group? string
+--ro pbb-parameters +--ro pbb-parameters
| +--ro (component-type)? +--ro (component-type)?
| +--:(i-component) +--:(i-component)
| | +--ro i-sid? i-sid-type | +--ro i-sid? i-sid-type
| | +--ro backbone-src-mac? yang:mac-address | +--ro backbone-src-mac? yang:mac-address
| +--:(b-component) +--:(b-component)
| +--ro bind-b-component-name? string +--ro bind-b-component-name? string
| +--ro bind-b-component-type? identityref +--ro bind-b-component-type? identityref
+--ro evpn-instance-name? string
+--ro endpoint*
+--ro name? string
+--ro split-horizon-group? string
+--ro (ac-or-pw-or-redundancy-grp)?
+--:(ac)
| +--ro ac*
| +--ro name? string
| +--ro state? operational-state-type
+--:(pw)
| +--ro pw*
| +--ro name? string
| +--ro state? operational-state-type
| +--ro mtu? uint16
| +--ro mac-withdraw? boolean
| +--ro cw-negotiation? cw-negotiation-type
| +--ro discovery-type? l2vpn-discovery-type
| +--ro signaling-type? l2vpn-signaling-type
| +--ro peer-ip? inet:ip-address
| +--ro pw-id? uint32
| +--ro transmit-label? mpls:mpls-label
| +--ro receive-label? mpls:mpls-label
| +--ro tunnel-policy? string
+--:(redundancy-grp)
+--ro (primary)
| +--:(primary-ac)
| | +--ro primary-ac
| | +--ro name? string
| | +--ro state? operational-state-type
| +--:(primary-pw)
| +--ro primary-pw*
| +--ro name? string
| +--ro state? operational-state-type
| +--ro mtu? uint16
| +--ro mac-withdraw? boolean
| +--ro cw-negotiation? cw-negotiation-type
| +--ro discovery-type? l2vpn-discovery-type
| +--ro signaling-type? l2vpn-signaling-type
| +--ro peer-ip? inet:ip-address
| +--ro pw-id? uint32
| +--ro transmit-label? mpls:mpls-label
| +--ro receive-label? mpls:mpls-label
| +--ro tunnel-policy? string
+--ro (backup)?
| +--:(backup-ac)
| | +--ro backup-ac
| | +--ro name? string
| | +--ro state? operational-state-type
| +--:(backup-pw)
| +--ro backup-pw*
| +--ro name? string
| +--ro state? operational-state-type
| +--ro mtu? uint16
| +--ro mac-withdraw? boolean
| +--ro cw-negotiation? cw-negotiation-type
| +--ro discovery-type? l2vpn-discovery-type
| +--ro signaling-type? l2vpn-signaling-type
| +--ro peer-ip? inet:ip-address
| +--ro pw-id? uint32
| +--ro transmit-label? mpls:mpls-label
| +--ro receive-label? mpls:mpls-label
| +--ro tunnel-policy? string
| +--ro precedence? uint32
+--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
+--ro protection-mode? enumeration
+--ro reroute-mode? enumeration
+--ro dual-receive? boolean
+--ro revert? boolean
+--ro reroute-delay? uint16
+--ro revert-delay? uint16
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-l2vpn@2016-10-24.yang" (CODE BEGINS) file "ietf-l2vpn@2017-03-06.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";
} }
import ietf-mpls { import ietf-mpls {
prefix "mpls"; prefix "mpls";
} }
organization "ietf"; import ietf-routing-types {
contact "ietf"; prefix "rt-types";
description "l2vpn"; }
revision "2016-10-24" { organization "ietf";
description "Fifth revision " + contact "ietf";
" - Edits based on Giles's comments " + description "l2vpn";
" 5) Remove relative leafrefs in groupings, " +
" and the resulting new groupings are: " +
" <a> bgp-auto-discovery-parameters-grp " +
" <b> bgp-signaling-parameters-grp " +
" <c> endpoint-grp " +
" 11) Merge VPLS and VPWS into one single list " +
" and use augment statements to handle " +
" differences between VPLS and VPWS " +
" - Add a new grouping l2vpn-common-parameters-grp " +
" to make VPLS and VPWS more consistent";
reference "";
}
revision "2016-05-31" { revision "2017-03-06" {
description "Fourth revision " + description "Sixth revision " +
" - Edits based on Giles's comments " + " - Removed the 'common' container and move pw-templates " +
" 1) Change enumeration to identityref type for: " + " and redundancy-group-templates up a level " +
" <a> l2vpn-service-type " + " - Consolidated the endpoint configuration such that " +
" <b> l2vpn-discovery-type " + " all L2VPN instances has a list of endpoint. For " +
" <c> l2vpn-signaling-type " + " certain types of L2VPN instances such as VPWS where " +
" bgp-rt-type, cw-negotiation, and " + " each L2VPN instance is limited to at most two " +
" pbb-component remain enumerations " + " endpoint, additional augment statements were included " +
" 2) Define i-sid-type for leaf 'i-sid' " + " to add necessary constraints " +
" (which is renamed from 'i-tag') " + " - Removed discovery-type and signaling-type operational " +
" 3) Rename 'vpn-targets' to 'vpn-target' " + " state from VPLS pseudowires, as these two parameters " +
" 4) Import ietf-mpls.yang and reuse the " + " are configured as L2VPN parameters rather than " +
" 'mpls-label' type defined in ietf-mpls.yang " + " pseudowire paramteres " +
" transmit-label and receive-label " + " - Renamed l2vpn-instances to l2vpn-instances-state " +
" 8) Change endpoint list's key to name " + " in the operational state branch " +
" 9) Changed MTU to type uint16 " + " - Removed BGP parameter groupings and reused " +
""; " ietf-routing-types.yang module instead " +
reference ""; "";
} reference "";
}
revision "2016-03-07" { revision "2016-10-24" {
description "Third revision " + description "Fifth revision " +
" - Changed the module name to ietf-l2vpn " + " - Edits based on Giles's comments " +
" - Merged EVPN into L2VPN " + " 5) Remove relative leafrefs in groupings, " +
" - Eliminated the definitions of attachment " + " and the resulting new groupings are: " +
" circuit with the intention to reuse other " + " (a) bgp-auto-discovery-parameters-grp " +
" layer-2 definitions " + " (b) bgp-signaling-parameters-grp " +
" - Added state branch"; " (c) endpoint-grp " +
reference ""; " 11) Merge VPLS and VPWS into one single list " +
} " and use augment statements to handle " +
" differences between VPLS and VPWS " +
" - Add a new grouping l2vpn-common-parameters-grp " +
" to make VPLS and VPWS more consistent";
reference "";
}
revision "2015-10-08" { revision "2016-05-31" {
description "Second revision " + description "Fourth revision " +
" - Added container vpls-instances " + " - Edits based on Giles's comments " +
" - Rearranged groupings and typedefs to be " + " 1) Change enumeration to identityref type for: " +
" reused across vpls-instance and vpws-instances"; " (a) l2vpn-service-type " +
reference ""; " (b) l2vpn-discovery-type " +
} " (c) l2vpn-signaling-type " +
" bgp-rt-type, cw-negotiation, and " +
" pbb-component remain enumerations " +
" 2) Define i-sid-type for leaf 'i-sid' " +
" (which is renamed from 'i-tag') " +
" 3) Rename 'vpn-targets' to 'vpn-target' " +
" 4) Import ietf-mpls.yang and reuse the " +
" 'mpls-label' type defined in ietf-mpls.yang " +
" transmit-label and receive-label " +
" 8) Change endpoint list's key to name " +
" 9) Changed MTU to type uint16 " +
"";
reference "";
}
revision "2015-06-30" { revision "2016-03-07" {
description "Initial revision"; description "Third revision " +
reference ""; " - Changed the module name to ietf-l2vpn " +
} " - Merged EVPN into L2VPN " +
" - Eliminated the definitions of attachment " +
" circuit with the intention to reuse other " +
" layer-2 definitions " +
" - Added state branch";
reference "";
}
/* identities */ revision "2015-10-08" {
description "Second revision " +
" - Added container vpls-instances " +
" - Rearranged groupings and typedefs to be " +
" reused across vpls-instance and vpws-instances";
reference "";
}
identity l2vpn-instance-type { revision "2015-06-30" {
description "Base identity from which identities of " + description "Initial revision";
"l2vpn service instance types are derived"; reference "";
} }
identity vpws-instance-type { /* identities */
base l2vpn-instance-type;
description "This identity represents VPWS instance type";
}
identity vpls-instance-type { identity l2vpn-instance-type {
base l2vpn-instance-type; description "Base identity from which identities of " +
description "This identity represents VPLS instance type"; "l2vpn service instance types are derived";
} }
identity link-discovery-protocol { identity vpws-instance-type {
description "Base identiy from which identities describing " + base l2vpn-instance-type;
"link discovery protocols are derived"; description "This identity represents VPWS instance type";
}
} identity vpls-instance-type {
base l2vpn-instance-type;
description "This identity represents VPLS instance type";
}
identity lacp { identity link-discovery-protocol {
base "link-discovery-protocol"; description "Base identiy from which identities describing " +
description "This identity represents LACP"; "link discovery protocols are derived";
} }
identity lldp { identity lacp {
base "link-discovery-protocol"; base "link-discovery-protocol";
description "This identity represents LLDP"; description "This identity represents LACP";
}
identity bpdu { }
base "link-discovery-protocol";
description "This identity represens BPDU";
}
identity cpd { identity lldp {
base "link-discovery-protocol"; base "link-discovery-protocol";
description "This identity represents CPD"; description "This identity represents LLDP";
} }
identity udld { identity bpdu {
base "link-discovery-protocol"; base "link-discovery-protocol";
description "This identity represens UDLD"; description "This identity represens BPDU";
} }
identity l2vpn-service { identity cpd {
description "Base identity from which identities describing " + base "link-discovery-protocol";
"L2VPN services are derived"; description "This identity represents CPD";
} }
identity Ethernet { identity udld {
base "l2vpn-service"; base "link-discovery-protocol";
description "This identity represents Ethernet service"; description "This identity represens UDLD";
} }
identity ATM { identity l2vpn-service {
base "l2vpn-service"; description "Base identity from which identities describing " +
description "This identity represents Asynchronous Transfer " + "L2VPN services are derived";
"Mode service"; }
}
identity FR { identity Ethernet {
base "l2vpn-service"; base "l2vpn-service";
description "This identity represent Frame-Relay service"; description "This identity represents Ethernet service";
} }
identity TDM {
base "l2vpn-service";
description "This identity represent Time Devision " +
"Multiplexing service";
}
identity l2vpn-discovery { identity ATM {
description "Base identity from which identities describing " + base "l2vpn-service";
"L2VPN discovery protocols are derived"; description "This identity represents Asynchronous Transfer " +
} "Mode service";
}
identity manual-discovery { identity FR {
base "l2vpn-discovery"; base "l2vpn-service";
description "Manual configuration of l2vpn service"; description "This identity represent Frame-Relay service";
} }
identity bgp-auto-discovery { identity TDM {
base "l2vpn-discovery"; base "l2vpn-service";
description "Border Gateway Protocol (BGP) auto-discovery of " + description "This identity represent Time Devision " +
"l2vpn service"; "Multiplexing service";
} }
identity l2vpn-discovery {
description "Base identity from which identities describing " +
"L2VPN discovery protocols are derived";
}
identity ldp-discovery { identity manual-discovery {
base "l2vpn-discovery"; base "l2vpn-discovery";
description "Label Distribution Protocol (LDP) discovery of " + description "Manual configuration of l2vpn service";
"l2vpn service"; }
}
identity mixed-discovery { identity bgp-auto-discovery {
base "l2vpn-discovery"; base "l2vpn-discovery";
description "Mixed discovery methods of l2vpn service"; description "Border Gateway Protocol (BGP) auto-discovery of " +
} "l2vpn service";
}
identity l2vpn-signaling { identity ldp-discovery {
description "Base identity from which identities describing " + base "l2vpn-discovery";
"L2VPN signaling protocols are derived"; description "Label Distribution Protocol (LDP) discovery of " +
} "l2vpn service";
}
identity static-configuration { identity mixed-discovery {
base "l2vpn-signaling"; base "l2vpn-discovery";
description "Static configuration of labels (no signaling)"; description "Mixed discovery methods of l2vpn service";
} }
identity ldp-signaling { identity l2vpn-signaling {
base "l2vpn-signaling"; description "Base identity from which identities describing " +
description "Label Distribution Protocol (LDP) signaling"; "L2VPN signaling protocols are derived";
} }
identity bgp-signaling {
base "l2vpn-signaling";
description "Border Gateway Protocol (BGP) signaling";
}
identity mixed-signaling { identity static-configuration {
base "l2vpn-signaling"; base "l2vpn-signaling";
description "Mixed signaling methods"; description "Static configuration of labels (no signaling)";
} }
/* typedefs */ identity ldp-signaling {
base "l2vpn-signaling";
description "Label Distribution Protocol (LDP) signaling";
}
typedef l2vpn-service-type { identity bgp-signaling {
type identityref { base "l2vpn-signaling";
base "l2vpn-service"; description "Border Gateway Protocol (BGP) signaling";
} }
description "L2VPN service type";
}
typedef l2vpn-discovery-type { identity mixed-signaling {
type identityref { base "l2vpn-signaling";
base "l2vpn-discovery"; description "Mixed signaling methods";
} }
description "L2VPN discovery type";
}
typedef l2vpn-signaling-type { /* typedefs */
type identityref {
base "l2vpn-signaling";
}
description "L2VPN signaling type";
}
typedef bgp-rt-type { typedef l2vpn-service-type {
type enumeration { type identityref {
enum import { base "l2vpn-service";
description "For import"; }
} description "L2VPN service type";
enum export { }
description "For export";
}
enum both {
description "For both import and export";
}
}
description "BGP route-target type. Import from BGP YANG";
}
typedef cw-negotiation-type {
type enumeration {
enum "non-preferred" {
description "No preference for control-word";
}
enum "preferred" {
description "Prefer to have control-word negotiation";
}
}
description "control-word negotiation preference type";
}
typedef link-discovery-protocol-type { typedef l2vpn-discovery-type {
type identityref { type identityref {
base "link-discovery-protocol"; base "l2vpn-discovery";
} }
description "This type is used to identify " + description "L2VPN discovery type";
"link discovery protocol"; }
}
typedef pbb-component-type { typedef l2vpn-signaling-type {
type enumeration { type identityref {
enum "b-component" { base "l2vpn-signaling";
description "Identifies as a b-component"; }
} description "L2VPN signaling type";
enum "i-component" { }
description "Identifies as an i-component";
}
}
description "This type is used to identify " +
"the type of PBB component";
}
typedef pw-template-ref { typedef cw-negotiation-type {
type leafref { type enumeration {
path "/l2vpn/common/pw-templates/pw-template/name"; enum "non-preferred" {
} description "No preference for control-word";
description "pw-template-ref"; }
} enum "preferred" {
description "Prefer to have control-word negotiation";
}
}
description "control-word negotiation preference type";
}
typedef redundancy-group-template-ref { typedef link-discovery-protocol-type {
type leafref { type identityref {
path "/l2vpn/common/redundancy-group-templates" + base "link-discovery-protocol";
"/redundancy-group-template/name"; }
} description "This type is used to identify " +
description "redundancy-group-template-ref"; "link discovery protocol";
} }
typedef l2vpn-instance-name-ref {
type leafref {
path "/l2vpn/l2vpn-instances" +
"/l2vpn-instance/name";
}
description "l2vpn-instance-name-ref";
}
typedef l2vpn-instance-type-ref { typedef pbb-component-type {
type leafref { type enumeration {
path "/l2vpn/l2vpn-instances" + enum "b-component" {
"/l2vpn-instance/type"; description "Identifies as a b-component";
} }
description "l2vpn-instance-type-ref"; enum "i-component" {
} description "Identifies as an i-component";
}
}
description "This type is used to identify " +
"the type of PBB component";
}
typedef operational-state-type { typedef pw-template-ref {
type enumeration { type leafref {
enum 'up' { path "/l2vpn/pw-templates/pw-template/name";
description "Operational state is up"; }
} description "pw-template-ref";
enum 'down' { }
description "Operational state is down";
}
}
description "operational-state-type";
}
typedef i-sid-type { typedef redundancy-group-template-ref {
type uint32 { type leafref {
range "0..16777216"; path "/l2vpn/redundancy-group-templates" +
} "/redundancy-group-template/name";
description "I-SID type that is 24-bits. " + }
"This should be moved to ieee-types.yang at " + description "redundancy-group-template-ref";
"http://www.ieee802.org/1/files/public/docs2015" + }
"/new-mholness-ieee-types-yang-v01.yang";
}
/* groupings */ typedef l2vpn-instance-name-ref {
type leafref {
path "/l2vpn/l2vpn-instances" +
"/l2vpn-instance/name";
}
description "l2vpn-instance-name-ref";
}
grouping pbb-parameters-grp { typedef l2vpn-instance-type-ref {
description "PBB parameters grouping"; type leafref {
container pbb-parameters { path "/l2vpn/l2vpn-instances" +
description "pbb-parameters"; "/l2vpn-instance/type";
choice component-type { }
description "PBB component type"; description "l2vpn-instance-type-ref";
case i-component { }
leaf i-sid {
type i-sid-type;
description "I-SID";
}
leaf backbone-src-mac {
type yang:mac-address;
description "backbone-src-mac";
}
}
case b-component {
leaf bind-b-component-name {
type l2vpn-instance-name-ref;
description "Reference to the associated b-component";
}
must "/l2vpn" +
"/l2vpn-instances[name=current()/bind-b-component]" +
"/type = 'vpls-instance-type'" {
description "A b-component must be an L2VPN instance " +
"of type vpls-instance-type";
}
}
}
}
}
grouping pbb-parameters-state-grp { typedef operational-state-type {
description "PBB parameters grouping"; type enumeration {
container pbb-parameters { enum 'up' {
description "pbb-parameters"; description "Operational state is up";
choice component-type { }
description "PBB component type"; enum 'down' {
case i-component { description "Operational state is down";
leaf i-sid { }
type i-sid-type; }
description "I-SID"; description "operational-state-type";
} }
leaf backbone-src-mac {
type yang:mac-address;
description "backbone-src-mac";
}
}
case b-component {
leaf bind-b-component-name {
type string;
description "Name of the associated b-component";
}
leaf bind-b-component-type {
type identityref {
base l2vpn-instance-type;
} typedef i-sid-type {
must ". = 'vpls-instance-type'" { type uint32 {
description "The associated b-component must have " + range "0..16777216";
"type vpls-instance-type"; }
} description "I-SID type that is 24-bits. " +
description "Type of the associated b-component"; "This should be moved to ieee-types.yang at " +
} "http://www.ieee802.org/1/files/public/docs2015" +
} "/new-mholness-ieee-types-yang-v01.yang";
} }
}
}
grouping l2vpn-common-parameters-grp { /* groupings */
description "L2VPN common parameters";
leaf name {
type string;
description "Name of L2VPN service instance";
}
leaf type {
type identityref {
base l2vpn-instance-type;
}
description "Type of L2VPN service instance";
}
leaf mtu {
type uint16;
description "MTU of L2VPN service";
}
leaf mac-aging-timer {
type uint32;
description "mac-aging-timer, the duration after which" +
"a MAC entry is considered aged out";
}
leaf service-type {
type l2vpn-service-type;
default Ethernet;
description "L2VPN service type";
}
leaf discovery-type {
type l2vpn-discovery-type;
default manual-discovery;
description "L2VPN service discovery type";
}
leaf signaling-type {
type l2vpn-signaling-type;
mandatory true;
description "L2VPN signaling type";
}
} grouping pbb-parameters-grp {
description "PBB parameters grouping";
container pbb-parameters {
description "pbb-parameters";
choice component-type {
description "PBB component type";
case i-component {
leaf i-sid {
type i-sid-type;
description "I-SID";
}
leaf backbone-src-mac {
type yang:mac-address;
description "backbone-src-mac";
}
}
case b-component {
leaf bind-b-component-name {
type l2vpn-instance-name-ref;
must "/l2vpn" +
"/l2vpn-instances/l2vpn-instance[name=current()]" +
"/type = 'vpls-instance-type'" {
description "A b-component must be an L2VPN instance " +
"of type vpls-instance-type";
}
description "Reference to the associated b-component";
}
}
}
grouping bgp-auto-discovery-parameters-grp { }
description "BGP parameters for auto-discovery"; }
leaf route-distinguisher {
type string;
description "BGP RD";
}
list vpn-target {
key rt-value;
description "Route Targets";
leaf rt-value {
type string;
description "Route-Target value";
}
leaf rt-type {
type bgp-rt-type;
mandatory true;
description "Type of RT";
}
}
leaf vpn-id {
type string;
description "VPN ID";
}
}
grouping bgp-signaling-parameters-grp { grouping pbb-parameters-state-grp {
description "BGP parameters for signaling"; description "PBB parameters grouping";
leaf site-id { container pbb-parameters {
type uint16; description "pbb-parameters";
description "Site ID"; choice component-type {
} description "PBB component type";
leaf site-range { case i-component {
type uint16; leaf i-sid {
description "Site Range"; type i-sid-type;
} description "I-SID";
} }
leaf backbone-src-mac {
type yang:mac-address;
description "backbone-src-mac";
}
}
case b-component {
leaf bind-b-component-name {
type string;
description "Name of the associated b-component";
}
leaf bind-b-component-type {
type identityref {
base l2vpn-instance-type;
}
must ". = 'vpls-instance-type'" {
description "The associated b-component must have " +
"type vpls-instance-type";
}
description "Type of the associated b-component";
}
}
}
}
}
grouping pw-common-parameters-grp { grouping l2vpn-common-parameters-grp {
description "Pseudowire parameters common to both " + description "L2VPN common parameters";
"VPWS and VPLS pseudowires"; leaf name {
leaf name { type string;
type string; description "Name of L2VPN service instance";
description "pseudowire name"; }
} leaf type {
leaf template { type identityref {
type pw-template-ref; base l2vpn-instance-type;
description "pseudowire template";
}
leaf mtu {
type uint16;
description "PW MTU";
}
leaf mac-withdraw {
type boolean;
default false;
description "Enable (true) or disable (false) MAC withdraw";
}
leaf cw-negotiation {
type cw-negotiation-type;
description "cw-negotiation";
}
leaf tunnel-policy {
type string;
description "tunnel policy name";
}
uses pw-type-grp;
}
grouping pw-type-grp { }
description "pseudowire type grouping"; description "Type of L2VPN service instance";
choice pw-type { }
description "A choice of pseudowire type"; leaf mtu {
case ldp-or-static-pw { type uint16;
leaf peer-ip { description "MTU of L2VPN service";
type inet:ip-address; }
description "peer IP address"; leaf mac-aging-timer {
} type uint32;
leaf pw-id { description "mac-aging-timer, the duration after which" +
type uint32; "a MAC entry is considered aged out";
description "pseudowire id"; }
} leaf service-type {
leaf icb { type l2vpn-service-type;
type boolean; default Ethernet;
description "inter-chassis backup"; description "L2VPN service type";
} }
leaf transmit-label { leaf discovery-type {
type mpls:mpls-label; type l2vpn-discovery-type;
description "transmit lable"; default manual-discovery;
} description "L2VPN service discovery type";
leaf receive-label { }
type mpls:mpls-label; leaf signaling-type {
description "receive label"; type l2vpn-signaling-type;
} mandatory true;
} description "L2VPN signaling type";
case bgp-pw { }
leaf remote-pe-id { }
type inet:ip-address;
description "remote pe id";
}
}
case bgp-ad-pw {
leaf remote-ve-id {
type uint16;
description "remote ve id";
}
}
}
}
grouping redundancy-group-properties-grp { grouping bgp-signaling-parameters-grp {
description "redundancy-group-properties-grp"; description "BGP parameters for signaling";
leaf protection-mode { leaf site-id {
type enumeration { type uint16;
enum "frr" { description "Site ID";
value 0; }
description "fast reroute"; leaf site-range {
} type uint16;
enum "master-slave" { description "Site Range";
value 1; }
description "master-slave"; }
}
enum "independent" {
value 2;
description "independent";
}
}
description "protection-mode";
}
leaf reroute-mode {
type enumeration {
enum "immediate" {
value 0;
description "immediate reroute";
}
enum "delayed" {
value 1;
description "delayed reroute";
}
enum "never" {
value 2;
description "never reroute";
}
} grouping pw-common-parameters-grp {
description "reroute-mode"; description "Pseudowire parameters common to both " +
} "VPWS and VPLS pseudowires";
leaf dual-receive { leaf name {
type boolean; type string;
description description "pseudowire name";
"allow extra traffic to be carried by backup"; }
} leaf template {
leaf revert { type pw-template-ref;
type boolean; description "pseudowire template";
description "allow forwarding to revert to primary " + }
"after restoring primary"; leaf mtu {
} type uint16;
} description "PW MTU";
}
leaf mac-withdraw {
type boolean;
default false;
description "Enable (true) or disable (false) MAC withdraw";
}
leaf cw-negotiation {
type cw-negotiation-type;
description "cw-negotiation";
}
leaf tunnel-policy {
type string;
description "tunnel policy name";
}
uses pw-type-grp;
}
grouping endpoint-grp { grouping pw-type-grp {
description "A grouping that defines the structure of " + description "pseudowire type grouping";
"an endpoint"; choice pw-type {
choice ac-or-pw-or-redundancy-grp { description "A choice of pseudowire type";
description "A choice ofattachment circuit or " + case ldp-or-static-pw {
"pseudowire or redundancy group"; leaf peer-ip {
case ac { type inet:ip-address;
description "Attachment circuit(s) as an endpoint"; description "peer IP address";
} }
case pw { leaf pw-id {
description "Pseudowire(s) as an endpoint"; type uint32;
} description "pseudowire id";
case redundancy-grp { }
description "Redundancy group as an endpoint"; leaf icb {
choice primary { type boolean;
mandatory true; description "inter-chassis backup";
description "primary options"; }
case primary-ac { leaf transmit-label {
description "primary-ac"; type mpls:mpls-label;
} description "transmit lable";
case primary-pw { }
description "primary-pw"; leaf receive-label {
} type mpls:mpls-label;
} description "receive label";
choice backup {
description "backup options";
case backup-ac {
description "backup-ac";
}
case backup-pw {
description "backup-pw";
}
}
leaf template {
type leafref {
path "/l2vpn/common/redundancy-group-templates" +
"/redundancy-group-template/name";
}
description "Reference a redundancy group " +
"properties template";
}
uses redundancy-group-properties-grp;
}
}
}
grouping vpls-pw-state-grp { }
description "vpls-pw-state-grp"; }
leaf name { case bgp-pw {
type string; leaf remote-pe-id {
description "pseudowire name"; type inet:ip-address;
} description "remote pe id";
leaf state { }
type operational-state-type; }
description "pseudowire up/down state"; case bgp-ad-pw {
} leaf remote-ve-id {
leaf mtu { type uint16;
type uint16; description "remote ve id";
description "pseudowire mtu"; }
} }
leaf mac-withdraw { }
type boolean; }
description "MAC withdraw is enabled (true) or disabled (false)";
}
leaf cw-negotiation {
type cw-negotiation-type;
description "cw-negotiation";
}
leaf discovery-type {
type l2vpn-discovery-type;
description "VPLS discovery type";
}
leaf signaling-type {
type l2vpn-signaling-type;
description "VPLS signaling type";
}
leaf peer-ip {
type inet:ip-address;
description "peer IP address";
}
leaf pw-id {
type uint32;
description "pseudowire id";
}
leaf transmit-label {
type mpls:mpls-label;
description "transmit lable";
}
leaf receive-label {
type mpls:mpls-label;
description "receive label";
}
leaf tunnel-policy {
type string;
description "tunnel policy name";
}
}
grouping ac-state-grp { grouping redundancy-group-properties-grp {
description "vpls-ac-state-grp"; description "redundancy-group-properties-grp";
leaf name { leaf protection-mode {
type string; type enumeration {
description "attachment circuit name"; enum "frr" {
} value 0;
leaf state { description "fast reroute";
type operational-state-type; }
description "attachment circuit up/down state"; enum "master-slave" {
} value 1;
} description "master-slave";
}
enum "independent" {
value 2;
description "independent";
}
}
description "protection-mode";
}
leaf reroute-mode {
type enumeration {
enum "immediate" {
value 0;
description "immediate reroute";
}
enum "delayed" {
value 1;
description "delayed reroute";
}
enum "never" {
value 2;
description "never reroute";
}
}
description "reroute-mode";
}
leaf dual-receive {
type boolean;
description
"allow extra traffic to be carried by backup";
}
leaf revert {
type boolean;
description "allow forwarding to revert to primary " +
"after restoring primary";
}
leaf reroute-delay {
when "../reroute-mode = 'delayed'" {
description "Specify amount of time to " +
"delay reroute only when " +
"delayed route is configured";
}
type uint16;
description "amount of time to delay reroute";
}
leaf revert-delay {
when "../revert = 'true'" {
description "Specify the amount of time to " +
"wait to revert to primary " +
"only if reversion is configured";
}
type uint16;
description "amount ot time to wait to revert to primary";
}
}
grouping vpws-pw-state-grp { grouping endpoint-grp {
description "vpws-pw-state-grp"; description "A grouping that defines the structure of " +
leaf name { "an endpoint";
type string; choice ac-or-pw-or-redundancy-grp {
description "pseudowire name"; description "A choice ofattachment circuit or " +
} "pseudowire or redundancy group";
leaf state { case ac {
type operational-state-type; description "Attachment circuit(s) as an endpoint";
description "pseudowire operation state up/down"; }
} case pw {
leaf mtu { description "Pseudowire(s) as an endpoint";
type uint16; }
description "PW MTU"; case redundancy-grp {
} description "Redundancy group as an endpoint";
leaf mac-withdraw { choice primary {
type boolean; mandatory true;
description "MAC withdraw is enabled (ture) or disabled (false)"; description "primary options";
} case primary-ac {
leaf cw-negotiation { description "primary-ac";
type cw-negotiation-type; }
description "Override the control-word negotiation " + case primary-pw {
"preference specified in the " + description "primary-pw";
"pseudowire template."; }
} }
leaf vccv-ability { choice backup {
type boolean; description "backup options";
description "vccv-ability"; case backup-ac {
} description "backup-ac";
leaf tunnel-policy { }
type string; case backup-pw {
description "Used to override the tunnel policy name " + description "backup-pw";
"specified in the pseduowire template"; }
} }
leaf request-vlanid { leaf template {
type uint16; type leafref {
description "request vlanid"; path "/l2vpn/redundancy-group-templates" +
} "/redundancy-group-template/name";
leaf vlan-tpid { }
type string; description "Reference a redundancy group " +
description "vlan tpid"; "properties template";
} }
leaf ttl { uses redundancy-group-properties-grp;
type uint8; }
description "time-to-live"; }
} }
uses pw-type-grp;
}
/* L2VPN YANG Model */ grouping ac-state-grp {
description "ac-state-grp";
leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
leaf state {
type operational-state-type;
description "attachment circuit up/down state";
}
}
grouping common-pw-state-grp {
description "common-pw-state-grp";
leaf name {
type string;
description "pseudowire name";
}
leaf state {
type operational-state-type;
description "pseudowire operation state up/down";
}
leaf mtu {
type uint16;
description "PW MTU";
}
leaf mac-withdraw {
type boolean;
description "MAC withdraw is enabled (ture) or disabled (false)";
}
leaf cw-negotiation {
type cw-negotiation-type;
description "Override the control-word negotiation " +
"preference specified in the " +
"pseudowire template.";
}
leaf tunnel-policy {
type string;
description "Used to override the tunnel policy name " +
"specified in the pseduowire template";
}
uses pw-type-grp;
}
container l2vpn { grouping vpws-only-pw-state-grp {
description "l2vpn"; description "vpws-pw-state-grp";
container common { leaf vccv-ability {
description "common l2pn attributes"; type boolean;
container pw-templates { description "vccv-ability";
description "pw-templates"; }
list pw-template { leaf request-vlanid {
key "name"; type uint16;
description "pw-template"; description "request vlanid";
leaf name { }
type string; leaf vlan-tpid {
description "name"; type string;
} description "vlan tpid";
leaf mtu { }
type uint16; leaf ttl {
description "pseudowire mtu"; type uint8;
} description "time-to-live";
leaf cw-negotiation { }
type cw-negotiation-type; }
default "preferred";
description
"control-word negotiation preference";
}
leaf tunnel-policy {
type string;
description "tunnel policy name";
}
}
}
container redundancy-group-templates {
description "redundancy group templates";
list redundancy-group-template {
key "name";
description "redundancy-group-template";
leaf name {
type string;
description "name";
}
uses redundancy-group-properties-grp;
leaf reroute-delay {
when "../reroute-mode = 'delayed'" {
description "Specify amount of time to " +
"delay reroute only when " +
"delayed route is configured";
}
type uint16;
description "amount of time to delay reroute";
}
leaf revert-delay {
when "../revert = 'true'" {
description "Specify the amount of time to " +
"wait to revert to primary " +
"only if reversion is configured";
}
type uint16;
description "amount ot time to wait to " +
"revert to primary";
}
}
}
}
container l2vpn-instances { /* L2VPN YANG Model */
description "A list of L2VPN instances";
list l2vpn-instance {
key "name type";
description "An L2VPN service instance";
uses l2vpn-common-parameters-grp;
container bgp-auto-discovery {
when "../discovery-type = 'bgp-auto-discovery'" {
description "Check discovery type: " +
"Can only configure BGP discovery if " +
"discovery type is BGP-AD";
}
description "BGP auto-discovery parameters";
uses bgp-auto-discovery-parameters-grp;
}
container bgp-signaling {
when "../signaling-type = 'bgp-signaling'" {
description "Check signaling type: " +
"Can only configure BGP signaling if " +
"signaling type is BGP";
}
description "BGP signaling parameters";
uses bgp-signaling-parameters-grp;
}
list pw {
key "name";
description "A pseudowire";
uses pw-common-parameters-grp;
}
}
}
}
container l2vpn-state { container l2vpn {
config false; description "l2vpn";
description "l2vpn state"; container pw-templates {
description "pw-templates";
list pw-template {
key "name";
description "pw-template";
leaf name {
type string;
description "name";
}
leaf mtu {
type uint16;
description "pseudowire mtu";
}
leaf cw-negotiation {
type cw-negotiation-type;
default "preferred";
description
"control-word negotiation preference";
}
leaf tunnel-policy {
type string;
description "tunnel policy name";
}
}
}
container redundancy-group-templates {
description "redundancy group templates";
list redundancy-group-template {
key "name";
description "redundancy-group-template";
leaf name {
type string;
description "name";
}
uses redundancy-group-properties-grp;
}
}
container l2vpn-instances {
description "A list of L2VPN instances";
list l2vpn-instance {
key "name type";
description "An L2VPN service instance";
uses l2vpn-common-parameters-grp;
container bgp-auto-discovery {
description "BGP auto-discovery parameters";
leaf route-distinguisher {
type rt-types:route-distinguisher;
description "BGP route distinguisher";
}
leaf vpn-id {
type string;
description "VPN ID";
}
uses rt-types:vpn-route-targets;
}
container bgp-signaling {
when "../signaling-type = 'bgp-signaling'" {
description "Check signaling type: " +
"Can only configure BGP signaling if " +
"signaling type is BGP";
}
description "BGP signaling parameters";
uses bgp-signaling-parameters-grp;
}
list pw {
key "name";
description "A pseudowire";
uses pw-common-parameters-grp;
}
list endpoint {
key "name";
description "An endpoint";
leaf name {
type string;
description "endpoint name";
}
uses endpoint-grp {
augment "ac-or-pw-or-redundancy-grp/ac" {
description "Augment for attachment circuit(s) " +
"as an endpoint";
list ac {
key "name";
leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
container l2vpn-instances { }
description "L2VPN instances state"; description "An L2VPN instance's " +
list l2vpn-instance { "attachment circuit list";
description "An L2VPN instance's state"; }
uses l2vpn-common-parameters-grp; }
container bgp-auto-discovery { augment "ac-or-pw-or-redundancy-grp/pw" {
description "BGP auto-discovery parameters"; description "Augment for pseudowire(s) as an endpoint";
uses bgp-auto-discovery-parameters-grp; list pw {
} key "name";
container bgp-signaling { leaf name {
description "BGP signaling parameters"; type leafref {
uses bgp-signaling-parameters-grp; path "../../../pw/name";
} }
} description "name of pseudowire";
}
description "An L2VPN instance's pseudowire list";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "Augment for primary-ac";
leaf primary-ac {
type string;
description "Name of primary attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "Augment for primary-pw";
list primary-pw {
key "name";
leaf name {
type leafref {
path "../../../pw/name";
}
description "name of pseudowire";
}
description "An L2VPN instance's pseudowire list";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "Augment for backup-ac";
leaf backup-ac {
type string;
description "Name of backup attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "Augment for backup-pw";
list backup-pw {
key "name";
leaf name {
type leafref {
path "../../../pw/name";
}
description "Reference an attachment circuit";
}
description "A list of backup pseudowires";
}
}
}
}
}
}
}
} container l2vpn-state {
} config false;
description "l2vpn state";
container l2vpn-instances-state {
description "L2VPN instances state";
list l2vpn-instance {
description "An L2VPN instance's state";
uses l2vpn-common-parameters-grp;
container bgp-auto-discovery {
description "BGP auto-discovery parameters";
leaf route-distinguisher {
type rt-types:route-distinguisher;
description "BGP route distinguisher";
}
leaf vpn-id {
type string;
description "VPN ID";
}
uses rt-types:vpn-route-targets;
}
container bgp-signaling {
description "BGP signaling parameters";
uses bgp-signaling-parameters-grp;
}
list endpoint {
key "name";
description "An endpoint";
leaf name {
type string;
description "endpoint name";
}
uses endpoint-grp {
augment "ac-or-pw-or-redundancy-grp/ac" {
description "Augment of attachment circuit state";
list ac {
uses ac-state-grp;
description "An attachment circuit's " +
"operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "Augment of pseudowire state";
list pw {
uses common-pw-state-grp;
description "A pseudowire's operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "Augment of primary attachment circuit state";
container primary-ac {
uses ac-state-grp;
description "An attachment circuit's " +
"operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "Augment of primary pseudowire state";
list primary-pw {
uses common-pw-state-grp;
description "A pseudowire's operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "Augment of backup attachment circuit state";
container backup-ac {
uses ac-state-grp;
description "An attachment circuit's " +
"operational state";
}
/* augments */ }
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "Augment of backup pseudowire state";
list backup-pw {
uses common-pw-state-grp;
description "A pseudowire's operational state";
}
}
}
}
}
}
}
augment "/l2vpn/l2vpn-instances/l2vpn-instance/pw" { /* augments */
when "../type = 'vpws-l2vpn-instance-type'" {
description "Pseudowire parameters only for VPWS pseudowires";
}
description "Augment for peudowire parameters for " +
"VPWS pseudowires";
leaf vccv-ability {
type boolean;
description "vccvability";
}
leaf request-vlanid {
type uint16;
description "request vlanid";
}
leaf vlan-tpid {
type string;
description "vlan tpid";
}
leaf ttl {
type uint8;
description "time-to-live";
}
}
augment "/l2vpn/l2vpn-instances/l2vpn-instance" { augment "/l2vpn/l2vpn-instances/l2vpn-instance" {
when "type = 'vpws-l2vpn-instance-type'" { when "type = 'vpws-instance-type'" {
description "Endpoints specifically for a VPWS instance"; description "Constraints only for VPWS pseudowires";
} }
description "Augment for endpoints for a VPWS instance"; description "Augment for VPWS instance";
container endpoint-a { container vpws-constraints {
description "endpoint-a"; must "(count(../endpoint) <= 2) and " +
uses endpoint-grp { "(count(../endpoint/pw) <= 1) and " +
description "endpoint configuration"; "(count(../endpoint/ac) <= 1) and " +
augment "ac-or-pw-or-redundancy-grp/ac" { "(count(../endpoint/primary-pw) <= 1) and " +
description "An attachment circuits as the endpoint"; "(count(../endpoint/backup-pw) <= 1) " {
leaf ac { description "A VPWS L2VPN instance has at most 2 endpoints " +
type string; "and each endpoint has at most 1 pseudowire or " +
description "Name of attachment circuit. " + "1 attachment circuit";
"This field is intended to " + }
"reference standardized " + description "VPWS constraints";
"layer-2 definitions."; }
} }
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "A pseudowire as the endpoint";
leaf pw {
type leafref {
path "../../pw/name";
}
description "name of pseudowire";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "The primary attachment circuit of a " +
"redundancy group endpoint";
leaf primary-ac {
type string;
description "Name of primary attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "The primary pseudowires of a " +
"redundancy group endpoint";
leaf primary-pw {
type leafref {
path "../../pw/name";
}
description "name of pseudowire";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "The backup attachment circuit of a " +
"redundancy group endpoint";
leaf backup-ac {
type string;
description "Name of backup attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "The backup pseudowires of a " +
"redundancy group endpoint";
leaf backup-pw {
type leafref {
path "../../pw/name";
}
description "Reference an attachment circuit";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp" {
description "Additional conditional " +
"redunadancy group parameters";
leaf reroute-delay {
when "../reroute-mode = 'delayed'" {
description "Specify amount of time to " +
"delay reroute only when " +
"delayed route is configured";
}
type uint16;
description "amount of time to delay reroute";
}
leaf revert-delay {
when "../revert = 'true'" {
description "Specify the amount of time to " +
"wait to revert to primary " +
"only if reversion is configured";
}
type uint16;
description "amount ot time to wait to " +
"revert to primary";
}
}
}
}
container endpoint-z {
description "endpoint-z";
uses endpoint-grp {
description "endpoint configuration";
augment "ac-or-pw-or-redundancy-grp/ac" {
description "An attachment circuits as the endpoint";
leaf ac {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "A pseudowire as the endpoint";
leaf pw {
type leafref {
path "../../pw/name";
}
description "name of pseudowire";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "The primary attachment circuit of a " +
"redundancy group endpoint";
leaf primary-ac {
type string;
description "Name of primary attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "The primary pseudowires of a " +
"redundancy group endpoint";
leaf primary-pw {
type leafref {
path "../../pw/name";
}
description "name of pseudowire";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "The backup attachment circuit of a " +
"redundancy group endpoint";
leaf backup-ac {
type string;
description "Name of backup attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "The backup pseudowires of a " +
"redundancy group endpoint";
leaf backup-pw {
type leafref {
path "../../pw/name";
}
description "Reference an attachment circuit";
}
} augment "/l2vpn/l2vpn-instances/l2vpn-instance/pw" {
augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { when "../type = 'vpws-instance-type'" {
description "Additional conditional " + description "Pseudowire parameters only for VPWS pseudowires";
"redunadancy group parameters"; }
leaf reroute-delay { description "Augment for peudowire parameters for " +
when "../reroute-mode = 'delayed'" { "VPWS pseudowires";
description "Specify amount of time to " + leaf vccv-ability {
"delay reroute only when " + type boolean;
"delayed route is configured"; description "vccvability";
} }
type uint16; leaf request-vlanid {
description "amount of time to delay reroute"; type uint16;
} description "request vlanid";
leaf revert-delay { }
when "../revert = 'true'" { leaf vlan-tpid {
description "Specify the amount of time to " + type string;
"wait to revert to primary " + description "vlan tpid";
"only if reversion is configured"; }
} leaf ttl {
type uint16; type uint8;
description "amount ot time to wait to " + description "time-to-live";
"revert to primary"; }
} }
}
}
}
}
augment "/l2vpn/l2vpn-instances/l2vpn-instance" { augment "/l2vpn/l2vpn-instances/l2vpn-instance" {
when "type = 'vpls-l2vpn-instance-type'" { when "type = 'vpls-instance-type'" {
description "Parameters specifically for a VPLS instance"; description "Parameters specifically for a VPLS instance";
} }
description "Augment for parameters for a VPLS instance"; description "Augment for parameters for a VPLS instance";
uses pbb-parameters-grp; uses pbb-parameters-grp;
leaf evpn-instance { }
type string;
description "Eventual reference to standard EVPN instance";
}
list endpoint {
key "name";
leaf name {
type string;
description "endpoint name";
}
leaf split-horizon-group {
type string;
description "Identify a split horizon group";
}
uses endpoint-grp {
description "endpoint configuration";
augment "ac-or-pw-or-redundancy-grp/ac" {
description "A list of attachment circuits as the endpoint";
list ac {
key "name";
leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
description "A bridge table instance's " +
"attachment circuit list";
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "A list of pseudowires as the endpoint";
list pw {
key "name";
leaf name {
type leafref {
path "../../../pw/name";
}
description "name of pseudowire";
}
description "A VPLS instance's pseudowire list";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "The primary attachment circuit of a " +
"redundancy group endpoint";
leaf primary-ac {
type string;
description "Name of primary attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "The primary pseudowires of a " +
"redundancy group endpoint";
list primary-pw {
key "name";
leaf name {
type leafref {
path "../../../pw/name";
}
description "name of pseudowire";
}
description "A bridge table instance's pseudowire list";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "The backup attachment circuit of a " +
"redundancy group endpoint";
leaf backup-ac {
type string;
description "Name of backup attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "The backup pseudowires of a " +
"redundancy group endpoint";
list backup-pw {
key "name";
leaf name {
type leafref {
path "../../../pw/name";
}
description "Reference an attachment circuit";
}
leaf precedence {
type uint32;
description "precedence of the pseudowire";
}
description "A list of backup pseudowires";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp" {
description "Additional conditional " +
"redunadancy group parameters";
leaf reroute-delay {
when "../reroute-mode = 'delayed'" {
description "Specify amount of time to " +
"delay reroute only when " +
"delayed route is configured";
}
type uint16;
description "amount of time to delay reroute";
}
leaf revert-delay {
when "../revert = 'true'" {
description "Specify the amount of time to " +
"wait to revert to primary " +
"only if reversion is configured";
}
type uint16;
description "amount ot time to wait to revert to primary";
}
}
}
description "List of endpoints";
}
}
augment "/l2vpn-state/l2vpn-instances/l2vpn-instance" { augment "/l2vpn/l2vpn-instances/l2vpn-instance/endpoint" {
when "type = 'vpws-l2vpn-instance-type'" { when "../type = 'vpls-instance-type'" {
description "Additional perational state specifically for " + description "Endpoint parameter specifically for " +
"a VPWS instance"; "a VPLS instance";
} }
description "Augment for a VPWS instance's " + description "Augment for endpoint parameters for a VPLS instance";
"operational state"; leaf split-horizon-group {
container endpoint-a { type string;
description "endpoint-a"; description "Identify a split horizon group";
uses endpoint-grp { }
description "endpoint configuration"; }
augment "ac-or-pw-or-redundancy-grp/ac" {
description "An attachment circuit as the endpoint";
container ac {
description "The attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "A pseudowire as the endpoint";
container pw {
description "The pseuduowire";
uses vpws-pw-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "The primary attachment circuit of a " +
"redundancy group endpoint";
container primary-ac {
description "The primary attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "The primary pseudowires of a " +
"redundancy group endpoint";
container primary-pw {
description "The primary pseudowire";
uses vpws-pw-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "The backup attachment circuit of a " +
"redundancy group endpoint";
container backup-ac {
description "The backup attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "The backup pseudowires of a " +
"redundancy group endpoint";
container backup-pw {
description "The backup pseudowire";
uses vpws-pw-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp" {
description "Additional conditional " +
"redunadancy group parameters";
leaf reroute-delay {
when "../reroute-mode = 'delayed'" {
description "Specify amount of time to " +
"delay reroute only when " +
"delayed route is configured";
}
type uint16;
description "amount of time to delay reroute";
}
leaf revert-delay {
when "../revert = 'true'" {
description "Specify the amount of time to " +
"wait to revert to primary " +
"only if reversion is configured";
}
type uint16;
description "amount ot time to wait to revert to primary";
}
}
}
}
container endpoint-z {
description "endpoint-z";
uses endpoint-grp {
description "endpoint configuration";
augment "ac-or-pw-or-redundancy-grp/ac" {
description "An attachment circuit as the endpoint";
container ac {
description "The attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "A pseudowire as the endpoint";
container pw {
description "The pseuduowire";
uses vpws-pw-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "The primary attachment circuit of a " +
"redundancy group endpoint";
container primary-ac {
description "The primary attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "The primary pseudowires of a " +
"redundancy group endpoint";
container primary-pw {
description "The primary pseudowire";
uses vpws-pw-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "The backup attachment circuit of a " +
"redundancy group endpoint";
container backup-ac {
description "The backup attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "The backup pseudowires of a " +
"redundancy group endpoint";
container backup-pw {
description "The backup pseudowire";
uses vpws-pw-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp" {
description "Additional conditional " +
"redunadancy group parameters";
leaf reroute-delay {
when "../reroute-mode = 'delayed'" {
description "Specify amount of time to " +
"delay reroute only when " +
"delayed route is configured";
}
type uint16;
description "amount of time to delay reroute";
}
leaf revert-delay {
when "../revert = 'true'" {
description "Specify the amount of time to " +
"wait to revert to primary " +
"only if reversion is configured";
}
type uint16;
description "amount ot time to wait to revert to primary";
}
}
}
}
}
augment "/l2vpn-state/l2vpn-instances/l2vpn-instance" { augment "/l2vpn/l2vpn-instances/l2vpn-instance/endpoint" +
when "type = 'vpls-l2vpn-instance-type'" { "/ac-or-pw-or-redundancy-grp/redundancy-grp" +
description "Additional perational state specifically for " + "/backup/backup-pw/backup-pw" {
"a VPLS instance"; when "../../type = 'vpls-instance-type'" {
} description "Backup pseudowire parameter specifically for " +
description "Augment for a VPLS instance's " + "a VPLS instance";
"operational state"; }
uses pbb-parameters-state-grp; description "Augment for backup pseudowire paramters for " +
leaf evpn-instance-name { "a VPLS instance";
type string; leaf precedence {
description "Name of associated an EVPN instance"; type uint32;
} description "precedence of the pseudowire";
list endpoint { }
leaf name { }
type string;
description "endpoint name";
}
leaf split-horizon-group {
type string;
description "Identify a split horizon group";
}
uses endpoint-grp {
description "endpoint configuration";
augment "ac-or-pw-or-redundancy-grp/ac" {
description "A list of attachment circuits as the endpoint";
list ac {
uses ac-state-grp;
description "The attachment circuits";
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "A list of pseudowires as the endpoint";
list pw {
uses vpls-pw-state-grp;
description "The pseudowires";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "The primary attachment circuit of a " +
"redundancy group endpoint";
container primary-ac {
description "The primary attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "The primary pseudowires of a " +
"redundancy group endpoint";
list primary-pw {
uses vpls-pw-state-grp;
description "The pseudowires";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "The backup attachment circuit of a " +
"redundancy group endpoint";
container backup-ac {
description "The backup attachment circuit";
uses ac-state-grp;
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "The backup pseudowires of a " +
"redundancy group endpoint";
list backup-pw {
uses vpls-pw-state-grp;
leaf precedence {
type uint32;
description "precedence of the pseudowire";
}
description "The backup pseudowires";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp" {
description "Additional conditional " +
"redunadancy group parameters";
leaf reroute-delay {
when "../reroute-mode = 'delayed'" {
description "Specify amount of time to " +
"delay reroute only when " +
"delayed route is configured";
}
type uint16;
description "amount of time to delay reroute";
}
leaf revert-delay {
when "../revert = 'true'" {
description "Specify the amount of time to " +
"wait to revert to primary " +
"only if reversion is configured";
}
type uint16;
description "amount ot time to wait to revert to primary";
}
}
}
description "List of endpoints";
}
}
} augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
<CODE ENDS> "/endpoint/ac-or-pw-or-redundancy-grp/pw/pw" {
when "../../type = 'vpws-instance-type'" {
description "Additional operational state specifically for " +
"a VPWS instance's pseudowire endpoint";
}
description "Augment for a VPWS instance's pseudowire endpoint " +
"operational state";
uses vpws-only-pw-state-grp;
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
"/endpoint/ac-or-pw-or-redundancy-grp/redundancy-grp" +
"/primary/primary-pw/primary-pw" {
when "../../type = 'vpws-instance-type'" {
description "Additional operational state specifically for " +
"a VPWS instance's primary pseudowire endpoint";
}
description "Augment for a VPWS instance's primary pseudowire " +
"endpoint operational state";
uses vpws-only-pw-state-grp;
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
"/endpoint/ac-or-pw-or-redundancy-grp/redundancy-grp" +
"/backup/backup-pw/backup-pw" {
when "../../type = 'vpws-instance-type'" {
description "Additional operational state specifically for " +
"a VPWS instance's backup pseudowire endpoint";
}
description "Augment for a VPWS instance's backup pseudowire " +
"endpoint operational state";
uses vpws-only-pw-state-grp;
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
"/endpoint" {
when "../type = 'vpls-instance-type'" {
description "Endpoint parameter specifically for " +
"a VPLS instance operational state";
}
description "Augment for endpoint parameters for a VPLS " +
"instance operational state";
leaf split-horizon-group {
type string;
description "Identify a split horizon group";
}
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" {
when "type = 'vpls-instance-type'" {
description "Additional operational state specifically for " +
"a VPLS instance";
}
description "Augment for a VPLS instance's " +
"operational state";
uses pbb-parameters-state-grp;
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
"/endpoint/ac-or-pw-or-redundancy-grp/redundancy-grp" +
"/backup/backup-pw/backup-pw" {
when "../../type = 'vpls-instance-type'" {
description "Additional operational state specifically for " +
"a VPLS instance's backup pseudowire endpoint";
}
description "Augment for a VPLS instance's backup pseudowire " +
"endpoint operational state";
leaf precedence {
type uint32;
description "precedence of the pseudowire";
}
}
}
(CODE ENDS)
Figure 3 Figure 3
5. Security Considerations 5. Security Considerations
The configuration, state, action and notification data defined in The configuration, state, action and notification data defined in
this document are designed to be accessed via the NETCONF protocol this document are designed to be accessed via the NETCONF protocol
[RFC6241]. The lowest NETCONF layer is the secure transport layer [RFC6241]. The lowest NETCONF layer is the secure transport layer
and the mandatory-to-implement secure transport is SSH [RFC6242]. and the mandatory-to-implement secure transport is SSH [RFC6242].
The NETCONF access control model [RFC6536] provides means to restrict The NETCONF access control model [RFC6536] provides means to restrict
skipping to change at page 52, line 48 skipping to change at page 42, line 27
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.
Reshad Rahman Cisco Systems, Inc. Email: rrahman@cisco.com Kamran Reshad Rahman
Raza Cisco Systems, Inc. Email: skraza@cisco.com Tapraj Singh Cisco Cisco Systems, Inc.
Systems, Inc. Email: tsingh@cisco.com Zhenbin Li Huawei Technologies Email: rrahman@cisco.com
Email: lizhenbin@huawei.com Zhuang Shunwan Huawei Technologies Email:
Zhuangshunwan@huawei.com Wang Haibo Huawei Technologies Email:
rainsword.wang@huawei.com Sajjad Ahmed Ericsson Email: Kamran Raza
sajjad.ahmed@ericsson.com Matthew Bocci Nokia Email: Cisco Systems, Inc.
matthew.bocci@nokia.com Jonathan Hardwick Metaswitch Email: Email: skraza@cisco.com
jonathan.hardwick@metaswitch.com Santosh Esale Juniper Networks
Email: sesale@juniper.net Kishore Tiruveedhula Juniper Networks Giles Heron
Email: kishoret@juniper.net Nick Delregno Verizon Email: Cisco Systems, Inc.
nick.deregno@verizon.com Luay Jalil Verizon Email: Email: giheron@cisco.com
luay.jalil@verizon.com Maria Joecylyn Verizon Email:
joecylyn.malit@verizon.com Tapraj Singh
Cisco Systems, Inc.
Email: tsingh@cisco.com
Zhenbin Li
Huawei Technologies
Email: lizhenbin@huawei.com
Zhuang Shunwan
Huawei Technologies
Email: Zhuangshunwan@huawei.com
Wang Haibo
Huawei Technologies
Email: rainsword.wang@huawei.com
Sajjad Ahmed
Ericsson
Email: sajjad.ahmed@ericsson.com
Matthew Bocci
Nokia
Email: matthew.bocci@nokia.com
Jorge Rabadan
Nokia
Email: jorge.rabadan@nokia.com
Jonathan Hardwick
Metaswitch
Email: jonathan.hardwick@metaswitch.com
Santosh Esale
Juniper Networks
Email: sesale@juniper.net
Nick Delregno
Verizon
Email: nick.deregno@verizon.com
Luay Jalil
Verizon
Email: luay.jalil@verizon.com
Maria Joecylyn
Verizon
Email: joecylyn.malit@verizon.com
Figure 4
Authors' Addresses Authors' Addresses
Himanshu Shah Himanshu Shah
Ciena Corporation Ciena Corporation
Email: hshah@ciena.com Email: hshah@ciena.com
Patrice Brissette Patrice Brissette
Cisco Systems, Inc. Cisco Systems, Inc.
skipping to change at page 53, line 26 skipping to change at page 44, line 4
Himanshu Shah Himanshu Shah
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
Ericsson Jabil
Email: ichen@kuatrotech.com Email: ing-wher_chen@jabil.com
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
Juniper Networks
Email: kishoret@juniper.net
 End of changes. 130 change blocks. 
1913 lines changed or deleted 1412 lines changed or added

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