draft-ietf-bess-l2vpn-yang-00.txt   draft-ietf-bess-l2vpn-yang-01.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: December 26, 2016 Cisco Systems, Inc. Expires: May 2, 2017 Cisco Systems, Inc.
I. Chen, Ed. I. Chen, Ed.
Ericsson Ericsson
I. Hussain, Ed. I. Hussain, Ed.
Infinera Corporation Infinera Corporation
B. Wen, Ed. B. Wen, Ed.
Comcast Comcast
June 24, 2016 October 29, 2016
YANG Data Model for MPLS-based L2VPN YANG Data Model for MPLS-based L2VPN
draft-ietf-bess-l2vpn-yang-00.txt draft-ietf-bess-l2vpn-yang-01.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 43
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 December 26, 2016. This Internet-Draft will expire on May 2, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 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
skipping to change at page 2, line 27 skipping to change at page 2, line 27
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Specification of Requirements . . . . . . . . . . . . . . . . 3 2. Specification of Requirements . . . . . . . . . . . . . . . . 3
3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 3 3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 3
3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 7 3.2. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 7
3.2.1. ac-templates . . . . . . . . . . . . . . . . . . . . 7 3.2.1. ac-templates . . . . . . . . . . . . . . . . . . . . 7
3.2.2. pw-templates . . . . . . . . . . . . . . . . . . . . 7 3.2.2. pw-templates . . . . . . . . . . . . . . . . . . . . 7
3.3. Point-to-Point and Multipoint service . . . . . . . . . . 7 3.3. Point-to-Point and Multipoint service . . . . . . . . . . 7
3.3.1. ac list . . . . . . . . . . . . . . . . . . . . . . . 7 3.3.1. ac list . . . . . . . . . . . . . . . . . . . . . . . 7
3.3.2. pw list . . . . . . . . . . . . . . . . . . . . . . . 7 3.3.2. pw list . . . . . . . . . . . . . . . . . . . . . . . 7
3.3.3. redundancy-grp choice . . . . . . . . . . . . . . . . 8 3.3.3. redundancy-grp choice . . . . . . . . . . . . . . . . 7
3.3.4. endpoint container . . . . . . . . . . . . . . . . . 8 3.3.4. endpoint container . . . . . . . . . . . . . . . . . 8
3.3.5. vpws-instances and bridge-table-instances container . 8 3.3.5. point-to-point or multipoint service . . . . . . . . 8
3.4. Operational State . . . . . . . . . . . . . . . . . . . . 9 3.4. Operational State . . . . . . . . . . . . . . . . . . . . 8
3.5. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 9 3.5. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 8
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 19 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 17
5. Security Considerations . . . . . . . . . . . . . . . . . . . 45 5. Security Considerations . . . . . . . . . . . . . . . . . . . 49
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 45 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 45 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 49
8.1. Normative References . . . . . . . . . . . . . . . . . . 46 8.1. Normative References . . . . . . . . . . . . . . . . . . 49
8.2. Informative References . . . . . . . . . . . . . . . . . 46 8.2. Informative References . . . . . . . . . . . . . . . . . 49
Appendix A. Example Configuration . . . . . . . . . . . . . . . 49 Appendix A. Example Configuration . . . . . . . . . . . . . . . 52
Appendix B. Contributors . . . . . . . . . . . . . . . . . . . 49 Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 52
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53
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 49 skipping to change at page 3, line 49
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
One single top level container, l2vpn, is defined as a parent for In this version of the document, one single container, l2vpn, is
three different second level containers that are vpws-instances, defined. Within the l2vpn container, endpoint-a, endpoint-z and a
bridge-table-instances, and common building blocks of redundancy-grp list of endpoints are defined. For the point-to-point VPWS
templates and pseudowire-templates. The operations state object configuration, endpoint-a and endpoint-z are used. For the
holds read-only information of objects that has either been multipoint service, endpoint list is used. Each endpoint contains
configured or dynamically created. the definitions for attachment circuit, pseudowire and a redundancy
group. The yang data model for l2vpn in this document differs
significantly from the previous version which used explicit
containers such as VPLS and VPWS within l2vpn, which in turn
contained the definition of relevent endpoints. For example, VPWS
used endpoint-a and endpoint-z while VPLS used the bridge table
containing a list of endpoints.
The l2vpn container also includes definition of common building
blocks for redundancy-grp templates and pseudowire-templates. 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 5, line 49 skipping to change at page 6, line 11
The following is the high level view of the L2VPN data model. The following is the high level view of the L2VPN data model.
template-ref PW // PW template-ref PW // PW
template template
attributes attributes
template-ref Redundancy-Group // redundancy-group template-ref Redundancy-Group // redundancy-group
template template
attributes attributes
bridge-table-instance name // container l2vpn-instances // containter
common attributes
PBB-parameters // container common attributes
pbb specific attributes
BGP-parameters // container BGP-parameters // container
common attributes common attributes
auto-discovery attributes auto-discovery attributes
signaling attributes signaling attributes
evpn-instance // reference 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
// List of endpoints, where each member endpoint container is - endpoint-A // container
PW // reference
redundancy-grp // container redundancy-grp // container
AC // eventual reference to standard AC AC // eventual reference to standard AC
PW // reference PW // reference
vpws-instance name // container endpoint-Z // container
common attributes
BGP-parameters // container
common attributes
auto-discovery attributes
signaling attributes
// list of PWs being used
PW // container
template-ref PW
attribute-override
pw type
static-or-ldp
bgp-pw
bgp-ad-pw
// ONLY 2 endpoints!!!
endpoint-A // container
redundancy-grp // container redundancy-grp // container
AC // eventual reference to standard AC AC // eventual reference to standard AC
PW // reference PW // reference
endpoint-Z // container PBB-parameters // container
pbb specific attributes
// List of endpoints, where each member endpoint container is -
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. L2VPN Common
skipping to change at page 7, line 36 skipping to change at page 7, line 27
3.3. Point-to-Point and Multipoint service 3.3. Point-to-Point and Multipoint service
3.3.1. ac list 3.3.1. ac list
AC resides within endpoint container as member of ac-or-pw-or- AC resides within endpoint container as member of ac-or-pw-or-
redundandancy-grp. redundandancy-grp.
3.3.2. pw list 3.3.2. pw list
Each VPWS and Bridge-Table-Instance defines a list of PWs which are Each endpoint instance defines a list of PWs which are participating
participating members of the given service instance. Each entry of members of the given service instance. Each entry of the PW consists
the PW consists of one pw-template with pre-defined attributes and of one pw-template with pre-defined attributes and values, but also
values, but also defines attributes that override those defined in defines attributes that override those defined in referenced pw-
referenced pw-template. template.
No restrictions are placed on type of signaling (i.e. LDP or BGP) No restrictions are placed on type of signaling (i.e. LDP or BGP)
used for a given PW. It is entirely possible to define two PWs, one used for a given PW. It is entirely possible to define two PWs, one
signaled by LDP and other by BGP. signaled by LDP and other by BGP.
The VPLS specific attribute(s) are present in the definition of the The VPLS specific attribute(s) are present in the definition of the
PW that are member of VPLS instance only and not applicable to VPWS PW that are member of VPLS instance only and not applicable to VPWS
service. service.
3.3.3. redundancy-grp choice 3.3.3. redundancy-grp choice
skipping to change at page 8, line 28 skipping to change at page 8, line 15
3.3.4. endpoint container 3.3.4. endpoint container
The endpoint container in general holds AC, PW or redundancy-grp The endpoint container in general holds AC, PW or redundancy-grp
references. The core aspect of endpoint container is its flexible references. The core aspect of endpoint container is its flexible
personality based on what user decides to include in it. It is personality based on what user decides to include in it. It is
future-proofed with possible extensions that can be included in the future-proofed with possible extensions that can be included in the
endpoint container such as Integrated Route Bridging (IRB), PW endpoint container such as Integrated Route Bridging (IRB), PW
Headend, Virtual Switch Instance, etc. Headend, Virtual Switch Instance, etc.
The endpoint container for the VPLS service holds references to a 3.3.5. point-to-point or multipoint service
list of ACs, a list of PWs or a redundancy group that contains a list
of ACs and/or a list of PWs. This differs from the VPWS instance
where an endpoint contains exactly one member; AC or PW or redundancy
group and not a list.
3.3.5. vpws-instances and bridge-table-instances container
The vpws-instance container contains a list of vpws-instances. Each The point-to-point service as defined for VPWS is represented by
entry of the vpws-instance represents a layer-2 cross-connection of endpoint-a and endpoint-z container that is representation of a layer
two endpoints. This model defines three possible types of endpoints, 2 cross-connect of two endpoints.
ac, pw, and redundancy-grp, and allows a vpws-instance to cross-
connect any one type of endpoint to all other types of endpoint.
The bridge-table-instances container contains a list of bridge-table- The multipoint service is represented by a list of endpoints. Each
instance. Each entry of the bridge-table-instance contains a list of endpoint container may contain a list of ACs or PWs as well as a
endpoints that are member of the broadcast/bridge domain. The redundancy group. The endpoint has split-horizon attribute defined
bridge-table-instance endpoints introduces an additional forwarding and could be applicable to a list of PWs that are member of a given
characteristics to a list of PWs and/or ACs. This split-horizon endpoint.
forwarding behavior is typical in bridge-table instance.
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.4. 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.5. Yang tree
module: ietf-l2vpn module: ietf-l2vpn
+--rw l2vpn
| +--rw common +--rw l2vpn
| | +--rw pw-templates | +--rw common
| | | +--rw pw-template* [name] | | +--rw pw-templates
| | | +--rw name string | | | +--rw pw-template* [name]
| | | +--rw mtu? uint16 | | | +--rw name string
| | | +--rw cw-negotiation? cw-negotiation-type | | | +--rw mtu? uint16
| | | +--rw tunnel-policy? string | | | +--rw cw-negotiation? cw-negotiation-type
| | +--rw redundancy-group-templates | | | +--rw tunnel-policy? string
| | +--rw redundancy-group-template* [name] | | +--rw redundancy-group-templates
| | +--rw name string | | +--rw redundancy-group-template* [name]
| | +--rw protection-mode? enumeration | | +--rw name string
| | +--rw reroute-mode? enumeration | | +--rw protection-mode? enumeration
| | +--rw reroute-delay? uint16 | | +--rw reroute-mode? enumeration
| | +--rw dual-receive? boolean | | +--rw dual-receive? boolean
| | +--rw revert? boolean | | +--rw revert? boolean
| | +--rw revert-delay? uint16 | | +--rw reroute-delay? uint16
| +--rw bridge-table-instances | | +--rw revert-delay? uint16
| | +--rw bridge-table-instance* [name] | +--rw l2vpn-instances
| | +--rw name string | +--rw l2vpn-instance* [name type]
| | +--rw mtu? uint16 | +--rw name string
| | +--rw mac-aging-timer? uint32 | +--rw type identityref
| | +--rw pbb-parameters | +--rw mtu? uint16
| | | +--rw (component-type)? | +--rw mac-aging-timer? uint32
| | | +--:(i-component) | +--rw service-type? l2vpn-service-type
| | | | +--rw i-sid? i-sid-type | +--rw discovery-type? l2vpn-discovery-type
| | | | +--rw backbone-src-mac? yang:mac-address | +--rw signaling-type l2vpn-signaling-type
| | | +--:(b-component) | +--rw bgp-auto-discovery
| | | +--rw bind-b-component? bridge-table-instance-ref | | +--rw route-distinguisher? string
| | +--rw bgp-parameters | | +--rw vpn-target* [rt-value]
| | | +--rw common | | | +--rw rt-value string
| | | | +--rw route-distinguisher? string | | | +--rw rt-type bgp-rt-type
| | | | +--rw vpn-target* [rt-value] | | +--rw vpn-id? string
| | | | +--rw rt-value string | +--rw bgp-signaling
| | | | +--rw rt-type bgp-rt-type | | +--rw site-id? uint16
| | | +--rw discovery | | +--rw site-range? uint16
| | | | +--rw vpn-id? string | +--rw pw* [name]
| | | +--rw signaling | | +--rw name string
| | | +--rw site-id? uint16 | | +--rw template? pw-template-ref
| | | +--rw site-range? uint16 | | +--rw mtu? uint16
| | +--rw evpn-instance? string | | +--rw mac-withdraw? boolean
| | +--rw pw* [name] | | +--rw cw-negotiation? cw-negotiation-type
| | | +--rw name string | | +--rw tunnel-policy? string
| | | +--rw template? pw-template-ref | | +--rw (pw-type)?
| | | +--rw mtu? uint16 | | | +--:(ldp-or-static-pw)
| | | +--rw mac-withdraw? boolean | | | | +--rw peer-ip? inet:ip-address
| | | +--rw cw-negotiation? cw-negotiation-type | | | | +--rw pw-id? uint32
| | | +--rw discovery-type? l2vpn-discovery-type | | | | +--rw icb? boolean
| | | +--rw signaling-type? l2vpn-signaling-type | | | | +--rw transmit-label? mpls:mpls-label
| | | +--rw peer-ip? inet:ip-address | | | | +--rw receive-label? mpls:mpls-label
| | | +--rw pw-id? uint32 | | | +--:(bgp-pw)
| | | +--rw transmit-label? mpls:mpls-label | | | | +--rw remote-pe-id? inet:ip-address
| | | +--rw receive-label? mpls:mpls-label | | | +--:(bgp-ad-pw)
| | | +--rw tunnel-policy? string | | | +--rw remote-ve-id? uint16
| | +--rw endpoint* [name] | | +--rw vccv-ability? boolean
| | +--rw name string | | +--rw request-vlanid? uint16
| | +--rw split-horizon-group? string | | +--rw vlan-tpid? string
| | +--rw (ac-or-pw-or-redundancy-grp)? | | +--rw ttl? uint8
| | +--:(ac) | +--rw endpoint-a
| | | +--rw ac* [name] | | +--rw (ac-or-pw-or-redundancy-grp)?
| | | +--rw name string | | +--:(ac)
| | +--:(pw) | | | +--rw ac? string
| | | +--rw pw* [name] | | +--:(pw)
| | | +--rw name -> ../../../pw/name | | | +--rw pw? -> ../../pw/name
| | +--:(redundancy-grp) | | +--:(redundancy-grp)
| | +--rw (primary) | | +--rw (primary)
| | | +--:(primary-pw) | | | +--:(primary-ac)
| | | | +--rw primary-pw* [name] | | | | +--rw primary-ac? string
| | | | +--rw name -> ../../../pw/name | | | +--:(primary-pw)
| | | +--:(primary-ac) | | | +--rw primary-pw? -> ../../pw/name
| | | +--rw primary-ac? string | | +--rw (backup)?
| | +--rw (backup)? | | | +--:(backup-ac)
| | | +--:(backup-pw) | | | | +--rw backup-ac? string
| | | | +--rw backup-pw* [name] | | | +--:(backup-pw)
| | | | +--rw name -> ../../../pw/name | | | +--rw backup-pw? -> ../../pw/name
| | | | +--rw precedence? uint32 | | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| | | +--:(backup-ac) | | +--rw protection-mode? enumeration
| | | +--rw backup-ac? string | | +--rw reroute-mode? enumeration
| | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name | | +--rw dual-receive? boolean
| | +--rw protection-mode? enumeration | | +--rw revert? boolean
| | +--rw reroute-mode? enumeration | | +--rw reroute-delay? uint16
| | +--rw reroute-delay? uint16 | | +--rw revert-delay? uint16
| | +--rw dual-receive? boolean | +--rw endpoint-z
| | +--rw revert? boolean | | +--rw (ac-or-pw-or-redundancy-grp)?
| | +--rw revert-delay? uint16 | | +--:(ac)
| +--rw vpws-instances | | | +--rw ac? string
| +--rw vpws-instance* [name] | | +--:(pw)
| +--rw name string | | | +--rw pw? -> ../../pw/name
| +--rw description? string | | +--:(redundancy-grp)
| +--rw mtu? uint16 | | +--rw (primary)
| +--rw mac-aging-timer? uint32 | | | +--:(primary-ac)
| +--rw service-type? l2vpn-service-type | | | | +--rw primary-ac? string
| +--rw discovery-type? l2vpn-discovery-type | | | +--:(primary-pw)
| +--rw signaling-type l2vpn-signaling-type | | | +--rw primary-pw? -> ../../pw/name
| +--rw bgp-parameters | | +--rw (backup)?
| | +--rw common | | | +--:(backup-ac)
| | | +--rw route-distinguisher? string | | | | +--rw backup-ac? string
| | | +--rw vpn-target* [rt-value] | | | +--:(backup-pw)
| | | +--rw rt-value string | | | +--rw backup-pw? -> ../../pw/name
| | | +--rw rt-type bgp-rt-type | | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| | +--rw discovery | | +--rw protection-mode? enumeration
| | | +--rw vpn-id? string | | +--rw reroute-mode? enumeration
| | +--rw signaling | | +--rw dual-receive? boolean
| | +--rw site-id? uint16 | | +--rw revert? boolean
| | +--rw site-range? uint16 | | +--rw reroute-delay? uint16
| +--rw pw* [name] | | +--rw revert-delay? uint16
| | +--rw name string | +--rw pbb-parameters
| | +--rw template? pw-template-ref | | +--rw (component-type)?
| | +--rw mtu? uint16 | | +--:(i-component)
| | +--rw mac-withdraw? boolean | | | +--rw i-sid? i-sid-type
| | +--rw cw-negotiation? cw-negotiation-type | | | +--rw backbone-src-mac? yang:mac-address
| | +--rw vccv-ability? boolean | | +--:(b-component)
| | +--rw tunnel-policy? string | | +--rw bind-b-component-name? l2vpn-instance-name-ref
| | +--rw request-vlanid? uint16 | +--rw evpn-instance? string
| | +--rw vlan-tpid? string | +--rw endpoint* [name]
| | +--rw ttl? uint8 | +--rw name string
| | +--rw (pw-type)? | +--rw split-horizon-group? string
| | +--:(ldp-or-static-pw) | +--rw (ac-or-pw-or-redundancy-grp)?
| | | +--rw peer-ip? inet:ip-address | +--:(ac)
| | | +--rw pw-id? uint32 | | +--rw ac* [name]
| | | +--rw icb? boolean | | +--rw name string
| | | +--rw transmit-label? mpls:mpls-label | +--:(pw)
| | | +--rw receive-label? mpls:mpls-label | | +--rw pw* [name]
| | +--:(bgp-pw) | | +--rw name -> ../../../pw/name
| | | +--rw remote-pe-id? inet:ip-address | +--:(redundancy-grp)
| | +--:(bgp-ad-pw) | +--rw (primary)
| | +--rw remote-ve-id? uint16 | | +--:(primary-ac)
| +--rw endpoint-a | | | +--rw primary-ac? string
| | +--rw (ac-or-pw-or-redundancy-grp)? | | +--:(primary-pw)
| | +--:(ac) | | +--rw primary-pw* [name]
| | | +--rw ac? string | | +--rw name -> ../../../pw/name
| | +--:(pw) | +--rw (backup)?
| | | +--rw pw? -> ../../pw/name | | +--:(backup-ac)
| | +--:(redundancy-grp) | | | +--rw backup-ac? string
| | +--rw (primary) | | +--:(backup-pw)
| | | +--:(primary-pw) | | +--rw backup-pw* [name]
| | | | +--rw primary-pw? -> ../../pw/name | | +--rw name -> ../../../pw/name
| | | +--:(primary-ac) | | +--rw precedence? uint32
| | | +--rw primary-ac? string | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| | +--rw (backup) | +--rw protection-mode? enumeration
| | | +--:(backup-pw) | +--rw reroute-mode? enumeration
| | | | +--rw backup-pw? -> ../../pw/name | +--rw dual-receive? boolean
| | | +--:(backup-ac) | +--rw revert? boolean
| | | +--rw backup-ac? string | +--rw reroute-delay? uint16
| | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name | +--rw revert-delay? uint16
| | +--rw protection-mode? enumeration +--ro l2vpn-state
| | +--rw reroute-mode? enumeration +--ro l2vpn-instances
| | +--rw reroute-delay? uint16 +--ro l2vpn-instance*
| | +--rw dual-receive? boolean +--ro name? string
| | +--rw revert? boolean +--ro type? identityref
| | +--rw revert-delay? uint16 +--ro mtu? uint16
| +--rw endpoint-z +--ro mac-aging-timer? uint32
| +--rw (ac-or-pw-or-redundancy-grp)? +--ro service-type? l2vpn-service-type
| +--:(ac) +--ro discovery-type? l2vpn-discovery-type
| | +--rw ac? string +--ro signaling-type l2vpn-signaling-type
| +--:(pw) +--ro bgp-auto-discovery
| | +--rw pw? -> ../../pw/name | +--ro route-distinguisher? string
| +--:(redundancy-grp) | +--ro vpn-target* [rt-value]
| +--rw (primary) | | +--ro rt-value string
| | +--:(primary-pw) | | +--ro rt-type bgp-rt-type
| | | +--rw primary-pw? -> ../../pw/name | +--ro vpn-id? string
| | +--:(primary-ac) +--ro bgp-signaling
| | +--rw primary-ac? string | +--ro site-id? uint16
| +--rw (backup) | +--ro site-range? uint16
| | +--:(backup-pw) +--ro endpoint-a
| | | +--rw backup-pw? -> ../../pw/name | +--ro (ac-or-pw-or-redundancy-grp)?
| | +--:(backup-ac) | +--:(ac)
| | +--rw backup-ac? string | | +--ro ac
| +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name | | +--ro name? string
| +--rw protection-mode? enumeration | | +--ro state? operational-state-type
| +--rw reroute-mode? enumeration | +--:(pw)
| +--rw reroute-delay? uint16 | | +--ro pw
| +--rw dual-receive? boolean | | +--ro name? string
| +--rw revert? boolean | | +--ro state? operational-state-type
| +--rw revert-delay? uint16 | | +--ro mtu? uint16
+--ro l2vpn-state | | +--ro mac-withdraw? boolean
+--ro bridge-table-instances-state | | +--ro cw-negotiation? cw-negotiation-type
| +--ro bridge-table-instance-state* [name] | | +--ro vccv-ability? boolean
| +--ro name string | | +--ro tunnel-policy? string
| +--ro mtu? uint16 | | +--ro request-vlanid? uint16
| +--ro mac-aging-timer? uint32 | | +--ro vlan-tpid? string
| +--ro pbb-parameters | | +--ro ttl? uint8
| | +--ro (component-type)? | | +--ro (pw-type)?
| | +--:(i-component) | | +--:(ldp-or-static-pw)
| | | +--ro i-tag? uint32 | | | +--ro peer-ip? inet:ip-address
| | | +--ro backbone-src-mac? yang:mac-address | | | +--ro pw-id? uint32
| | +--:(b-component) | | | +--ro icb? boolean
| | +--ro bind-b-component? string | | | +--ro transmit-label? mpls:mpls-label
| +--ro bgp-parameters | | | +--ro receive-label? mpls:mpls-label
| | +--ro common | | +--:(bgp-pw)
| | | +--ro route-distinguisher? string | | | +--ro remote-pe-id? inet:ip-address
| | | +--ro vpn-target* [rt-value] | | +--:(bgp-ad-pw)
| | | +--ro rt-value string | | +--ro remote-ve-id? uint16
| | | +--ro rt-type bgp-rt-type | +--:(redundancy-grp)
| | +--ro discovery | +--ro (primary)
| | | +--ro vpn-id? string | | +--:(primary-ac)
| | +--ro signaling | | | +--ro primary-ac
| | +--ro site-id? uint16 | | | +--ro name? string
| | +--ro site-range? uint16 | | | +--ro state? operational-state-type
| +--ro evpn-instance-name? string | | +--:(primary-pw)
| +--ro endpoint* [name] | | +--ro primary-pw
| +--ro name string | | +--ro name? string
| +--ro split-horizon-group? string | | +--ro state? operational-state-type
| +--ro (ac-or-pw-or-redundancy-grp)? | | +--ro mtu? uint16
| +--:(ac) | | +--ro mac-withdraw? boolean
| | +--ro ac* [name] | | +--ro cw-negotiation? cw-negotiation-type
| | +--ro name string | | +--ro vccv-ability? boolean
| | +--ro state? operational-state-type | | +--ro tunnel-policy? string
| +--:(pw) | | +--ro request-vlanid? uint16
| | +--ro pw* [name] | | +--ro vlan-tpid? string
| | +--ro name string | | +--ro ttl? uint8
| | +--ro state? operational-state-type | | +--ro (pw-type)?
| | +--ro mtu? uint16 | | +--:(ldp-or-static-pw)
| | +--ro mac-withdraw? boolean | | | +--ro peer-ip? inet:ip-address
| | +--ro cw-negotiation? cw-negotiation-type | | | +--ro pw-id? uint32
| | +--ro discovery-type? l2vpn-discovery-type | | | +--ro icb? boolean
| | +--ro signaling-type? l2vpn-signaling-type | | | +--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 transmit-label? mpls:mpls-label | | | +--ro remote-pe-id? inet:ip-address
| | +--ro receive-label? mpls:mpls-label | | +--:(bgp-ad-pw)
| | +--ro tunnel-policy? string | | +--ro remote-ve-id? uint16
| +--:(redundancy-grp) | +--ro (backup)?
| +--ro (primary) | | +--:(backup-ac)
| | +--:(primary-pw) | | | +--ro backup-ac
| | | +--ro primary-pw* [name] | | | +--ro name? string
| | | +--ro name string | | | +--ro state? operational-state-type
| | | +--ro state? operational-state-type | | +--:(backup-pw)
| | | +--ro mtu? uint16 | | +--ro backup-pw
| | | +--ro mac-withdraw? boolean | | +--ro name? string
| | | +--ro cw-negotiation? cw-negotiation-type | | +--ro state? operational-state-type
| | | +--ro discovery-type? l2vpn-discovery-type | | +--ro mtu? uint16
| | | +--ro signaling-type? l2vpn-signaling-type | | +--ro mac-withdraw? boolean
| | | +--ro peer-ip? inet:ip-address | | +--ro cw-negotiation? cw-negotiation-type
| | | +--ro pw-id? uint32 | | +--ro vccv-ability? boolean
| | | +--ro transmit-label? mpls:mpls-label | | +--ro tunnel-policy? string
| | | +--ro receive-label? mpls:mpls-label | | +--ro request-vlanid? uint16
| | | +--ro tunnel-policy? string | | +--ro vlan-tpid? string
| | +--:(primary-ac) | | +--ro ttl? uint8
| | +--ro primary-ac | | +--ro (pw-type)?
| | +--ro name? string | | +--:(ldp-or-static-pw)
| | +--ro state? operational-state-type | | | +--ro peer-ip? inet:ip-address
| +--ro (backup)? | | | +--ro pw-id? uint32
| | +--:(backup-pw) | | | +--ro icb? boolean
| | | +--ro backup-pw* [name] | | | +--ro transmit-label? mpls:mpls-label
| | | +--ro name string | | | +--ro receive-label? mpls:mpls-label
| | | +--ro state? operational-state-type | | +--:(bgp-pw)
| | | +--ro mtu? uint16 | | | +--ro remote-pe-id? inet:ip-address
| | | +--ro mac-withdraw? boolean | | +--:(bgp-ad-pw)
| | | +--ro cw-negotiation? cw-negotiation-type | | +--ro remote-ve-id? uint16
| | | +--ro discovery-type? l2vpn-discovery-type | +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| | | +--ro signaling-type? l2vpn-signaling-type | +--ro protection-mode? enumeration
| | | +--ro peer-ip? inet:ip-address | +--ro reroute-mode? enumeration
| | | +--ro pw-id? uint32 | +--ro dual-receive? boolean
| | | +--ro transmit-label? mpls:mpls-label | +--ro revert? boolean
| | | +--ro receive-label? mpls:mpls-label | +--ro reroute-delay? uint16
| | | +--ro tunnel-policy? string | +--ro revert-delay? uint16
| | | +--ro precedence? uint32 +--ro endpoint-z
| | +--:(backup-ac) | +--ro (ac-or-pw-or-redundancy-grp)?
| | +--ro backup-ac | +--:(ac)
| | +--ro name? string | | +--ro ac
| | +--ro state? operational-state-type | | +--ro name? string
| +--ro protection-mode? enumeration | | +--ro state? operational-state-type
| +--ro reroute-mode? enumeration | +--:(pw)
| +--ro reroute-delay? uint16 | | +--ro pw
| +--ro dual-receive? boolean | | +--ro name? string
| +--ro revert? boolean | | +--ro state? operational-state-type
| +--ro revert-delay? uint16 | | +--ro mtu? uint16
+--ro vpws-instances-state | | +--ro mac-withdraw? boolean
+--ro vpws-instance-state* [name] | | +--ro cw-negotiation? cw-negotiation-type
+--ro name string | | +--ro vccv-ability? boolean
+--ro mtu? uint16 | | +--ro tunnel-policy? string
+--ro mac-aging-timer? uint32 | | +--ro request-vlanid? uint16
+--ro service-type? l2vpn-service-type | | +--ro vlan-tpid? string
+--ro discovery-type? l2vpn-discovery-type | | +--ro ttl? uint8
+--ro signaling-type l2vpn-signaling-type | | +--ro (pw-type)?
+--ro bgp-parameters | | +--:(ldp-or-static-pw)
| +--ro common | | | +--ro peer-ip? inet:ip-address
| | +--ro route-distinguisher? string | | | +--ro pw-id? uint32
| | +--ro vpn-target* [rt-value] | | | +--ro icb? boolean
| | +--ro rt-value string | | | +--ro transmit-label? mpls:mpls-label
| | +--ro rt-type bgp-rt-type | | | +--ro receive-label? mpls:mpls-label
| +--ro discovery | | +--:(bgp-pw)
| | +--ro vpn-id? string | | | +--ro remote-pe-id? inet:ip-address
| +--ro signaling | | +--:(bgp-ad-pw)
| +--ro site-id? uint16 | | +--ro remote-ve-id? uint16
| +--ro site-range? uint16 | +--:(redundancy-grp)
+--ro endpoint-a | +--ro (primary)
| +--ro (ac-or-pw-or-redundancy-grp)? | | +--:(primary-ac)
| +--:(ac) | | | +--ro primary-ac
| | +--ro ac | | | +--ro name? string
| | +--ro name? string | | | +--ro state? operational-state-type
| | +--ro state? operational-state-type | | +--:(primary-pw)
| +--:(pw) | | +--ro primary-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 vccv-ability? boolean | | +--ro tunnel-policy? string
| | +--ro tunnel-policy? string | | +--ro request-vlanid? uint16
| | +--ro request-vlanid? uint16 | | +--ro vlan-tpid? string
| | +--ro vlan-tpid? string | | +--ro ttl? uint8
| | +--ro ttl? uint8 | | +--ro (pw-type)?
| | +--ro (pw-type)? | | +--:(ldp-or-static-pw)
| | +--:(ldp-or-static-pw) | | | +--ro peer-ip? inet:ip-address
| | | +--ro peer-ip? inet:ip-address | | | +--ro pw-id? uint32
| | | +--ro pw-id? uint32 | | | +--ro icb? boolean
| | | +--ro icb? boolean | | | +--ro transmit-label? mpls:mpls-label
| | | +--ro transmit-label? mpls:mpls-label | | | +--ro receive-label? mpls:mpls-label
| | | +--ro receive-label? mpls:mpls-label | | +--:(bgp-pw)
| | +--:(bgp-pw) | | | +--ro remote-pe-id? inet:ip-address
| | | +--ro remote-pe-id? inet:ip-address | | +--:(bgp-ad-pw)
| | +--:(bgp-ad-pw) | | +--ro remote-ve-id? uint16
| | +--ro remote-ve-id? uint16 | +--ro (backup)?
| +--:(redundancy-grp) | | +--:(backup-ac)
| +--ro (primary) | | | +--ro backup-ac
| | +--:(primary-pw) | | | +--ro name? string
| | | +--ro primary-pw | | | +--ro state? operational-state-type
| | | +--ro name? string | | +--:(backup-pw)
| | | +--ro state? operational-state-type | | +--ro backup-pw
| | | +--ro mtu? uint16 | | +--ro name? string
| | | +--ro mac-withdraw? boolean | | +--ro state? operational-state-type
| | | +--ro cw-negotiation? cw-negotiation-type | | +--ro mtu? uint16
| | | +--ro vccv-ability? boolean | | +--ro mac-withdraw? boolean
| | | +--ro tunnel-policy? string | | +--ro cw-negotiation? cw-negotiation-type
| | | +--ro request-vlanid? uint16 | | +--ro vccv-ability? boolean
| | | +--ro vlan-tpid? string | | +--ro tunnel-policy? string
| | | +--ro ttl? uint8 | | +--ro request-vlanid? uint16
| | | +--ro (pw-type)? | | +--ro vlan-tpid? string
| | | +--:(ldp-or-static-pw) | | +--ro ttl? uint8
| | | | +--ro peer-ip? inet:ip-address | | +--ro (pw-type)?
| | | | +--ro pw-id? uint32 | | +--:(ldp-or-static-pw)
| | | | +--ro icb? boolean | | | +--ro peer-ip? inet:ip-address
| | | | +--ro transmit-label? mpls:mpls-label | | | +--ro pw-id? uint32
| | | | +--ro receive-label? mpls:mpls-label | | | +--ro icb? boolean
| | | +--:(bgp-pw) | | | +--ro transmit-label? mpls:mpls-label
| | | | +--ro remote-pe-id? inet:ip-address | | | +--ro receive-label? mpls:mpls-label
| | | +--:(bgp-ad-pw) | | +--:(bgp-pw)
| | | +--ro remote-ve-id? uint16 | | | +--ro remote-pe-id? inet:ip-address
| | +--:(primary-ac) | | +--:(bgp-ad-pw)
| | +--ro primary-ac-name? string | | +--ro remote-ve-id? uint16
| +--ro (backup) | +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| | +--:(backup-pw) | +--ro protection-mode? enumeration
| | | +--ro backup-pw | +--ro reroute-mode? enumeration
| | | +--ro name? string | +--ro dual-receive? boolean
| | | +--ro state? operational-state-type | +--ro revert? boolean
| | | +--ro mtu? uint16 | +--ro reroute-delay? uint16
| | | +--ro mac-withdraw? boolean | +--ro revert-delay? uint16
| | | +--ro cw-negotiation? cw-negotiation-type +--ro pbb-parameters
| | | +--ro vccv-ability? boolean | +--ro (component-type)?
| | | +--ro tunnel-policy? string | +--:(i-component)
| | | +--ro request-vlanid? uint16 | | +--ro i-sid? i-sid-type
| | | +--ro vlan-tpid? string | | +--ro backbone-src-mac? yang:mac-address
| | | +--ro ttl? uint8 | +--:(b-component)
| | | +--ro (pw-type)? | +--ro bind-b-component-name? string
| | | +--:(ldp-or-static-pw) | +--ro bind-b-component-type? identityref
| | | | +--ro peer-ip? inet:ip-address +--ro evpn-instance-name? string
| | | | +--ro pw-id? uint32 +--ro endpoint*
| | | | +--ro icb? boolean +--ro name? string
| | | | +--ro transmit-label? mpls:mpls-label +--ro split-horizon-group? string
| | | | +--ro receive-label? mpls:mpls-label +--ro (ac-or-pw-or-redundancy-grp)?
| | | +--:(bgp-pw) +--:(ac)
| | | | +--ro remote-pe-id? inet:ip-address | +--ro ac*
| | | +--:(bgp-ad-pw) | +--ro name? string
| | | +--ro remote-ve-id? uint16 | +--ro state? operational-state-type
| | +--:(backup-ac) +--:(pw)
| | +--ro backup-ac-name? string | +--ro pw*
| +--ro protection-mode? enumeration | +--ro name? string
| +--ro reroute-mode? enumeration | +--ro state? operational-state-type
| +--ro reroute-delay? uint16 | +--ro mtu? uint16
| +--ro dual-receive? boolean | +--ro mac-withdraw? boolean
| +--ro revert? boolean | +--ro cw-negotiation? cw-negotiation-type
| +--ro revert-delay? uint16 | +--ro discovery-type? l2vpn-discovery-type
+--ro endpoint-z | +--ro signaling-type? l2vpn-signaling-type
+--ro (ac-or-pw-or-redundancy-grp)? | +--ro peer-ip? inet:ip-address
+--:(ac) | +--ro pw-id? uint32
| +--ro ac | +--ro transmit-label? mpls:mpls-label
| +--ro name? string | +--ro receive-label? mpls:mpls-label
| +--ro state? operational-state-type | +--ro tunnel-policy? string
+--:(pw) +--:(redundancy-grp)
| +--ro pw +--ro (primary)
| +--ro name? string | +--:(primary-ac)
| +--ro state? operational-state-type | | +--ro primary-ac
| +--ro mtu? uint16 | | +--ro name? string
| +--ro mac-withdraw? boolean | | +--ro state? operational-state-type
| +--ro cw-negotiation? cw-negotiation-type | +--:(primary-pw)
| +--ro vccv-ability? boolean | +--ro primary-pw*
| +--ro tunnel-policy? string | +--ro name? string
| +--ro request-vlanid? uint16 | +--ro state? operational-state-type
| +--ro vlan-tpid? string | +--ro mtu? uint16
| +--ro ttl? uint8 | +--ro mac-withdraw? boolean
| +--ro (pw-type)? | +--ro cw-negotiation? cw-negotiation-type
| +--:(ldp-or-static-pw) | +--ro discovery-type? l2vpn-discovery-type
| | +--ro peer-ip? inet:ip-address | +--ro signaling-type? l2vpn-signaling-type
| | +--ro pw-id? uint32 | +--ro peer-ip? inet:ip-address
| | +--ro icb? boolean | +--ro pw-id? uint32
| | +--ro transmit-label? mpls:mpls-label | +--ro transmit-label? mpls:mpls-label
| | +--ro receive-label? mpls:mpls-label | +--ro receive-label? mpls:mpls-label
| +--:(bgp-pw) | +--ro tunnel-policy? string
| | +--ro remote-pe-id? inet:ip-address +--ro (backup)?
| +--:(bgp-ad-pw) | +--:(backup-ac)
| +--ro remote-ve-id? uint16 | | +--ro backup-ac
+--:(redundancy-grp) | | +--ro name? string
+--ro (primary) | | +--ro state? operational-state-type
| +--:(primary-pw) | +--:(backup-pw)
| | +--ro primary-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 discovery-type? l2vpn-discovery-type
| | +--ro tunnel-policy? string | +--ro signaling-type? l2vpn-signaling-type
| | +--ro request-vlanid? uint16 | +--ro peer-ip? inet:ip-address
| | +--ro vlan-tpid? string | +--ro pw-id? uint32
| | +--ro ttl? uint8 | +--ro transmit-label? mpls:mpls-label
| | +--ro (pw-type)? | +--ro receive-label? mpls:mpls-label
| | +--:(ldp-or-static-pw) | +--ro tunnel-policy? string
| | | +--ro peer-ip? inet:ip-address | +--ro precedence? uint32
| | | +--ro pw-id? uint32 +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name
| | | +--ro icb? boolean +--ro protection-mode? enumeration
| | | +--ro transmit-label? mpls:mpls-label +--ro reroute-mode? enumeration
| | | +--ro receive-label? mpls:mpls-label +--ro dual-receive? boolean
| | +--:(bgp-pw) +--ro revert? boolean
| | | +--ro remote-pe-id? inet:ip-address +--ro reroute-delay? uint16
| | +--:(bgp-ad-pw) +--ro revert-delay? uint16
| | +--ro remote-ve-id? uint16
| +--:(primary-ac)
| +--ro primary-ac-name? string
+--ro (backup)
| +--:(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
| +--:(backup-ac)
| +--ro backup-ac-name? string
+--ro protection-mode? enumeration
+--ro reroute-mode? enumeration
+--ro reroute-delay? uint16
+--ro dual-receive? boolean
+--ro revert? boolean
+--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-05-31.yang" <CODE BEGINS> file "ietf-l2vpn@2016-05-31.yang"
module ietf-l2vpn {
namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn";
prefix "l2vpn";
import ietf-inet-types { module ietf-l2vpn {
prefix "inet"; namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn";
} prefix "l2vpn";
import ietf-yang-types { import ietf-inet-types {
prefix "yang"; prefix "inet";
} }
import ietf-mpls { import ietf-yang-types {
prefix "mpls"; prefix "yang";
} }
organization "ietf"; import ietf-mpls {
contact "ietf"; prefix "mpls";
description "l2vpn"; }
revision "2016-05-31" { organization "ietf";
description "Fourth revision " + contact "ietf";
" - Edits based on Giles's comments " + description "l2vpn";
" 1) Change enumeration to identityref type for: " +
" (a) l2vpn-service-type " +
" (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 "2016-03-07" {
description "Third revision " +
" - 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 "";
}
revision "2015-10-08" { revision "2016-10-24" {
description "Second revision " + description "Fifth revision " +
" - Added container vpls-instances " + " - Edits based on Giles's comments " +
" - Rearranged groupings and typedefs to be " + " 5) Remove relative leafrefs in groupings, " +
" reused across vpls-instance and vpws-instances"; " and the resulting new groupings are: " +
reference ""; " <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 "2015-06-30" { revision "2016-05-31" {
description "Initial revision"; description "Fourth revision " +
reference ""; " - Edits based on Giles's comments " +
} " 1) Change enumeration to identityref type for: " +
" <a> l2vpn-service-type " +
" <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 "";
}
/* identities */ revision "2016-03-07" {
description "Third revision " +
" - 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 "";
}
identity link-discovery-protocol { revision "2015-10-08" {
description "Base identiy from which identities describing " + description "Second revision " +
"link discovery protocols are derived."; " - Added container vpls-instances " +
} " - Rearranged groupings and typedefs to be " +
" reused across vpls-instance and vpws-instances";
reference "";
}
identity lacp { revision "2015-06-30" {
base "link-discovery-protocol"; description "Initial revision";
description "This identity represents LACP"; reference "";
} }
identity lldp { /* identities */
base "link-discovery-protocol";
description "This identity represents LLDP";
}
identity bpdu { identity l2vpn-instance-type {
base "link-discovery-protocol"; description "Base identity from which identities of " +
description "This identity represens BPDU"; "l2vpn service instance types are derived";
} }
identity cpd { identity vpws-instance-type {
base "link-discovery-protocol"; base l2vpn-instance-type;
description "This identity represents CPD"; description "This identity represents VPWS instance type";
} }
identity udld { identity vpls-instance-type {
base "link-discovery-protocol"; base l2vpn-instance-type;
description "This identity represens UDLD"; description "This identity represents VPLS instance type";
} }
identity l2vpn-service { identity link-discovery-protocol {
description "Base identity from which identities describing " + description "Base identiy from which identities describing " +
"L2VPN services are derived"; "link discovery protocols are derived";
}
identity Ethernet { }
base "l2vpn-service";
description "This identity represents Ethernet service";
}
identity ATM { identity lacp {
base "l2vpn-service"; base "link-discovery-protocol";
description "This identity represents Asynchronous Transfer " + description "This identity represents LACP";
"Mode service"; }
}
identity FR { identity lldp {
base "l2vpn-service"; base "link-discovery-protocol";
description "This identity represent Frame-Relay service"; description "This identity represents LLDP";
} }
identity TDM { identity bpdu {
base "l2vpn-service"; base "link-discovery-protocol";
description "This identity represent Time Devision " + description "This identity represens BPDU";
"Multiplexing service"; }
}
identity l2vpn-discovery { identity cpd {
description "Base identity from which identities describing " + base "link-discovery-protocol";
"L2VPN discovery protocols are derived"; description "This identity represents CPD";
} }
identity manual-discovery { identity udld {
base "l2vpn-discovery"; base "link-discovery-protocol";
description "Manual configuration of l2vpn service"; description "This identity represens UDLD";
} }
identity bgp-auto-discovery { identity l2vpn-service {
base "l2vpn-discovery"; description "Base identity from which identities describing " +
description "Border Gateway Protocol (BGP) auto-discovery of " + "L2VPN services are derived";
"l2vpn service"; }
}
identity ldp-discovery { identity Ethernet {
base "l2vpn-discovery"; base "l2vpn-service";
description "Label Distribution Protocol (LDP) discovery of " + description "This identity represents Ethernet service";
"l2vpn service"; }
}
identity mixed-discovery { identity ATM {
base "l2vpn-discovery"; base "l2vpn-service";
description "Mixed discovery methods of l2vpn service"; description "This identity represents Asynchronous Transfer " +
} "Mode service";
}
identity l2vpn-signaling { identity FR {
description "Base identity from which identities describing " + base "l2vpn-service";
"L2VPN signaling protocols are derived"; description "This identity represent Frame-Relay service";
} }
identity TDM {
base "l2vpn-service";
description "This identity represent Time Devision " +
"Multiplexing service";
}
identity static-configuration { identity l2vpn-discovery {
base "l2vpn-signaling"; description "Base identity from which identities describing " +
description "Static configuration of labels (no signaling)"; "L2VPN discovery protocols are derived";
} }
identity ldp-signaling { identity manual-discovery {
base "l2vpn-signaling"; base "l2vpn-discovery";
description "Label Distribution Protocol (LDP) signaling"; description "Manual configuration of l2vpn service";
} }
identity bgp-signaling { identity bgp-auto-discovery {
base "l2vpn-signaling"; base "l2vpn-discovery";
description "Border Gateway Protocol (BGP) signaling"; description "Border Gateway Protocol (BGP) auto-discovery of " +
} "l2vpn service";
}
identity mixed-signaling { identity ldp-discovery {
base "l2vpn-signaling"; base "l2vpn-discovery";
description "Mixed signaling methods"; description "Label Distribution Protocol (LDP) discovery of " +
} "l2vpn service";
}
/* typedefs */ identity mixed-discovery {
base "l2vpn-discovery";
description "Mixed discovery methods of l2vpn service";
}
typedef l2vpn-service-type { identity l2vpn-signaling {
type identityref { description "Base identity from which identities describing " +
base "l2vpn-service"; "L2VPN signaling protocols are derived";
} }
description "L2VPN service type";
}
typedef l2vpn-discovery-type {
type identityref {
base "l2vpn-discovery";
}
description "L2VPN discovery type";
}
typedef l2vpn-signaling-type { identity static-configuration {
type identityref { base "l2vpn-signaling";
base "l2vpn-signaling"; description "Static configuration of labels (no signaling)";
} }
description "L2VPN signaling type";
}
typedef bgp-rt-type { identity ldp-signaling {
type enumeration { base "l2vpn-signaling";
enum import { description "Label Distribution Protocol (LDP) signaling";
description "For import"; }
} identity bgp-signaling {
enum export { base "l2vpn-signaling";
description "For export"; description "Border Gateway Protocol (BGP) signaling";
} }
enum both {
description "For both import and export";
}
}
description "BGP route-target type. Import from BGP YANG";
}
typedef cw-negotiation-type { identity mixed-signaling {
type enumeration { base "l2vpn-signaling";
enum "non-preferred" { description "Mixed signaling methods";
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 { /* typedefs */
type identityref {
base "link-discovery-protocol";
}
description "This type is used to identify " +
"link discovery protocol";
}
typedef pbb-component-type {
type enumeration {
enum "b-component" {
description "Identifies as a b-component";
}
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 l2vpn-service-type {
type leafref { type identityref {
path "/l2vpn/common/pw-templates/pw-template/name"; base "l2vpn-service";
} }
description "pw-template-ref"; description "L2VPN service type";
} }
typedef redundancy-group-template-ref { typedef l2vpn-discovery-type {
type leafref { type identityref {
path "/l2vpn/common/redundancy-group-templates" + base "l2vpn-discovery";
"/redundancy-group-template/name"; }
} description "L2VPN discovery type";
description "redundancy-group-template-ref"; }
}
typedef bridge-table-instance-ref { typedef l2vpn-signaling-type {
type leafref { type identityref {
path "/l2vpn/bridge-table-instances" + base "l2vpn-signaling";
"/bridge-table-instance/name"; }
} description "L2VPN signaling type";
description "bridge-table-instance-ref"; }
}
typedef operational-state-type { typedef bgp-rt-type {
type enumeration { type enumeration {
enum 'up' { enum import {
description "Operational state is up"; description "For import";
} }
enum 'down' { enum export {
description "Operational state is down"; description "For export";
} }
} enum both {
description "operational-state-type"; description "For both import and export";
} }
typedef i-sid-type { }
type uint32 { description "BGP route-target type. Import from BGP YANG";
range "0..16777216"; }
} typedef cw-negotiation-type {
description "I-SID type that is 24-bits. " + type enumeration {
"This should be moved to ieee-types.yang at " + enum "non-preferred" {
"http://www.ieee802.org/1/files/public/docs2015" + description "No preference for control-word";
"/new-mholness-ieee-types-yang-v01.yang"; }
} enum "preferred" {
description "Prefer to have control-word negotiation";
}
}
description "control-word negotiation preference type";
}
/* groupings */ typedef link-discovery-protocol-type {
type identityref {
base "link-discovery-protocol";
}
description "This type is used to identify " +
"link discovery protocol";
}
grouping pbb-parameters-grp { typedef pbb-component-type {
description "PBB parameters grouping"; type enumeration {
container pbb-parameters { enum "b-component" {
description "pbb-parameters"; description "Identifies as a b-component";
choice component-type { }
description "PBB component type"; enum "i-component" {
case i-component { description "Identifies as an i-component";
leaf i-sid { }
type i-sid-type; }
description "I-SID"; description "This type is used to identify " +
} "the type of PBB component";
leaf backbone-src-mac { }
type yang:mac-address;
description "backbone-src-mac";
}
}
case b-component {
leaf bind-b-component {
type bridge-table-instance-ref;
description "Reference to the associated b-component";
}
}
}
}
}
grouping pbb-parameters-state-grp { typedef pw-template-ref {
description "PBB parameters grouping"; type leafref {
container pbb-parameters { path "/l2vpn/common/pw-templates/pw-template/name";
description "pbb-parameters"; }
choice component-type { description "pw-template-ref";
description "PBB component type"; }
case i-component {
leaf i-tag {
type uint32;
description "i-tag";
} typedef redundancy-group-template-ref {
leaf backbone-src-mac { type leafref {
type yang:mac-address; path "/l2vpn/common/redundancy-group-templates" +
description "backbone-src-mac"; "/redundancy-group-template/name";
} }
} description "redundancy-group-template-ref";
case b-component { }
leaf bind-b-component { typedef l2vpn-instance-name-ref {
type string; type leafref {
description "Name of the associated b-component"; path "/l2vpn/l2vpn-instances" +
} "/l2vpn-instance/name";
} }
} description "l2vpn-instance-name-ref";
} }
}
grouping bgp-parameters-grp { typedef l2vpn-instance-type-ref {
description "BGP parameters grouping"; type leafref {
container bgp-parameters { path "/l2vpn/l2vpn-instances" +
description "Parameters for BGP"; "/l2vpn-instance/type";
container common { }
when "../../discovery-type = 'bgp-auto-discovery'" { description "l2vpn-instance-type-ref";
description "Check discovery type: " + }
"Can only configure BGP discovery if " +
"discovery type is BGP-AD";
}
description "Common BGP parameters";
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";
}
}
}
container discovery {
when "../../discovery-type = 'bgp-auto-discovery'" {
description "BGP parameters for discovery: " +
"Can only configure BGP discovery if " +
"discovery type is BGP-AD";
}
description "BGP parameters for discovery";
leaf vpn-id {
type string;
description "VPN ID";
}
}
container signaling {
when "../../signaling-type = 'bgp-signaling'" {
description "Check signaling type: " +
"Can only configure BGP signaling if " +
"signaling type is BGP";
}
description "BGP parameters for signaling";
leaf site-id {
type uint16;
description "Site ID";
}
leaf site-range {
type uint16;
description "Site Range";
}
}
}
}
grouping pw-type-grp { typedef operational-state-type {
description "pseudowire type grouping"; type enumeration {
choice pw-type { enum 'up' {
description "A choice of pseudowire type"; description "Operational state is up";
case ldp-or-static-pw { }
leaf peer-ip { enum 'down' {
type inet:ip-address; description "Operational state is down";
description "peer IP address"; }
} }
leaf pw-id { description "operational-state-type";
type uint32; }
description "pseudowire id";
}
leaf icb {
type boolean;
description "inter-chassis backup";
}
leaf transmit-label {
type mpls:mpls-label;
description "transmit lable";
} typedef i-sid-type {
leaf receive-label { type uint32 {
type mpls:mpls-label; range "0..16777216";
description "receive label"; }
} description "I-SID type that is 24-bits. " +
} "This should be moved to ieee-types.yang at " +
case bgp-pw { "http://www.ieee802.org/1/files/public/docs2015" +
leaf remote-pe-id { "/new-mholness-ieee-types-yang-v01.yang";
type inet:ip-address; }
description "remote pe id";
}
}
case bgp-ad-pw {
leaf remote-ve-id {
type uint16;
description "remote ve id";
}
}
}
}
grouping bridge-table-instance-pw-list-grp { /* groupings */
description "bridge-table-instance-pw-list-grp";
list pw {
key "name";
leaf name {
type leafref {
path "../../../pw/name";
}
description "name of pseudowire";
}
description "A bridge table instance's pseudowire list";
}
}
grouping bridge-table-instance-ac-list-grp { grouping pbb-parameters-grp {
description "bridge-table-instance-ac-list-grp"; description "PBB parameters grouping";
list ac { container pbb-parameters {
key "name"; description "pbb-parameters";
leaf name { choice component-type {
type string; description "PBB component type";
description "Name of attachment circuit. This field " + case i-component {
"is intended to reference standardized " + leaf i-sid {
"layer-2 definitions."; type i-sid-type;
} description "I-SID";
description "A bridge table instance's " + }
"attachment circuit list"; 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 {
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 string;
description "Name of the associated b-component";
}
leaf bind-b-component-type {
type identityref {
base l2vpn-instance-type;
grouping redundancy-group-properties-grp { }
description "redundancy-group-properties-grp"; must ". = 'vpls-instance-type'" {
leaf protection-mode { description "The associated b-component must have " +
type enumeration { "type vpls-instance-type";
enum "frr" { }
value 0; description "Type of the associated b-component";
description "fast reroute"; }
} }
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 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 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";
/* This is called "revertive" during the discussion. */
}
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";
/* This is called "wtr" during discussion. */
}
}
grouping bridge-table-instance-endpoint-grp { grouping l2vpn-common-parameters-grp {
description "A bridge table instance's endpoint"; description "L2VPN common parameters";
choice ac-or-pw-or-redundancy-grp { leaf name {
description "A choice ofattachment circuit or " + type string;
"pseudowire or redundancy group"; description "Name of L2VPN service instance";
case ac { }
uses bridge-table-instance-ac-list-grp; leaf type {
description "reference to attachment circuits"; type identityref {
} base l2vpn-instance-type;
case pw { }
uses bridge-table-instance-pw-list-grp; description "Type of L2VPN service instance";
description "reference to pseudowires"; }
} leaf mtu {
case redundancy-grp { type uint16;
choice primary { description "MTU of L2VPN service";
mandatory true; }
description "primary options"; leaf mac-aging-timer {
case primary-pw { type uint32;
description "primary-pw"; description "mac-aging-timer, the duration after which" +
list primary-pw { "a MAC entry is considered aged out";
key "name"; }
leaf name { leaf service-type {
type leafref { type l2vpn-service-type;
path "../../../pw/name"; default Ethernet;
} description "L2VPN service type";
description "Reference a pseudowire"; }
} leaf discovery-type {
description "A list of primary pseudowires"; 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";
}
} }
}
case primary-ac {
description "primary-ac";
leaf primary-ac {
type string;
description "Name of primary attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
}
choice backup {
description "backup options";
case backup-pw {
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";
}
}
case backup-ac {
leaf backup-ac {
type string;
description "Name of backup attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
description "backup-ac";
}
}
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 vpws-endpoint-grp { grouping bgp-auto-discovery-parameters-grp {
description description "BGP parameters for auto-discovery";
"A vpws-endpoint could either be an ac or a pw"; leaf route-distinguisher {
choice ac-or-pw-or-redundancy-grp { type string;
description "A choice ofattachment circuit or " + description "BGP RD";
"pseudowire or redundancy group"; }
case ac { list vpn-target {
leaf ac { key rt-value;
type string; description "Route Targets";
description "Name of attachment circuit. This " + leaf rt-value {
"field is intended to reference " + type string;
"standardized layer-2 definitions."; description "Route-Target value";
} }
} leaf rt-type {
case pw { type bgp-rt-type;
leaf pw { mandatory true;
type leafref { description "Type of RT";
path "../../pw/name"; }
} }
description "reference to a pseudowire"; leaf vpn-id {
} type string;
} description "VPN ID";
case redundancy-grp { }
choice primary { }
mandatory true;
description "primary options";
case primary-pw {
leaf primary-pw {
type leafref {
path "../../pw/name";
}
description "primary pseudowire";
}
}
case primary-ac {
leaf primary-ac {
type string;
description "Name of primary attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
}
choice backup {
mandatory true;
description "backup options";
case backup-pw {
leaf backup-pw {
type leafref {
path "../../pw/name";
}
description "backup pseudowire";
}
}
case backup-ac {
leaf backup-ac {
type string;
description "Name of backup attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
}
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 vpws-endpoint-state-grp { grouping bgp-signaling-parameters-grp {
description description "BGP parameters for signaling";
"A vpws-endpoint could either be an ac or a pw"; leaf site-id {
choice ac-or-pw-or-redundancy-grp { type uint16;
description "A choice ofattachment circuit or " + description "Site ID";
"pseudowire or redundancy group"; }
case ac { leaf site-range {
container ac { type uint16;
description "ac"; description "Site Range";
uses ac-state-grp; }
} }
}
case pw {
container pw {
description "pw";
uses vpws-pw-state-grp;
}
}
case redundancy-grp {
choice primary {
mandatory true;
description "primary options";
case primary-pw {
container primary-pw {
description "primary pseudowire";
uses vpws-pw-state-grp;
}
}
case primary-ac {
leaf primary-ac-name {
type string;
description "Name of primary attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
}
choice backup {
mandatory true;
description "backup options";
case backup-pw {
container backup-pw {
description "backup pseudowire";
uses vpws-pw-state-grp;
}
}
case backup-ac {
leaf backup-ac-name {
type string;
description "Name of backup attachment circuit. " +
"This field is intended to reference " +
"standardized layer-2 definitions.";
}
}
}
uses redundancy-group-properties-grp;
}
}
}
grouping vpls-pw-state-grp { grouping pw-common-parameters-grp {
description "vpls-pw-state-grp"; description "Pseudowire parameters common to both " +
leaf name { "VPWS and VPLS pseudowires";
type string; leaf name {
description "pseudowire name"; type string;
} description "pseudowire name";
leaf state { }
type operational-state-type; leaf template {
description "pseudowire up/down state"; type pw-template-ref;
} description "pseudowire template";
leaf mtu { }
type uint16; leaf mtu {
description "pseudowire mtu"; type uint16;
} description "PW MTU";
leaf mac-withdraw { }
type boolean; leaf mac-withdraw {
description "MAC withdraw is enabled (true) or disabled (false)"; type boolean;
} default false;
leaf cw-negotiation { description "Enable (true) or disable (false) MAC withdraw";
type cw-negotiation-type; }
description "cw-negotiation"; leaf cw-negotiation {
} type cw-negotiation-type;
leaf discovery-type { description "cw-negotiation";
type l2vpn-discovery-type; }
description "VPLS discovery type"; leaf tunnel-policy {
} type string;
leaf signaling-type { description "tunnel policy name";
type l2vpn-signaling-type; }
description "VPLS signaling type"; uses pw-type-grp;
} }
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 {
description "vpls-ac-state-grp";
leaf name {
type string;
description "attachment circuit name";
}
leaf state {
type operational-state-type;
description "attachment circuit up/down state";
}
}
grouping vpws-pw-state-grp { grouping pw-type-grp {
description "vpws-pw-state-grp"; description "pseudowire type grouping";
leaf name { choice pw-type {
type string; description "A choice of pseudowire type";
description "pseudowire name"; case ldp-or-static-pw {
} leaf peer-ip {
leaf state { type inet:ip-address;
type operational-state-type; description "peer IP address";
description "pseudowire operation state up/down"; }
} leaf pw-id {
leaf mtu { type uint32;
type uint16; description "pseudowire id";
description "PW MTU"; }
} leaf icb {
leaf mac-withdraw { type boolean;
type boolean; description "inter-chassis backup";
description "MAC withdraw is enabled (ture) or disabled (false)"; }
} leaf transmit-label {
leaf cw-negotiation { type mpls:mpls-label;
type cw-negotiation-type; description "transmit lable";
description "Override the control-word negotiation " + }
"preference specified in the " + leaf receive-label {
"pseudowire template."; type mpls:mpls-label;
} description "receive label";
leaf vccv-ability { }
type boolean; }
description "vccv-ability"; case bgp-pw {
} leaf remote-pe-id {
leaf tunnel-policy { type inet:ip-address;
type string; description "remote pe id";
description "Used to override the tunnel policy name " + }
"specified in the pseduowire template"; }
} case bgp-ad-pw {
leaf request-vlanid { leaf remote-ve-id {
type uint16; type uint16;
description "request vlanid"; description "remote ve id";
}
}
}
}
} grouping redundancy-group-properties-grp {
leaf vlan-tpid { description "redundancy-group-properties-grp";
type string; leaf protection-mode {
description "vlan tpid"; type enumeration {
} enum "frr" {
leaf ttl { value 0;
type uint8; description "fast reroute";
description "time-to-live"; }
} enum "master-slave" {
uses pw-type-grp; 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";
}
/* L2VPN YANG Model */ }
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";
}
}
container l2vpn { grouping endpoint-grp {
description "l2vpn"; description "A grouping that defines the structure of " +
container common { "an endpoint";
description "common l2pn attributes"; choice ac-or-pw-or-redundancy-grp {
container pw-templates { description "A choice ofattachment circuit or " +
description "pw-templates"; "pseudowire or redundancy group";
list pw-template { case ac {
key "name"; description "Attachment circuit(s) as an endpoint";
description "pw-template"; }
leaf name { case pw {
type string; description "Pseudowire(s) as an endpoint";
description "name"; }
} case redundancy-grp {
leaf mtu { description "Redundancy group as an endpoint";
type uint16; choice primary {
description "pseudowire mtu"; mandatory true;
} description "primary options";
leaf cw-negotiation { case primary-ac {
type cw-negotiation-type; description "primary-ac";
default "preferred"; }
description case primary-pw {
"control-word negotiation preference"; description "primary-pw";
} }
leaf tunnel-policy { }
type string; choice backup {
description "tunnel policy name"; description "backup options";
} case backup-ac {
} description "backup-ac";
} }
container redundancy-group-templates { case backup-pw {
description "redundancy group templates"; description "backup-pw";
list redundancy-group-template { }
key "name"; }
description "redundancy-group-template"; leaf template {
leaf name { type leafref {
type string; path "/l2vpn/common/redundancy-group-templates" +
description "name"; "/redundancy-group-template/name";
} }
uses redundancy-group-properties-grp; description "Reference a redundancy group " +
} "properties template";
} }
} uses redundancy-group-properties-grp;
container bridge-table-instances { }
/* To be fleshed out in future revisions */ }
description "bridge-table-instances"; }
list bridge-table-instance {
key "name";
description "A bridge table instance";
leaf name {
type string;
description "Name of a bridge table instance";
}
leaf mtu {
type uint16;
description "Bridge MTU";
}
leaf mac-aging-timer {
type uint32;
description "mac-aging-timer";
}
uses pbb-parameters-grp;
uses bgp-parameters-grp;
leaf evpn-instance {
type string;
description "Eventual reference to standard EVPN instance";
}
list pw {
key "name";
description "pseudowire";
leaf name {
type string;
description "pseudowire name";
}
leaf template {
type pw-template-ref;
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 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";
}
}
list endpoint {
key "name";
leaf name {
type string;
description "endpoint name";
}
leaf split-horizon-group {
type string;
description "Identify a split horizon group";
}
uses bridge-table-instance-endpoint-grp;
description "List of endpoints";
}
}
}
container vpws-instances {
description "vpws-instances";
list vpws-instance {
key "name";
description "A VPWS instance";
leaf name {
type string;
description "Name of VPWS instance";
}
leaf description {
type string;
description "Description of the VPWS instance";
}
leaf mtu {
type uint16;
description "VPWS MTU";
}
leaf mac-aging-timer {
type uint32;
description "mac-aging-timer";
}
leaf service-type {
type l2vpn-service-type;
default Ethernet;
description "VPWS service type";
}
leaf discovery-type {
type l2vpn-discovery-type;
default manual-discovery;
description "VPWS discovery type";
}
leaf signaling-type {
type l2vpn-signaling-type;
mandatory true;
description "VPWS signaling type";
}
uses bgp-parameters-grp;
list pw {
key "name";
description "pseudowire";
leaf name {
type string;
description "pseudowire name";
}
leaf template {
type pw-template-ref;
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;
default "preferred";
description "Override the control-word negotiation " +
"preference specified in the " +
"pseudowire template.";
}
leaf vccv-ability {
type boolean;
description "vccvability";
}
leaf tunnel-policy {
type string;
description "Used to override the tunnel policy name " +
"specified in the pseduowire template";
}
leaf request-vlanid {
type uint16;
description "request vlanid";
}
leaf vlan-tpid {
type string;
description "vlan tpid";
}
leaf ttl {
type uint8;
description "time-to-live";
}
uses pw-type-grp;
}
container endpoint-a {
description "endpoint-a";
uses vpws-endpoint-grp;
}
container endpoint-z {
description "endpoint-z";
uses vpws-endpoint-grp;
}
}
}
}
container l2vpn-state { grouping vpls-pw-state-grp {
config false; description "vpls-pw-state-grp";
description "l2vpn state"; leaf name {
container bridge-table-instances-state { type string;
/* To be fleshed out in future revisions */ description "pseudowire name";
description "bridge-table-instances-state"; }
list bridge-table-instance-state { leaf state {
key "name"; type operational-state-type;
description "A bridge table instance's state data"; description "pseudowire up/down state";
leaf name { }
type string; leaf mtu {
description "Name of a bridge table instance"; type uint16;
} description "pseudowire mtu";
leaf mtu { }
type uint16; leaf mac-withdraw {
description "Bridge MTU"; type boolean;
} description "MAC withdraw is enabled (true) or disabled (false)";
leaf mac-aging-timer { }
type uint32; leaf cw-negotiation {
description "mac-aging-timer"; type cw-negotiation-type;
} description "cw-negotiation";
uses pbb-parameters-state-grp; }
uses bgp-parameters-grp; leaf discovery-type {
leaf evpn-instance-name { type l2vpn-discovery-type;
type string; description "VPLS discovery type";
description "Name of associated an EVPN instance"; }
} leaf signaling-type {
list endpoint { type l2vpn-signaling-type;
key "name"; description "VPLS signaling type";
leaf name { }
type string; leaf peer-ip {
description "endpoint name"; type inet:ip-address;
} description "peer IP address";
leaf split-horizon-group { }
type string; leaf pw-id {
description "Identify a split horizon group"; type uint32;
} description "pseudowire id";
choice ac-or-pw-or-redundancy-grp { }
description "A choice ofattachment circuit or " + leaf transmit-label {
"pseudowire or redundancy group"; type mpls:mpls-label;
case ac { description "transmit lable";
list ac { }
key "name"; leaf receive-label {
uses ac-state-grp; type mpls:mpls-label;
description "A list of attachment circuits"; description "receive label";
} }
description "attachment circuit endpoint state"; leaf tunnel-policy {
} type string;
case pw { description "tunnel policy name";
list pw { }
key "name"; }
uses vpls-pw-state-grp;
description "A list of pseudowires";
}
description "pseudowire endpoint state";
}
case redundancy-grp {
choice primary {
mandatory true;
description "primary options";
case primary-pw {
description "primary-pw";
list primary-pw {
key "name";
uses vpls-pw-state-grp;
description "A list of primary pseudowires";
}
}
case primary-ac {
description "primary-ac";
container primary-ac {
description "primary-ac";
uses ac-state-grp;
}
}
}
choice backup {
description "backup options";
case backup-pw {
list backup-pw {
key "name";
uses vpls-pw-state-grp;
leaf precedence {
type uint32;
description "precedence of the pseudowire";
}
description "A list of backup pseudowires";
}
}
case backup-ac {
description "backup-ac";
container backup-ac {
description "primary-ac";
uses ac-state-grp;
}
}
}
uses redundancy-group-properties-grp;
}
}
description "List of endpoints";
}
}
}
container vpws-instances-state {
description "vpws-instances-state";
list vpws-instance-state {
key "name";
description "A VPWS instance's state data";
leaf name {
type string;
description "Name of VPWS instance";
}
leaf mtu {
type uint16;
description "VPWS MTU";
}
leaf mac-aging-timer {
type uint32;
description "mac-aging-timer";
}
leaf service-type {
type l2vpn-service-type;
default Ethernet;
description "VPWS service type";
}
leaf discovery-type {
type l2vpn-discovery-type;
default manual-discovery;
description "VPWS discovery type";
}
leaf signaling-type {
type l2vpn-signaling-type;
mandatory true;
description "VPWS signaling type";
}
uses bgp-parameters-grp;
container endpoint-a {
description "endpoint-a";
uses vpws-endpoint-state-grp;
}
container endpoint-z {
description "endpoint-z";
uses vpws-endpoint-state-grp;
}
}
}
}
}
(CODE ENDS) grouping ac-state-grp {
description "vpls-ac-state-grp";
leaf name {
type string;
description "attachment circuit name";
}
leaf state {
type operational-state-type;
description "attachment circuit up/down state";
}
}
grouping vpws-pw-state-grp {
description "vpws-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 vccv-ability {
type boolean;
description "vccv-ability";
}
leaf tunnel-policy {
type string;
description "Used to override the tunnel policy name " +
"specified in the pseduowire template";
}
leaf request-vlanid {
type uint16;
description "request vlanid";
}
leaf vlan-tpid {
type string;
description "vlan tpid";
}
leaf ttl {
type uint8;
description "time-to-live";
}
uses pw-type-grp;
}
/* L2VPN YANG Model */
container l2vpn {
description "l2vpn";
container common {
description "common l2pn attributes";
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;
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 {
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 {
config false;
description "l2vpn state";
container l2vpn-instances {
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";
uses bgp-auto-discovery-parameters-grp;
}
container bgp-signaling {
description "BGP signaling parameters";
uses bgp-signaling-parameters-grp;
}
}
}
}
/* augments */
augment "/l2vpn/l2vpn-instances/l2vpn-instance/pw" {
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" {
when "type = 'vpws-l2vpn-instance-type'" {
description "Endpoints specifically for a VPWS instance";
}
description "Augment for endpoints for a VPWS instance";
container endpoint-a {
description "endpoint-a";
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 "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 "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/l2vpn-instances/l2vpn-instance" {
when "type = 'vpls-l2vpn-instance-type'" {
description "Parameters specifically for a VPLS instance";
}
description "Augment for parameters for a VPLS instance";
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" {
when "type = 'vpws-l2vpn-instance-type'" {
description "Additional perational state specifically for " +
"a VPWS instance";
}
description "Augment for a VPWS instance's " +
"operational state";
container endpoint-a {
description "endpoint-a";
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" {
when "type = 'vpls-l2vpn-instance-type'" {
description "Additional perational state specifically for " +
"a VPLS instance";
}
description "Augment for a VPLS instance's " +
"operational state";
uses pbb-parameters-state-grp;
leaf evpn-instance-name {
type string;
description "Name of associated an EVPN instance";
}
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";
}
}
}
<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 49, line 15 skipping to change at page 52, line 48
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 Reshad Rahman Cisco Systems, Inc. Email: rrahman@cisco.com Kamran
Cisco Systems, Inc. Raza Cisco Systems, Inc. Email: skraza@cisco.com Tapraj Singh Cisco
Email: rrahman@cisco.com Systems, Inc. Email: tsingh@cisco.com Zhenbin Li Huawei Technologies
Email: lizhenbin@huawei.com Zhuang Shunwan Huawei Technologies Email:
Kamran Raza Zhuangshunwan@huawei.com Wang Haibo Huawei Technologies Email:
Cisco Systems, Inc.
Email: skraza@cisco.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
Jonathan Hardwick
Metaswitch
Email: jonathan.hardwick@metaswitch.com
Santosh Esale
Juniper Networks
Email: sesale@juniper.net
Kishore Tiruveedhula
Juniper Networks
Email: kishoret@juniper.net
Nick Delregno
Verizon
Email: nick.deregno@verizon.com
Luay Jalil
Verizon
Email: luay.jalil@verizon.com
Maria Joecylyn rainsword.wang@huawei.com Sajjad Ahmed Ericsson Email:
Verizon sajjad.ahmed@ericsson.com Matthew Bocci Nokia Email:
Email: joecylyn.malit@verizon.com matthew.bocci@nokia.com Jonathan Hardwick Metaswitch Email:
jonathan.hardwick@metaswitch.com Santosh Esale Juniper Networks
Email: sesale@juniper.net Kishore Tiruveedhula Juniper Networks
Email: kishoret@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
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.
 End of changes. 81 change blocks. 
1787 lines changed or deleted 1936 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/