draft-ietf-bess-l2vpn-yang-05.txt   draft-ietf-bess-l2vpn-yang-06.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: September 14, 2017 Cisco Systems, Inc. Expires: January 1, 2018 Cisco Systems, Inc.
I. Chen, Ed. I. Chen, Ed.
Jabil Jabil
I. Hussain, Ed. I. Hussain, Ed.
Infinera Corporation Infinera Corporation
B. Wen, Ed. B. Wen, Ed.
Comcast Comcast
K. Tiruveedhula, Ed. K. Tiruveedhula, Ed.
Juniper Networks Juniper Networks
March 13, 2017 June 30, 2017
YANG Data Model for MPLS-based L2VPN YANG Data Model for MPLS-based L2VPN
draft-ietf-bess-l2vpn-yang-05.txt draft-ietf-bess-l2vpn-yang-06.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.
This document also describes the YANG data model for the Pseudowires.
The independent definition of the Pseudowires facilitates its use in
Ethernet Segment and EVPN data models defined in separate document.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
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 September 14, 2017. This Internet-Draft will expire on January 1, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Specification of Requirements . . . . . . . . . . . . . . . . 4 2. Specification of Requirements . . . . . . . . . . . . . . . . 4
3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 4 3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Open issues and next steps . . . . . . . . . . . . . . . 7 3.2. Open issues and next steps . . . . . . . . . . . . . . . 7
3.3. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8 3.3. Pseudowire Common . . . . . . . . . . . . . . . . . . . . 8
3.3.1. pw-templates . . . . . . . . . . . . . . . . . . . . 8 3.3.1. Pseudowire . . . . . . . . . . . . . . . . . . . . . 8
3.3.2. redundancy-group-templates . . . . . . . . . . . . . 8 3.3.2. pw-templates . . . . . . . . . . . . . . . . . . . . 8
3.4. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 8 3.4. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8
3.4.1. common attributes . . . . . . . . . . . . . . . . . . 8 3.4.1. redundancy-group-templates . . . . . . . . . . . . . 8
3.4.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 8 3.5. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 8
3.4.3. List of endpoints . . . . . . . . . . . . . . . . . . 8 3.5.1. common attributes . . . . . . . . . . . . . . . . . . 8
3.4.4. point-to-point or multipoint service . . . . . . . . 10 3.5.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 8
3.5. Operational State . . . . . . . . . . . . . . . . . . . . 10 3.5.3. List of endpoints . . . . . . . . . . . . . . . . . . 9
3.6. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 10 3.5.4. point-to-point or multipoint service . . . . . . . . 10
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.6. Operational State . . . . . . . . . . . . . . . . . . . . 10
5. Security Considerations . . . . . . . . . . . . . . . . . . . 38 3.7. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 10
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 13
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39 5. Security Considerations . . . . . . . . . . . . . . . . . . . 40
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 39 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41
8.1. Normative References . . . . . . . . . . . . . . . . . . 39 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 41
8.2. Informative References . . . . . . . . . . . . . . . . . 39 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 41
Appendix A. Example Configuration . . . . . . . . . . . . . . . 42 8.1. Normative References . . . . . . . . . . . . . . . . . . 41
Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 42 8.2. Informative References . . . . . . . . . . . . . . . . . 41
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 43 Appendix A. Example Configuration . . . . . . . . . . . . . . . 44
Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 44
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 45
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 36 skipping to change at page 3, line 42
management: management:
o Configuration o Configuration
o Operational State o Operational State
o Executables (Actions) o Executables (Actions)
o Notifications o Notifications
The current document focuses on definition of configuration and state The current document focuses on definition of configuration, state
objects. The future revisions are expected to cover the actions and and notificationobjects.
notifications aspects of the model.
The L2VPN data object model uses the instance centric approach. The L2VPN data object model uses the instance centric approach.
Within an L2VPN instance; a set of common parameters, a list of PWs Within an L2VPN instance; a set of common parameters, a list of PWs
and a list of endpoints are defined. A special constraint is added and a list of endpoints are defined. A special constraint is added
for the VPWS configuration such that only two endpoints are allowed for the VPWS configuration such that only two endpoints are allowed
in the list of endpoints. This deviates from the previous versions in the list of endpoints.
where endpoint-a and endpoint-z were defined separately from the
endpoint list. The Pseudowire data object model is defined independent of the L2VPN
data object model to allow its inclusion in the Ethernet Segment and
EVPN data objects.
The L2VPN data object model augments Psuedowire data object for its
definition.
The document also includes Notifications used by the L2VPN object
model
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
skipping to change at page 4, line 31 skipping to change at page 4, line 41
definition that is either an attachment circuit, a pseudowire or a definition that is either an attachment circuit, a pseudowire or a
redundancy group. The YANG data model for l2vpn in this document is redundancy group. The YANG data model for l2vpn in this document is
greatly simplified by by removing separate definition of endpoint-a greatly simplified by by removing separate definition of endpoint-a
and endpoint-z that was specific for VPWS service. The same endpoint and endpoint-z that was specific for VPWS service. The same endpoint
list is used by both the VPLS and VPWS service with the exception list is used by both the VPLS and VPWS service with the exception
that VPWS uses only two entries. that VPWS uses only two entries.
The l2vpn container also includes definition of common building The l2vpn container also includes definition of common building
blocks for redundancy-grp templates and pseudowire-templates. blocks for redundancy-grp templates and pseudowire-templates.
The operations state object holds read-only information of objects The State objects have been consolidated with the configuration
that has either been configured or dynamically created. object as per the recommendations provided by the Guidelines for Yang
Module Authors document.
The IETF working group has defined the VPWS and VPLS services that The IETF working group has defined the VPWS and VPLS services that
leverages the pseudowire technologies defined by the PWE3 working leverages the pseudowire technologies defined by the PWE3 working
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 7, line 5 skipping to change at page 7, line 5
The specifics of pseudowire over MPLS-TP LSPs is in scope. However, The specifics of pseudowire over MPLS-TP LSPs is in scope. However,
the initial effort addresses definitions of object models that are the initial effort addresses definitions of object models that are
commonly deployed. commonly deployed.
The IETF work in L2VPN and PWE3 working group relating to L2TP, OAM, The IETF work in L2VPN and PWE3 working group relating to L2TP, OAM,
multicast (e.g. p2mp, etree, etc) and access specific protocols such multicast (e.g. p2mp, etree, etc) and access specific protocols such
as G.8032, MSTP, etc is out-of-scope for this document. as G.8032, MSTP, etc is out-of-scope for this document.
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 PW // Container
template PW specific attributes
attributes
PW template definition
template-ref Redundancy-Group // redundancy-group template-ref Redundancy-Group // redundancy-group
template template
attributes attributes
l2vpn-instances // containter l2vpn-instances // containter
common attributes common attributes
BGP-parameters // container BGP-parameters // container
skipping to change at page 7, line 38 skipping to change at page 7, line 39
pbb specific attributes pbb specific attributes
VPWS-constraints // rule to limit number of endpoints to two VPWS-constraints // rule to limit number of endpoints to two
// List of endpoints, where each member endpoint container is - // List of endpoints, where each member endpoint container is -
PW // reference PW // reference
redundancy-grp // container redundancy-grp // container
AC // eventual reference to standard AC AC // eventual reference to standard AC
PW // reference PW // reference
l2vpn-state // read-only container
Figure 1 Figure 1
3.2. Open issues and next steps 3.2. Open issues and next steps
There are a number of additional defintitions that are in Most of the open issues have been resolved in this document. There
considerations. These are VPLS IRB, PW headend, how evpn instance is are some items for considerations, such as PW headend, VPLS IRB.
referenced within the scope of l2vpn instance and what parameters of These may or may not be convered in this document. If the working
evpn are defined in l2vpn data model. Some of these are local and group intends these topics be addressed in a separate document,
remote VPWS service Ids, FXC, Designated Forwarder priorities, etc. authors will proceed to finalize this document with comments received
on the definitions included in the current document.
The contributors of this document intend to close on these 3.3. Pseudowire Common
definitions during the ongoing design team meeting as well as face-
to-face meetings at the IETF.
3.3. L2VPN Common 3.3.1. Pseudowire
3.3.1. pw-templates Pseudowire definitions is moved to a seperate container in order to
allow Ethernet Segment and EVPN models can refer without having to
pull down L2VPN container.
3.3.2. pw-templates
The pw-templates container contains a list of pw-template. Each pw- The pw-templates container contains a list of pw-template. Each pw-
template defines a list of common pseudowire attributes such as PW template defines a list of common pseudowire attributes such as PW
MTU, control word support etc. MTU, control word support etc.
3.3.2. redundancy-group-templates 3.4. L2VPN Common
3.4.1. redundancy-group-templates
The redundancy-group-template contains a list of templates. Each The redundancy-group-template contains a list of templates. Each
template defines common attributes related to redundancy such as template defines common attributes related to redundancy such as
protection mode, reversion parameters, etc. protection mode, reversion parameters, etc.
3.4. L2VPN instance 3.5. L2VPN instance
A list of L2VPN instance is defined where each entry represent a A list of L2VPN instance is defined where each entry represent a
point to point or multipoint service. Within a service instance, a point to point or multipoint service. Within a service instance, a
set of common attributes are defined, followed by a list of PWs and a set of common attributes are defined, followed by a list of PWs and a
list of endpoints. list of endpoints.
3.4.1. common attributes 3.5.1. common attributes
The common attributes apply to entire L2VPN instance. These The common attributes apply to entire L2VPN instance. These
attributes typically include attributes such as mac-aging-timer, BGP attributes typically include attributes such as mac-aging-timer, BGP
related parameters (if using BGP signaling), discovery-type, etc. related parameters (if using BGP signaling), discovery-type, etc.
3.4.2. PW list 3.5.2. PW list
The PW list is the number of PWs that are being used for a given The PW list is the number of PWs that are being used for a given
L2VPN instance. Each PW entry refers to PW template to inherit L2VPN instance. Each PW entry refers to PW template to inherit
common attributes for the PW. The one or more attributes from the common attributes for the PW. The one or more attributes from the
template can be overriden. It further extends definitions of more PW template can be overriden. It further extends definitions of more PW
specific attributes such as use of control word, mac withdraw, what specific attributes such as use of control word, mac withdraw, what
type of signaling (i.e. LDP or BGP), setting of the TTL, etc. type of signaling (i.e. LDP or BGP), setting of the TTL, etc.
3.4.3. List of endpoints 3.5.3. List of endpoints
The list of endpoints define the characteristics of the L2VPN The list of endpoints define the characteristics of the L2VPN
service. In the case of VPWS, the list is limited to two entries service. In the case of VPWS, the list is limited to two entries
while for VPLS, there could be many. while for VPLS, there could be many.
Each entry in the endpoint list, may hold AC, PW or redundancy-grp Each entry in the endpoint list, may hold AC, PW or redundancy-grp
references. The core aspect of endpoint container is its flexible references. The core aspect of endpoint container is its flexible
personality based on what user decides to include in it. It is personality based on what user decides to include in it. It is
future-proofed with possible extensions that can be included in the future-proofed with possible extensions that can be included in the
endpoint container such as Integrated Route Bridging (IRB), PW endpoint container such as Integrated Route Bridging (IRB), PW
Headend, Virtual Switch Instance, etc. Headend, Virtual Switch Instance, etc.
The endpoint entry also defines the split-horizon attribute which The endpoint entry also defines the split-horizon attribute which
defines the frame forwarding restrictions between the endpoints defines the frame forwarding restrictions between the endpoints
belonging to same split-horizon group. This construct permits belonging to same split-horizon group. This construct permits
multiple instances of split horizon groups with its own endpoint multiple instances of split horizon groups with its own endpoint
members. The frame forwarding restrictions does not apply between members. The frame forwarding restrictions does not apply between
endpoints that belong to two different split horizon groups. endpoints that belong to two different split horizon groups.
3.4.3.1. ac 3.5.3.1. ac
Attachment Circuit (AC)resides within endpoint entry either as an Attachment Circuit (AC)resides within endpoint entry either as an
independent entity or as a member of the redundancy group. AC is not independent entity or as a member of the redundancy group. AC is not
defined in this document but references the definitions being defined in this document but references the definitions being
specified by other working groups and standard bodies. specified by other working groups and standard bodies.
3.4.3.2. pw 3.5.3.2. pw
The Pseudo-wire resides within endpoint entry either as an The Pseudo-wire resides within endpoint entry either as an
independent entity or as a member of the redundancy group. The PW independent entity or as a member of the redundancy group. The PW
refers to one of the entry in the list of PWs defined with the L2VPN refers to one of the entry in the list of PWs defined with the L2VPN
instance. instance.
3.4.3.3. redundancy-grp choice 3.5.3.3. redundancy-grp choice
The redundancy-grp is a generic redundancy construct which can hold The redundancy-grp is a generic redundancy construct which can hold
primary and backup members of AC and PWs. This flexibility permits primary and backup members of AC and PWs. This flexibility permits
combinations of - combinations of -
o primary and backup AC o primary and backup AC
o primary and backup PW o primary and backup PW
o primary AC and backup PW o primary AC and backup PW
skipping to change at page 9, line 43 skipping to change at page 10, line 4
primary and backup members of AC and PWs. This flexibility permits primary and backup members of AC and PWs. This flexibility permits
combinations of - combinations of -
o primary and backup AC o primary and backup AC
o primary and backup PW o primary and backup PW
o primary AC and backup PW o primary AC and backup PW
o primary PW and backup AC o primary PW and backup AC
The redundancy group also defines attributes of the type of The redundancy group also defines attributes of the type of
redundancy, such as protection mode, reroute mode, reversion related redundancy, such as protection mode, reroute mode, reversion related
parameters, etc. parameters, etc.
3.4.4. point-to-point or multipoint service 3.5.4. point-to-point or multipoint service
The point-to-point service as defined for VPWS is represented by a The point-to-point service as defined for VPWS is represented by a
list of endpoints and is limited to two entries by the VPWS constrain list of endpoints and is limited to two entries by the VPWS constrain
rules rules
The multipoint service as defined for VPLS is represented by a list The multipoint service as defined for VPLS is represented by a list
of endpoints. of endpoints.
The 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.5. Operational State 3.6. Operational State
The operational state of L2VPN can be queried and obtained from the The operational state of L2VPN attributes has been consolidated with
read-only container defined in this document as "l2vpn-state". This the configuration as per recommendations from the guidelines for the
container holds the runtime information of the bridge-table-instance YANG author document.
and vpws-instance.
3.6. Yang tree 3.7. Yang tree
module: ietf-pseudowires
+--rw pseudowires
+--rw pseudowire* [name]
| +--rw name string
| +--ro state? pseudowire-status-type
| +--rw template? pw-template-ref
| +--rw mtu? uint16
| +--rw mac-withdraw? boolean
| +--rw cw-negotiation? cw-negotiation-type
| +--rw tunnel-policy? string
| +--rw (pw-type)?
| +--:(configured-pw)
| +--rw configured-pw
| +--rw peer-ip? inet:ip-address
| +--rw pw-id? uint32
| +--rw icb? boolean
| +--rw transmit-label? rt-types:mpls-label
| +--rw receive-label? rt-types:mpls-label
+--rw pw-templates
+--rw pw-template* [name]
+--rw name string
+--rw mtu? uint16
+--rw cw-negotiation? cw-negotiation-type
+--rw tunnel-policy? string
module: ietf-l2vpn module: ietf-l2vpn
+--rw l2vpn +--rw l2vpn
| +--rw pw-templates +--rw redundancy-group-templates
| | +--rw pw-template* [name] | +--rw redundancy-group-template* [name]
| | +--rw name string | +--rw name string
| | +--rw mtu? uint16 | +--rw protection-mode? enumeration
| | +--rw cw-negotiation? cw-negotiation-type | +--rw reroute-mode? enumeration
| | +--rw tunnel-policy? string | +--rw dual-receive? boolean
| +--rw redundancy-group-templates | +--rw revert? boolean
| | +--rw redundancy-group-template* [name] | +--rw reroute-delay? uint16
| | +--rw name string | +--rw revert-delay? uint16
| | +--rw protection-mode? enumeration +--rw instances
| | +--rw reroute-mode? enumeration +--rw instance* [name type]
| | +--rw dual-receive? boolean +--rw name string
| | +--rw revert? boolean +--rw type identityref
| | +--rw reroute-delay? uint16 +--rw mtu? uint16
| | +--rw revert-delay? uint16 +--rw mac-aging-timer? uint32
| +--rw l2vpn-instances +--rw service-type? l2vpn-service-type
| +--rw l2vpn-instance* [name type] +--rw discovery-type? l2vpn-discovery-type
| +--rw name string +--rw signaling-type l2vpn-signaling-type
| +--rw type identityref +--rw bgp-auto-discovery
| +--rw mtu? uint16 | +--rw route-distinguisher? rt-types:route-distinguisher
| +--rw mac-aging-timer? uint32 | +--rw vpn-id? string
| +--rw service-type? l2vpn-service-type | +--rw vpn-target* [route-target]
| +--rw discovery-type? l2vpn-discovery-type | +--rw route-target rt-types:route-target
| +--rw signaling-type l2vpn-signaling-type | +--rw route-target-type rt-types:route-target-type
| +--rw bgp-auto-discovery +--rw bgp-signaling
| | +--rw route-distinguisher? rt-types:route-distinguisher | +--rw site-id? uint16
| | +--rw vpn-id? string | +--rw site-range? uint16
| | +--rw vpn-target* [route-target] +--rw endpoint* [name]
| | +--rw route-target rt-types:route-target | +--rw name string
| | +--rw route-target-type rt-types:route-target-type | +--rw (ac-or-pw-or-redundancy-grp)?
| +--rw bgp-signaling
| | +--rw site-id? uint16
| | +--rw site-range? uint16
| +--rw pw* [name]
| | +--rw name string
| | +--rw template? pw-template-ref
| | +--rw mtu? uint16
| | +--rw mac-withdraw? boolean
| | +--rw cw-negotiation? cw-negotiation-type
| | +--rw tunnel-policy? string
| | +--rw (pw-type)?
| | | +--:(ldp-or-static-pw)
| | | | +--rw peer-ip? inet:ip-address
| | | | +--rw pw-id? uint32
| | | | +--rw icb? boolean
| | | | +--rw transmit-label? rt-types:mpls-label
| | | | +--rw receive-label? rt-types:mpls-label
| | | +--:(bgp-pw)
| | | | +--rw remote-pe-id? inet:ip-address
| | | +--:(bgp-ad-pw)
| | | +--rw remote-ve-id? uint16
| | +--rw vccv-ability? boolean
| | +--rw request-vlanid? uint16
| | +--rw vlan-tpid? string
| | +--rw ttl? uint8
| +--rw endpoint* [name]
| | +--rw name string
| | +--rw (ac-or-pw-or-redundancy-grp)?
| | | +--:(ac)
| | | | +--rw ac* [name]
| | | | +--rw name string
| | | +--:(pw)
| | | | +--rw pw* [name]
| | | | +--rw name -> ../../../pw/name
| | | +--:(redundancy-grp)
| | | +--rw (primary)
| | | | +--:(primary-ac)
| | | | | +--rw primary-ac? string
| | | | +--:(primary-pw)
| | | | +--rw primary-pw* [name]
| | | | +--rw name -> ../../../pw/name
| | | +--rw (backup)?
| | | | +--:(backup-ac)
| | | | | +--rw backup-ac? string
| | | | +--:(backup-pw)
| | | | +--rw backup-pw* [name]
| | | | +--rw name -> ../../../pw/name
| | | | +--rw precedence? uint32
| | | +--rw template? -> /l2vpn/redundancy-group-templates/redundancy-group-template/name
| | | +--rw protection-mode? enumeration
| | | +--rw reroute-mode? enumeration
| | | +--rw dual-receive? boolean
| | | +--rw revert? boolean
| | | +--rw reroute-delay? uint16
| | | +--rw revert-delay? uint16
| | +--rw split-horizon-group? string
| +--rw vpws-constraints
| +--rw pbb-parameters
| +--rw (component-type)?
| +--:(i-component)
| | +--rw i-sid? i-sid-type
| | +--rw backbone-src-mac? yang:mac-address
| +--:(b-component)
| +--rw bind-b-component-name? l2vpn-instance-name-ref
+--ro l2vpn-state
+--ro l2vpn-instances-state
+--ro l2vpn-instance*
+--ro name? string
+--ro type? identityref
+--ro mtu? uint16
+--ro mac-aging-timer? uint32
+--ro service-type? l2vpn-service-type
+--ro discovery-type? l2vpn-discovery-type
+--ro signaling-type l2vpn-signaling-type
+--ro bgp-auto-discovery
| +--ro route-distinguisher? rt-types:route-distinguisher
| +--ro vpn-id? string
| +--ro vpn-target* [route-target]
| +--ro route-target rt-types:route-target
| +--ro route-target-type rt-types:route-target-type
+--ro bgp-signaling
| +--ro site-id? uint16
| +--ro site-range? uint16
+--ro endpoint* [name]
| +--ro name string
| +--ro (ac-or-pw-or-redundancy-grp)?
| | +--:(ac) | | +--:(ac)
| | | +--ro ac* | | | +--rw ac* [name]
| | | +--ro name? string | | | +--rw name string
| | | +--ro state? operational-state-type | | | +--ro state? operational-state-type
| | +--:(pw) | | +--:(pw)
| | | +--ro pw* | | | +--rw pw* [name]
| | | +--ro name? string | | | +--rw name pw:pseudowire-ref
| | | +--ro state? operational-state-type | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state
| | | +--ro mtu? uint16
| | | +--ro mac-withdraw? boolean
| | | +--ro cw-negotiation? cw-negotiation-type
| | | +--ro tunnel-policy? string
| | | +--ro (pw-type)?
| | | | +--:(ldp-or-static-pw)
| | | | | +--ro peer-ip? inet:ip-address
| | | | | +--ro pw-id? uint32
| | | | | +--ro icb? boolean
| | | | | +--ro transmit-label? rt-types:mpls-label
| | | | | +--ro receive-label? rt-types:mpls-label
| | | | +--:(bgp-pw)
| | | | | +--ro remote-pe-id? inet:ip-address
| | | | +--:(bgp-ad-pw)
| | | | +--ro remote-ve-id? uint16
| | | +--ro vccv-ability? boolean
| | | +--ro request-vlanid? uint16
| | | +--ro vlan-tpid? string
| | | +--ro ttl? uint8
| | +--:(redundancy-grp) | | +--:(redundancy-grp)
| | +--ro (primary) | | +--rw (primary)
| | | +--:(primary-ac) | | | +--:(primary-ac)
| | | | +--ro primary-ac | | | | +--rw primary-ac
| | | | +--ro name? string | | | | +--rw name? string
| | | | +--ro state? operational-state-type | | | | +--ro state? operational-state-type
| | | +--:(primary-pw) | | | +--:(primary-pw)
| | | +--ro primary-pw* | | | +--rw primary-pw* [name]
| | | +--ro name? string | | | +--rw name pw:pseudowire-ref
| | | +--ro state? operational-state-type | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state
| | | +--ro mtu? uint16 | | +--rw (backup)?
| | | +--ro mac-withdraw? boolean
| | | +--ro cw-negotiation? cw-negotiation-type
| | | +--ro tunnel-policy? string
| | | +--ro (pw-type)?
| | | | +--:(ldp-or-static-pw)
| | | | | +--ro peer-ip? inet:ip-address
| | | | | +--ro pw-id? uint32
| | | | | +--ro icb? boolean
| | | | | +--ro transmit-label? rt-types:mpls-label
| | | | | +--ro receive-label? rt-types:mpls-label
| | | | +--:(bgp-pw)
| | | | | +--ro remote-pe-id? inet:ip-address
| | | | +--:(bgp-ad-pw)
| | | | +--ro remote-ve-id? uint16
| | | +--ro vccv-ability? boolean
| | | +--ro request-vlanid? uint16
| | | +--ro vlan-tpid? string
| | | +--ro ttl? uint8
| | +--ro (backup)?
| | | +--:(backup-ac) | | | +--:(backup-ac)
| | | | +--ro backup-ac | | | | +--rw backup-ac
| | | | +--ro name? string | | | | +--rw name? string
| | | | +--ro state? operational-state-type | | | | +--ro state? operational-state-type
| | | +--:(backup-pw) | | | +--:(backup-pw)
| | | +--ro backup-pw* | | | +--rw backup-pw* [name]
| | | +--ro name? string | | | +--rw name pw:pseudowire-ref
| | | +--ro state? operational-state-type | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state
| | | +--ro mtu? uint16 | | | +--rw precedence? uint32
| | | +--ro mac-withdraw? boolean | | +--rw template? -> /l2vpn/redundancy-group-templates/redundancy-group-template/name
| | | +--ro cw-negotiation? cw-negotiation-type | | +--rw protection-mode? enumeration
| | | +--ro tunnel-policy? string | | +--rw reroute-mode? enumeration
| | | +--ro (pw-type)? | | +--rw dual-receive? boolean
| | | | +--:(ldp-or-static-pw) | | +--rw revert? boolean
| | | | | +--ro peer-ip? inet:ip-address | | +--rw reroute-delay? uint16
| | | | | +--ro pw-id? uint32 | | +--rw revert-delay? uint16
| | | | | +--ro icb? boolean | +--rw split-horizon-group? string
| | | | | +--ro transmit-label? rt-types:mpls-label +--rw vpws-constraints
| | | | | +--ro receive-label? rt-types:mpls-label +--rw pbb-parameters
| | | | +--:(bgp-pw) +--rw (component-type)?
| | | | | +--ro remote-pe-id? inet:ip-address
| | | | +--:(bgp-ad-pw)
| | | | +--ro remote-ve-id? uint16
| | | +--ro vccv-ability? boolean
| | | +--ro request-vlanid? uint16
| | | +--ro vlan-tpid? string
| | | +--ro ttl? uint8
| | | +--ro precedence? uint32
| | +--ro template? -> /l2vpn/redundancy-group-templates/redundancy-group-template/name
| | +--ro protection-mode? enumeration
| | +--ro reroute-mode? enumeration
| | +--ro dual-receive? boolean
| | +--ro revert? boolean
| | +--ro reroute-delay? uint16
| | +--ro revert-delay? uint16
| +--ro split-horizon-group? string
+--ro pbb-parameters
+--ro (component-type)?
+--:(i-component) +--:(i-component)
| +--ro i-sid? i-sid-type | +--rw i-sid? i-sid-type
| +--ro backbone-src-mac? yang:mac-address | +--rw backbone-src-mac? yang:mac-address
+--:(b-component) +--:(b-component)
+--ro bind-b-component-name? string +--rw bind-b-component-name? l2vpn-instance-name-ref
+--ro bind-b-component-type? identityref +--ro bind-b-component-type? identityref
augment /pw:pseudowires/pw:pseudowire:
+--rw vccv-ability? boolean
+--rw request-vlanid? uint16
+--rw vlan-tpid? string
+--rw ttl? uint8
augment /pw:pseudowires/pw:pseudowire/pw:pw-type:
+--:(bgp-pw)
| +--rw bgp-pw
| +--rw remote-pe-id? inet:ip-address
+--:(bgp-ad-pw)
+--rw bgp-ad-pw
+--rw remote-ve-id? uint16
notifications:
+---n l2vpn-state-change-notification
+--ro l2vpn-instance-name? l2vpn-instance-name-ref
+--ro l2vpn-instance-type? -> /l2vpn/instances/instance[l2vpn:name=current()/../l2vpn-instance-name]/type
+--ro (ac-or-pw-or-redundancy-grp)?
| +--:(ac)
| | +--ro ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/pw/name
| +--:(pw)
| | +--ro pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/pw/name
| +--:(redundancy-grp)
| +--ro (primary)
| | +--:(primary-ac)
| | | +--ro primary-ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/primary-ac/name
| | +--:(primary-pw)
| | +--ro primary-pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/primary-pw/name
| +--ro (backup)?
| +--:(backup-ac)
| | +--ro backup-ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/backup-ac/name
| +--:(backup-pw)
| +--ro backup-pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/backup-pw/name
+--ro state? identityref
Figure 2 Figure 2
4. YANG Module 4. YANG Module
The L2VPN configuration container is logically divided into following The L2VPN configuration container is logically divided into following
high level config areas: high level config areas:
<CODE BEGINS> file "ietf-l2vpn@2017-03-06.yang" <CODE BEGINS> file "ietf-pseudowires@2017-06-26.yang"
module ietf-pseudowires {
namespace "urn:ietf:params:xml:ns:yang:ietf-pseudowires";
prefix "pw";
import ietf-inet-types {
prefix "inet";
}
import ietf-routing-types {
prefix "rt-types";
}
organization "ietf";
contact "ietf";
description "Pseudowire YANG model";
revision "2017-06-26" {
description "Initial revision " +
" - Created a new model for pseudowires, which used " +
" to be defined within the L2VPN model " +
"";
reference "";
}
/* Typedefs */
typedef pseudowire-ref {
type leafref {
path "/pw:pseudowires/pw:pseudowire/pw:name";
}
description "A type that is a reference to a pseudowire";
}
typedef pw-template-ref {
type leafref {
path "/pw:pseudowires/pw:pw-templates/pw:pw-template/pw:name";
}
description "A type that is a reference to a pw-template";
}
typedef cw-negotiation-type {
type enumeration {
enum "non-preferred" {
description "No preference for control-word";
}
enum "preferred" {
description "Prefer to have control-word negotiation";
}
}
description "control-word negotiation preference type";
}
typedef pseudowire-status-type {
type bits {
bit pseudowire-forwarding {
position 0;
description "Pseudowire is forwarding";
}
bit pseudowire-not-forwarding {
position 1;
description "Pseudowire is not forwarding";
}
bit local-attachment-circuit-receive-fault {
position 2;
description "Local attachment circuit (ingress) receive " +
"fault";
}
bit local-attachment-circuit-transmit-fault {
position 3;
description "Local attachment circuit (egress) transmit " +
"fault";
}
bit local-PSN-facing-PW-receive-fault {
position 4;
description "Local PSN-facing PW (ingress) receive fault";
}
bit local-PSN-facing-PW-transmit-fault {
position 5;
description "Local PSN-facing PW (egress) transmit fault";
}
bit PW-preferential-forwarding-status {
position 6;
description "Pseudowire preferential forwarding status";
}
bit PW-request-switchover-status {
position 7;
description "Pseudowire request switchover status";
}
}
description
"Pseudowire status type, as registered in the IANA " +
"Pseudowire Status Code Registry";
}
/* Groupings */
grouping pw-type-grp {
description "pseudowire type grouping";
choice pw-type {
description "A choice of pseudowire type";
case ldp-or-static-pw {
leaf peer-ip {
type inet:ip-address;
description "peer IP address";
}
leaf pw-id {
type uint32;
description "pseudowire id";
}
leaf icb {
type boolean;
description "inter-chassis backup";
}
leaf transmit-label {
type rt-types:mpls-label;
description "transmit lable";
}
leaf receive-label {
type rt-types:mpls-label;
description "receive label";
}
}
case bgp-pw {
leaf remote-pe-id {
type inet:ip-address;
description "remote pe id";
}
}
case bgp-ad-pw {
leaf remote-ve-id {
type uint16;
description "remote ve id";
}
}
}
}
/* Data */
container pseudowires {
description "Configuration management of pseudowires";
list pseudowire {
key "name";
description "A pseudowire";
leaf name {
type string;
description "pseudowire name";
}
leaf state {
type pseudowire-status-type;
config false;
description "pseudowire operation status";
reference "RFC 4446 and IANA Pseudowire Status Codes " +
"Registery";
}
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 tunnel-policy {
type string;
description "tunnel policy name";
}
choice pw-type {
description "A choice of pseudowire type";
case configured-pw {
container configured-pw {
description "LDP or static pseudowire that requires " +
"manual configuration";
leaf peer-ip {
type inet:ip-address;
description "peer IP address";
}
leaf pw-id {
type uint32;
description "pseudowire id";
}
leaf icb {
type boolean;
description "inter-chassis backup";
}
leaf transmit-label {
type rt-types:mpls-label;
description "transmit lable";
}
leaf receive-label {
type rt-types:mpls-label;
description "receive label";
}
}
}
}
}
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";
}
}
}
}
}
<CODE ENDS>
<CODE BEGINS> file "ietf-l2vpn@2017-06-26.yang"
module ietf-l2vpn { module ietf-l2vpn {
namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn"; namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn";
prefix "l2vpn"; prefix "l2vpn";
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
import ietf-mpls {
prefix "mpls";
}
import ietf-routing-types { import ietf-routing-types {
prefix "rt-types"; prefix "rt-types";
} }
import ietf-pseudowires {
prefix "pw";
}
organization "ietf"; organization "ietf";
contact "ietf"; contact "ietf";
description "l2vpn"; description "l2vpn";
revision "2017-06-26" {
description "Sixth revision " +
" - Removed unused module mpls " +
" - Renamed l2vpn-instances-state to l2vpn-instances " +
" - Added pseudowire status as defined in RFC4446 and " +
" IANA Pseudowire Status Codes Register " +
" - Added notifications " +
" - Moved PW definition out of L2VPN " +
" - Moved model to NMDA style specified in " +
" draft-dsdt-nmda-guidelines-01.txt " +
" - Renamed l2vpn-instances and l2vpn-instance to " +
" instances and instance to shorten xpaths " +
"";
reference "";
}
revision "2017-03-06" { revision "2017-03-06" {
description "Sixth revision " + description "Sixth revision " +
" - Removed the 'common' container and move pw-templates " + " - Removed the 'common' container and move pw-templates " +
" and redundancy-group-templates up a level " + " and redundancy-group-templates up a level " +
" - Consolidated the endpoint configuration such that " + " - Consolidated the endpoint configuration such that " +
" all L2VPN instances has a list of endpoint. For " + " all L2VPN instances has a list of endpoint. For " +
" certain types of L2VPN instances such as VPWS where " + " certain types of L2VPN instances such as VPWS where " +
" each L2VPN instance is limited to at most two " + " each L2VPN instance is limited to at most two " +
" endpoint, additional augment statements were included " + " endpoint, additional augment statements were included " +
" to add necessary constraints " + " to add necessary constraints " +
skipping to change at page 20, line 8 skipping to change at page 23, line 33
identity bgp-signaling { identity bgp-signaling {
base "l2vpn-signaling"; base "l2vpn-signaling";
description "Border Gateway Protocol (BGP) signaling"; description "Border Gateway Protocol (BGP) signaling";
} }
identity mixed-signaling { identity mixed-signaling {
base "l2vpn-signaling"; base "l2vpn-signaling";
description "Mixed signaling methods"; description "Mixed signaling methods";
} }
identity l2vpn-notification-state {
description "The base identity on which notification states " +
"are based";
}
identity MAC-limit-reached {
base "l2vpn-notification-state";
description "MAC limit is reached";
}
identity MAC-limit-cleared {
base "l2vpn-notification-state";
description "MAC limit is cleared";
}
identity MTU-mismatched {
base "l2vpn-notification-state";
description "MAC is mismatched";
}
identity MTU-mismatched-cleared {
base "l2vpn-notification-state";
description "MAC is mismatch is cleared";
}
identity state-changed-to-up {
base "l2vpn-notification-state";
description "State is changed to UP";
}
identity state-changed-to-down {
base "l2vpn-notification-state";
description "State is changed to down";
}
identity MAC-move-limit-exceeded {
base "l2vpn-notification-state";
description "MAC move limit is exceeded";
}
identity MAC-move-limit-exceeded-cleared {
base "l2vpn-notification-state";
description "MAC move limit exceeded is cleared";
}
identity MAC-flap-detected {
base "l2vpn-notification-state";
description "MAC flap detected";
}
identity port-disabled-due-to-MAC-flap {
base "l2vpn-notification-state";
description "Port disabled due to MAC flap";
}
/* typedefs */ /* typedefs */
typedef l2vpn-service-type { typedef l2vpn-service-type {
type identityref { type identityref {
base "l2vpn-service"; base "l2vpn-service";
} }
description "L2VPN service type"; description "L2VPN service type";
} }
typedef l2vpn-discovery-type { typedef l2vpn-discovery-type {
skipping to change at page 20, line 31 skipping to change at page 25, line 14
description "L2VPN discovery type"; description "L2VPN discovery type";
} }
typedef l2vpn-signaling-type { typedef l2vpn-signaling-type {
type identityref { type identityref {
base "l2vpn-signaling"; base "l2vpn-signaling";
} }
description "L2VPN signaling type"; description "L2VPN signaling type";
} }
typedef cw-negotiation-type {
type enumeration {
enum "non-preferred" {
description "No preference for control-word";
}
enum "preferred" {
description "Prefer to have control-word negotiation";
}
}
description "control-word negotiation preference type";
}
typedef link-discovery-protocol-type { typedef link-discovery-protocol-type {
type identityref { type identityref {
base "link-discovery-protocol"; base "link-discovery-protocol";
} }
description "This type is used to identify " + description "This type is used to identify " +
"link discovery protocol"; "link discovery protocol";
} }
typedef pbb-component-type { typedef pbb-component-type {
type enumeration { type enumeration {
skipping to change at page 21, line 16 skipping to change at page 25, line 35
description "Identifies as a b-component"; description "Identifies as a b-component";
} }
enum "i-component" { enum "i-component" {
description "Identifies as an i-component"; description "Identifies as an i-component";
} }
} }
description "This type is used to identify " + description "This type is used to identify " +
"the type of PBB component"; "the type of PBB component";
} }
typedef pw-template-ref {
type leafref {
path "/l2vpn/pw-templates/pw-template/name";
}
description "pw-template-ref";
}
typedef redundancy-group-template-ref { typedef redundancy-group-template-ref {
type leafref { type leafref {
path "/l2vpn/redundancy-group-templates" + path "/l2vpn:l2vpn/l2vpn:redundancy-group-templates" +
"/redundancy-group-template/name"; "/l2vpn:redundancy-group-template/l2vpn:name";
} }
description "redundancy-group-template-ref"; description "redundancy-group-template-ref";
} }
typedef l2vpn-instance-name-ref { typedef l2vpn-instance-name-ref {
type leafref { type leafref {
path "/l2vpn/l2vpn-instances" + path "/l2vpn:l2vpn/l2vpn:instances" +
"/l2vpn-instance/name"; "/l2vpn:instance/l2vpn:name";
} }
description "l2vpn-instance-name-ref"; description "l2vpn-instance-name-ref";
} }
typedef l2vpn-instance-type-ref { typedef l2vpn-instance-type-ref {
type leafref { type leafref {
path "/l2vpn/l2vpn-instances" + path "/l2vpn:l2vpn/l2vpn:instances" +
"/l2vpn-instance/type"; "/l2vpn:instance/l2vpn:type";
} }
description "l2vpn-instance-type-ref"; description "l2vpn-instance-type-ref";
} }
typedef operational-state-type { typedef operational-state-type {
type enumeration { type enumeration {
enum 'up' { enum 'up' {
description "Operational state is up"; description "Operational state is up";
} }
enum 'down' { enum 'down' {
skipping to change at page 22, line 23 skipping to change at page 26, line 35
range "0..16777216"; range "0..16777216";
} }
description "I-SID type that is 24-bits. " + description "I-SID type that is 24-bits. " +
"This should be moved to ieee-types.yang at " + "This should be moved to ieee-types.yang at " +
"http://www.ieee802.org/1/files/public/docs2015" + "http://www.ieee802.org/1/files/public/docs2015" +
"/new-mholness-ieee-types-yang-v01.yang"; "/new-mholness-ieee-types-yang-v01.yang";
} }
/* groupings */ /* groupings */
grouping one-l2vpn-instance-grp {
description "A grouping that identifies a single L2VPN instance";
leaf l2vpn-instance-name {
type l2vpn-instance-name-ref;
description "The L2VPN instance name";
}
leaf l2vpn-instance-type {
type leafref {
path "/l2vpn:l2vpn/l2vpn:instances" +
"/l2vpn:instance" +
"[l2vpn:name=current()/../l2vpn-instance-name]" +
"/l2vpn:type";
}
description "The L2VPN instance type";
}
}
grouping pbb-parameters-grp { grouping pbb-parameters-grp {
description "PBB parameters grouping"; description "PBB parameters grouping";
container pbb-parameters { container pbb-parameters {
description "pbb-parameters"; description "pbb-parameters";
choice component-type { choice component-type {
description "PBB component type"; description "PBB component type";
case i-component { case i-component {
leaf i-sid { leaf i-sid {
type i-sid-type; type i-sid-type;
description "I-SID"; description "I-SID";
} }
leaf backbone-src-mac { leaf backbone-src-mac {
type yang:mac-address; type yang:mac-address;
description "backbone-src-mac"; description "backbone-src-mac";
} }
} }
case b-component { case b-component {
leaf bind-b-component-name { leaf bind-b-component-name {
type l2vpn-instance-name-ref; type l2vpn-instance-name-ref;
must "/l2vpn" + must "/l2vpn:l2vpn" +
"/l2vpn-instances/l2vpn-instance[name=current()]" + "/l2vpn:instances" +
"/l2vpn:instance[l2vpn:name=current()]" +
"/type = 'vpls-instance-type'" { "/type = 'vpls-instance-type'" {
description "A b-component must be an L2VPN instance " + description "A b-component must be an L2VPN instance " +
"of type vpls-instance-type"; "of type vpls-instance-type";
} }
description "Reference to the associated b-component"; description "Reference to the associated b-component";
} }
leaf bind-b-component-type {
type identityref {
base l2vpn-instance-type;
}
must ". = 'l2vpn:vpls-instance-type'" {
description "The associated b-component must have " +
"type vpls-instance-type";
}
config false;
description "Type of the associated b-component";
}
} }
} }
} }
} }
grouping pbb-parameters-state-grp { grouping pbb-parameters-state-grp {
description "PBB parameters grouping"; description "PBB parameters grouping";
container pbb-parameters { container pbb-parameters {
description "pbb-parameters"; description "pbb-parameters";
choice component-type { choice component-type {
description "PBB component type"; description "PBB component type";
case i-component { case i-component {
skipping to change at page 23, line 33 skipping to change at page 28, line 25
} }
case b-component { case b-component {
leaf bind-b-component-name { leaf bind-b-component-name {
type string; type string;
description "Name of the associated b-component"; description "Name of the associated b-component";
} }
leaf bind-b-component-type { leaf bind-b-component-type {
type identityref { type identityref {
base l2vpn-instance-type; base l2vpn-instance-type;
} }
must ". = 'vpls-instance-type'" { must ". = 'l2vpn:vpls-instance-type'" {
description "The associated b-component must have " + description "The associated b-component must have " +
"type vpls-instance-type"; "type vpls-instance-type";
} }
description "Type of the associated b-component"; description "Type of the associated b-component";
} }
} }
} }
} }
} }
skipping to change at page 24, line 46 skipping to change at page 29, line 38
leaf site-id { leaf site-id {
type uint16; type uint16;
description "Site ID"; description "Site ID";
} }
leaf site-range { leaf site-range {
type uint16; type uint16;
description "Site Range"; description "Site Range";
} }
} }
grouping pw-common-parameters-grp {
description "Pseudowire parameters common to both " +
"VPWS and VPLS pseudowires";
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 tunnel-policy {
type string;
description "tunnel policy name";
}
uses pw-type-grp;
}
grouping pw-type-grp {
description "pseudowire type grouping";
choice pw-type {
description "A choice of pseudowire type";
case ldp-or-static-pw {
leaf peer-ip {
type inet:ip-address;
description "peer IP address";
}
leaf pw-id {
type uint32;
description "pseudowire id";
}
leaf icb {
type boolean;
description "inter-chassis backup";
}
leaf transmit-label {
type rt-types:mpls-label;
description "transmit lable";
}
leaf receive-label {
type rt-types:mpls-label;
description "receive label";
}
}
case bgp-pw {
leaf remote-pe-id {
type inet:ip-address;
description "remote pe id";
}
}
case bgp-ad-pw {
leaf remote-ve-id {
type uint16;
description "remote ve id";
}
}
}
}
grouping redundancy-group-properties-grp { grouping redundancy-group-properties-grp {
description "redundancy-group-properties-grp"; description "redundancy-group-properties-grp";
leaf protection-mode { leaf protection-mode {
type enumeration { type enumeration {
enum "frr" { enum "frr" {
value 0; value 0;
description "fast reroute"; description "fast reroute";
} }
enum "master-slave" { enum "master-slave" {
value 1; value 1;
skipping to change at page 28, line 24 skipping to change at page 31, line 41
} }
choice backup { choice backup {
description "backup options"; description "backup options";
case backup-ac { case backup-ac {
description "backup-ac"; description "backup-ac";
} }
case backup-pw { case backup-pw {
description "backup-pw"; description "backup-pw";
} }
} }
leaf template {
type leafref {
path "/l2vpn/redundancy-group-templates" +
"/redundancy-group-template/name";
}
description "Reference a redundancy group " +
"properties template";
}
uses redundancy-group-properties-grp;
} }
} }
} }
grouping ac-state-grp { grouping ac-params-grp {
description "ac-state-grp"; description "ac-state-grp";
leaf name { leaf name {
type string; type string;
description "Name of attachment circuit. " + description "Name of attachment circuit. " +
"This field is intended to " + "This field is intended to " +
"reference standardized " + "reference standardized " +
"layer-2 definitions."; "layer-2 definitions.";
} }
leaf state { leaf state {
type operational-state-type; type operational-state-type;
config false;
description "attachment circuit up/down state"; description "attachment circuit up/down state";
} }
} }
grouping common-pw-state-grp {
description "common-pw-state-grp"; grouping pw-params-grp {
description "PW state grouping";
leaf name { leaf name {
type string; type pw:pseudowire-ref;
description "pseudowire name"; description "Pseudowire name";
} }
leaf state { leaf state {
type operational-state-type; type leafref {
description "pseudowire operation state up/down"; path "/pw:pseudowires" +
} "/pw:pseudowire[pw:name=current()/../name]" +
leaf mtu { "/pw:state";
type uint16; }
description "PW MTU"; config false;
} description "Pseudowire state";
leaf mac-withdraw {
type boolean;
description "MAC withdraw is enabled (ture) or disabled (false)";
}
leaf cw-negotiation {
type cw-negotiation-type;
description "Override the control-word negotiation " +
"preference specified in the " +
"pseudowire template.";
}
leaf tunnel-policy {
type string;
description "Used to override the tunnel policy name " +
"specified in the pseduowire template";
}
uses pw-type-grp;
}
grouping vpws-only-pw-state-grp {
description "vpws-pw-state-grp";
leaf vccv-ability {
type boolean;
description "vccv-ability";
}
leaf request-vlanid {
type uint16;
description "request vlanid";
}
leaf vlan-tpid {
type string;
description "vlan tpid";
}
leaf ttl {
type uint8;
description "time-to-live";
} }
} }
/* L2VPN YANG Model */ /* L2VPN YANG Model */
container l2vpn { container l2vpn {
description "l2vpn"; description "l2vpn";
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 { container redundancy-group-templates {
description "redundancy group templates"; description "redundancy group templates";
list redundancy-group-template { list redundancy-group-template {
key "name"; key "name";
description "redundancy-group-template"; description "redundancy-group-template";
leaf name { leaf name {
type string; type string;
description "name"; description "name";
} }
uses redundancy-group-properties-grp; uses redundancy-group-properties-grp;
} }
} }
container l2vpn-instances { container instances {
description "A list of L2VPN instances"; description "A list of L2VPN instances";
list l2vpn-instance { list instance {
key "name type"; key "name type";
description "An L2VPN service instance"; description "An L2VPN service instance";
uses l2vpn-common-parameters-grp; uses l2vpn-common-parameters-grp;
container bgp-auto-discovery { container bgp-auto-discovery {
description "BGP auto-discovery parameters"; description "BGP auto-discovery parameters";
leaf route-distinguisher { leaf route-distinguisher {
type rt-types:route-distinguisher; type rt-types:route-distinguisher;
description "BGP route distinguisher"; description "BGP route distinguisher";
} }
leaf vpn-id { leaf vpn-id {
skipping to change at page 31, line 28 skipping to change at page 33, line 26
} }
container bgp-signaling { container bgp-signaling {
when "../signaling-type = 'bgp-signaling'" { when "../signaling-type = 'bgp-signaling'" {
description "Check signaling type: " + description "Check signaling type: " +
"Can only configure BGP signaling if " + "Can only configure BGP signaling if " +
"signaling type is BGP"; "signaling type is BGP";
} }
description "BGP signaling parameters"; description "BGP signaling parameters";
uses bgp-signaling-parameters-grp; uses bgp-signaling-parameters-grp;
} }
list pw {
key "name";
description "A pseudowire";
uses pw-common-parameters-grp;
}
list endpoint { list endpoint {
key "name"; key "name";
description "An endpoint"; description "An endpoint";
leaf name { leaf name {
type string; type string;
description "endpoint name"; description "endpoint name";
} }
uses endpoint-grp { uses endpoint-grp {
augment "ac-or-pw-or-redundancy-grp/ac" { augment "ac-or-pw-or-redundancy-grp/ac" {
description "Augment for attachment circuit(s) " + description "Augment for attachment circuit(s) " +
"as an endpoint"; "as an endpoint";
list ac { list ac {
key "name"; key "name";
leaf name { uses ac-params-grp;
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
description "An L2VPN instance's " + description "An L2VPN instance's " +
"attachment circuit list"; "attachment circuit list";
} }
} }
augment "ac-or-pw-or-redundancy-grp/pw" { augment "ac-or-pw-or-redundancy-grp/pw" {
description "Augment for pseudowire(s) as an endpoint"; description "Augment for pseudowire(s) as an endpoint";
list pw { list pw {
key "name"; key "name";
leaf name { uses pw-params-grp {
type leafref { description "Pseudowire parameters";
path "../../../pw/name"; refine "name" {
must "(../../../type = " +
" 'l2vpn:vpws-instance-type') or " +
"(not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /vccv-ability)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /request-vlanid)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /vlan-tpid)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /ttl)))" {
description "Only a VPWS PW has parameters " +
"vccv-ability, request-vlanid, " +
"vlan-tpid, and ttl";
}
} }
description "name of pseudowire";
} }
description "An L2VPN instance's pseudowire list"; description "An L2VPN instance's pseudowire list";
} }
} }
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" { "primary/primary-ac" {
description "Augment for primary-ac"; description "Augment for primary-ac";
leaf primary-ac { container primary-ac {
type string; description "Primary AC";
description "Name of primary attachment circuit. " + uses ac-params-grp;
"This field is intended to reference " +
"standardized layer-2 definitions.";
} }
} }
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" { "primary/primary-pw" {
description "Augment for primary-pw"; description "Augment for primary-pw";
list primary-pw { list primary-pw {
key "name"; key "name";
leaf name { uses pw-params-grp {
type leafref { description "Pseudowire parameters";
path "../../../pw/name"; refine "name" {
must "(../../../type = " +
" 'l2vpn:vpws-instance-type') or " +
"(not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /vccv-ability)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /request-vlanid)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /vlan-tpid)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /ttl)))" {
description "Only a VPWS PW has parameters " +
"vccv-ability, request-vlanid, " +
"vlan-tpid, and ttl";
}
} }
description "name of pseudowire";
} }
description "An L2VPN instance's pseudowire list"; description "An L2VPN instance's pseudowire list";
} }
} }
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" { "backup/backup-ac" {
description "Augment for backup-ac"; description "Augment for backup-ac";
leaf backup-ac { container backup-ac {
type string; description "Backup AC";
description "Name of backup attachment circuit. " + uses ac-params-grp;
"This field is intended to reference " +
"standardized layer-2 definitions.";
} }
} }
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" { "backup/backup-pw" {
description "Augment for backup-pw"; description "Augment for backup-pw";
list backup-pw { list backup-pw {
key "name"; key "name";
leaf name { uses pw-params-grp {
type leafref { description "Pseudowire parameters";
path "../../../pw/name"; refine "name" {
must "(../../../type = " +
" 'l2vpn:vpws-instance-type') or " +
"(not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /vccv-ability)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /request-vlanid)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /vlan-tpid)) and " +
" not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" +
" /ttl)))" {
description "Only a VPWS PW has parameters " +
"vccv-ability, request-vlanid, " +
"vlan-tpid, and ttl";
}
} }
description "Reference an attachment circuit";
} }
description "A list of backup pseudowires"; description "A list of backup pseudowires";
} }
} }
} augment "ac-or-pw-or-redundancy-grp/redundancy-grp" {
} description "Augment for redundancy group properties";
} leaf template {
} type leafref {
} path "/l2vpn/redundancy-group-templates" +
"/redundancy-group-template/name";
container l2vpn-state { }
config false; description "Reference a redundancy group " +
description "l2vpn state"; "properties template";
container l2vpn-instances-state {
description "L2VPN instances state";
list l2vpn-instance {
description "An L2VPN instance's state";
uses l2vpn-common-parameters-grp;
container bgp-auto-discovery {
description "BGP auto-discovery parameters";
leaf route-distinguisher {
type rt-types:route-distinguisher;
description "BGP route distinguisher";
}
leaf vpn-id {
type string;
description "VPN ID";
}
uses rt-types:vpn-route-targets;
}
container bgp-signaling {
description "BGP signaling parameters";
uses bgp-signaling-parameters-grp;
}
list endpoint {
key "name";
description "An endpoint";
leaf name {
type string;
description "endpoint name";
}
uses endpoint-grp {
augment "ac-or-pw-or-redundancy-grp/ac" {
description "Augment of attachment circuit state";
list ac {
uses ac-state-grp;
description "An attachment circuit's " +
"operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "Augment of pseudowire state";
list pw {
uses common-pw-state-grp;
description "A pseudowire's operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "Augment of primary attachment circuit state";
container primary-ac {
uses ac-state-grp;
description "An attachment circuit's " +
"operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "Augment of primary pseudowire state";
list primary-pw {
uses common-pw-state-grp;
description "A pseudowire's operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "Augment of backup attachment circuit state";
container backup-ac {
uses ac-state-grp;
description "An attachment circuit's " +
"operational state";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "Augment of backup pseudowire state";
list backup-pw {
uses common-pw-state-grp;
description "A pseudowire's operational state";
} }
uses redundancy-group-properties-grp;
} }
} }
} }
} }
} }
} }
/* augments */ /* augments */
augment "/l2vpn/l2vpn-instances/l2vpn-instance" { augment "/pw:pseudowires/pw:pseudowire" {
when "type = 'vpws-instance-type'" {
description "Constraints only for VPWS pseudowires";
}
description "Augment for VPWS instance";
container vpws-constraints {
must "(count(../endpoint) <= 2) and " +
"(count(../endpoint/pw) <= 1) and " +
"(count(../endpoint/ac) <= 1) and " +
"(count(../endpoint/primary-pw) <= 1) and " +
"(count(../endpoint/backup-pw) <= 1) " {
description "A VPWS L2VPN instance has at most 2 endpoints " +
"and each endpoint has at most 1 pseudowire or " +
"1 attachment circuit";
}
description "VPWS constraints";
}
}
augment "/l2vpn/l2vpn-instances/l2vpn-instance/pw" {
when "../type = 'vpws-instance-type'" {
description "Pseudowire parameters only for VPWS pseudowires";
}
description "Augment for peudowire parameters for " + description "Augment for peudowire parameters for " +
"VPWS pseudowires"; "VPWS pseudowires";
leaf vccv-ability { leaf vccv-ability {
type boolean; type boolean;
description "vccvability"; description "vccvability";
} }
leaf request-vlanid { leaf request-vlanid {
type uint16; type uint16;
description "request vlanid"; description "request vlanid";
} }
leaf vlan-tpid { leaf vlan-tpid {
type string; type string;
description "vlan tpid"; description "vlan tpid";
} }
leaf ttl { leaf ttl {
type uint8; type uint8;
description "time-to-live"; description "time-to-live";
} }
} }
augment "/l2vpn/l2vpn-instances/l2vpn-instance" { augment "/pw:pseudowires/pw:pseudowire/pw:pw-type" {
when "type = 'vpls-instance-type'" { description "Additional pseudowire types";
case bgp-pw {
container bgp-pw {
description "BGP pseudowire";
leaf remote-pe-id {
type inet:ip-address;
description "remote pe id";
}
}
}
case bgp-ad-pw {
container bgp-ad-pw {
description "BGP auto-discovery pseudowire";
leaf remote-ve-id {
type uint16;
description "remote ve id";
}
}
}
}
augment "/l2vpn/instances/instance" {
when "type = 'l2vpn:vpws-instance-type'" {
description "Constraints only for VPWS pseudowires";
}
description "Augment for VPWS instance";
container vpws-constraints {
must "(count(../endpoint) < 2) and " +
"(count(../endpoint/pw) < 1) and " +
"(count(../endpoint/ac) < 1) and " +
"(count(../endpoint/primary-pw) < 1) and " +
"(count(../endpoint/backup-pw) < 1) " {
description "A VPWS L2VPN instance has at most 2 endpoints " +
"and each endpoint has at most 1 pseudowire or " +
"1 attachment circuit";
}
description "VPWS constraints";
}
}
augment "/l2vpn/instances/instance" {
when "type = 'l2vpn:vpls-instance-type'" {
description "Parameters specifically for a VPLS instance"; description "Parameters specifically for a VPLS instance";
} }
description "Augment for parameters for a VPLS instance"; description "Augment for parameters for a VPLS instance";
uses pbb-parameters-grp; uses pbb-parameters-grp;
} }
augment "/l2vpn/l2vpn-instances/l2vpn-instance/endpoint" { augment "/l2vpn/instances/instance/endpoint" {
when "../type = 'vpls-instance-type'" { when "../type = 'l2vpn:vpls-instance-type'" {
description "Endpoint parameter specifically for " + description "Endpoint parameter specifically for " +
"a VPLS instance"; "a VPLS instance";
} }
description "Augment for endpoint parameters for a VPLS instance"; description "Augment for endpoint parameters for a VPLS instance";
leaf split-horizon-group { leaf split-horizon-group {
type string; type string;
description "Identify a split horizon group"; description "Identify a split horizon group";
} }
} }
augment "/l2vpn/l2vpn-instances/l2vpn-instance/endpoint" + augment "/l2vpn/instances/instance/endpoint" +
"/ac-or-pw-or-redundancy-grp/redundancy-grp" + "/ac-or-pw-or-redundancy-grp/redundancy-grp" +
"/backup/backup-pw/backup-pw" { "/backup/backup-pw/backup-pw" {
when "../../type = 'vpls-instance-type'" { when "../../type = 'l2vpn:vpls-instance-type'" {
description "Backup pseudowire parameter specifically for " + description "Backup pseudowire parameter specifically for " +
"a VPLS instance"; "a VPLS instance";
} }
description "Augment for backup pseudowire paramters for " + description "Augment for backup pseudowire paramters for " +
"a VPLS instance"; "a VPLS instance";
leaf precedence { leaf precedence {
type uint32; type uint32;
description "precedence of the pseudowire"; description "precedence of the pseudowire";
} }
} }
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" + /* Notifications */
"/endpoint/ac-or-pw-or-redundancy-grp/pw/pw" {
when "../../type = 'vpws-instance-type'" {
description "Additional operational state specifically for " +
"a VPWS instance's pseudowire endpoint";
}
description "Augment for a VPWS instance's pseudowire endpoint " +
"operational state";
uses vpws-only-pw-state-grp;
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
"/endpoint/ac-or-pw-or-redundancy-grp/redundancy-grp" +
"/primary/primary-pw/primary-pw" {
when "../../type = 'vpws-instance-type'" {
description "Additional operational state specifically for " +
"a VPWS instance's primary pseudowire endpoint";
}
description "Augment for a VPWS instance's primary pseudowire " +
"endpoint operational state";
uses vpws-only-pw-state-grp;
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
"/endpoint/ac-or-pw-or-redundancy-grp/redundancy-grp" +
"/backup/backup-pw/backup-pw" {
when "../../type = 'vpws-instance-type'" {
description "Additional operational state specifically for " +
"a VPWS instance's backup pseudowire endpoint";
}
description "Augment for a VPWS instance's backup pseudowire " +
"endpoint operational state";
uses vpws-only-pw-state-grp;
}
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" + notification l2vpn-state-change-notification {
"/endpoint" { description "L2VPN and constituents state change notification";
when "../type = 'vpls-instance-type'" { uses one-l2vpn-instance-grp;
description "Endpoint parameter specifically for " + uses endpoint-grp {
"a VPLS instance operational state"; augment "ac-or-pw-or-redundancy-grp/ac" {
} description "Augment for attachment circuit(s) " +
description "Augment for endpoint parameters for a VPLS " + "as an endpoint";
"instance operational state"; leaf ac {
leaf split-horizon-group { type leafref {
type string; path "/l2vpn/instances/instance" +
description "Identify a split horizon group"; "[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" +
"/endpoint/pw/name";
}
description "Related attachment circuit";
}
}
augment "ac-or-pw-or-redundancy-grp/pw" {
description "Augment for pseudowire(s) as an endpoint";
leaf pw {
type leafref {
path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" +
"/endpoint/pw/name";
}
description "Related pseudowire";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-ac" {
description "Augment for primary-ac";
leaf primary-ac {
type leafref {
path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" +
"/endpoint/primary-ac/name";
}
description "Related primary attachment circuit";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"primary/primary-pw" {
description "Augment for primary-pw";
leaf primary-pw {
type leafref {
path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" +
"/endpoint/primary-pw/name";
}
description "Related primary pseudowire";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-ac" {
description "Augment for backup-ac";
leaf backup-ac {
type leafref {
path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" +
"/endpoint/backup-ac/name";
}
description "Related backup attachment circuit";
}
}
augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" +
"backup/backup-pw" {
description "Augment for backup-pw";
leaf backup-pw {
type leafref {
path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" +
"/endpoint/backup-pw/name";
}
description "Related backup pseudowire";
}
}
} }
} leaf state {
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" { type identityref {
when "type = 'vpls-instance-type'" { base l2vpn-notification-state;
description "Additional operational state specifically for " + }
"a VPLS instance"; description "State change notification";
} }
description "Augment for a VPLS instance's " +
"operational state";
uses pbb-parameters-state-grp;
} }
augment "/l2vpn-state/l2vpn-instances-state/l2vpn-instance" +
"/endpoint/ac-or-pw-or-redundancy-grp/redundancy-grp" +
"/backup/backup-pw/backup-pw" {
when "../../type = 'vpls-instance-type'" {
description "Additional operational state specifically for " +
"a VPLS instance's backup pseudowire endpoint";
}
description "Augment for a VPLS instance's backup pseudowire " +
"endpoint operational state";
leaf precedence {
type uint32;
description "precedence of the pseudowire";
}
}
} }
<CODE ENDS> <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
skipping to change at page 43, line 38 skipping to change at page 45, line 38
Email: nick.deregno@verizon.com Email: nick.deregno@verizon.com
Luay Jalil Luay Jalil
Verizon Verizon
Email: luay.jalil@verizon.com Email: luay.jalil@verizon.com
Maria Joecylyn Maria Joecylyn
Verizon Verizon
Email: joecylyn.malit@verizon.com Email: joecylyn.malit@verizon.com
Figure 4
Authors' Addresses Authors' Addresses
Himanshu Shah Himanshu Shah
Ciena Corporation Ciena Corporation
Email: hshah@ciena.com Email: hshah@ciena.com
Patrice Brissette Patrice Brissette
Cisco Systems, Inc. Cisco Systems, Inc.
 End of changes. 89 change blocks. 
675 lines changed or deleted 784 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/