draft-ietf-bess-l2vpn-yang-06.txt   draft-ietf-bess-l2vpn-yang-07.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: January 1, 2018 Cisco Systems, Inc. Expires: April 3, 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
June 30, 2017 September 30, 2017
YANG Data Model for MPLS-based L2VPN YANG Data Model for MPLS-based L2VPN
draft-ietf-bess-l2vpn-yang-06.txt draft-ietf-bess-l2vpn-yang-07.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 42 skipping to change at page 1, line 42
Ethernet Segment and EVPN data models defined in separate document. 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 https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 1, 2018. This Internet-Draft will expire on April 3, 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 (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
skipping to change at page 2, line 40 skipping to change at page 2, line 40
3.4. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8 3.4. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8
3.4.1. redundancy-group-templates . . . . . . . . . . . . . 8 3.4.1. redundancy-group-templates . . . . . . . . . . . . . 8
3.5. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 8 3.5. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 8
3.5.1. common attributes . . . . . . . . . . . . . . . . . . 8 3.5.1. common attributes . . . . . . . . . . . . . . . . . . 8
3.5.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 8 3.5.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 8
3.5.3. List of endpoints . . . . . . . . . . . . . . . . . . 9 3.5.3. List of endpoints . . . . . . . . . . . . . . . . . . 9
3.5.4. point-to-point or multipoint service . . . . . . . . 10 3.5.4. point-to-point or multipoint service . . . . . . . . 10
3.6. Operational State . . . . . . . . . . . . . . . . . . . . 10 3.6. Operational State . . . . . . . . . . . . . . . . . . . . 10
3.7. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 10 3.7. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 10
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 13 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 13
5. Security Considerations . . . . . . . . . . . . . . . . . . . 40 5. Security Considerations . . . . . . . . . . . . . . . . . . . 42
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 41 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 42
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 41 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 42
8.1. Normative References . . . . . . . . . . . . . . . . . . 41 8.1. Normative References . . . . . . . . . . . . . . . . . . 42
8.2. Informative References . . . . . . . . . . . . . . . . . 41 8.2. Informative References . . . . . . . . . . . . . . . . . 42
Appendix A. Example Configuration . . . . . . . . . . . . . . . 44 Appendix A. Example Configuration . . . . . . . . . . . . . . . 45
Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 44 Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 45
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 45 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 47
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 43 skipping to change at page 3, line 43
o Configuration o Configuration
o Operational State o Operational State
o Executables (Actions) o Executables (Actions)
o Notifications o Notifications
The current document focuses on definition of configuration, state The current document focuses on definition of configuration, state
and notificationobjects. and notification objects.
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. in the list of endpoints.
The Pseudowire data object model is defined independent of the L2VPN The Pseudowire data object model is defined independent of the L2VPN
data object model to allow its inclusion in the Ethernet Segment and data object model to allow its inclusion in the Ethernet Segment and
EVPN data objects. EVPN data objects.
skipping to change at page 4, line 34 skipping to change at page 4, line 34
In this version of the document, for configuration, one single In this version of the document, for configuration, one single
container, l2vpn, is defined. Within the l2vpn container, common container, l2vpn, is defined. Within the l2vpn container, common
parameters and a list of endpoints are defined. For the point-to- parameters and a list of endpoints are defined. For the point-to-
point VPWS configuration, endpoint list is used with the constraint point VPWS configuration, endpoint list is used with the constraint
that limits the number of endpoints to be two. For the multipoint that limits the number of endpoints to be two. For the multipoint
service, endpoint list is used. Each endpoint contains the common service, endpoint list is used. Each endpoint contains the common
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 in the previous
list is used by both the VPLS and VPWS service with the exception versions. The same endpoint list is used by both the VPLS and VPWS
that VPWS uses only two entries. service with the exception 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 State objects have been consolidated with the configuration The State objects have been consolidated with the configuration
object as per the recommendations provided by the Guidelines for Yang object as per the recommendations provided by the Guidelines for Yang
Module Authors document. Module Authors document.
The IETF working group has defined the VPWS and VPLS services that The IETF working group has defined the VPWS and VPLS services that
leverages the pseudowire technologies defined by the PWE3 working leverages the pseudowire technologies defined by the PWE3 working
skipping to change at page 12, line 50 skipping to change at page 12, line 50
| +--rw bgp-pw | +--rw bgp-pw
| +--rw remote-pe-id? inet:ip-address | +--rw remote-pe-id? inet:ip-address
+--:(bgp-ad-pw) +--:(bgp-ad-pw)
+--rw bgp-ad-pw +--rw bgp-ad-pw
+--rw remote-ve-id? uint16 +--rw remote-ve-id? uint16
notifications: notifications:
+---n l2vpn-state-change-notification +---n l2vpn-state-change-notification
+--ro l2vpn-instance-name? l2vpn-instance-name-ref +--ro l2vpn-instance-name? l2vpn-instance-name-ref
+--ro l2vpn-instance-type? -> /l2vpn/instances/instance[l2vpn:name=current()/../l2vpn-instance-name]/type +--ro l2vpn-instance-type? -> /l2vpn/instances/instance[l2vpn:name=current()/../l2vpn-instance-name]/type
+--ro endpoint? -> /l2vpn/instances/instance[l2vpn:name=current()/../l2vpn-instance-name][l2vpn:type=current()/../l2vpn-instance-type]/l2vpn:endpoint/name
+--ro (ac-or-pw-or-redundancy-grp)? +--ro (ac-or-pw-or-redundancy-grp)?
| +--:(ac) | +--:(ac)
| | +--ro ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/pw/name | | +--ro ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint[name=current()/../endpoint]/ac/name
| +--:(pw) | +--:(pw)
| | +--ro pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/pw/name | | +--ro pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint[name=current()/../endpoint]/pw/name
| +--:(redundancy-grp) | +--:(redundancy-grp)
| +--ro (primary) | +--ro (primary)
| | +--:(primary-ac) | | +--:(primary-ac)
| | | +--ro primary-ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/primary-ac/name | | | +--ro primary-ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint[name=current()/../endpoint]/primary-ac/name
| | +--:(primary-pw) | | +--:(primary-pw)
| | +--ro primary-pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/primary-pw/name | | +--ro primary-pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint[name=current()/../endpoint]/primary-pw/name
| +--ro (backup)? | +--ro (backup)?
| +--:(backup-ac) | +--:(backup-ac)
| | +--ro backup-ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/backup-ac/name | | +--ro backup-ac? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint[name=current()/../endpoint]/backup-ac/name
| +--:(backup-pw) | +--:(backup-pw)
| +--ro backup-pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint/backup-pw/name | +--ro backup-pw? -> /l2vpn/instances/instance[name=current()/../l2vpn-instance-name][type=current()/../l2vpn-instance-type]/endpoint[name=current()/../endpoint]/backup-pw/name
+--ro state? identityref +--ro state? identityref
Figure 2 Figure 2
4. YANG Module 4. YANG Module
The L2VPN configuration container is logically divided into following The L2VPN configuration container is logically divided into following
high level config areas: high level config areas:
<CODE BEGINS> file "ietf-pseudowires@2017-06-26.yang" <CODE BEGINS> file "ietf-pseudowires@2017-06-26.yang"
skipping to change at page 18, line 26 skipping to change at page 18, line 28
leaf tunnel-policy { leaf tunnel-policy {
type string; type string;
description "tunnel policy name"; description "tunnel policy name";
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-l2vpn@2017-06-26.yang" <CODE BEGINS> file "ietf-l2vpn@2017-09-21.yang"
module ietf-l2vpn { module ietf-l2vpn {
namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn"; namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn";
prefix "l2vpn"; prefix "l2vpn";
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
skipping to change at page 18, line 50 skipping to change at page 19, line 4
prefix "rt-types"; prefix "rt-types";
} }
import ietf-pseudowires { import ietf-pseudowires {
prefix "pw"; prefix "pw";
} }
organization "ietf"; organization "ietf";
contact "ietf"; contact "ietf";
description "l2vpn"; description "l2vpn";
revision "2017-09-21" {
description "Seventh revision " +
" - Fixed yangdump errors " +
"";
reference "";
}
revision "2017-06-26" { revision "2017-06-26" {
description "Sixth revision " + description "Sixth revision " +
" - Removed unused module mpls " + " - Removed unused module mpls " +
" - Renamed l2vpn-instances-state to l2vpn-instances " + " - Renamed l2vpn-instances-state to l2vpn-instances " +
" - Added pseudowire status as defined in RFC4446 and " + " - Added pseudowire status as defined in RFC4446 and " +
" IANA Pseudowire Status Codes Register " + " IANA Pseudowire Status Codes Register " +
" - Added notifications " + " - Added notifications " +
" - Moved PW definition out of L2VPN " + " - Moved PW definition out of L2VPN " +
" - Moved model to NMDA style specified in " + " - Moved model to NMDA style specified in " +
skipping to change at page 26, line 34 skipping to change at page 26, line 43
type uint32 { type uint32 {
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 { grouping one-l2vpn-endpoint-grp {
description "A grouping that identifies a single L2VPN instance"; description "A grouping that identifies a single endpoint " +
"within a single L2VPN instance";
leaf l2vpn-instance-name { leaf l2vpn-instance-name {
type l2vpn-instance-name-ref; type l2vpn-instance-name-ref;
description "The L2VPN instance name"; description "The L2VPN instance name";
} }
leaf l2vpn-instance-type { leaf l2vpn-instance-type {
type leafref { type leafref {
path "/l2vpn:l2vpn/l2vpn:instances" + path "/l2vpn:l2vpn/l2vpn:instances" +
"/l2vpn:instance" + "/l2vpn:instance" +
"[l2vpn:name=current()/../l2vpn-instance-name]" + "[l2vpn:name=current()/../l2vpn-instance-name]" +
"/l2vpn:type"; "/l2vpn:type";
} }
description "The L2VPN instance type"; description "The L2VPN instance type";
} }
leaf endpoint {
type leafref {
path "/l2vpn:l2vpn/l2vpn:instances" +
"/l2vpn:instance" +
"[l2vpn:name=current()/../l2vpn-instance-name]" +
"[l2vpn:type=current()/../l2vpn-instance-type]" +
"/l2vpn:endpoint/l2vpn:name";
}
}
} }
*/
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";
skipping to change at page 31, line 45 skipping to change at page 32, line 16
description "backup-ac"; description "backup-ac";
} }
case backup-pw { case backup-pw {
description "backup-pw"; description "backup-pw";
} }
} }
} }
} }
} }
grouping ac-params-grp {
description "ac-state-grp";
leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
leaf state {
type operational-state-type;
config false;
description "attachment circuit up/down state";
}
}
grouping pw-params-grp {
description "PW state grouping";
leaf name {
type pw:pseudowire-ref;
description "Pseudowire name";
}
leaf state {
type leafref {
path "/pw:pseudowires" +
"/pw:pseudowire[pw:name=current()/../name]" +
"/pw:state";
}
config false;
description "Pseudowire state";
}
}
/* L2VPN YANG Model */ /* L2VPN YANG Model */
container l2vpn { container l2vpn {
description "l2vpn"; description "l2vpn";
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";
skipping to change at page 33, line 39 skipping to change at page 33, line 25
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";
uses ac-params-grp; leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
leaf state {
type operational-state-type;
config false;
description "attachment circuit up/down state";
}
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";
uses pw-params-grp { leaf name {
description "Pseudowire parameters"; type pw:pseudowire-ref;
refine "name" { must "(../../../type = " +
must "(../../../type = " +
" 'l2vpn:vpws-instance-type') or " + " 'l2vpn:vpws-instance-type') or " +
"(not(boolean(/pw:pseudowires" + "(not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /vccv-ability)) and " + " /vccv-ability)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /request-vlanid)) and " + " /request-vlanid)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /vlan-tpid)) and " + " /vlan-tpid)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /ttl)))" { " /ttl)))" {
description "Only a VPWS PW has parameters " + description "Only a VPWS PW has parameters " +
"vccv-ability, request-vlanid, " + "vccv-ability, request-vlanid, " +
"vlan-tpid, and ttl"; "vlan-tpid, and ttl";
} }
description "Pseudowire name";
}
leaf state {
type leafref {
path "/pw:pseudowires" +
"/pw:pseudowire[pw:name=current()/../name]" +
"/pw:state";
} }
config false;
description "Pseudowire state";
} }
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";
container primary-ac { container primary-ac {
description "Primary AC"; description "Primary AC";
uses ac-params-grp; leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
leaf state {
type operational-state-type;
config false;
description "attachment circuit up/down state";
}
} }
} }
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";
uses pw-params-grp { leaf name {
description "Pseudowire parameters"; type pw:pseudowire-ref;
refine "name" { must "(../../../type = " +
must "(../../../type = " +
" 'l2vpn:vpws-instance-type') or " + " 'l2vpn:vpws-instance-type') or " +
"(not(boolean(/pw:pseudowires" + "(not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /vccv-ability)) and " + " /vccv-ability)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /request-vlanid)) and " + " /request-vlanid)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /vlan-tpid)) and " + " /vlan-tpid)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /ttl)))" { " /ttl)))" {
description "Only a VPWS PW has parameters " + description "Only a VPWS PW has parameters " +
"vccv-ability, request-vlanid, " + "vccv-ability, request-vlanid, " +
"vlan-tpid, and ttl"; "vlan-tpid, and ttl";
} }
description "Pseudowire name";
}
leaf state {
type leafref {
path "/pw:pseudowires" +
"/pw:pseudowire[pw:name=current()/../name]" +
"/pw:state";
} }
config false;
description "Pseudowire state";
} }
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";
container backup-ac { container backup-ac {
description "Backup AC"; description "Backup AC";
uses ac-params-grp; leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
leaf state {
type operational-state-type;
config false;
description "attachment circuit up/down state";
}
} }
} }
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";
uses pw-params-grp { leaf name {
description "Pseudowire parameters"; type pw:pseudowire-ref;
refine "name" { must "(../../../type = " +
must "(../../../type = " +
" 'l2vpn:vpws-instance-type') or " + " 'l2vpn:vpws-instance-type') or " +
"(not(boolean(/pw:pseudowires" + "(not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /vccv-ability)) and " + " /vccv-ability)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /request-vlanid)) and " + " /request-vlanid)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /vlan-tpid)) and " + " /vlan-tpid)) and " +
" not(boolean(/pw:pseudowires" + " not(boolean(/pw:pseudowires" +
" /pw:pseudowire[pw:name = current()]" + " /pw:pseudowire[pw:name = current()]" +
" /ttl)))" { " /ttl)))" {
description "Only a VPWS PW has parameters " + description "Only a VPWS PW has parameters " +
"vccv-ability, request-vlanid, " + "vccv-ability, request-vlanid, " +
"vlan-tpid, and ttl"; "vlan-tpid, and ttl";
} }
description "Pseudowire name";
}
leaf state {
type leafref {
path "/pw:pseudowires" +
"/pw:pseudowire[pw:name=current()/../name]" +
"/pw:state";
} }
config false;
description "Pseudowire state";
} }
description "A list of backup pseudowires"; description "A list of backup pseudowires";
} }
} }
augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { augment "ac-or-pw-or-redundancy-grp/redundancy-grp" {
description "Augment for redundancy group properties"; description "Augment for redundancy group properties";
leaf template { leaf template {
type leafref { type leafref {
path "/l2vpn/redundancy-group-templates" + path "/l2vpn/redundancy-group-templates" +
"/redundancy-group-template/name"; "/redundancy-group-template/name";
skipping to change at page 37, line 29 skipping to change at page 38, line 25
} }
} }
} }
augment "/l2vpn/instances/instance" { augment "/l2vpn/instances/instance" {
when "type = 'l2vpn:vpws-instance-type'" { when "type = 'l2vpn:vpws-instance-type'" {
description "Constraints only for VPWS pseudowires"; description "Constraints only for VPWS pseudowires";
} }
description "Augment for VPWS instance"; description "Augment for VPWS instance";
container vpws-constraints { container vpws-constraints {
must "(count(../endpoint) < 2) and " + must "(count(../endpoint) <= 2) and " +
"(count(../endpoint/pw) < 1) and " + "(count(../endpoint/pw) <= 1) and " +
"(count(../endpoint/ac) < 1) and " + "(count(../endpoint/ac) <= 1) and " +
"(count(../endpoint/primary-pw) < 1) and " + "(count(../endpoint/primary-pw) <= 1) and " +
"(count(../endpoint/backup-pw) < 1) " { "(count(../endpoint/backup-pw) <= 1) " {
description "A VPWS L2VPN instance has at most 2 endpoints " + description "A VPWS L2VPN instance has at most 2 endpoints " +
"and each endpoint has at most 1 pseudowire or " + "and each endpoint has at most 1 pseudowire or " +
"1 attachment circuit"; "1 attachment circuit";
} }
description "VPWS constraints"; description "VPWS constraints";
} }
} }
augment "/l2vpn/instances/instance" { augment "/l2vpn/instances/instance" {
when "type = 'l2vpn:vpls-instance-type'" { when "type = 'l2vpn:vpls-instance-type'" {
skipping to change at page 38, line 33 skipping to change at page 39, line 28
leaf precedence { leaf precedence {
type uint32; type uint32;
description "precedence of the pseudowire"; description "precedence of the pseudowire";
} }
} }
/* Notifications */ /* Notifications */
notification l2vpn-state-change-notification { notification l2vpn-state-change-notification {
description "L2VPN and constituents state change notification"; description "L2VPN and constituents state change notification";
uses one-l2vpn-instance-grp; 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";
}
leaf endpoint {
type leafref {
path "/l2vpn:l2vpn/l2vpn:instances" +
"/l2vpn:instance" +
"[l2vpn:name=current()/../l2vpn-instance-name]" +
"[l2vpn:type=current()/../l2vpn-instance-type]" +
"/l2vpn:endpoint/l2vpn:name";
}
description "The endpoint";
}
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";
leaf ac { leaf ac {
type leafref { type leafref {
path "/l2vpn/instances/instance" + path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" + "[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" + "[type=current()/../l2vpn-instance-type]" +
"/endpoint/pw/name"; "/endpoint[name=current()/../endpoint]/ac/name";
} }
description "Related attachment circuit"; description "Related attachment circuit";
} }
} }
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";
leaf pw { leaf pw {
type leafref { type leafref {
path "/l2vpn/instances/instance" + path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" + "[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" + "[type=current()/../l2vpn-instance-type]" +
"/endpoint/pw/name"; "/endpoint[name=current()/../endpoint]/pw/name";
} }
description "Related pseudowire"; description "Related pseudowire";
} }
} }
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 { leaf primary-ac {
type leafref { type leafref {
path "/l2vpn/instances/instance" + path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" + "[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" + "[type=current()/../l2vpn-instance-type]" +
"/endpoint/primary-ac/name"; "/endpoint[name=current()/../endpoint]/primary-ac/name";
} }
description "Related primary attachment circuit"; description "Related primary attachment circuit";
} }
} }
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";
leaf primary-pw { leaf primary-pw {
type leafref { type leafref {
path "/l2vpn/instances/instance" + path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" + "[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" + "[type=current()/../l2vpn-instance-type]" +
"/endpoint/primary-pw/name"; "/endpoint[name=current()/../endpoint]/primary-pw/name";
} }
description "Related primary pseudowire"; description "Related primary pseudowire";
} }
} }
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 { leaf backup-ac {
type leafref { type leafref {
path "/l2vpn/instances/instance" + path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" + "[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" + "[type=current()/../l2vpn-instance-type]" +
"/endpoint/backup-ac/name"; "/endpoint[name=current()/../endpoint]/backup-ac/name";
} }
description "Related backup attachment circuit"; description "Related backup attachment circuit";
} }
} }
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";
leaf backup-pw { leaf backup-pw {
type leafref { type leafref {
path "/l2vpn/instances/instance" + path "/l2vpn/instances/instance" +
"[name=current()/../l2vpn-instance-name]" + "[name=current()/../l2vpn-instance-name]" +
"[type=current()/../l2vpn-instance-type]" + "[type=current()/../l2vpn-instance-type]" +
"/endpoint/backup-pw/name"; "/endpoint[name=current()/../endpoint]/backup-pw/name";
} }
description "Related backup pseudowire"; description "Related backup pseudowire";
} }
} }
} }
leaf state { leaf state {
type identityref { type identityref {
base l2vpn-notification-state; base l2vpn-notification-state;
} }
description "State change notification"; description "State change notification";
skipping to change at page 41, line 21 skipping to change at page 42, line 36
The authors would like to acknowledge Giles Heron and others for The authors would like to acknowledge Giles Heron and others for
their useful comments. their useful comments.
8. References 8. References
8.1. Normative References 8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
8.2. Informative References 8.2. Informative References
[RFC3916] Xiao, X., Ed., McPherson, D., Ed., and P. Pate, Ed., [RFC3916] Xiao, X., Ed., McPherson, D., Ed., and P. Pate, Ed.,
"Requirements for Pseudo-Wire Emulation Edge-to-Edge "Requirements for Pseudo-Wire Emulation Edge-to-Edge
(PWE3)", RFC 3916, DOI 10.17487/RFC3916, September 2004, (PWE3)", RFC 3916, DOI 10.17487/RFC3916, September 2004,
<http://www.rfc-editor.org/info/rfc3916>. <https://www.rfc-editor.org/info/rfc3916>.
[RFC3985] Bryant, S., Ed. and P. Pate, Ed., "Pseudo Wire Emulation [RFC3985] Bryant, S., Ed. and P. Pate, Ed., "Pseudo Wire Emulation
Edge-to-Edge (PWE3) Architecture", RFC 3985, Edge-to-Edge (PWE3) Architecture", RFC 3985,
DOI 10.17487/RFC3985, March 2005, DOI 10.17487/RFC3985, March 2005,
<http://www.rfc-editor.org/info/rfc3985>. <https://www.rfc-editor.org/info/rfc3985>.
[RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, [RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson,
"Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for "Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for
Use over an MPLS PSN", RFC 4385, DOI 10.17487/RFC4385, Use over an MPLS PSN", RFC 4385, DOI 10.17487/RFC4385,
February 2006, <http://www.rfc-editor.org/info/rfc4385>. February 2006, <https://www.rfc-editor.org/info/rfc4385>.
[RFC4446] Martini, L., "IANA Allocations for Pseudowire Edge to Edge [RFC4446] Martini, L., "IANA Allocations for Pseudowire Edge to Edge
Emulation (PWE3)", BCP 116, RFC 4446, Emulation (PWE3)", BCP 116, RFC 4446,
DOI 10.17487/RFC4446, April 2006, DOI 10.17487/RFC4446, April 2006,
<http://www.rfc-editor.org/info/rfc4446>. <https://www.rfc-editor.org/info/rfc4446>.
[RFC4447] Martini, L., Ed., Rosen, E., El-Aawar, N., Smith, T., and [RFC4447] Martini, L., Ed., Rosen, E., El-Aawar, N., Smith, T., and
G. Heron, "Pseudowire Setup and Maintenance Using the G. Heron, "Pseudowire Setup and Maintenance Using the
Label Distribution Protocol (LDP)", RFC 4447, Label Distribution Protocol (LDP)", RFC 4447,
DOI 10.17487/RFC4447, April 2006, DOI 10.17487/RFC4447, April 2006,
<http://www.rfc-editor.org/info/rfc4447>. <https://www.rfc-editor.org/info/rfc4447>.
[RFC4448] Martini, L., Ed., Rosen, E., El-Aawar, N., and G. Heron, [RFC4448] Martini, L., Ed., Rosen, E., El-Aawar, N., and G. Heron,
"Encapsulation Methods for Transport of Ethernet over MPLS "Encapsulation Methods for Transport of Ethernet over MPLS
Networks", RFC 4448, DOI 10.17487/RFC4448, April 2006, Networks", RFC 4448, DOI 10.17487/RFC4448, April 2006,
<http://www.rfc-editor.org/info/rfc4448>. <https://www.rfc-editor.org/info/rfc4448>.
[RFC4664] Andersson, L., Ed. and E. Rosen, Ed., "Framework for Layer [RFC4664] Andersson, L., Ed. and E. Rosen, Ed., "Framework for Layer
2 Virtual Private Networks (L2VPNs)", RFC 4664, 2 Virtual Private Networks (L2VPNs)", RFC 4664,
DOI 10.17487/RFC4664, September 2006, DOI 10.17487/RFC4664, September 2006,
<http://www.rfc-editor.org/info/rfc4664>. <https://www.rfc-editor.org/info/rfc4664>.
[RFC4665] Augustyn, W., Ed. and Y. Serbest, Ed., "Service [RFC4665] Augustyn, W., Ed. and Y. Serbest, Ed., "Service
Requirements for Layer 2 Provider-Provisioned Virtual Requirements for Layer 2 Provider-Provisioned Virtual
Private Networks", RFC 4665, DOI 10.17487/RFC4665, Private Networks", RFC 4665, DOI 10.17487/RFC4665,
September 2006, <http://www.rfc-editor.org/info/rfc4665>. September 2006, <https://www.rfc-editor.org/info/rfc4665>.
[RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private
LAN Service (VPLS) Using BGP for Auto-Discovery and LAN Service (VPLS) Using BGP for Auto-Discovery and
Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007,
<http://www.rfc-editor.org/info/rfc4761>. <https://www.rfc-editor.org/info/rfc4761>.
[RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., "Virtual Private [RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., "Virtual Private
LAN Service (VPLS) Using Label Distribution Protocol (LDP) LAN Service (VPLS) Using Label Distribution Protocol (LDP)
Signaling", RFC 4762, DOI 10.17487/RFC4762, January 2007, Signaling", RFC 4762, DOI 10.17487/RFC4762, January 2007,
<http://www.rfc-editor.org/info/rfc4762>. <https://www.rfc-editor.org/info/rfc4762>.
[RFC5003] Metz, C., Martini, L., Balus, F., and J. Sugimoto, [RFC5003] Metz, C., Martini, L., Balus, F., and J. Sugimoto,
"Attachment Individual Identifier (AII) Types for "Attachment Individual Identifier (AII) Types for
Aggregation", RFC 5003, DOI 10.17487/RFC5003, September Aggregation", RFC 5003, DOI 10.17487/RFC5003, September
2007, <http://www.rfc-editor.org/info/rfc5003>. 2007, <https://www.rfc-editor.org/info/rfc5003>.
[RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed., [RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed.,
"Requirements for Multi-Segment Pseudowire Emulation Edge- "Requirements for Multi-Segment Pseudowire Emulation Edge-
to-Edge (PWE3)", RFC 5254, DOI 10.17487/RFC5254, October to-Edge (PWE3)", RFC 5254, DOI 10.17487/RFC5254, October
2008, <http://www.rfc-editor.org/info/rfc5254>. 2008, <https://www.rfc-editor.org/info/rfc5254>.
[RFC5659] Bocci, M. and S. Bryant, "An Architecture for Multi- [RFC5659] Bocci, M. and S. Bryant, "An Architecture for Multi-
Segment Pseudowire Emulation Edge-to-Edge", RFC 5659, Segment Pseudowire Emulation Edge-to-Edge", RFC 5659,
DOI 10.17487/RFC5659, October 2009, DOI 10.17487/RFC5659, October 2009,
<http://www.rfc-editor.org/info/rfc5659>. <https://www.rfc-editor.org/info/rfc5659>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010, DOI 10.17487/RFC6020, October 2010,
<http://www.rfc-editor.org/info/rfc6020>. <https://www.rfc-editor.org/info/rfc6020>.
[RFC6073] Martini, L., Metz, C., Nadeau, T., Bocci, M., and M. [RFC6073] Martini, L., Metz, C., Nadeau, T., Bocci, M., and M.
Aissaoui, "Segmented Pseudowire", RFC 6073, Aissaoui, "Segmented Pseudowire", RFC 6073,
DOI 10.17487/RFC6073, January 2011, DOI 10.17487/RFC6073, January 2011,
<http://www.rfc-editor.org/info/rfc6073>. <https://www.rfc-editor.org/info/rfc6073>.
[RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo, [RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo,
"Provisioning, Auto-Discovery, and Signaling in Layer 2 "Provisioning, Auto-Discovery, and Signaling in Layer 2
Virtual Private Networks (L2VPNs)", RFC 6074, Virtual Private Networks (L2VPNs)", RFC 6074,
DOI 10.17487/RFC6074, January 2011, DOI 10.17487/RFC6074, January 2011,
<http://www.rfc-editor.org/info/rfc6074>. <https://www.rfc-editor.org/info/rfc6074>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<http://www.rfc-editor.org/info/rfc6241>. <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<http://www.rfc-editor.org/info/rfc6242>. <https://www.rfc-editor.org/info/rfc6242>.
[RFC6391] Bryant, S., Ed., Filsfils, C., Drafz, U., Kompella, V., [RFC6391] Bryant, S., Ed., Filsfils, C., Drafz, U., Kompella, V.,
Regan, J., and S. Amante, "Flow-Aware Transport of Regan, J., and S. Amante, "Flow-Aware Transport of
Pseudowires over an MPLS Packet Switched Network", Pseudowires over an MPLS Packet Switched Network",
RFC 6391, DOI 10.17487/RFC6391, November 2011, RFC 6391, DOI 10.17487/RFC6391, November 2011,
<http://www.rfc-editor.org/info/rfc6391>. <https://www.rfc-editor.org/info/rfc6391>.
[RFC6423] Li, H., Martini, L., He, J., and F. Huang, "Using the [RFC6423] Li, H., Martini, L., He, J., and F. Huang, "Using the
Generic Associated Channel Label for Pseudowire in the Generic Associated Channel Label for Pseudowire in the
MPLS Transport Profile (MPLS-TP)", RFC 6423, MPLS Transport Profile (MPLS-TP)", RFC 6423,
DOI 10.17487/RFC6423, November 2011, DOI 10.17487/RFC6423, November 2011,
<http://www.rfc-editor.org/info/rfc6423>. <https://www.rfc-editor.org/info/rfc6423>.
[RFC6478] Martini, L., Swallow, G., Heron, G., and M. Bocci, [RFC6478] Martini, L., Swallow, G., Heron, G., and M. Bocci,
"Pseudowire Status for Static Pseudowires", RFC 6478, "Pseudowire Status for Static Pseudowires", RFC 6478,
DOI 10.17487/RFC6478, May 2012, DOI 10.17487/RFC6478, May 2012,
<http://www.rfc-editor.org/info/rfc6478>. <https://www.rfc-editor.org/info/rfc6478>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536, Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012, DOI 10.17487/RFC6536, March 2012,
<http://www.rfc-editor.org/info/rfc6536>. <https://www.rfc-editor.org/info/rfc6536>.
[RFC6624] Kompella, K., Kothari, B., and R. Cherukuri, "Layer 2 [RFC6624] Kompella, K., Kothari, B., and R. Cherukuri, "Layer 2
Virtual Private Networks Using BGP for Auto-Discovery and Virtual Private Networks Using BGP for Auto-Discovery and
Signaling", RFC 6624, DOI 10.17487/RFC6624, May 2012, Signaling", RFC 6624, DOI 10.17487/RFC6624, May 2012,
<http://www.rfc-editor.org/info/rfc6624>. <https://www.rfc-editor.org/info/rfc6624>.
[RFC7041] Balus, F., Ed., Sajassi, A., Ed., and N. Bitar, Ed., [RFC7041] Balus, F., Ed., Sajassi, A., Ed., and N. Bitar, Ed.,
"Extensions to the Virtual Private LAN Service (VPLS) "Extensions to the Virtual Private LAN Service (VPLS)
Provider Edge (PE) Model for Provider Backbone Bridging", Provider Edge (PE) Model for Provider Backbone Bridging",
RFC 7041, DOI 10.17487/RFC7041, November 2013, RFC 7041, DOI 10.17487/RFC7041, November 2013,
<http://www.rfc-editor.org/info/rfc7041>. <https://www.rfc-editor.org/info/rfc7041>.
[RFC7361] Dutta, P., Balus, F., Stokes, O., Calvignac, G., and D. [RFC7361] Dutta, P., Balus, F., Stokes, O., Calvignac, G., and D.
Fedyk, "LDP Extensions for Optimized MAC Address Fedyk, "LDP Extensions for Optimized MAC Address
Withdrawal in a Hierarchical Virtual Private LAN Service Withdrawal in a Hierarchical Virtual Private LAN Service
(H-VPLS)", RFC 7361, DOI 10.17487/RFC7361, September 2014, (H-VPLS)", RFC 7361, DOI 10.17487/RFC7361, September 2014,
<http://www.rfc-editor.org/info/rfc7361>. <https://www.rfc-editor.org/info/rfc7361>.
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.
 End of changes. 69 change blocks. 
116 lines changed or deleted 181 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/