idnits 2.17.1 draft-ietf-bess-l2vpn-yang-09.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == The page length should not exceed 58 lines per page, but there was 1 longer page, the longest (page 46) being 60 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 23 instances of too long lines in the document, the longest one being 124 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 529 has weird spacing: '...et-type rt-...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (October 22, 2018) is 2013 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Obsolete informational reference (is this intentional?): RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-12) exists of draft-ietf-rtgwg-ni-model-10 Summary: 1 error (**), 0 flaws (~~), 5 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 BESS Working Group H. Shah, Ed. 3 Internet-Draft Ciena Corporation 4 Intended status: Standards Track P. Brissette, Ed. 5 Expires: April 25, 2019 Cisco Systems, Inc. 6 I. Chen, Ed. 7 Individual Contributor 8 I. Hussain, Ed. 9 Infinera Corporation 10 B. Wen, Ed. 11 Comcast 12 K. Tiruveedhula, Ed. 13 Juniper Networks 14 October 22, 2018 16 YANG Data Model for MPLS-based L2VPN 17 draft-ietf-bess-l2vpn-yang-09.txt 19 Abstract 21 This document describes a YANG data model for Layer 2 VPN (L2VPN) 22 services over MPLS networks. These services include point-to-point 23 Virtual Private Wire Service (VPWS) and multipoint Virtual Private 24 LAN service (VPLS) that uses LDP and BGP signaled Pseudowires. It is 25 expected that this model will be used by the management tools run by 26 the network operators in order to manage and monitor the network 27 resources that they use to deliver L2VPN services. 29 This document also describes the YANG data model for the Pseudowires. 30 The independent definition of the Pseudowires facilitates its use in 31 Ethernet Segment and EVPN data models defined in separate document. 33 Status of This Memo 35 This Internet-Draft is submitted in full conformance with the 36 provisions of BCP 78 and BCP 79. 38 Internet-Drafts are working documents of the Internet Engineering 39 Task Force (IETF). Note that other groups may also distribute 40 working documents as Internet-Drafts. The list of current Internet- 41 Drafts is at https://datatracker.ietf.org/drafts/current/. 43 Internet-Drafts are draft documents valid for a maximum of six months 44 and may be updated, replaced, or obsoleted by other documents at any 45 time. It is inappropriate to use Internet-Drafts as reference 46 material or to cite them other than as "work in progress." 48 This Internet-Draft will expire on April 25, 2019. 50 Copyright Notice 52 Copyright (c) 2018 IETF Trust and the persons identified as the 53 document authors. All rights reserved. 55 This document is subject to BCP 78 and the IETF Trust's Legal 56 Provisions Relating to IETF Documents 57 (https://trustee.ietf.org/license-info) in effect on the date of 58 publication of this document. Please review these documents 59 carefully, as they describe your rights and restrictions with respect 60 to this document. Code Components extracted from this document must 61 include Simplified BSD License text as described in Section 4.e of 62 the Trust Legal Provisions and are provided without warranty as 63 described in the Simplified BSD License. 65 Table of Contents 67 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 68 2. Specification of Requirements . . . . . . . . . . . . . . . . 4 69 3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 4 70 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 71 3.2. Changes in this version . . . . . . . . . . . . . . . . . 7 72 3.3. Open issues and next steps . . . . . . . . . . . . . . . 8 73 3.4. Pseudowire Common . . . . . . . . . . . . . . . . . . . . 8 74 3.4.1. Pseudowire . . . . . . . . . . . . . . . . . . . . . 8 75 3.4.2. pw-templates . . . . . . . . . . . . . . . . . . . . 8 76 3.5. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 8 77 3.5.1. redundancy-group-templates . . . . . . . . . . . . . 8 78 3.6. L2VPN instance . . . . . . . . . . . . . . . . . . . . . 8 79 3.6.1. common attributes . . . . . . . . . . . . . . . . . . 9 80 3.6.2. PW list . . . . . . . . . . . . . . . . . . . . . . . 9 81 3.6.3. List of endpoints . . . . . . . . . . . . . . . . . . 9 82 3.6.4. point-to-point or multipoint service . . . . . . . . 10 83 3.6.5. multi-segment pseudowire . . . . . . . . . . . . . . 11 84 3.7. Operational State . . . . . . . . . . . . . . . . . . . . 11 85 3.8. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 11 86 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 14 87 5. Security Considerations . . . . . . . . . . . . . . . . . . . 43 88 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43 89 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 43 90 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 91 8.1. Normative References . . . . . . . . . . . . . . . . . . 43 92 8.2. Informative References . . . . . . . . . . . . . . . . . 43 93 Appendix A. Example Configuration . . . . . . . . . . . . . . . 46 94 Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 46 95 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 48 97 1. Introduction 99 The Network Configuration Protocol (NETCONF) [RFC6241] is a network 100 management protocol that defines mechanisms to manage network 101 devices. YANG [RFC6020] is a modular language that represents data 102 structures in an XML or JSON tree format, and is used as a data 103 modeling language for the NETCONF. 105 This document defines a YANG data model for MPLS based Layer 2 VPN 106 services (L2VPN) [RFC4664] and includes switching between the local 107 attachment circuits. The L2VPN model covers point-to-point VPWS and 108 Multipoint VPLS services. These services use signaling of 109 Pseudowires across MPLS networks using LDP [RFC8077][RFC4762] or 110 BGP[RFC4761]. 112 Initially, the data model covers Ethernet based Layer 2 services. 113 The Ethernet Attachment Circuits are not defined. Instead, they are 114 leveraged from other standards organizations such as IEEE802.1 and 115 Metro Ethernet Forum (MEF). 117 Other Layer 2 services, such as ATM, Frame Relay, TDM, etc are 118 included in the scope but will be covered as the future work items. 120 The objective of the model is to define building blocks that can be 121 easily assembled in different order to realize different services. 123 The data model uses following constructs for configuration and 124 management: 126 o Configuration 128 o Operational State 130 o Executables (Actions) 132 o Notifications 134 The current document focuses on definition of configuration, state 135 and notification objects. 137 The L2VPN data object model uses the instance centric approach. The 138 L2VPN instance is recognized by network instance model. The network- 139 instance container is defined in network instance model [I-D.ietf- 140 netmod-ni-model]. 142 Within this network instance, L2VPN container contains a set of 143 common parameters, a list of PWs and a list of endpoints are defined. 145 A special constraint is added for the VPWS configuration such that 146 only two endpoints are allowed in the list of endpoints. 148 The Pseudowire data object model is defined independent of the L2VPN 149 data object model to allow its inclusion in the Ethernet Segment and 150 EVPN data objects. 152 The L2VPN data object model augments Psuedowire data object for its 153 definition. 155 The document also includes Notifications used by the L2VPN object 156 model 158 2. Specification of Requirements 160 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 161 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 162 document are to be interpreted as described in [RFC2119]. 164 3. L2VPN YANG Model 166 3.1. Overview 168 In this version of the document, for configuration, one single 169 container, l2vpn, is defined. Within the l2vpn container, common 170 parameters and a list of endpoints are defined. For the point-to- 171 point VPWS configuration, endpoint list is used with the constraint 172 that limits the number of endpoints to be two. For the multipoint 173 service, endpoint list is used. Each endpoint contains the common 174 definition that is either an attachment circuit, a pseudowire or a 175 redundancy group. The YANG data model for l2vpn in this document is 176 greatly simplified by by removing separate definition of endpoint-a 177 and endpoint-z that was specific for VPWS service in the previous 178 versions. The same endpoint list is used by both the VPLS and VPWS 179 service with the exception that VPWS uses only two entries. 181 The l2vpn container also includes definition of common building 182 blocks for redundancy-grp templates and pseudowire-templates. 184 The State objects have been consolidated with the configuration 185 object as per the recommendations provided by the Guidelines for Yang 186 Module Authors document. 188 The IETF working group has defined the VPWS and VPLS services that 189 leverages the pseudowire technologies defined by the PWE3 working 190 group. A large number of RFCs from these working groups cover this 191 subject matter. Hence, it is prudent that this document state the 192 scope of the MPLS L2VPN object model definitions. 194 The following documents are within the scope. This is not an 195 exhaustive list but a representation of documents that are covered 196 for this work: 198 o Requirements for Pseudo-wire Emulation Edge-to-Edge (PWE3) 199 [RFC3916] 201 o Pseudo-wire Emulation Edge-to-Edge (PWE3) Architecture [RFC3985] 203 o IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3) 204 [RFC4446] 206 o Pseudowire Setup and Maintenance Using the Label Distribution 207 Protocol (LDP) [RFC8077] 209 o Encapsulation Methods for Transport of Ethernet over MPLS Networks 210 [RFC4448] 212 o Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over 213 an MPLS PSN [RFC4385] 215 o Requirements for Multi-Segment Pseudowire Emulation Edge-to-Edge 216 (PWE3) [RFC5254] 218 o An Architecture for Multi-Segment Pseudowire Emulation Edge-to- 219 Edge [RFC5659] 221 o Segmented Pseudowire [RFC6073] 223 o Framework for Layer 2 Virtual Private Networks [RFC4664] 225 o Service Requirements for Layer 2 Provider-Provisioned Virtual 226 Private Networks [RFC4665] 228 o Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery 229 and Signaling [RFC4761] 231 o Virtual Private LAN Service (VPLS) Using Label Distribution 232 Protocol (LDP) Signaling [RFC4762] 234 o Attachment Individual Identifier (AII) Types for Aggregation 235 [RFC5003] 237 o Provisioning, Auto-Discovery, and Signaling in Layer 2 Virtual 238 Private Networks (L2VPNs) [RFC6074] 240 o Flow-Aware Transport of Pseudowires over an MPLS Packet Switched 241 Network [RFC6391] 243 o Layer 2 Virtual Private Networks Using BGP for Auto-Discovery and 244 Signaling [RFC6624] 246 o Extensions to the Virtual Private LAN Service (VPLS) Provider Edge 247 (PE) Model for Provider Backbone Bridging [RFC7041] 249 o LDP Extensions for Optimized MAC Address Withdrawal in a 250 Hierarchical Virtual Private LAN Service (H-VPLS) [RFC7361] 252 o Using the generic associated channel label for Pseudowire in the 253 MPLS Transport Profile [RFC6423] 255 o Pseudowire status for static pseudowire [RFC6478] 257 The specifics of pseudowire over MPLS-TP LSPs is in scope. However, 258 the initial effort addresses definitions of object models that are 259 commonly deployed. 261 The IETF work in L2VPN and PWE3 working group relating to L2TP, OAM, 262 multicast (e.g. p2mp, etree, etc) and access specific protocols such 263 as G.8032, MSTP, etc is out-of-scope for this document. 265 The following is the high level view of the L2VPN data model. 267 PW // Container 268 PW specific attributes 270 PW template definition 272 template-ref Redundancy-Group // redundancy-group 273 template 274 attributes 276 Network Instance // container 277 l2vpn // containter 279 common attributes 281 BGP-parameters // container 282 common attributes 283 auto-discovery attributes 284 signaling attributes 286 // list of PWs being used 287 PW // container 288 template-ref PW 289 attribute-override 291 PBB-parameters // container 292 pbb specific attributes 294 VPWS-constraints // rule to limit number of endpoints to two 296 // List of endpoints, where each member endpoint container is - 297 PW // reference 298 redundancy-grp // container 299 AC // eventual reference to standard AC 300 PW // reference 302 Figure 1 304 3.2. Changes in this version 306 Pseudowire module is extended to include, 308 Multi-segment PW - a new attribute is added to pseudowire that 309 identifies the pseudowire as a member of the multi-segment 310 pseudowire. Two pseudowire members in a VPWS, configures a multi- 311 segment pseudowire at the switching PE. 313 Pseudowire load-balancing - The load-balancing behaviour for a 314 pseudowire can be configured either using the FAT label that resides 315 below the pseudowire label or Entropy label with Entropy label 316 indicator above the pseudowire label. By default, the load-balancing 317 is disabled. 319 FEC 129 related - AGI, SAII and TAII string configurations is added 320 to faciliate FEC 129 based pseudowire configuration. 322 3.3. Open issues and next steps 324 Most of the open issues have been resolved in this document. There 325 are some items for considerations, such as PW headend, VPLS IRB. 326 These may or may not be convered in this document. If the working 327 group intends these topics be addressed in a separate document, 328 authors will proceed to finalize this document with comments received 329 on the definitions included in the current document. 331 3.4. Pseudowire Common 333 3.4.1. Pseudowire 335 Pseudowire definitions is moved to a seperate container in order to 336 allow Ethernet Segment and EVPN models can refer without having to 337 pull down L2VPN container. 339 3.4.2. pw-templates 341 The pw-templates container contains a list of pw-template. Each pw- 342 template defines a list of common pseudowire attributes such as PW 343 MTU, control word support etc. 345 3.5. L2VPN Common 347 3.5.1. redundancy-group-templates 349 The redundancy-group-template contains a list of templates. Each 350 template defines common attributes related to redundancy such as 351 protection mode, reversion parameters, etc. 353 3.6. L2VPN instance 355 The network instance container defined in the network instance model 356 [I-D.ietf-rtgwg-ni-model] identifies the L2VPN instance. One of the 357 value defined by the ni-type used in the instance model refers to VSI 358 (Virtual Switch Instance) to denote the L2VPN instance. The name 359 attribute is used as the key to refer to specific network instance. 360 Network Instance of type VSI anchors L2VPN container with a list of 361 endpoints which when limited to two entries represents point to point 362 service (i.e. VPWS) while more than two endpoints represent 363 multipoint service (i.e. VPLS). Within a service instance, a set of 364 common attributes are defined, followed by a list of PWs and a list 365 of endpoints. 367 3.6.1. common attributes 369 The common attributes apply to entire L2VPN instance. These 370 attributes typically include attributes such as mac-aging-timer, BGP 371 related parameters (if using BGP signaling), discovery-type, etc. 373 3.6.2. PW list 375 The PW list is the number of PWs that are being used for a given 376 L2VPN instance. Each PW entry refers to PW template to inherit 377 common attributes for the PW. The one or more attributes from the 378 template can be overriden. It further extends definitions of more PW 379 specific attributes such as use of control word, mac withdraw, what 380 type of signaling (i.e. LDP or BGP), setting of the TTL, etc. 382 3.6.3. List of endpoints 384 The list of endpoints define the characteristics of the L2VPN 385 service. In the case of VPWS, the list is limited to two entries 386 while for VPLS, there could be many. 388 Each entry in the endpoint list, may hold AC, PW or redundancy-grp 389 references. The core aspect of endpoint container is its flexible 390 personality based on what user decides to include in it. It is 391 future-proofed with possible extensions that can be included in the 392 endpoint container such as Integrated Route Bridging (IRB), PW 393 Headend, Virtual Switch Instance, etc. 395 The endpoint entry also defines the split-horizon attribute which 396 defines the frame forwarding restrictions between the endpoints 397 belonging to same split-horizon group. This construct permits 398 multiple instances of split horizon groups with its own endpoint 399 members. The frame forwarding restrictions does not apply between 400 endpoints that belong to two different split horizon groups. 402 3.6.3.1. ac 404 Attachment Circuit (AC)resides within endpoint entry either as an 405 independent entity or as a member of the redundancy group. AC is not 406 defined in this document but references the definitions being 407 specified by other working groups and standard bodies. 409 3.6.3.2. pw 411 The Pseudo-wire resides within endpoint entry either as an 412 independent entity or as a member of the redundancy group. The PW 413 refers to one of the entry in the list of PWs defined with the L2VPN 414 instance. 416 3.6.3.3. redundancy-grp choice 418 The redundancy-grp is a generic redundancy construct which can hold 419 primary and backup members of AC and PWs. This flexibility permits 420 combinations of - 422 o primary and backup AC 424 o primary and backup PW 426 o primary AC and backup PW 428 o primary PW and backup AC 430 The redundancy group also defines attributes of the type of 431 redundancy, such as protection mode, reroute mode, reversion related 432 parameters, etc. 434 3.6.4. point-to-point or multipoint service 436 The point-to-point service as defined for VPWS is represented by a 437 list of endpoints and is limited to two entries by the VPWS constrain 438 rules 440 The multipoint service as defined for VPLS is represented by a list 441 of endpoints. 443 The augmentation of ietf-l2vpn module is TBD. All IP addresses 444 defined in this module are currently scoped under global VRF/table. 446 3.6.5. multi-segment pseudowire 448 The multi-segment pseudowire is expressed as configuration of two 449 pseudowire segments at the switching PEs that provides end-to-end PW 450 path between two terminating PEs consisting of multiple pseudowire 451 segments. 453 The multi-segment pseudowire is configured at switching PE using two 454 endpoints that consists of pseudowires of type "ms-pw-members". The 455 VPWS service construct is used with "vpws constraint" that restricts 456 the number of endpoints to two. 458 To verify consistency, a) verify that both endpoints are using ms-pw- 459 member pseudowires and b) it is only used as for VPWS configuration 460 at the switching PE. 462 3.7. Operational State 464 The operational state of L2VPN attributes has been consolidated with 465 the configuration as per recommendations from the guidelines for the 466 YANG author document. 468 3.8. Yang tree 470 module: ietf-pseudowires 471 +--rw pseudowires 472 +--rw pseudowire* [name] 473 | +--rw name string 474 | +--ro state? pseudowire-status-type 475 | +--rw template? pw-template-ref 476 | +--rw mtu? uint16 477 | +--rw mac-withdraw? boolean 478 | +--rw pw-loadbalance? enumeration 479 | +--rw ms-pw-member? boolean 480 | +--rw cw-negotiation? cw-negotiation-type 481 | +--rw tunnel-policy? string 482 | +--rw (pw-type)? 483 | +--:(configured-pw) 484 | | +--rw peer-ip? inet:ip-address 485 | | +--rw pw-id? uint32 486 | | +--rw group-id? uint32 487 | | +--rw icb? boolean 488 | | +--rw transmit-label? rt-types:mpls-label 489 | | +--rw receive-label? rt-types:mpls-label 490 | | +--rw generalized? boolean 491 | | +--rw agi? string 492 | | +--rw saii? string 493 | | +--rw taii? string 494 | +--:(bgp-pw) 495 | | +--rw remote-pe-id? inet:ip-address 496 | +--:(bgp-ad-pw) 497 | +--rw remote-ve-id? uint16 498 +--rw pw-templates 499 +--rw pw-template* [name] 500 +--rw name string 501 +--rw mtu? uint16 502 +--rw cw-negotiation? cw-negotiation-type 503 +--rw tunnel-policy? string 505 module: ietf-l2vpn 506 +--rw l2vpn 507 +--rw redundancy-group-templates 508 +--rw redundancy-group-template* [name] 509 +--rw name string 510 +--rw protection-mode? enumeration 511 +--rw reroute-mode? enumeration 512 +--rw dual-receive? boolean 513 +--rw revert? boolean 514 +--rw reroute-delay? uint16 515 +--rw revert-delay? uint16 516 augment /ni:network-instances/ni:network-instance/ni:ni-type: 517 +--:(l2vpn) 518 +--rw type? identityref 519 +--rw mtu? uint16 520 +--rw mac-aging-timer? uint32 521 +--rw service-type? l2vpn-service-type 522 +--rw discovery-type? l2vpn-discovery-type 523 +--rw signaling-type l2vpn-signaling-type 524 +--rw bgp-auto-discovery 525 | +--rw route-distinguisher? rt-types:route-distinguisher 526 | +--rw vpn-id? string 527 | +--rw vpn-target* [route-target] 528 | +--rw route-target rt-types:route-target 529 | +--rw route-target-type rt-types:route-target-type 530 +--rw bgp-signaling 531 | +--rw site-id? uint16 532 | +--rw site-range? uint16 533 +--rw endpoint* [name] 534 | +--rw name string 535 | +--rw (ac-or-pw-or-redundancy-grp)? 536 | | +--:(ac) 537 | | | +--rw ac* [name] 538 | | | +--rw name if:interface-ref 539 | | | +--ro state? operational-state-type 540 | | +--:(pw) 541 | | | +--rw pw* [name] 542 | | | +--rw name pw:pseudowire-ref 543 | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state 544 | | +--:(redundancy-grp) 545 | | +--rw (primary) 546 | | | +--:(primary-ac) 547 | | | | +--rw primary-ac 548 | | | | +--rw name? if:interface-ref 549 | | | | +--ro state? operational-state-type 550 | | | +--:(primary-pw) 551 | | | +--rw primary-pw* [name] 552 | | | +--rw name pw:pseudowire-ref 553 | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state 554 | | +--rw (backup)? 555 | | | +--:(backup-ac) 556 | | | | +--rw backup-ac 557 | | | | +--rw name? if:interface-ref 558 | | | | +--ro state? operational-state-type 559 | | | +--:(backup-pw) 560 | | | +--rw backup-pw* [name] 561 | | | +--rw name pw:pseudowire-ref 562 | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state 563 | | | +--rw precedence? uint32 564 | | +--rw template? redundancy-group-template-ref 565 | | +--rw protection-mode? enumeration 566 | | +--rw reroute-mode? enumeration 567 | | +--rw dual-receive? boolean 568 | | +--rw revert? boolean 569 | | +--rw reroute-delay? uint16 570 | | +--rw revert-delay? uint16 571 | +--rw split-horizon-group? string 572 +--rw vpws-constraints 573 +--rw pbb-parameters 574 +--rw (component-type)? 575 +--:(i-component) 576 | +--rw i-sid? i-sid-type 577 | +--rw backbone-src-mac? yang:mac-address 578 +--:(b-component) 579 +--rw bind-b-component-name? l2vpn-instance-name-ref 580 +--ro bind-b-component-type? identityref 581 augment /pw:pseudowires/pw:pseudowire: 582 +--rw vccv-ability? boolean 583 +--rw request-vlanid? uint16 584 +--rw vlan-tpid? string 585 +--rw ttl? uint8 586 augment /pw:pseudowires/pw:pseudowire/pw:pw-type: 587 +--:(bgp-pw) 588 | +--rw bgp-pw 589 | +--rw remote-pe-id? inet:ip-address 590 +--:(bgp-ad-pw) 591 +--rw bgp-ad-pw 592 +--rw remote-ve-id? uint16 594 notifications: 595 +---n l2vpn-state-change-notification 596 +--ro l2vpn-instance-name? l2vpn-instance-name-ref 597 +--ro l2vpn-instance-type? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:type 598 +--ro endpoint? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint/name 599 +--ro (ac-or-pw-or-redundancy-grp)? 600 | +--:(ac) 601 | | +--ro ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/ac/name 602 | +--:(pw) 603 | | +--ro pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/pw/name 604 | +--:(redundancy-grp) 605 | +--ro (primary) 606 | | +--:(primary-ac) 607 | | | +--ro primary-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-ac/name 608 | | +--:(primary-pw) 609 | | +--ro primary-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-pw/name 610 | +--ro (backup)? 611 | +--:(backup-ac) 612 | | +--ro backup-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-ac/name 613 | +--:(backup-pw) 614 | +--ro backup-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-pw/name 615 +--ro state? identityref 617 Figure 2 619 4. YANG Module 621 The L2VPN configuration container is logically divided into following 622 high level config areas: 624 file "ietf-pseudowires@2018-10-22.yang" 625 module ietf-pseudowires { 626 namespace "urn:ietf:params:xml:ns:yang:ietf-pseudowires"; 627 prefix "pw"; 629 import ietf-inet-types { 630 prefix "inet"; 631 } 632 import ietf-routing-types { 633 prefix "rt-types"; 634 } 636 organization "ietf"; 637 contact "ietf"; 638 description "Pseudowire YANG model"; 640 revision "2018-10-22" { 641 description "Second revision " + 642 " - Added group-id and attachment identifiers " + 643 ""; 644 reference ""; 645 } 647 revision "2017-06-26" { 648 description "Initial revision " + 649 " - Created a new model for pseudowires, which used " + 650 " to be defined within the L2VPN model " + 651 ""; 652 reference ""; 653 } 655 /* Typedefs */ 657 typedef pseudowire-ref { 658 type leafref { 659 path "/pw:pseudowires/pw:pseudowire/pw:name"; 660 } 661 description "A type that is a reference to a pseudowire"; 662 } 664 typedef pw-template-ref { 665 type leafref { 666 path "/pw:pseudowires/pw:pw-templates/pw:pw-template/pw:name"; 667 } 668 description "A type that is a reference to a pw-template"; 669 } 671 typedef cw-negotiation-type { 672 type enumeration { 673 enum "non-preferred" { 674 description "No preference for control-word"; 675 } 676 enum "preferred" { 677 description "Prefer to have control-word negotiation"; 678 } 679 } 680 description "control-word negotiation preference type"; 681 } 683 typedef pseudowire-status-type { 684 type bits { 685 bit pseudowire-forwarding { 686 position 0; 687 description "Pseudowire is forwarding"; 688 } 689 bit pseudowire-not-forwarding { 690 position 1; 691 description "Pseudowire is not forwarding"; 692 } 693 bit local-attachment-circuit-receive-fault { 694 position 2; 695 description "Local attachment circuit (ingress) receive " + 696 "fault"; 697 } 698 bit local-attachment-circuit-transmit-fault { 699 position 3; 700 description "Local attachment circuit (egress) transmit " + 701 "fault"; 702 } 703 bit local-PSN-facing-PW-receive-fault { 704 position 4; 705 description "Local PSN-facing PW (ingress) receive fault"; 706 } 707 bit local-PSN-facing-PW-transmit-fault { 708 position 5; 709 description "Local PSN-facing PW (egress) transmit fault"; 710 } 711 bit PW-preferential-forwarding-status { 712 position 6; 713 description "Pseudowire preferential forwarding status"; 714 } 715 bit PW-request-switchover-status { 716 position 7; 717 description "Pseudowire request switchover status"; 718 } 719 } 720 description 721 "Pseudowire status type, as registered in the IANA " + 722 "Pseudowire Status Code Registry"; 723 } 725 /* Data */ 727 container pseudowires { 728 description "Configuration management of pseudowires"; 729 list pseudowire { 730 key "name"; 731 description "A pseudowire"; 732 leaf name { 733 type string; 734 description "pseudowire name"; 735 } 736 leaf state { 737 type pseudowire-status-type; 738 config false; 739 description "pseudowire operation status"; 740 reference "RFC 4446 and IANA Pseudowire Status Codes " + 741 "Registery"; 742 } 743 leaf template { 744 type pw-template-ref; 745 description "pseudowire template"; 746 } 747 leaf mtu { 748 type uint16; 749 description "PW MTU"; 750 } 751 leaf mac-withdraw { 752 type boolean; 753 default false; 754 description "Enable (true) or disable (false) MAC withdraw"; 755 } 756 leaf pw-loadbalance { 757 type enumeration { 758 enum "disabled" { 759 value 0; 760 description "load-balancing disabled"; 761 } 762 enum "fat-pw" { 763 value 1; 764 description "load-balance using FAT label below PW label"; 765 } 766 enum "entropy" { 767 value 2; 768 description "load-balance using ELI/EL above PW label"; 769 } 770 } 771 description "PW load-balancing"; 772 } 773 leaf ms-pw-member { 774 type boolean; 775 default false; 776 description "Enable (true) or disable (false) not a member of MS-PW"; 777 } 778 leaf cw-negotiation { 779 type cw-negotiation-type; 780 description "cw-negotiation"; 781 } 782 leaf tunnel-policy { 783 type string; 784 description "tunnel policy name"; 785 } 786 choice pw-type { 787 description "A choice of pseudowire type"; 788 case configured-pw { 789 leaf peer-ip { 790 type inet:ip-address; 791 description "peer IP address"; 792 } 793 leaf pw-id { 794 type uint32; 795 description "pseudowire id"; 796 } 797 leaf group-id { 798 type uint32; 799 description "group id"; 800 } 801 leaf icb { 802 type boolean; 803 description "inter-chassis backup"; 804 } 805 leaf transmit-label { 806 type rt-types:mpls-label; 807 description "transmit lable"; 808 } 809 leaf receive-label { 810 type rt-types:mpls-label; 811 description "receive label"; 812 } 813 leaf generalized { 814 type boolean; 815 description "generalized pseudowire id FEC element"; 816 } 817 leaf agi { 818 type string; 819 description "attachment group identifier"; 820 } 821 leaf saii { 822 type string; 823 description "source attachment individual identifier"; 825 } 826 leaf taii { 827 type string; 828 description "target attachment individual identifier"; 829 } 830 } 831 case bgp-pw { 832 leaf remote-pe-id { 833 type inet:ip-address; 834 description "remote pe id"; 835 } 836 } 837 case bgp-ad-pw { 838 leaf remote-ve-id { 839 type uint16; 840 description "remote ve id"; 841 } 842 } 843 } 844 } 845 container pw-templates { 846 description "pw-templates"; 847 list pw-template { 848 key "name"; 849 description "pw-template"; 850 leaf name { 851 type string; 852 description "name"; 853 } 854 leaf mtu { 855 type uint16; 856 description "pseudowire mtu"; 857 } 858 leaf cw-negotiation { 859 type cw-negotiation-type; 860 default "preferred"; 861 description 862 "control-word negotiation preference"; 863 } 864 leaf tunnel-policy { 865 type string; 866 description "tunnel policy name"; 867 } 868 } 869 } 870 } 871 } 872 873 file "ietf-l2vpn@2018-02-06.yang" 874 module ietf-l2vpn { 875 namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn"; 876 prefix "l2vpn"; 878 import ietf-inet-types { 879 prefix "inet"; 880 } 882 import ietf-yang-types { 883 prefix "yang"; 884 } 886 import ietf-routing-types { 887 prefix "rt-types"; 888 } 890 import ietf-interfaces { 891 prefix "if"; 892 } 894 import ietf-network-instance { 895 prefix "ni"; 896 } 898 import ietf-pseudowires { 899 prefix "pw"; 900 } 902 organization "ietf"; 903 contact "ietf"; 904 description "l2vpn"; 906 revision "2018-02-06" { 907 description "Eighth revision " + 908 " - Incorporated ietf-network-instance model " + 909 " - change the type of attachment circuit to " + 910 " if:interface-ref " + 911 ""; 912 reference ""; 913 } 915 revision "2017-09-21" { 916 description "Seventh revision " + 917 " - Fixed yangdump errors " + 918 ""; 919 reference ""; 920 } 921 revision "2017-06-26" { 922 description "Sixth revision " + 923 " - Removed unused module mpls " + 924 " - Renamed l2vpn-instances-state to l2vpn-instances " + 925 " - Added pseudowire status as defined in RFC4446 and " + 926 " IANA Pseudowire Status Codes Register " + 927 " - Added notifications " + 928 " - Moved PW definition out of L2VPN " + 929 " - Moved model to NMDA style specified in " + 930 " draft-dsdt-nmda-guidelines-01.txt " + 931 " - Renamed l2vpn-instances and l2vpn-instance to " + 932 " instances and instance to shorten xpaths " + 933 ""; 934 reference ""; 935 } 937 revision "2017-03-06" { 938 description "Sixth revision " + 939 " - Removed the 'common' container and move pw-templates " + 940 " and redundancy-group-templates up a level " + 941 " - Consolidated the endpoint configuration such that " + 942 " all L2VPN instances has a list of endpoint. For " + 943 " certain types of L2VPN instances such as VPWS where " + 944 " each L2VPN instance is limited to at most two " + 945 " endpoint, additional augment statements were included " + 946 " to add necessary constraints " + 947 " - Removed discovery-type and signaling-type operational " + 948 " state from VPLS pseudowires, as these two parameters " + 949 " are configured as L2VPN parameters rather than " + 950 " pseudowire paramteres " + 951 " - Renamed l2vpn-instances to l2vpn-instances-state " + 952 " in the operational state branch " + 953 " - Removed BGP parameter groupings and reused " + 954 " ietf-routing-types.yang module instead " + 955 ""; 956 reference ""; 957 } 959 revision "2016-10-24" { 960 description "Fifth revision " + 961 " - Edits based on Giles's comments " + 962 " 5) Remove relative leafrefs in groupings, " + 963 " and the resulting new groupings are: " + 964 " (a) bgp-auto-discovery-parameters-grp " + 965 " (b) bgp-signaling-parameters-grp " + 966 " (c) endpoint-grp " + 967 " 11) Merge VPLS and VPWS into one single list " + 968 " and use augment statements to handle " + 969 " differences between VPLS and VPWS " + 970 " - Add a new grouping l2vpn-common-parameters-grp " + 971 " to make VPLS and VPWS more consistent"; 972 reference ""; 973 } 975 revision "2016-05-31" { 976 description "Fourth revision " + 977 " - Edits based on Giles's comments " + 978 " 1) Change enumeration to identityref type for: " + 979 " (a) l2vpn-service-type " + 980 " (b) l2vpn-discovery-type " + 981 " (c) l2vpn-signaling-type " + 982 " bgp-rt-type, cw-negotiation, and " + 983 " pbb-component remain enumerations " + 984 " 2) Define i-sid-type for leaf 'i-sid' " + 985 " (which is renamed from 'i-tag') " + 986 " 3) Rename 'vpn-targets' to 'vpn-target' " + 987 " 4) Import ietf-mpls.yang and reuse the " + 988 " 'mpls-label' type defined in ietf-mpls.yang " + 989 " transmit-label and receive-label " + 990 " 8) Change endpoint list's key to name " + 991 " 9) Changed MTU to type uint16 " + 992 ""; 993 reference ""; 994 } 996 revision "2016-03-07" { 997 description "Third revision " + 998 " - Changed the module name to ietf-l2vpn " + 999 " - Merged EVPN into L2VPN " + 1000 " - Eliminated the definitions of attachment " + 1001 " circuit with the intention to reuse other " + 1002 " layer-2 definitions " + 1003 " - Added state branch"; 1004 reference ""; 1005 } 1007 revision "2015-10-08" { 1008 description "Second revision " + 1009 " - Added container vpls-instances " + 1010 " - Rearranged groupings and typedefs to be " + 1011 " reused across vpls-instance and vpws-instances"; 1012 reference ""; 1013 } 1015 revision "2015-06-30" { 1016 description "Initial revision"; 1017 reference ""; 1018 } 1020 /* identities */ 1022 identity l2vpn-instance-type { 1023 description "Base identity from which identities of " + 1024 "l2vpn service instance types are derived"; 1025 } 1027 identity vpws-instance-type { 1028 base l2vpn-instance-type; 1029 description "This identity represents VPWS instance type"; 1030 } 1032 identity vpls-instance-type { 1033 base l2vpn-instance-type; 1034 description "This identity represents VPLS instance type"; 1035 } 1037 identity link-discovery-protocol { 1038 description "Base identiy from which identities describing " + 1039 "link discovery protocols are derived"; 1040 } 1042 identity lacp { 1043 base "link-discovery-protocol"; 1044 description "This identity represents LACP"; 1045 } 1047 identity lldp { 1048 base "link-discovery-protocol"; 1049 description "This identity represents LLDP"; 1050 } 1052 identity bpdu { 1053 base "link-discovery-protocol"; 1054 description "This identity represens BPDU"; 1055 } 1057 identity cpd { 1058 base "link-discovery-protocol"; 1059 description "This identity represents CPD"; 1060 } 1062 identity udld { 1063 base "link-discovery-protocol"; 1064 description "This identity represens UDLD"; 1066 } 1068 identity l2vpn-service { 1069 description "Base identity from which identities describing " + 1070 "L2VPN services are derived"; 1071 } 1073 identity Ethernet { 1074 base "l2vpn-service"; 1075 description "This identity represents Ethernet service"; 1076 } 1078 identity ATM { 1079 base "l2vpn-service"; 1080 description "This identity represents Asynchronous Transfer " + 1081 "Mode service"; 1082 } 1084 identity FR { 1085 base "l2vpn-service"; 1086 description "This identity represent Frame-Relay service"; 1087 } 1089 identity TDM { 1090 base "l2vpn-service"; 1091 description "This identity represent Time Devision " + 1092 "Multiplexing service"; 1093 } 1094 identity l2vpn-discovery { 1095 description "Base identity from which identities describing " + 1096 "L2VPN discovery protocols are derived"; 1097 } 1099 identity manual-discovery { 1100 base "l2vpn-discovery"; 1101 description "Manual configuration of l2vpn service"; 1102 } 1104 identity bgp-auto-discovery { 1105 base "l2vpn-discovery"; 1106 description "Border Gateway Protocol (BGP) auto-discovery of " + 1107 "l2vpn service"; 1108 } 1110 identity ldp-discovery { 1111 base "l2vpn-discovery"; 1112 description "Label Distribution Protocol (LDP) discovery of " + 1113 "l2vpn service"; 1115 } 1117 identity mixed-discovery { 1118 base "l2vpn-discovery"; 1119 description "Mixed discovery methods of l2vpn service"; 1120 } 1122 identity l2vpn-signaling { 1123 description "Base identity from which identities describing " + 1124 "L2VPN signaling protocols are derived"; 1125 } 1127 identity static-configuration { 1128 base "l2vpn-signaling"; 1129 description "Static configuration of labels (no signaling)"; 1130 } 1132 identity ldp-signaling { 1133 base "l2vpn-signaling"; 1134 description "Label Distribution Protocol (LDP) signaling"; 1135 } 1137 identity bgp-signaling { 1138 base "l2vpn-signaling"; 1139 description "Border Gateway Protocol (BGP) signaling"; 1140 } 1142 identity mixed-signaling { 1143 base "l2vpn-signaling"; 1144 description "Mixed signaling methods"; 1145 } 1147 identity l2vpn-notification-state { 1148 description "The base identity on which notification states " + 1149 "are based"; 1150 } 1152 identity MAC-limit-reached { 1153 base "l2vpn-notification-state"; 1154 description "MAC limit is reached"; 1155 } 1156 identity MAC-limit-cleared { 1157 base "l2vpn-notification-state"; 1158 description "MAC limit is cleared"; 1159 } 1161 identity MTU-mismatched { 1162 base "l2vpn-notification-state"; 1163 description "MAC is mismatched"; 1164 } 1166 identity MTU-mismatched-cleared { 1167 base "l2vpn-notification-state"; 1168 description "MAC is mismatch is cleared"; 1169 } 1171 identity state-changed-to-up { 1172 base "l2vpn-notification-state"; 1173 description "State is changed to UP"; 1174 } 1176 identity state-changed-to-down { 1177 base "l2vpn-notification-state"; 1178 description "State is changed to down"; 1179 } 1181 identity MAC-move-limit-exceeded { 1182 base "l2vpn-notification-state"; 1183 description "MAC move limit is exceeded"; 1184 } 1186 identity MAC-move-limit-exceeded-cleared { 1187 base "l2vpn-notification-state"; 1188 description "MAC move limit exceeded is cleared"; 1189 } 1191 identity MAC-flap-detected { 1192 base "l2vpn-notification-state"; 1193 description "MAC flap detected"; 1194 } 1196 identity port-disabled-due-to-MAC-flap { 1197 base "l2vpn-notification-state"; 1198 description "Port disabled due to MAC flap"; 1199 } 1201 /* typedefs */ 1203 typedef l2vpn-service-type { 1204 type identityref { 1205 base "l2vpn-service"; 1206 } 1207 description "L2VPN service type"; 1208 } 1210 typedef l2vpn-discovery-type { 1211 type identityref { 1212 base "l2vpn-discovery"; 1213 } 1214 description "L2VPN discovery type"; 1215 } 1217 typedef l2vpn-signaling-type { 1218 type identityref { 1219 base "l2vpn-signaling"; 1220 } 1221 description "L2VPN signaling type"; 1222 } 1224 typedef link-discovery-protocol-type { 1225 type identityref { 1226 base "link-discovery-protocol"; 1227 } 1228 description "This type is used to identify " + 1229 "link discovery protocol"; 1230 } 1232 typedef pbb-component-type { 1233 type enumeration { 1234 enum "b-component" { 1235 description "Identifies as a b-component"; 1236 } 1237 enum "i-component" { 1238 description "Identifies as an i-component"; 1239 } 1240 } 1241 description "This type is used to identify " + 1242 "the type of PBB component"; 1243 } 1245 typedef redundancy-group-template-ref { 1246 type leafref { 1247 path "/l2vpn:l2vpn/l2vpn:redundancy-group-templates" + 1248 "/l2vpn:redundancy-group-template/l2vpn:name"; 1249 } 1250 description "redundancy-group-template-ref"; 1251 } 1252 typedef l2vpn-instance-name-ref { 1253 type leafref { 1254 path "/ni:network-instances/ni:network-instance" + 1255 "/ni:name"; 1256 } 1257 description "l2vpn-instance-name-ref"; 1258 } 1259 typedef l2vpn-instance-type-ref { 1260 type leafref { 1261 path "/ni:network-instances/ni:network-instance" + 1262 "/l2vpn:type"; 1263 } 1264 description "l2vpn-instance-type-ref"; 1265 } 1267 typedef operational-state-type { 1268 type enumeration { 1269 enum 'up' { 1270 description "Operational state is up"; 1271 } 1272 enum 'down' { 1273 description "Operational state is down"; 1274 } 1275 } 1276 description "operational-state-type"; 1277 } 1279 typedef i-sid-type { 1280 type uint32 { 1281 range "0..16777216"; 1282 } 1283 description "I-SID type that is 24-bits. " + 1284 "This should be moved to ieee-types.yang at " + 1285 "http://www.ieee802.org/1/files/public/docs2015" + 1286 "/new-mholness-ieee-types-yang-v01.yang"; 1287 } 1289 /* groupings */ 1291 grouping pbb-parameters-grp { 1292 description "PBB parameters grouping"; 1293 container pbb-parameters { 1294 description "pbb-parameters"; 1295 choice component-type { 1296 description "PBB component type"; 1297 case i-component { 1298 leaf i-sid { 1299 type i-sid-type; 1300 description "I-SID"; 1301 } 1302 leaf backbone-src-mac { 1303 type yang:mac-address; 1304 description "backbone-src-mac"; 1305 } 1306 } 1307 case b-component { 1308 leaf bind-b-component-name { 1309 type l2vpn-instance-name-ref; 1310 must "/ni:network-instances" + 1311 "/ni:network-instance[ni:name=current()]" + 1312 "/l2vpn:type = 'l2vpn:vpls-instance-type'" { 1313 description "A b-component must be an L2VPN instance " + 1314 "of type vpls-instance-type"; 1315 } 1316 description "Reference to the associated b-component"; 1317 } 1318 leaf bind-b-component-type { 1319 type identityref { 1320 base l2vpn-instance-type; 1321 } 1322 must ". = 'l2vpn:vpls-instance-type'" { 1323 description "The associated b-component must have " + 1324 "type vpls-instance-type"; 1325 } 1326 config false; 1327 description "Type of the associated b-component"; 1328 } 1329 } 1330 } 1331 } 1332 } 1334 grouping pbb-parameters-state-grp { 1335 description "PBB parameters grouping"; 1336 container pbb-parameters { 1337 description "pbb-parameters"; 1338 choice component-type { 1339 description "PBB component type"; 1340 case i-component { 1341 leaf i-sid { 1342 type i-sid-type; 1343 description "I-SID"; 1344 } 1345 leaf backbone-src-mac { 1346 type yang:mac-address; 1347 description "backbone-src-mac"; 1348 } 1349 } 1350 case b-component { 1351 leaf bind-b-component-name { 1352 type string; 1353 description "Name of the associated b-component"; 1354 } 1355 leaf bind-b-component-type { 1356 type identityref { 1357 base l2vpn-instance-type; 1358 } 1359 must ". = 'l2vpn:vpls-instance-type'" { 1360 description "The associated b-component must have " + 1361 "type vpls-instance-type"; 1362 } 1363 description "Type of the associated b-component"; 1364 } 1365 } 1366 } 1367 } 1368 } 1370 grouping l2vpn-common-parameters-grp { 1371 description "L2VPN common parameters"; 1372 leaf type { 1373 type identityref { 1374 base l2vpn-instance-type; 1375 } 1376 description "Type of L2VPN service instance"; 1377 } 1378 leaf mtu { 1379 type uint16; 1380 description "MTU of L2VPN service"; 1381 } 1382 leaf mac-aging-timer { 1383 type uint32; 1384 description "mac-aging-timer, the duration after which" + 1385 "a MAC entry is considered aged out"; 1386 } 1387 leaf service-type { 1388 type l2vpn-service-type; 1389 default Ethernet; 1390 description "L2VPN service type"; 1391 } 1392 leaf discovery-type { 1393 type l2vpn-discovery-type; 1394 default manual-discovery; 1395 description "L2VPN service discovery type"; 1396 } 1397 leaf signaling-type { 1398 type l2vpn-signaling-type; 1399 mandatory true; 1400 description "L2VPN signaling type"; 1401 } 1402 } 1403 grouping bgp-signaling-parameters-grp { 1404 description "BGP parameters for signaling"; 1405 leaf site-id { 1406 type uint16; 1407 description "Site ID"; 1408 } 1409 leaf site-range { 1410 type uint16; 1411 description "Site Range"; 1412 } 1413 } 1415 grouping redundancy-group-properties-grp { 1416 description "redundancy-group-properties-grp"; 1417 leaf protection-mode { 1418 type enumeration { 1419 enum "frr" { 1420 value 0; 1421 description "fast reroute"; 1422 } 1423 enum "master-slave" { 1424 value 1; 1425 description "master-slave"; 1426 } 1427 enum "independent" { 1428 value 2; 1429 description "independent"; 1430 } 1431 } 1432 description "protection-mode"; 1433 } 1434 leaf reroute-mode { 1435 type enumeration { 1436 enum "immediate" { 1437 value 0; 1438 description "immediate reroute"; 1439 } 1440 enum "delayed" { 1441 value 1; 1442 description "delayed reroute"; 1443 } 1444 enum "never" { 1445 value 2; 1446 description "never reroute"; 1447 } 1448 } 1449 description "reroute-mode"; 1450 } 1451 leaf dual-receive { 1452 type boolean; 1453 description 1454 "allow extra traffic to be carried by backup"; 1455 } 1456 leaf revert { 1457 type boolean; 1458 description "allow forwarding to revert to primary " + 1459 "after restoring primary"; 1460 } 1461 leaf reroute-delay { 1462 when "../reroute-mode = 'delayed'" { 1463 description "Specify amount of time to " + 1464 "delay reroute only when " + 1465 "delayed route is configured"; 1466 } 1467 type uint16; 1468 description "amount of time to delay reroute"; 1469 } 1470 leaf revert-delay { 1471 when "../revert = 'true'" { 1472 description "Specify the amount of time to " + 1473 "wait to revert to primary " + 1474 "only if reversion is configured"; 1475 } 1476 type uint16; 1477 description "amount ot time to wait to revert to primary"; 1478 } 1479 } 1481 grouping endpoint-grp { 1482 description "A grouping that defines the structure of " + 1483 "an endpoint"; 1484 choice ac-or-pw-or-redundancy-grp { 1485 description "A choice ofattachment circuit or " + 1486 "pseudowire or redundancy group"; 1487 case ac { 1488 description "Attachment circuit(s) as an endpoint"; 1489 } 1490 case pw { 1491 description "Pseudowire(s) as an endpoint"; 1492 } 1493 case redundancy-grp { 1494 description "Redundancy group as an endpoint"; 1495 choice primary { 1496 mandatory true; 1497 description "primary options"; 1498 case primary-ac { 1499 description "primary-ac"; 1500 } 1501 case primary-pw { 1502 description "primary-pw"; 1503 } 1504 } 1505 choice backup { 1506 description "backup options"; 1507 case backup-ac { 1508 description "backup-ac"; 1509 } 1510 case backup-pw { 1511 description "backup-pw"; 1512 } 1513 } 1514 } 1515 } 1516 } 1518 /* L2VPN YANG Model */ 1520 container l2vpn { 1521 description "L2VPN specific data"; 1523 container redundancy-group-templates { 1524 description "redundancy group templates"; 1525 list redundancy-group-template { 1526 key "name"; 1527 description "redundancy-group-template"; 1528 leaf name { 1529 type string; 1530 description "name"; 1531 } 1532 uses redundancy-group-properties-grp; 1533 } 1534 } 1535 } 1537 /* augments */ 1539 augment "/ni:network-instances/ni:network-instance/ni:ni-type" { 1540 description 1541 "Augmentation for L2VPN instance"; 1542 case l2vpn { 1543 description "An L2VPN service instance"; 1544 uses l2vpn-common-parameters-grp; 1545 container bgp-auto-discovery { 1546 description "BGP auto-discovery parameters"; 1547 leaf route-distinguisher { 1548 type rt-types:route-distinguisher; 1549 description "BGP route distinguisher"; 1550 } 1551 leaf vpn-id { 1552 type string; 1553 description "VPN ID"; 1554 } 1555 uses rt-types:vpn-route-targets; 1556 } 1557 container bgp-signaling { 1558 when "../signaling-type = 'bgp-signaling'" { 1559 description "Check signaling type: " + 1560 "Can only configure BGP signaling if " + 1561 "signaling type is BGP"; 1562 } 1563 description "BGP signaling parameters"; 1564 uses bgp-signaling-parameters-grp; 1565 } 1566 list endpoint { 1567 key "name"; 1568 description "An endpoint"; 1569 leaf name { 1570 type string; 1571 description "endpoint name"; 1572 } 1573 uses endpoint-grp { 1574 augment "ac-or-pw-or-redundancy-grp/ac" { 1575 description "Augment for attachment circuit(s) " + 1576 "as an endpoint"; 1577 list ac { 1578 key "name"; 1579 leaf name { 1580 type if:interface-ref; 1581 description "Name of attachment circuit"; 1582 } 1583 leaf state { 1584 type operational-state-type; 1585 config false; 1586 description "attachment circuit up/down state"; 1587 } 1588 description "An L2VPN instance's " + 1589 "attachment circuit list"; 1590 } 1591 } 1592 augment "ac-or-pw-or-redundancy-grp/pw" { 1593 description "Augment for pseudowire(s) as an endpoint"; 1594 list pw { 1595 key "name"; 1596 leaf name { 1597 type pw:pseudowire-ref; 1598 must "(../../../type = " + 1599 " 'l2vpn:vpws-instance-type') or " + 1600 "(not(boolean(/pw:pseudowires" + 1601 " /pw:pseudowire[pw:name = current()]" + 1602 " /vccv-ability)) and " + 1603 " not(boolean(/pw:pseudowires" + 1604 " /pw:pseudowire[pw:name = current()]" + 1605 " /request-vlanid)) and " + 1606 " not(boolean(/pw:pseudowires" + 1607 " /pw:pseudowire[pw:name = current()]" + 1608 " /vlan-tpid)) and " + 1609 " not(boolean(/pw:pseudowires" + 1610 " /pw:pseudowire[pw:name = current()]" + 1611 " /ttl)))" { 1612 description "Only a VPWS PW has parameters " + 1613 "vccv-ability, request-vlanid, " + 1614 "vlan-tpid, and ttl"; 1615 } 1616 description "Pseudowire name"; 1617 } 1618 leaf state { 1619 type leafref { 1620 path "/pw:pseudowires" + 1621 "/pw:pseudowire[pw:name=current()/../name]" + 1622 "/pw:state"; 1623 } 1624 config false; 1625 description "Pseudowire state"; 1626 } 1627 description "An L2VPN instance's pseudowire list"; 1628 } 1629 } 1630 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1631 "primary/primary-ac" { 1632 description "Augment for primary-ac"; 1633 container primary-ac { 1634 description "Primary AC"; 1635 leaf name { 1636 type if:interface-ref; 1637 description "Name of attachment circuit"; 1638 } 1639 leaf state { 1640 type operational-state-type; 1641 config false; 1642 description "attachment circuit up/down state"; 1644 } 1645 } 1646 } 1647 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1648 "primary/primary-pw" { 1649 description "Augment for primary-pw"; 1650 list primary-pw { 1651 key "name"; 1652 leaf name { 1653 type pw:pseudowire-ref; 1654 must "(../../../type = " + 1655 " 'l2vpn:vpws-instance-type') or " + 1656 "(not(boolean(/pw:pseudowires" + 1657 " /pw:pseudowire[pw:name = current()]" + 1658 " /vccv-ability)) and " + 1659 " not(boolean(/pw:pseudowires" + 1660 " /pw:pseudowire[pw:name = current()]" + 1661 " /request-vlanid)) and " + 1662 " not(boolean(/pw:pseudowires" + 1663 " /pw:pseudowire[pw:name = current()]" + 1664 " /vlan-tpid)) and " + 1665 " not(boolean(/pw:pseudowires" + 1666 " /pw:pseudowire[pw:name = current()]" + 1667 " /ttl)))" { 1668 description "Only a VPWS PW has parameters " + 1669 "vccv-ability, request-vlanid, " + 1670 "vlan-tpid, and ttl"; 1671 } 1672 description "Pseudowire name"; 1673 } 1674 leaf state { 1675 type leafref { 1676 path "/pw:pseudowires" + 1677 "/pw:pseudowire[pw:name=current()/../name]" + 1678 "/pw:state"; 1679 } 1680 config false; 1681 description "Pseudowire state"; 1682 } 1683 description "An L2VPN instance's pseudowire list"; 1684 } 1685 } 1686 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1687 "backup/backup-ac" { 1688 description "Augment for backup-ac"; 1689 container backup-ac { 1690 description "Backup AC"; 1691 leaf name { 1692 type if:interface-ref; 1693 description "Name of attachment circuit"; 1694 } 1695 leaf state { 1696 type operational-state-type; 1697 config false; 1698 description "attachment circuit up/down state"; 1699 } 1700 } 1701 } 1702 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1703 "backup/backup-pw" { 1704 description "Augment for backup-pw"; 1705 list backup-pw { 1706 key "name"; 1707 leaf name { 1708 type pw:pseudowire-ref; 1709 must "(../../../type = " + 1710 " 'l2vpn:vpws-instance-type') or " + 1711 "(not(boolean(/pw:pseudowires" + 1712 " /pw:pseudowire[pw:name = current()]" + 1713 " /vccv-ability)) and " + 1714 " not(boolean(/pw:pseudowires" + 1715 " /pw:pseudowire[pw:name = current()]" + 1716 " /request-vlanid)) and " + 1717 " not(boolean(/pw:pseudowires" + 1718 " /pw:pseudowire[pw:name = current()]" + 1719 " /vlan-tpid)) and " + 1720 " not(boolean(/pw:pseudowires" + 1721 " /pw:pseudowire[pw:name = current()]" + 1722 " /ttl)))" { 1723 description "Only a VPWS PW has parameters " + 1724 "vccv-ability, request-vlanid, " + 1725 "vlan-tpid, and ttl"; 1726 } 1727 description "Pseudowire name"; 1728 } 1729 leaf state { 1730 type leafref { 1731 path "/pw:pseudowires" + 1732 "/pw:pseudowire[pw:name=current()/../name]" + 1733 "/pw:state"; 1734 } 1735 config false; 1736 description "Pseudowire state"; 1737 } 1738 description "A list of backup pseudowires"; 1739 } 1741 } 1742 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 1743 description "Augment for redundancy group properties"; 1744 leaf template { 1745 type redundancy-group-template-ref; 1746 description "Reference a redundancy group " + 1747 "properties template"; 1748 } 1749 uses redundancy-group-properties-grp; 1750 } 1751 } 1752 } 1753 } 1754 } 1756 augment "/pw:pseudowires/pw:pseudowire" { 1757 description "Augment for peudowire parameters for " + 1758 "VPWS pseudowires"; 1759 leaf vccv-ability { 1760 type boolean; 1761 description "vccvability"; 1762 } 1763 leaf request-vlanid { 1764 type uint16; 1765 description "request vlanid"; 1766 } 1767 leaf vlan-tpid { 1768 type string; 1769 description "vlan tpid"; 1770 } 1771 leaf ttl { 1772 type uint8; 1773 description "time-to-live"; 1774 } 1775 } 1777 augment "/pw:pseudowires/pw:pseudowire/pw:pw-type" { 1778 description "Additional pseudowire types"; 1779 case bgp-pw { 1780 container bgp-pw { 1781 description "BGP pseudowire"; 1782 leaf remote-pe-id { 1783 type inet:ip-address; 1784 description "remote pe id"; 1785 } 1786 } 1787 } 1788 case bgp-ad-pw { 1789 container bgp-ad-pw { 1790 description "BGP auto-discovery pseudowire"; 1791 leaf remote-ve-id { 1792 type uint16; 1793 description "remote ve id"; 1794 } 1795 } 1796 } 1797 } 1799 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1800 "/l2vpn:l2vpn" { 1801 when "l2vpn:type = 'l2vpn:vpws-instance-type'" { 1802 description "Constraints only for VPWS pseudowires"; 1803 } 1804 description "Augment for VPWS instance"; 1805 container vpws-constraints { 1806 must "(count(../endpoint) <= 2) and " + 1807 "(count(../endpoint/pw) <= 1) and " + 1808 "(count(../endpoint/ac) <= 1) and " + 1809 "(count(../endpoint/primary-pw) <= 1) and " + 1810 "(count(../endpoint/backup-pw) <= 1) " { 1811 description "A VPWS L2VPN instance has at most 2 endpoints " + 1812 "and each endpoint has at most 1 pseudowire or " + 1813 "1 attachment circuit"; 1814 } 1815 description "VPWS constraints"; 1816 } 1817 } 1819 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1820 "/l2vpn:l2vpn" { 1821 when "l2vpn:type = 'l2vpn:vpls-instance-type'" { 1822 description "Parameters specifically for a VPLS instance"; 1823 } 1824 description "Augment for parameters for a VPLS instance"; 1825 uses pbb-parameters-grp; 1826 } 1828 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1829 "/l2vpn:l2vpn/l2vpn:endpoint" { 1830 when "../l2vpn:type = 'l2vpn:vpls-instance-type'" { 1831 description "Endpoint parameter specifically for " + 1832 "a VPLS instance"; 1833 } 1834 description "Augment for endpoint parameters for a VPLS instance"; 1835 leaf split-horizon-group { 1836 type string; 1837 description "Identify a split horizon group"; 1838 } 1839 } 1841 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1842 "/l2vpn:l2vpn/l2vpn:endpoint" + 1843 "/l2vpn:ac-or-pw-or-redundancy-grp" + 1844 "/l2vpn:redundancy-grp/l2vpn:backup" + 1845 "/l2vpn:backup-pw/l2vpn:backup-pw" { 1846 when "../../l2vpn:type = 'l2vpn:vpls-instance-type'" { 1847 description "Backup pseudowire parameter specifically for " + 1848 "a VPLS instance"; 1849 } 1850 description "Augment for backup pseudowire paramters for " + 1851 "a VPLS instance"; 1852 leaf precedence { 1853 type uint32; 1854 description "precedence of the pseudowire"; 1855 } 1856 } 1858 /* Notifications */ 1860 notification l2vpn-state-change-notification { 1861 description "L2VPN and constituents state change notification"; 1862 leaf l2vpn-instance-name { 1863 type l2vpn-instance-name-ref; 1864 description "The L2VPN instance name"; 1865 } 1866 leaf l2vpn-instance-type { 1867 type leafref { 1868 path "/ni:network-instances" + 1869 "/ni:network-instance" + 1870 "[ni:name=current()/../l2vpn-instance-name]" + 1871 "/l2vpn:type"; 1872 } 1873 description "The L2VPN instance type"; 1874 } 1875 leaf endpoint { 1876 type leafref { 1877 path "/ni:network-instances" + 1878 "/ni:network-instance" + 1879 "[ni:name=current()/../l2vpn-instance-name]" + 1880 "/l2vpn:endpoint/l2vpn:name"; 1881 } 1882 description "The endpoint"; 1883 } 1884 uses endpoint-grp { 1885 augment "ac-or-pw-or-redundancy-grp/ac" { 1886 description "Augment for attachment circuit(s) " + 1887 "as an endpoint"; 1888 leaf ac { 1889 type leafref { 1890 path "/ni:network-instances" + 1891 "/ni:network-instance" + 1892 "[ni:name=current()/../l2vpn-instance-name]" + 1893 "/l2vpn:endpoint" + 1894 "[l2vpn:name=current()/../endpoint]" + 1895 "/l2vpn:ac/l2vpn:name"; 1896 } 1897 description "Related attachment circuit"; 1898 } 1899 } 1900 augment "ac-or-pw-or-redundancy-grp/pw" { 1901 description "Augment for pseudowire(s) as an endpoint"; 1902 leaf pw { 1903 type leafref { 1904 path "/ni:network-instances" + 1905 "/ni:network-instance" + 1906 "[ni:name=current()/../l2vpn-instance-name]" + 1907 "/l2vpn:endpoint[l2vpn:name=current()/../endpoint]" + 1908 "/l2vpn:pw/l2vpn:name"; 1909 } 1910 description "Related pseudowire"; 1911 } 1912 } 1913 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1914 "primary/primary-ac" { 1915 description "Augment for primary-ac"; 1916 leaf primary-ac { 1917 type leafref { 1918 path "/ni:network-instances" + 1919 "/ni:network-instance" + 1920 "[ni:name=current()/../l2vpn-instance-name]" + 1921 "/l2vpn:endpoint" + 1922 "[l2vpn:name=current()/../endpoint]" + 1923 "/l2vpn:primary-ac/l2vpn:name"; 1924 } 1925 description "Related primary attachment circuit"; 1926 } 1927 } 1928 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1929 "primary/primary-pw" { 1930 description "Augment for primary-pw"; 1931 leaf primary-pw { 1932 type leafref { 1933 path "/ni:network-instances" + 1934 "/ni:network-instance" + 1935 "[ni:name=current()/../l2vpn-instance-name]" + 1936 "/l2vpn:endpoint" + 1937 "[l2vpn:name=current()/../endpoint]" + 1938 "/l2vpn:primary-pw/l2vpn:name"; 1939 } 1940 description "Related primary pseudowire"; 1941 } 1942 } 1943 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1944 "backup/backup-ac" { 1945 description "Augment for backup-ac"; 1946 leaf backup-ac { 1947 type leafref { 1948 path "/ni:network-instances" + 1949 "/ni:network-instance" + 1950 "[ni:name=current()/../l2vpn-instance-name]" + 1951 "/l2vpn:endpoint" + 1952 "[l2vpn:name=current()/../endpoint]" + 1953 "/l2vpn:backup-ac/l2vpn:name"; 1954 } 1955 description "Related backup attachment circuit"; 1956 } 1957 } 1958 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1959 "backup/backup-pw" { 1960 description "Augment for backup-pw"; 1961 leaf backup-pw { 1962 type leafref { 1963 path "/ni:network-instances" + 1964 "/ni:network-instance" + 1965 "[ni:name=current()/../l2vpn-instance-name]" + 1966 "/l2vpn:endpoint" + 1967 "[l2vpn:name=current()/../endpoint]" + 1968 "/l2vpn:backup-pw/l2vpn:name"; 1969 } 1970 description "Related backup pseudowire"; 1971 } 1972 } 1973 } 1974 leaf state { 1975 type identityref { 1976 base l2vpn-notification-state; 1977 } 1978 description "State change notification"; 1979 } 1980 } 1982 } 1984 1986 Figure 3 1988 5. Security Considerations 1990 The configuration, state, action and notification data defined in 1991 this document are designed to be accessed via the NETCONF protocol 1992 [RFC6241]. The lowest NETCONF layer is the secure transport layer 1993 and the mandatory-to-implement secure transport is SSH [RFC6242]. 1994 The NETCONF access control model [RFC6536] provides means to restrict 1995 access for particular NETCONF users to a pre-configured subset of all 1996 available NETCONF protocol operations and content. 1998 The security concerns listed above are, however, no different than 1999 faced by other routing protocols. Hence, this draft does not change 2000 any underlying security issues inherent in [I-D.ietf-netmod-routing- 2001 cfg] 2003 6. IANA Considerations 2005 None. 2007 7. Acknowledgments 2009 The authors would like to acknowledge Giles Heron and others for 2010 their useful comments. 2012 8. References 2014 8.1. Normative References 2016 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2017 Requirement Levels", BCP 14, RFC 2119, 2018 DOI 10.17487/RFC2119, March 1997, 2019 . 2021 8.2. Informative References 2023 [RFC3916] Xiao, X., Ed., McPherson, D., Ed., and P. Pate, Ed., 2024 "Requirements for Pseudo-Wire Emulation Edge-to-Edge 2025 (PWE3)", RFC 3916, DOI 10.17487/RFC3916, September 2004, 2026 . 2028 [RFC3985] Bryant, S., Ed. and P. Pate, Ed., "Pseudo Wire Emulation 2029 Edge-to-Edge (PWE3) Architecture", RFC 3985, 2030 DOI 10.17487/RFC3985, March 2005, 2031 . 2033 [RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, 2034 "Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for 2035 Use over an MPLS PSN", RFC 4385, DOI 10.17487/RFC4385, 2036 February 2006, . 2038 [RFC4446] Martini, L., "IANA Allocations for Pseudowire Edge to Edge 2039 Emulation (PWE3)", BCP 116, RFC 4446, 2040 DOI 10.17487/RFC4446, April 2006, 2041 . 2043 [RFC4448] Martini, L., Ed., Rosen, E., El-Aawar, N., and G. Heron, 2044 "Encapsulation Methods for Transport of Ethernet over MPLS 2045 Networks", RFC 4448, DOI 10.17487/RFC4448, April 2006, 2046 . 2048 [RFC4664] Andersson, L., Ed. and E. Rosen, Ed., "Framework for Layer 2049 2 Virtual Private Networks (L2VPNs)", RFC 4664, 2050 DOI 10.17487/RFC4664, September 2006, 2051 . 2053 [RFC4665] Augustyn, W., Ed. and Y. Serbest, Ed., "Service 2054 Requirements for Layer 2 Provider-Provisioned Virtual 2055 Private Networks", RFC 4665, DOI 10.17487/RFC4665, 2056 September 2006, . 2058 [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private 2059 LAN Service (VPLS) Using BGP for Auto-Discovery and 2060 Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, 2061 . 2063 [RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., "Virtual Private 2064 LAN Service (VPLS) Using Label Distribution Protocol (LDP) 2065 Signaling", RFC 4762, DOI 10.17487/RFC4762, January 2007, 2066 . 2068 [RFC5003] Metz, C., Martini, L., Balus, F., and J. Sugimoto, 2069 "Attachment Individual Identifier (AII) Types for 2070 Aggregation", RFC 5003, DOI 10.17487/RFC5003, September 2071 2007, . 2073 [RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed., 2074 "Requirements for Multi-Segment Pseudowire Emulation Edge- 2075 to-Edge (PWE3)", RFC 5254, DOI 10.17487/RFC5254, October 2076 2008, . 2078 [RFC5659] Bocci, M. and S. Bryant, "An Architecture for Multi- 2079 Segment Pseudowire Emulation Edge-to-Edge", RFC 5659, 2080 DOI 10.17487/RFC5659, October 2009, 2081 . 2083 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2084 the Network Configuration Protocol (NETCONF)", RFC 6020, 2085 DOI 10.17487/RFC6020, October 2010, 2086 . 2088 [RFC6073] Martini, L., Metz, C., Nadeau, T., Bocci, M., and M. 2089 Aissaoui, "Segmented Pseudowire", RFC 6073, 2090 DOI 10.17487/RFC6073, January 2011, 2091 . 2093 [RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo, 2094 "Provisioning, Auto-Discovery, and Signaling in Layer 2 2095 Virtual Private Networks (L2VPNs)", RFC 6074, 2096 DOI 10.17487/RFC6074, January 2011, 2097 . 2099 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2100 and A. Bierman, Ed., "Network Configuration Protocol 2101 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2102 . 2104 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2105 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2106 . 2108 [RFC6391] Bryant, S., Ed., Filsfils, C., Drafz, U., Kompella, V., 2109 Regan, J., and S. Amante, "Flow-Aware Transport of 2110 Pseudowires over an MPLS Packet Switched Network", 2111 RFC 6391, DOI 10.17487/RFC6391, November 2011, 2112 . 2114 [RFC6423] Li, H., Martini, L., He, J., and F. Huang, "Using the 2115 Generic Associated Channel Label for Pseudowire in the 2116 MPLS Transport Profile (MPLS-TP)", RFC 6423, 2117 DOI 10.17487/RFC6423, November 2011, 2118 . 2120 [RFC6478] Martini, L., Swallow, G., Heron, G., and M. Bocci, 2121 "Pseudowire Status for Static Pseudowires", RFC 6478, 2122 DOI 10.17487/RFC6478, May 2012, 2123 . 2125 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2126 Protocol (NETCONF) Access Control Model", RFC 6536, 2127 DOI 10.17487/RFC6536, March 2012, 2128 . 2130 [RFC6624] Kompella, K., Kothari, B., and R. Cherukuri, "Layer 2 2131 Virtual Private Networks Using BGP for Auto-Discovery and 2132 Signaling", RFC 6624, DOI 10.17487/RFC6624, May 2012, 2133 . 2135 [RFC7041] Balus, F., Ed., Sajassi, A., Ed., and N. Bitar, Ed., 2136 "Extensions to the Virtual Private LAN Service (VPLS) 2137 Provider Edge (PE) Model for Provider Backbone Bridging", 2138 RFC 7041, DOI 10.17487/RFC7041, November 2013, 2139 . 2141 [RFC7361] Dutta, P., Balus, F., Stokes, O., Calvignac, G., and D. 2142 Fedyk, "LDP Extensions for Optimized MAC Address 2143 Withdrawal in a Hierarchical Virtual Private LAN Service 2144 (H-VPLS)", RFC 7361, DOI 10.17487/RFC7361, September 2014, 2145 . 2147 [RFC8077] Martini, L., Ed. and G. Heron, Ed., "Pseudowire Setup and 2148 Maintenance Using the Label Distribution Protocol (LDP)", 2149 STD 84, RFC 8077, DOI 10.17487/RFC8077, February 2017, 2150 . 2152 [I-D.ietf-rtgwg-ni-model] 2153 Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. 2154 Liu, "YANG Network Instances", draft-ietf-rtgwg-ni- 2155 model-10 (work in progress), February 2018. 2157 Appendix A. Example Configuration 2159 This section shows an example configuration using the YANG data model 2160 defined in the document. 2162 Appendix B. Contributors 2164 The editors gratefully acknowledge the following people for their 2165 contributions to this document. 2167 Reshad Rahman 2168 Cisco Systems, Inc. 2169 Email: rrahman@cisco.com 2171 Kamran Raza 2172 Cisco Systems, Inc. 2174 Email: skraza@cisco.com 2176 Giles Heron 2177 Cisco Systems, Inc. 2178 Email: giheron@cisco.com 2180 Tapraj Singh 2181 Cisco Systems, Inc. 2182 Email: tsingh@cisco.com 2184 Zhenbin Li 2185 Huawei Technologies 2186 Email: lizhenbin@huawei.com 2188 Zhuang Shunwan 2189 Huawei Technologies 2190 Email: Zhuangshunwan@huawei.com 2192 Wang Haibo 2193 Huawei Technologies 2194 Email: rainsword.wang@huawei.com 2196 Sajjad Ahmed 2197 Ericsson 2198 Email: sajjad.ahmed@ericsson.com 2200 Matthew Bocci 2201 Nokia 2202 Email: matthew.bocci@nokia.com 2204 Jorge Rabadan 2205 Nokia 2206 Email: jorge.rabadan@nokia.com 2208 Jonathan Hardwick 2209 Metaswitch 2210 Email: jonathan.hardwick@metaswitch.com 2212 Santosh Esale 2213 Juniper Networks 2214 Email: sesale@juniper.net 2216 Nick Delregno 2217 Verizon 2218 Email: nick.deregno@verizon.com 2220 Luay Jalil 2221 Verizon 2222 Email: luay.jalil@verizon.com 2224 Maria Joecylyn 2225 Verizon 2226 Email: joecylyn.malit@verizon.com 2228 Figure 4 2230 Authors' Addresses 2232 Himanshu Shah 2233 Ciena Corporation 2235 Email: hshah@ciena.com 2237 Patrice Brissette 2238 Cisco Systems, Inc. 2240 Email: pbrisset@cisco.com 2242 Ing-When Chen 2243 Individual Contributor 2245 Email: ichen.ietf@outlook.com 2247 Iftekar Hussain 2248 Infinera Corporation 2250 Email: ihussain@infinera.com 2252 Bin Wen 2253 Comcast 2255 Email: Bin_Wen@cable.comcast.com 2257 Kishore Tiruveedhula 2258 Juniper Networks 2260 Email: kishoret@juniper.net