idnits 2.17.1 draft-ietf-bess-l2vpn-yang-10.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: ---------------------------------------------------------------------------- No issues found here. 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 115 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 533 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 (July 02, 2019) is 1753 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) == Missing Reference: 'I-D.ietf-rtgwg-ni-model' is mentioned on line 356, but not defined -- Obsolete informational reference (is this intentional?): RFC 6536 (Obsoleted by RFC 8341) Summary: 1 error (**), 0 flaws (~~), 4 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: January 3, 2020 Cisco Systems, Inc. 6 I. Chen, Ed. 7 The MITRE Corporation 8 I. Hussain, Ed. 9 Infinera Corporation 10 B. Wen, Ed. 11 Comcast 12 K. Tiruveedhula, Ed. 13 Juniper Networks 14 July 02, 2019 16 YANG Data Model for MPLS-based L2VPN 17 draft-ietf-bess-l2vpn-yang-10.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 January 3, 2020. 50 Copyright Notice 52 Copyright (c) 2019 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. Latest addition . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . 9 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 . . . . . . . . . . . . . . . . . . . . . . . . . 44 91 8.1. Normative References . . . . . . . . . . . . . . . . . . 44 92 8.2. Informative References . . . . . . . . . . . . . . . . . 44 93 Appendix A. Example Configuration . . . . . . . . . . . . . . . 47 94 Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 47 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 [RFC7950] 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 The data model covers Ethernet based Layer 2 services. The Ethernet 113 Attachment Circuits are not defined. Instead, they are leveraged 114 from other standards organizations such as IEEE802.1 and Metro 115 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 121 easily be 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 This document focuses on definition of configuration, state and 135 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 definitions of 143 a set of common parameters, a list of PWs and a list of endpoints. A 144 special constraint is added for the VPWS configuration such that only 145 two endpoints are allowed in the list of endpoints. 147 The Pseudowire data object model is defined independent of the L2VPN 148 data object model to allow its inclusion in the Ethernet Segment and 149 EVPN data objects. 151 The L2VPN data object model augments Psuedowire data object for its 152 definition. 154 The document also includes Notifications used by the L2VPN object 155 model 157 2. Specification of Requirements 159 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 160 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 161 document are to be interpreted as described in [RFC2119]. 163 3. L2VPN YANG Model 165 3.1. Overview 167 The document defines configuration of one single container for L2VPN. 168 Within the l2vpn container, common parameters and a list of endpoints 169 are defined. For the point-to-point VPWS configuration, endpoint 170 list is used with the constraint that limits the number of endpoints 171 to be two. For the multipoint service, endpoint list is used. Each 172 endpoint contains the common definition that is either an attachment 173 circuit, a pseudowire or a redundancy group. The previous versions 174 of this document represented VPWS service with definition of 175 endpoint-a and endpoint-z while VPLS with a list of endpoints. This 176 duplicattion is removed with simplified version whereby list of 177 endpoints is used for both. When defining VPWS, the numnber of 178 endpoints is constrained to two endpoints. 180 The l2vpn container also includes definition of common building 181 blocks for redundancy-grp templates and pseudowire-templates. 183 The State objects have been consolidated with the configuration 184 object as per the recommendations provided by the Guidelines for Yang 185 Module Authors document. 187 The IETF working group has defined the VPWS and VPLS services that 188 leverages the pseudowire technologies defined by the PWE3 working 189 group. A large number of RFCs from these working groups cover this 190 subject matter. Hence, it is prudent that this document state the 191 scope of the MPLS L2VPN object model definitions. 193 The following documents are within the scope. This is not an 194 exhaustive list but a representation of documents that are covered 195 for this work: 197 o Requirements for Pseudo-wire Emulation Edge-to-Edge (PWE3) 198 [RFC3916] 200 o Pseudo-wire Emulation Edge-to-Edge (PWE3) Architecture [RFC3985] 202 o IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3) 203 [RFC4446] 205 o Pseudowire Setup and Maintenance Using the Label Distribution 206 Protocol (LDP) [RFC8077] 208 o Encapsulation Methods for Transport of Ethernet over MPLS Networks 209 [RFC4448] 211 o Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over 212 an MPLS PSN [RFC4385] 214 o Requirements for Multi-Segment Pseudowire Emulation Edge-to-Edge 215 (PWE3) [RFC5254] 217 o An Architecture for Multi-Segment Pseudowire Emulation Edge-to- 218 Edge [RFC5659] 220 o Segmented Pseudowire [RFC6073] 222 o Framework for Layer 2 Virtual Private Networks [RFC4664] 224 o Service Requirements for Layer 2 Provider-Provisioned Virtual 225 Private Networks [RFC4665] 227 o Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery 228 and Signaling [RFC4761] 230 o Virtual Private LAN Service (VPLS) Using Label Distribution 231 Protocol (LDP) Signaling [RFC4762] 233 o Attachment Individual Identifier (AII) Types for Aggregation 234 [RFC5003] 236 o Provisioning, Auto-Discovery, and Signaling in Layer 2 Virtual 237 Private Networks (L2VPNs) [RFC6074] 239 o Flow-Aware Transport of Pseudowires over an MPLS Packet Switched 240 Network [RFC6391] 242 o Layer 2 Virtual Private Networks Using BGP for Auto-Discovery and 243 Signaling [RFC6624] 245 o Extensions to the Virtual Private LAN Service (VPLS) Provider Edge 246 (PE) Model for Provider Backbone Bridging [RFC7041] 248 o LDP Extensions for Optimized MAC Address Withdrawal in a 249 Hierarchical Virtual Private LAN Service (H-VPLS) [RFC7361] 251 o Using the generic associated channel label for Pseudowire in the 252 MPLS Transport Profile [RFC6423] 254 o Pseudowire status for static pseudowire [RFC6478] 256 The specifics of pseudowire over MPLS-TP LSPs is in scope. However, 257 the initial effort addresses definitions of object models that are 258 commonly deployed. 260 The IETF work in L2VPN and PWE3 working group relating to L2TP, OAM, 261 multicast (e.g. p2mp, etree, etc) and access specific protocols such 262 as G.8032, MSTP, etc is out-of-scope for this document. 264 The following is the high level view of the L2VPN data model. 266 PW // Container 267 PW specific attributes 269 PW template definition 271 template-ref Redundancy-Group // redundancy-group 272 template 273 attributes 275 Network Instance // container 276 l2vpn // containter 278 common attributes 280 BGP-parameters // container 281 common attributes 282 auto-discovery attributes 283 signaling attributes 285 // list of PWs being used 286 PW // container 287 template-ref PW 288 attribute-override 290 PBB-parameters // container 291 pbb specific attributes 293 VPWS-constraints // rule to limit number of endpoints to two 295 // List of endpoints, where each member endpoint container is - 296 PW // reference 297 redundancy-grp // container 298 AC // eventual reference to standard AC 299 PW // reference 301 Figure 1 303 3.2. Latest addition 305 Pseudowire module is extended to include, 307 Multi-segment PW - a new attribute is added to pseudowire that 308 identifies the pseudowire as a member of the multi-segment 309 pseudowire. Two pseudowire members in a VPWS, configures a multi- 310 segment pseudowire at the switching PE. 312 Pseudowire load-balancing - The load-balancing behaviour for a 313 pseudowire can be configured either using the FAT label that resides 314 below the pseudowire label or Entropy label with Entropy label 315 indicator above the pseudowire label. By default, the load-balancing 316 is disabled. 318 FEC 129 related - AGI, SAII and TAII string configurations is added 319 to faciliate FEC 129 based pseudowire configuration. 321 3.3. Open issues and next steps 323 This section provides updates on open issues and will be removed 324 before publication. Authors believes the document has covered the 325 topics within the scope of the document. However, there are items, 326 such as PW Headend, VPLS IRB, etc that can be candidate for 327 inclusion. The authors would like to progress the document to 328 publication for general availability with current content and tackle 329 the other topics in a follow up 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 field is used as the key to refer to specific network 360 instance. Network Instance of type VSI anchors L2VPN container with 361 a list of endpoints which when limited to two entries represents 362 point to point service (i.e. VPWS) while more than two endpoints 363 represent multipoint service (i.e. VPLS). Within a service 364 instance, a set of common attributes are defined, followed by a list 365 of PWs and a list 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 includes 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 specified by 407 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 list of endpoints with one entry is invalid. 445 The augmentation of ietf-l2vpn module is TBD. All IP addresses 446 defined in this module are currently scoped under global VRF/table. 448 3.6.5. multi-segment pseudowire 450 The multi-segment pseudowire is expressed as configuration of two 451 pseudowire segments at the switching PEs that provides end-to-end PW 452 path between two terminating PEs consisting of multiple pseudowire 453 segments. 455 The multi-segment pseudowire is configured at switching PE using two 456 endpoints that consists of pseudowires of type "ms-pw-members". The 457 VPWS service construct is used with "vpws constraint" that restricts 458 the number of endpoints to two. 460 To verify consistency, a) verify that both endpoints are using ms-pw- 461 member pseudowires and b) it is only used as for VPWS configuration 462 at the switching PE. 464 3.7. Operational State 466 The operational state of L2VPN attributes has been consolidated with 467 the configuration as per recommendations from the guidelines for the 468 YANG author document. 470 3.8. Yang tree 472 module: ietf-pseudowires 473 +--rw pseudowires 474 +--rw pseudowire* [name] 475 | +--rw name string 476 | +--ro state? pseudowire-status-type 477 | +--rw template? pw-template-ref 478 | +--rw mtu? uint16 479 | +--rw mac-withdraw? boolean 480 | +--rw pw-loadbalance? enumeration 481 | +--rw ms-pw-member? boolean 482 | +--rw cw-negotiation? cw-negotiation-type 483 | +--rw tunnel-policy? string 484 | +--rw (pw-type)? 485 | +--:(configured-pw) 486 | | +--rw peer-ip? inet:ip-address 487 | | +--rw pw-id? uint32 488 | | +--rw group-id? uint32 489 | | +--rw icb? boolean 490 | | +--rw transmit-label? rt-types:mpls-label 491 | | +--rw receive-label? rt-types:mpls-label 492 | | +--rw generalized? boolean 493 | | +--rw agi? string 494 | | +--rw saii? string 495 | | +--rw taii? string 496 | +--:(bgp-pw) 497 | | +--rw remote-pe-id? inet:ip-address 498 | +--:(bgp-ad-pw) 499 | +--rw remote-ve-id? uint16 500 +--rw pw-templates 501 +--rw pw-template* [name] 502 +--rw name string 503 +--rw mtu? uint16 504 +--rw cw-negotiation? cw-negotiation-type 505 +--rw tunnel-policy? string 507 module: ietf-l2vpn 508 +--rw l2vpn 509 +--rw redundancy-group-templates 510 +--rw redundancy-group-template* [name] 511 +--rw name string 512 +--rw protection-mode? enumeration 513 +--rw reroute-mode? enumeration 514 +--rw dual-receive? boolean 515 +--rw revert? boolean 516 +--rw reroute-delay? uint16 517 +--rw revert-delay? uint16 519 augment /ni:network-instances/ni:network-instance/ni:ni-type: 520 +--:(l2vpn) 521 +--rw type? identityref 522 +--rw mtu? uint16 523 +--rw mac-aging-timer? uint32 524 +--rw service-type? l2vpn-service-type 525 +--rw discovery-type? l2vpn-discovery-type 526 +--rw signaling-type l2vpn-signaling-type 527 +--rw bgp-parameters 528 | +--rw vpn-id? string 529 | +--rw rd-rt 530 | +--rw route-distinguisher? rt-types:route-distinguisher 531 | +--rw vpn-target* [route-target] 532 | +--rw route-target rt-types:route-target 533 | +--rw route-target-type rt-types:route-target-type 534 +--rw bgp-signaling 535 | +--rw site-id? uint16 536 | +--rw site-range? uint16 537 +--rw endpoint* [name] 538 | +--rw name string 539 | +--rw (ac-or-pw-or-redundancy-grp)? 540 | | +--:(ac) 541 | | | +--rw ac* [name] 542 | | | +--rw name if:interface-ref 543 | | | +--ro state? operational-state-type 544 | | +--:(pw) 545 | | | +--rw pw* [name] 546 | | | +--rw name pw:pseudowire-ref 547 | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state 548 | | +--:(redundancy-grp) 549 | | +--rw (primary) 550 | | | +--:(primary-ac) 551 | | | | +--rw primary-ac 552 | | | | +--rw name? if:interface-ref 553 | | | | +--ro state? operational-state-type 554 | | | +--:(primary-pw) 555 | | | +--rw primary-pw* [name] 556 | | | +--rw name pw:pseudowire-ref 557 | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state 558 | | +--rw (backup)? 559 | | | +--:(backup-ac) 560 | | | | +--rw backup-ac 561 | | | | +--rw name? if:interface-ref 562 | | | | +--ro state? operational-state-type 563 | | | +--:(backup-pw) 564 | | | +--rw backup-pw* [name] 565 | | | +--rw name pw:pseudowire-ref 566 | | | +--ro state? -> /pw:pseudowires/pseudowire[pw:name=current()/../name]/state 567 | | | +--rw precedence? uint32 568 | | +--rw template? redundancy-group-template-ref 569 | | +--rw protection-mode? enumeration 570 | | +--rw reroute-mode? enumeration 571 | | +--rw dual-receive? boolean 572 | | +--rw revert? boolean 573 | | +--rw reroute-delay? uint16 574 | | +--rw revert-delay? uint16 575 | +--rw split-horizon-group? string 576 +--rw vpws-constraints 577 +--rw pbb-parameters 578 +--rw (component-type)? 579 +--:(i-component) 580 | +--rw i-sid? i-sid-type 581 | +--rw backbone-src-mac? yang:mac-address 582 +--:(b-component) 583 +--rw bind-b-component-name? l2vpn-instance-name-ref 584 +--ro bind-b-component-type? identityref 585 augment /pw:pseudowires/pw:pseudowire: 586 +--rw vccv-ability? boolean 587 +--rw request-vlanid? uint16 588 +--rw vlan-tpid? string 589 +--rw ttl? uint8 590 augment /pw:pseudowires/pw:pseudowire/pw:pw-type: 592 +--:(bgp-pw) 593 | +--rw bgp-pw 594 | +--rw remote-pe-id? inet:ip-address 595 +--:(bgp-ad-pw) 596 +--rw bgp-ad-pw 597 +--rw remote-ve-id? uint16 599 notifications: 600 +---n l2vpn-state-change-notification 601 +--ro l2vpn-instance-name? l2vpn-instance-name-ref 602 +--ro l2vpn-instance-type? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:type 603 +--ro endpoint? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint/name 604 +--ro (ac-or-pw-or-redundancy-grp)? 605 | +--:(ac) 606 | | +--ro ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/ac/name 607 | +--:(pw) 608 | | +--ro pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/pw/name 609 | +--:(redundancy-grp) 610 | +--ro (primary) 611 | | +--:(primary-ac) 612 | | | +--ro primary-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-ac/name 613 | | +--:(primary-pw) 614 | | +--ro primary-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/primary-pw/name 615 | +--ro (backup)? 616 | +--:(backup-ac) 617 | | +--ro backup-ac? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-ac/name 618 | +--:(backup-pw) 619 | +--ro backup-pw? -> /ni:network-instances/network-instance[ni:name=current()/../l2vpn-instance-name]/l2vpn:endpoint[l2vpn:name=current()/../endpoint]/backup-pw/name 620 +--ro state? identityref 622 Figure 2 624 4. YANG Module 626 The L2VPN configuration container is logically divided into following 627 high level config areas: 629 file "ietf-pseudowires@2018-10-17.yang" 630 module ietf-pseudowires { 631 namespace "urn:ietf:params:xml:ns:yang:ietf-pseudowires"; 632 prefix "pw"; 634 import ietf-inet-types { 635 prefix "inet"; 637 } 639 import ietf-routing-types { 640 prefix "rt-types"; 641 } 643 organization "ietf"; 644 contact "ietf"; 645 description "Pseudowire YANG model"; 647 revision "2018-10-17" { 648 description "Second revision " + 649 " - Added group-id and attachment identifiers " + 650 ""; 651 reference ""; 652 } 654 revision "2017-06-26" { 655 description "Initial revision " + 656 " - Created a new model for pseudowires, which used " + 657 " to be defined within the L2VPN model " + 658 ""; 659 reference ""; 660 } 662 /* Typedefs */ 664 typedef pseudowire-ref { 665 type leafref { 666 path "/pw:pseudowires/pw:pseudowire/pw:name"; 667 } 668 description "A type that is a reference to a pseudowire"; 669 } 671 typedef pw-template-ref { 672 type leafref { 673 path "/pw:pseudowires/pw:pw-templates/pw:pw-template/pw:name"; 674 } 675 description "A type that is a reference to a pw-template"; 676 } 678 typedef cw-negotiation-type { 679 type enumeration { 680 enum "non-preferred" { 681 description "No preference for control-word"; 682 } 683 enum "preferred" { 684 description "Prefer to have control-word negotiation"; 686 } 687 } 688 description "control-word negotiation preference type"; 689 } 691 typedef pseudowire-status-type { 692 type bits { 693 bit pseudowire-forwarding { 694 position 0; 695 description "Pseudowire is forwarding"; 696 } 697 bit pseudowire-not-forwarding { 698 position 1; 699 description "Pseudowire is not forwarding"; 700 } 701 bit local-attachment-circuit-receive-fault { 702 position 2; 703 description "Local attachment circuit (ingress) receive " + 704 "fault"; 705 } 706 bit local-attachment-circuit-transmit-fault { 707 position 3; 708 description "Local attachment circuit (egress) transmit " + 709 "fault"; 710 } 711 bit local-PSN-facing-PW-receive-fault { 712 position 4; 713 description "Local PSN-facing PW (ingress) receive fault"; 714 } 715 bit local-PSN-facing-PW-transmit-fault { 716 position 5; 717 description "Local PSN-facing PW (egress) transmit fault"; 718 } 719 bit PW-preferential-forwarding-status { 720 position 6; 721 description "Pseudowire preferential forwarding status"; 722 } 723 bit PW-request-switchover-status { 724 position 7; 725 description "Pseudowire request switchover status"; 726 } 727 } 728 description 729 "Pseudowire status type, as registered in the IANA " + 730 "Pseudowire Status Code Registry"; 731 } 733 /* Data */ 734 container pseudowires { 735 description "Configuration management of pseudowires"; 736 list pseudowire { 737 key "name"; 738 description "A pseudowire"; 739 leaf name { 740 type string; 741 description "pseudowire name"; 742 } 743 leaf state { 744 type pseudowire-status-type; 745 config false; 746 description "pseudowire operation status"; 747 reference "RFC 4446 and IANA Pseudowire Status Codes " + 748 "Registery"; 749 } 750 leaf template { 751 type pw-template-ref; 752 description "pseudowire template"; 753 } 754 leaf mtu { 755 type uint16; 756 description "PW MTU"; 757 } 758 leaf mac-withdraw { 759 type boolean; 760 default false; 761 description "Enable (true) or disable (false) MAC withdraw"; 762 } 763 leaf pw-loadbalance { 764 type enumeration { 765 enum "disabled" { 766 value 0; 767 description "load-balancing disabled"; 768 } 769 enum "fat-pw" { 770 value 1; 771 description "load-balance using FAT label below PW label"; 772 } 773 enum "entropy" { 774 value 2; 775 description "load-balance using ELI/EL above PW label"; 776 } 777 } 778 description "PW load-balancing"; 779 } 780 leaf ms-pw-member { 781 type boolean; 782 default false; 783 description "Enable (true) or disable (false) not a member of MS-PW"; 784 } 785 leaf cw-negotiation { 786 type cw-negotiation-type; 787 description "cw-negotiation"; 788 } 789 leaf tunnel-policy { 790 type string; 791 description "tunnel policy name"; 792 } 793 choice pw-type { 794 description "A choice of pseudowire type"; 795 case configured-pw { 796 leaf peer-ip { 797 type inet:ip-address; 798 description "peer IP address"; 799 } 800 leaf pw-id { 801 type uint32; 802 description "pseudowire id"; 803 } 804 leaf group-id { 805 type uint32; 806 description "group id"; 807 } 808 leaf icb { 809 type boolean; 810 description "inter-chassis backup"; 811 } 812 leaf transmit-label { 813 type rt-types:mpls-label; 814 description "transmit lable"; 815 } 816 leaf receive-label { 817 type rt-types:mpls-label; 818 description "receive label"; 819 } 820 leaf generalized { 821 type boolean; 822 description "generalized pseudowire id FEC element"; 823 } 824 leaf agi { 825 type string; 826 description "attachment group identifier"; 827 } 828 leaf saii { 829 type string; 830 description "source attachment individual identifier"; 831 } 832 leaf taii { 833 type string; 834 description "target attachment individual identifier"; 835 } 836 } 837 case bgp-pw { 838 leaf remote-pe-id { 839 type inet:ip-address; 840 description "remote pe id"; 841 } 842 } 843 case bgp-ad-pw { 844 leaf remote-ve-id { 845 type uint16; 846 description "remote ve id"; 847 } 848 } 849 } 850 } 851 container pw-templates { 852 description "pw-templates"; 853 list pw-template { 854 key "name"; 855 description "pw-template"; 856 leaf name { 857 type string; 858 description "name"; 859 } 860 leaf mtu { 861 type uint16; 862 description "pseudowire mtu"; 863 } 864 leaf cw-negotiation { 865 type cw-negotiation-type; 866 default "preferred"; 867 description 868 "control-word negotiation preference"; 869 } 870 leaf tunnel-policy { 871 type string; 872 description "tunnel policy name"; 873 } 874 } 875 } 876 } 877 } 878 879 file "ietf-l2vpn@2019-05-28.yang" 880 module ietf-l2vpn { 881 namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn"; 882 prefix "l2vpn"; 884 import ietf-inet-types { 885 prefix "inet"; 886 } 888 import ietf-yang-types { 889 prefix "yang"; 890 } 892 import ietf-routing-types { 893 prefix "rt-types"; 894 } 896 import ietf-interfaces { 897 prefix "if"; 898 } 900 import ietf-network-instance { 901 prefix "ni"; 902 } 904 import ietf-pseudowires { 905 prefix "pw"; 906 } 908 organization "ietf"; 909 contact "ietf"; 910 description "l2vpn"; 912 revision "2019-05-28" { 913 description "Nineth revision " + 914 " - Used bgp parameters hierarchy common to L2VPN and EVPN " + 915 ""; 916 reference ""; 917 } 919 revision "2018-02-06" { 920 description "Eighth revision " + 921 " - Incorporated ietf-network-instance model " + 922 " - change the type of attachment circuit to " + 923 " if:interface-ref " + 924 ""; 925 reference ""; 927 } 929 revision "2017-09-21" { 930 description "Seventh revision " + 931 " - Fixed yangdump errors " + 932 ""; 933 reference ""; 934 } 935 revision "2017-06-26" { 936 description "Sixth revision " + 937 " - Removed unused module mpls " + 938 " - Renamed l2vpn-instances-state to l2vpn-instances " + 939 " - Added pseudowire status as defined in RFC4446 and " + 940 " IANA Pseudowire Status Codes Register " + 941 " - Added notifications " + 942 " - Moved PW definition out of L2VPN " + 943 " - Moved model to NMDA style specified in " + 944 " draft-dsdt-nmda-guidelines-01.txt " + 945 " - Renamed l2vpn-instances and l2vpn-instance to " + 946 " instances and instance to shorten xpaths " + 947 ""; 948 reference ""; 949 } 951 revision "2017-03-06" { 952 description "Sixth revision " + 953 " - Removed the 'common' container and move pw-templates " + 954 " and redundancy-group-templates up a level " + 955 " - Consolidated the endpoint configuration such that " + 956 " all L2VPN instances has a list of endpoint. For " + 957 " certain types of L2VPN instances such as VPWS where " + 958 " each L2VPN instance is limited to at most two " + 959 " endpoint, additional augment statements were included " + 960 " to add necessary constraints " + 961 " - Removed discovery-type and signaling-type operational " + 962 " state from VPLS pseudowires, as these two parameters " + 963 " are configured as L2VPN parameters rather than " + 964 " pseudowire paramteres " + 965 " - Renamed l2vpn-instances to l2vpn-instances-state " + 966 " in the operational state branch " + 967 " - Removed BGP parameter groupings and reused " + 968 " ietf-routing-types.yang module instead " + 969 ""; 970 reference ""; 971 } 973 revision "2016-10-24" { 974 description "Fifth revision " + 975 " - Edits based on Giles's comments " + 976 " 5) Remove relative leafrefs in groupings, " + 977 " and the resulting new groupings are: " + 978 " (a) bgp-auto-discovery-parameters-grp " + 979 " (b) bgp-signaling-parameters-grp " + 980 " (c) endpoint-grp " + 981 " 11) Merge VPLS and VPWS into one single list " + 982 " and use augment statements to handle " + 983 " differences between VPLS and VPWS " + 984 " - Add a new grouping l2vpn-common-parameters-grp " + 985 " to make VPLS and VPWS more consistent"; 986 reference ""; 987 } 989 revision "2016-05-31" { 990 description "Fourth revision " + 991 " - Edits based on Giles's comments " + 992 " 1) Change enumeration to identityref type for: " + 993 " (a) l2vpn-service-type " + 994 " (b) l2vpn-discovery-type " + 995 " (c) l2vpn-signaling-type " + 996 " bgp-rt-type, cw-negotiation, and " + 997 " pbb-component remain enumerations " + 998 " 2) Define i-sid-type for leaf 'i-sid' " + 999 " (which is renamed from 'i-tag') " + 1000 " 3) Rename 'vpn-targets' to 'vpn-target' " + 1001 " 4) Import ietf-mpls.yang and reuse the " + 1002 " 'mpls-label' type defined in ietf-mpls.yang " + 1003 " transmit-label and receive-label " + 1004 " 8) Change endpoint list's key to name " + 1005 " 9) Changed MTU to type uint16 " + 1006 ""; 1007 reference ""; 1008 } 1010 revision "2016-03-07" { 1011 description "Third revision " + 1012 " - Changed the module name to ietf-l2vpn " + 1013 " - Merged EVPN into L2VPN " + 1014 " - Eliminated the definitions of attachment " + 1015 " circuit with the intention to reuse other " + 1016 " layer-2 definitions " + 1017 " - Added state branch"; 1018 reference ""; 1019 } 1021 revision "2015-10-08" { 1022 description "Second revision " + 1023 " - Added container vpls-instances " + 1024 " - Rearranged groupings and typedefs to be " + 1025 " reused across vpls-instance and vpws-instances"; 1026 reference ""; 1027 } 1029 revision "2015-06-30" { 1030 description "Initial revision"; 1031 reference ""; 1032 } 1034 /* identities */ 1036 identity l2vpn-instance-type { 1037 description "Base identity from which identities of " + 1038 "l2vpn service instance types are derived"; 1039 } 1041 identity vpws-instance-type { 1042 base l2vpn-instance-type; 1043 description "This identity represents VPWS instance type"; 1044 } 1046 identity vpls-instance-type { 1047 base l2vpn-instance-type; 1048 description "This identity represents VPLS instance type"; 1049 } 1051 identity link-discovery-protocol { 1052 description "Base identiy from which identities describing " + 1053 "link discovery protocols are derived"; 1054 } 1056 identity lacp { 1057 base "link-discovery-protocol"; 1058 description "This identity represents LACP"; 1059 } 1061 identity lldp { 1062 base "link-discovery-protocol"; 1063 description "This identity represents LLDP"; 1064 } 1066 identity bpdu { 1067 base "link-discovery-protocol"; 1068 description "This identity represens BPDU"; 1069 } 1070 identity cpd { 1071 base "link-discovery-protocol"; 1072 description "This identity represents CPD"; 1073 } 1075 identity udld { 1076 base "link-discovery-protocol"; 1077 description "This identity represens UDLD"; 1078 } 1080 identity l2vpn-service { 1081 description "Base identity from which identities describing " + 1082 "L2VPN services are derived"; 1083 } 1085 identity Ethernet { 1086 base "l2vpn-service"; 1087 description "This identity represents Ethernet service"; 1088 } 1090 identity ATM { 1091 base "l2vpn-service"; 1092 description "This identity represents Asynchronous Transfer " + 1093 "Mode service"; 1094 } 1096 identity FR { 1097 base "l2vpn-service"; 1098 description "This identity represent Frame-Relay service"; 1099 } 1101 identity TDM { 1102 base "l2vpn-service"; 1103 description "This identity represent Time Devision " + 1104 "Multiplexing service"; 1105 } 1106 identity l2vpn-discovery { 1107 description "Base identity from which identities describing " + 1108 "L2VPN discovery protocols are derived"; 1109 } 1111 identity manual-discovery { 1112 base "l2vpn-discovery"; 1113 description "Manual configuration of l2vpn service"; 1114 } 1116 identity bgp-auto-discovery { 1117 base "l2vpn-discovery"; 1118 description "Border Gateway Protocol (BGP) auto-discovery of " + 1119 "l2vpn service"; 1120 } 1122 identity ldp-discovery { 1123 base "l2vpn-discovery"; 1124 description "Label Distribution Protocol (LDP) discovery of " + 1125 "l2vpn service"; 1126 } 1128 identity mixed-discovery { 1129 base "l2vpn-discovery"; 1130 description "Mixed discovery methods of l2vpn service"; 1131 } 1133 identity l2vpn-signaling { 1134 description "Base identity from which identities describing " + 1135 "L2VPN signaling protocols are derived"; 1136 } 1138 identity static-configuration { 1139 base "l2vpn-signaling"; 1140 description "Static configuration of labels (no signaling)"; 1141 } 1143 identity ldp-signaling { 1144 base "l2vpn-signaling"; 1145 description "Label Distribution Protocol (LDP) signaling"; 1146 } 1148 identity bgp-signaling { 1149 base "l2vpn-signaling"; 1150 description "Border Gateway Protocol (BGP) signaling"; 1151 } 1153 identity mixed-signaling { 1154 base "l2vpn-signaling"; 1155 description "Mixed signaling methods"; 1156 } 1158 identity l2vpn-notification-state { 1159 description "The base identity on which notification states " + 1160 "are based"; 1161 } 1163 identity MAC-limit-reached { 1164 base "l2vpn-notification-state"; 1165 description "MAC limit is reached"; 1167 } 1168 identity MAC-limit-cleared { 1169 base "l2vpn-notification-state"; 1170 description "MAC limit is cleared"; 1171 } 1173 identity MTU-mismatched { 1174 base "l2vpn-notification-state"; 1175 description "MAC is mismatched"; 1176 } 1178 identity MTU-mismatched-cleared { 1179 base "l2vpn-notification-state"; 1180 description "MAC is mismatch is cleared"; 1181 } 1183 identity state-changed-to-up { 1184 base "l2vpn-notification-state"; 1185 description "State is changed to UP"; 1186 } 1188 identity state-changed-to-down { 1189 base "l2vpn-notification-state"; 1190 description "State is changed to down"; 1191 } 1193 identity MAC-move-limit-exceeded { 1194 base "l2vpn-notification-state"; 1195 description "MAC move limit is exceeded"; 1196 } 1198 identity MAC-move-limit-exceeded-cleared { 1199 base "l2vpn-notification-state"; 1200 description "MAC move limit exceeded is cleared"; 1201 } 1203 identity MAC-flap-detected { 1204 base "l2vpn-notification-state"; 1205 description "MAC flap detected"; 1206 } 1208 identity port-disabled-due-to-MAC-flap { 1209 base "l2vpn-notification-state"; 1210 description "Port disabled due to MAC flap"; 1211 } 1213 /* typedefs */ 1214 typedef l2vpn-service-type { 1215 type identityref { 1216 base "l2vpn-service"; 1217 } 1218 description "L2VPN service type"; 1219 } 1221 typedef l2vpn-discovery-type { 1222 type identityref { 1223 base "l2vpn-discovery"; 1224 } 1225 description "L2VPN discovery type"; 1226 } 1228 typedef l2vpn-signaling-type { 1229 type identityref { 1230 base "l2vpn-signaling"; 1231 } 1232 description "L2VPN signaling type"; 1233 } 1235 typedef link-discovery-protocol-type { 1236 type identityref { 1237 base "link-discovery-protocol"; 1238 } 1239 description "This type is used to identify " + 1240 "link discovery protocol"; 1241 } 1243 typedef pbb-component-type { 1244 type enumeration { 1245 enum "b-component" { 1246 description "Identifies as a b-component"; 1247 } 1248 enum "i-component" { 1249 description "Identifies as an i-component"; 1250 } 1251 } 1252 description "This type is used to identify " + 1253 "the type of PBB component"; 1254 } 1256 typedef redundancy-group-template-ref { 1257 type leafref { 1258 path "/l2vpn:l2vpn/l2vpn:redundancy-group-templates" + 1259 "/l2vpn:redundancy-group-template/l2vpn:name"; 1260 } 1261 description "redundancy-group-template-ref"; 1263 } 1264 typedef l2vpn-instance-name-ref { 1265 type leafref { 1266 path "/ni:network-instances/ni:network-instance" + 1267 "/ni:name"; 1268 } 1269 description "l2vpn-instance-name-ref"; 1270 } 1272 typedef l2vpn-instance-type-ref { 1273 type leafref { 1274 path "/ni:network-instances/ni:network-instance" + 1275 "/l2vpn:type"; 1276 } 1277 description "l2vpn-instance-type-ref"; 1278 } 1280 typedef operational-state-type { 1281 type enumeration { 1282 enum 'up' { 1283 description "Operational state is up"; 1284 } 1285 enum 'down' { 1286 description "Operational state is down"; 1287 } 1288 } 1289 description "operational-state-type"; 1290 } 1292 typedef i-sid-type { 1293 type uint32 { 1294 range "0..16777216"; 1295 } 1296 description "I-SID type that is 24-bits. " + 1297 "This should be moved to ieee-types.yang at " + 1298 "http://www.ieee802.org/1/files/public/docs2015" + 1299 "/new-mholness-ieee-types-yang-v01.yang"; 1300 } 1302 /* groupings */ 1304 grouping pbb-parameters-grp { 1305 description "PBB parameters grouping"; 1306 container pbb-parameters { 1307 description "pbb-parameters"; 1308 choice component-type { 1309 description "PBB component type"; 1310 case i-component { 1311 leaf i-sid { 1312 type i-sid-type; 1313 description "I-SID"; 1314 } 1315 leaf backbone-src-mac { 1316 type yang:mac-address; 1317 description "backbone-src-mac"; 1318 } 1319 } 1320 case b-component { 1321 leaf bind-b-component-name { 1322 type l2vpn-instance-name-ref; 1323 must "/ni:network-instances" + 1324 "/ni:network-instance[ni:name=current()]" + 1325 "/l2vpn:type = 'l2vpn:vpls-instance-type'" { 1326 description "A b-component must be an L2VPN instance " + 1327 "of type vpls-instance-type"; 1328 } 1329 description "Reference to the associated b-component"; 1330 } 1331 leaf bind-b-component-type { 1332 type identityref { 1333 base l2vpn-instance-type; 1334 } 1335 must ". = 'l2vpn:vpls-instance-type'" { 1336 description "The associated b-component must have " + 1337 "type vpls-instance-type"; 1338 } 1339 config false; 1340 description "Type of the associated b-component"; 1341 } 1342 } 1343 } 1344 } 1345 } 1347 grouping pbb-parameters-state-grp { 1348 description "PBB parameters grouping"; 1349 container pbb-parameters { 1350 description "pbb-parameters"; 1351 choice component-type { 1352 description "PBB component type"; 1353 case i-component { 1354 leaf i-sid { 1355 type i-sid-type; 1356 description "I-SID"; 1357 } 1358 leaf backbone-src-mac { 1359 type yang:mac-address; 1360 description "backbone-src-mac"; 1361 } 1362 } 1363 case b-component { 1364 leaf bind-b-component-name { 1365 type string; 1366 description "Name of the associated b-component"; 1367 } 1368 leaf bind-b-component-type { 1369 type identityref { 1370 base l2vpn-instance-type; 1371 } 1372 must ". = 'l2vpn:vpls-instance-type'" { 1373 description "The associated b-component must have " + 1374 "type vpls-instance-type"; 1375 } 1376 description "Type of the associated b-component"; 1377 } 1378 } 1379 } 1380 } 1381 } 1383 grouping l2vpn-common-parameters-grp { 1384 description "L2VPN common parameters"; 1385 leaf type { 1386 type identityref { 1387 base l2vpn-instance-type; 1388 } 1389 description "Type of L2VPN service instance"; 1390 } 1391 leaf mtu { 1392 type uint16; 1393 description "MTU of L2VPN service"; 1394 } 1395 leaf mac-aging-timer { 1396 type uint32; 1397 description "mac-aging-timer, the duration after which" + 1398 "a MAC entry is considered aged out"; 1399 } 1400 leaf service-type { 1401 type l2vpn-service-type; 1402 default Ethernet; 1403 description "L2VPN service type"; 1404 } 1405 leaf discovery-type { 1406 type l2vpn-discovery-type; 1407 default manual-discovery; 1408 description "L2VPN service discovery type"; 1409 } 1410 leaf signaling-type { 1411 type l2vpn-signaling-type; 1412 mandatory true; 1413 description "L2VPN signaling type"; 1414 } 1415 } 1416 grouping bgp-signaling-parameters-grp { 1417 description "BGP parameters for signaling"; 1418 leaf site-id { 1419 type uint16; 1420 description "Site ID"; 1421 } 1422 leaf site-range { 1423 type uint16; 1424 description "Site Range"; 1425 } 1426 } 1428 grouping redundancy-group-properties-grp { 1429 description "redundancy-group-properties-grp"; 1430 leaf protection-mode { 1431 type enumeration { 1432 enum "frr" { 1433 value 0; 1434 description "fast reroute"; 1435 } 1436 enum "master-slave" { 1437 value 1; 1438 description "master-slave"; 1439 } 1440 enum "independent" { 1441 value 2; 1442 description "independent"; 1443 } 1444 } 1445 description "protection-mode"; 1446 } 1447 leaf reroute-mode { 1448 type enumeration { 1449 enum "immediate" { 1450 value 0; 1451 description "immediate reroute"; 1452 } 1453 enum "delayed" { 1454 value 1; 1455 description "delayed reroute"; 1456 } 1457 enum "never" { 1458 value 2; 1459 description "never reroute"; 1460 } 1461 } 1462 description "reroute-mode"; 1463 } 1464 leaf dual-receive { 1465 type boolean; 1466 description 1467 "allow extra traffic to be carried by backup"; 1468 } 1469 leaf revert { 1470 type boolean; 1471 description "allow forwarding to revert to primary " + 1472 "after restoring primary"; 1473 } 1474 leaf reroute-delay { 1475 when "../reroute-mode = 'delayed'" { 1476 description "Specify amount of time to " + 1477 "delay reroute only when " + 1478 "delayed route is configured"; 1479 } 1480 type uint16; 1481 description "amount of time to delay reroute"; 1482 } 1483 leaf revert-delay { 1484 when "../revert = 'true'" { 1485 description "Specify the amount of time to " + 1486 "wait to revert to primary " + 1487 "only if reversion is configured"; 1488 } 1489 type uint16; 1490 description "amount ot time to wait to revert to primary"; 1491 } 1492 } 1494 grouping endpoint-grp { 1495 description "A grouping that defines the structure of " + 1496 "an endpoint"; 1497 choice ac-or-pw-or-redundancy-grp { 1498 description "A choice ofattachment circuit or " + 1499 "pseudowire or redundancy group"; 1500 case ac { 1501 description "Attachment circuit(s) as an endpoint"; 1502 } 1503 case pw { 1504 description "Pseudowire(s) as an endpoint"; 1505 } 1506 case redundancy-grp { 1507 description "Redundancy group as an endpoint"; 1508 choice primary { 1509 mandatory true; 1510 description "primary options"; 1511 case primary-ac { 1512 description "primary-ac"; 1513 } 1514 case primary-pw { 1515 description "primary-pw"; 1516 } 1517 } 1518 choice backup { 1519 description "backup options"; 1520 case backup-ac { 1521 description "backup-ac"; 1522 } 1523 case backup-pw { 1524 description "backup-pw"; 1525 } 1526 } 1527 } 1528 } 1529 } 1531 /* L2VPN YANG Model */ 1533 container l2vpn { 1534 description "L2VPN specific data"; 1536 container redundancy-group-templates { 1537 description "redundancy group templates"; 1538 list redundancy-group-template { 1539 key "name"; 1540 description "redundancy-group-template"; 1541 leaf name { 1542 type string; 1543 description "name"; 1544 } 1545 uses redundancy-group-properties-grp; 1546 } 1547 } 1548 } 1550 /* augments */ 1551 augment "/ni:network-instances/ni:network-instance/ni:ni-type" { 1552 description 1553 "Augmentation for L2VPN instance"; 1554 case l2vpn { 1555 description "An L2VPN service instance"; 1556 uses l2vpn-common-parameters-grp; 1557 container bgp-parameters { 1558 when "../discovery-type = 'l2vpn:bgp-auto-discovery'" { 1559 description "Parameters used when discovery type is " + 1560 "bgp-auto-discovery"; 1561 } 1562 description "BGP auto-discovery parameters"; 1563 leaf vpn-id { 1564 type string; 1565 description "VPN ID"; 1566 } 1567 container rd-rt { 1568 leaf route-distinguisher { 1569 type rt-types:route-distinguisher; 1570 description "BGP route distinguisher"; 1571 } 1572 uses rt-types:vpn-route-targets; 1573 description "Route distiguisher and " + 1574 "corresponding VPN route targets"; 1575 } 1576 } 1577 container bgp-signaling { 1578 when "../signaling-type = 'l2vpn:bgp-signaling'" { 1579 description "Check signaling type: " + 1580 "Can only configure BGP signaling if " + 1581 "signaling type is BGP"; 1582 } 1583 description "BGP signaling parameters"; 1584 uses bgp-signaling-parameters-grp; 1585 } 1586 list endpoint { 1587 key "name"; 1588 description "An endpoint"; 1589 leaf name { 1590 type string; 1591 description "endpoint name"; 1592 } 1593 uses endpoint-grp { 1594 augment "ac-or-pw-or-redundancy-grp/ac" { 1595 description "Augment for attachment circuit(s) " + 1596 "as an endpoint"; 1597 list ac { 1598 key "name"; 1599 leaf name { 1600 type if:interface-ref; 1601 description "Name of attachment circuit"; 1602 } 1603 leaf state { 1604 type operational-state-type; 1605 config false; 1606 description "attachment circuit up/down state"; 1607 } 1608 description "An L2VPN instance's " + 1609 "attachment circuit list"; 1610 } 1611 } 1612 augment "ac-or-pw-or-redundancy-grp/pw" { 1613 description "Augment for pseudowire(s) as an endpoint"; 1614 list pw { 1615 key "name"; 1616 leaf name { 1617 type pw:pseudowire-ref; 1618 must "(../../../type = " + 1619 " 'l2vpn:vpws-instance-type') or " + 1620 "(not(boolean(/pw:pseudowires" + 1621 " /pw:pseudowire[pw:name = current()]" + 1622 " /vccv-ability)) and " + 1623 " not(boolean(/pw:pseudowires" + 1624 " /pw:pseudowire[pw:name = current()]" + 1625 " /request-vlanid)) and " + 1626 " not(boolean(/pw:pseudowires" + 1627 " /pw:pseudowire[pw:name = current()]" + 1628 " /vlan-tpid)) and " + 1629 " not(boolean(/pw:pseudowires" + 1630 " /pw:pseudowire[pw:name = current()]" + 1631 " /ttl)))" { 1632 description "Only a VPWS PW has parameters " + 1633 "vccv-ability, request-vlanid, " + 1634 "vlan-tpid, and ttl"; 1635 } 1636 description "Pseudowire name"; 1637 } 1638 leaf state { 1639 type leafref { 1640 path "/pw:pseudowires" + 1641 "/pw:pseudowire[pw:name=current()/../name]" + 1642 "/pw:state"; 1643 } 1644 config false; 1645 description "Pseudowire state"; 1646 } 1647 description "An L2VPN instance's pseudowire list"; 1648 } 1649 } 1650 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1651 "primary/primary-ac" { 1652 description "Augment for primary-ac"; 1653 container primary-ac { 1654 description "Primary AC"; 1655 leaf name { 1656 type if:interface-ref; 1657 description "Name of attachment circuit"; 1658 } 1659 leaf state { 1660 type operational-state-type; 1661 config false; 1662 description "attachment circuit up/down state"; 1663 } 1664 } 1665 } 1666 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1667 "primary/primary-pw" { 1668 description "Augment for primary-pw"; 1669 list primary-pw { 1670 key "name"; 1671 leaf name { 1672 type pw:pseudowire-ref; 1673 must "(../../../type = " + 1674 " 'l2vpn:vpws-instance-type') or " + 1675 "(not(boolean(/pw:pseudowires" + 1676 " /pw:pseudowire[pw:name = current()]" + 1677 " /vccv-ability)) and " + 1678 " not(boolean(/pw:pseudowires" + 1679 " /pw:pseudowire[pw:name = current()]" + 1680 " /request-vlanid)) and " + 1681 " not(boolean(/pw:pseudowires" + 1682 " /pw:pseudowire[pw:name = current()]" + 1683 " /vlan-tpid)) and " + 1684 " not(boolean(/pw:pseudowires" + 1685 " /pw:pseudowire[pw:name = current()]" + 1686 " /ttl)))" { 1687 description "Only a VPWS PW has parameters " + 1688 "vccv-ability, request-vlanid, " + 1689 "vlan-tpid, and ttl"; 1690 } 1691 description "Pseudowire name"; 1692 } 1693 leaf state { 1694 type leafref { 1695 path "/pw:pseudowires" + 1696 "/pw:pseudowire[pw:name=current()/../name]" + 1697 "/pw:state"; 1698 } 1699 config false; 1700 description "Pseudowire state"; 1701 } 1702 description "An L2VPN instance's pseudowire list"; 1703 } 1704 } 1705 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1706 "backup/backup-ac" { 1707 description "Augment for backup-ac"; 1708 container backup-ac { 1709 description "Backup AC"; 1710 leaf name { 1711 type if:interface-ref; 1712 description "Name of attachment circuit"; 1713 } 1714 leaf state { 1715 type operational-state-type; 1716 config false; 1717 description "attachment circuit up/down state"; 1718 } 1719 } 1720 } 1721 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1722 "backup/backup-pw" { 1723 description "Augment for backup-pw"; 1724 list backup-pw { 1725 key "name"; 1726 leaf name { 1727 type pw:pseudowire-ref; 1728 must "(../../../type = " + 1729 " 'l2vpn:vpws-instance-type') or " + 1730 "(not(boolean(/pw:pseudowires" + 1731 " /pw:pseudowire[pw:name = current()]" + 1732 " /vccv-ability)) and " + 1733 " not(boolean(/pw:pseudowires" + 1734 " /pw:pseudowire[pw:name = current()]" + 1735 " /request-vlanid)) and " + 1736 " not(boolean(/pw:pseudowires" + 1737 " /pw:pseudowire[pw:name = current()]" + 1738 " /vlan-tpid)) and " + 1739 " not(boolean(/pw:pseudowires" + 1740 " /pw:pseudowire[pw:name = current()]" + 1741 " /ttl)))" { 1742 description "Only a VPWS PW has parameters " + 1743 "vccv-ability, request-vlanid, " + 1744 "vlan-tpid, and ttl"; 1745 } 1746 description "Pseudowire name"; 1747 } 1748 leaf state { 1749 type leafref { 1750 path "/pw:pseudowires" + 1751 "/pw:pseudowire[pw:name=current()/../name]" + 1752 "/pw:state"; 1753 } 1754 config false; 1755 description "Pseudowire state"; 1756 } 1757 description "A list of backup pseudowires"; 1758 } 1759 } 1760 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 1761 description "Augment for redundancy group properties"; 1762 leaf template { 1763 type redundancy-group-template-ref; 1764 description "Reference a redundancy group " + 1765 "properties template"; 1766 } 1767 uses redundancy-group-properties-grp; 1768 } 1769 } 1770 } 1771 } 1772 } 1774 augment "/pw:pseudowires/pw:pseudowire" { 1775 description "Augment for peudowire parameters for " + 1776 "VPWS pseudowires"; 1777 leaf vccv-ability { 1778 type boolean; 1779 description "vccvability"; 1780 } 1781 leaf request-vlanid { 1782 type uint16; 1783 description "request vlanid"; 1784 } 1785 leaf vlan-tpid { 1786 type string; 1787 description "vlan tpid"; 1788 } 1789 leaf ttl { 1790 type uint8; 1791 description "time-to-live"; 1792 } 1793 } 1795 augment "/pw:pseudowires/pw:pseudowire/pw:pw-type" { 1796 description "Additional pseudowire types"; 1797 case bgp-pw { 1798 container bgp-pw { 1799 description "BGP pseudowire"; 1800 leaf remote-pe-id { 1801 type inet:ip-address; 1802 description "remote pe id"; 1803 } 1804 } 1805 } 1806 case bgp-ad-pw { 1807 container bgp-ad-pw { 1808 description "BGP auto-discovery pseudowire"; 1809 leaf remote-ve-id { 1810 type uint16; 1811 description "remote ve id"; 1812 } 1813 } 1814 } 1815 } 1817 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1818 "/l2vpn:l2vpn" { 1819 when "l2vpn:type = 'l2vpn:vpws-instance-type'" { 1820 description "Constraints only for VPWS pseudowires"; 1821 } 1822 description "Augment for VPWS instance"; 1823 container vpws-constraints { 1824 must "(count(../endpoint) <= 2) and " + 1825 "(count(../endpoint/pw) <= 1) and " + 1826 "(count(../endpoint/ac) <= 1) and " + 1827 "(count(../endpoint/primary-pw) <= 1) and " + 1828 "(count(../endpoint/backup-pw) <= 1) " { 1829 description "A VPWS L2VPN instance has at most 2 endpoints " + 1830 "and each endpoint has at most 1 pseudowire or " + 1831 "1 attachment circuit"; 1832 } 1833 description "VPWS constraints"; 1834 } 1835 } 1837 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1838 "/l2vpn:l2vpn" { 1840 when "l2vpn:type = 'l2vpn:vpls-instance-type'" { 1841 description "Parameters specifically for a VPLS instance"; 1842 } 1843 description "Augment for parameters for a VPLS instance"; 1844 uses pbb-parameters-grp; 1845 } 1847 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1848 "/l2vpn:l2vpn/l2vpn:endpoint" { 1849 when "../l2vpn:type = 'l2vpn:vpls-instance-type'" { 1850 description "Endpoint parameter specifically for " + 1851 "a VPLS instance"; 1852 } 1853 description "Augment for endpoint parameters for a VPLS instance"; 1854 leaf split-horizon-group { 1855 type string; 1856 description "Identify a split horizon group"; 1857 } 1858 } 1860 augment "/ni:network-instances/ni:network-instance/ni:ni-type" + 1861 "/l2vpn:l2vpn/l2vpn:endpoint" + 1862 "/l2vpn:ac-or-pw-or-redundancy-grp" + 1863 "/l2vpn:redundancy-grp/l2vpn:backup" + 1864 "/l2vpn:backup-pw/l2vpn:backup-pw" { 1865 when "../../l2vpn:type = 'l2vpn:vpls-instance-type'" { 1866 description "Backup pseudowire parameter specifically for " + 1867 "a VPLS instance"; 1868 } 1869 description "Augment for backup pseudowire paramters for " + 1870 "a VPLS instance"; 1871 leaf precedence { 1872 type uint32; 1873 description "precedence of the pseudowire"; 1874 } 1875 } 1877 /* Notifications */ 1879 notification l2vpn-state-change-notification { 1880 description "L2VPN and constituents state change notification"; 1881 leaf l2vpn-instance-name { 1882 type l2vpn-instance-name-ref; 1883 description "The L2VPN instance name"; 1884 } 1885 leaf l2vpn-instance-type { 1886 type leafref { 1887 path "/ni:network-instances" + 1888 "/ni:network-instance" + 1889 "[ni:name=current()/../l2vpn-instance-name]" + 1890 "/l2vpn:type"; 1891 } 1892 description "The L2VPN instance type"; 1893 } 1894 leaf endpoint { 1895 type leafref { 1896 path "/ni:network-instances" + 1897 "/ni:network-instance" + 1898 "[ni:name=current()/../l2vpn-instance-name]" + 1899 "/l2vpn:endpoint/l2vpn:name"; 1900 } 1901 description "The endpoint"; 1902 } 1903 uses endpoint-grp { 1904 augment "ac-or-pw-or-redundancy-grp/ac" { 1905 description "Augment for attachment circuit(s) " + 1906 "as an endpoint"; 1907 leaf ac { 1908 type leafref { 1909 path "/ni:network-instances" + 1910 "/ni:network-instance" + 1911 "[ni:name=current()/../l2vpn-instance-name]" + 1912 "/l2vpn:endpoint" + 1913 "[l2vpn:name=current()/../endpoint]" + 1914 "/l2vpn:ac/l2vpn:name"; 1915 } 1916 description "Related attachment circuit"; 1917 } 1918 } 1919 augment "ac-or-pw-or-redundancy-grp/pw" { 1920 description "Augment for pseudowire(s) as an endpoint"; 1921 leaf pw { 1922 type leafref { 1923 path "/ni:network-instances" + 1924 "/ni:network-instance" + 1925 "[ni:name=current()/../l2vpn-instance-name]" + 1926 "/l2vpn:endpoint[l2vpn:name=current()/../endpoint]" + 1927 "/l2vpn:pw/l2vpn:name"; 1928 } 1929 description "Related pseudowire"; 1930 } 1931 } 1932 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1933 "primary/primary-ac" { 1934 description "Augment for primary-ac"; 1935 leaf primary-ac { 1936 type leafref { 1937 path "/ni:network-instances" + 1938 "/ni:network-instance" + 1939 "[ni:name=current()/../l2vpn-instance-name]" + 1940 "/l2vpn:endpoint" + 1941 "[l2vpn:name=current()/../endpoint]" + 1942 "/l2vpn:primary-ac/l2vpn:name"; 1943 } 1944 description "Related primary attachment circuit"; 1945 } 1946 } 1947 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1948 "primary/primary-pw" { 1949 description "Augment for primary-pw"; 1950 leaf primary-pw { 1951 type leafref { 1952 path "/ni:network-instances" + 1953 "/ni:network-instance" + 1954 "[ni:name=current()/../l2vpn-instance-name]" + 1955 "/l2vpn:endpoint" + 1956 "[l2vpn:name=current()/../endpoint]" + 1957 "/l2vpn:primary-pw/l2vpn:name"; 1958 } 1959 description "Related primary pseudowire"; 1960 } 1961 } 1962 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1963 "backup/backup-ac" { 1964 description "Augment for backup-ac"; 1965 leaf backup-ac { 1966 type leafref { 1967 path "/ni:network-instances" + 1968 "/ni:network-instance" + 1969 "[ni:name=current()/../l2vpn-instance-name]" + 1970 "/l2vpn:endpoint" + 1971 "[l2vpn:name=current()/../endpoint]" + 1972 "/l2vpn:backup-ac/l2vpn:name"; 1973 } 1974 description "Related backup attachment circuit"; 1975 } 1976 } 1977 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1978 "backup/backup-pw" { 1979 description "Augment for backup-pw"; 1980 leaf backup-pw { 1981 type leafref { 1982 path "/ni:network-instances" + 1983 "/ni:network-instance" + 1984 "[ni:name=current()/../l2vpn-instance-name]" + 1985 "/l2vpn:endpoint" + 1986 "[l2vpn:name=current()/../endpoint]" + 1987 "/l2vpn:backup-pw/l2vpn:name"; 1988 } 1989 description "Related backup pseudowire"; 1990 } 1991 } 1992 } 1993 leaf state { 1994 type identityref { 1995 base l2vpn-notification-state; 1996 } 1997 description "State change notification"; 1998 } 1999 } 2000 } 2002 2004 Figure 3 2006 5. Security Considerations 2008 The configuration, state, action and notification data defined in 2009 this document are designed to be accessed via the NETCONF protocol 2010 [RFC6241]. The lowest NETCONF layer is the secure transport layer 2011 and the mandatory-to-implement secure transport is SSH [RFC6242]. 2012 The NETCONF access control model [RFC6536] provides means to restrict 2013 access for particular NETCONF users to a pre-configured subset of all 2014 available NETCONF protocol operations and content. 2016 The security concerns listed above are, however, no different than 2017 faced by other routing protocols. Hence, this draft does not change 2018 any underlying security issues inherent in [I-D.ietf-netmod-routing- 2019 cfg] 2021 6. IANA Considerations 2023 None. 2025 7. Acknowledgments 2027 The authors would like to acknowledge Giles Heron and others for 2028 their useful comments. 2030 MITRE has approved this document for Public Release, Distribution 2031 Unlimited, with Public Release Case Number 19-0683. 2033 8. References 2035 8.1. Normative References 2037 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2038 Requirement Levels", BCP 14, RFC 2119, 2039 DOI 10.17487/RFC2119, March 1997, 2040 . 2042 8.2. Informative References 2044 [RFC3916] Xiao, X., Ed., McPherson, D., Ed., and P. Pate, Ed., 2045 "Requirements for Pseudo-Wire Emulation Edge-to-Edge 2046 (PWE3)", RFC 3916, DOI 10.17487/RFC3916, September 2004, 2047 . 2049 [RFC3985] Bryant, S., Ed. and P. Pate, Ed., "Pseudo Wire Emulation 2050 Edge-to-Edge (PWE3) Architecture", RFC 3985, 2051 DOI 10.17487/RFC3985, March 2005, 2052 . 2054 [RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, 2055 "Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for 2056 Use over an MPLS PSN", RFC 4385, DOI 10.17487/RFC4385, 2057 February 2006, . 2059 [RFC4446] Martini, L., "IANA Allocations for Pseudowire Edge to Edge 2060 Emulation (PWE3)", BCP 116, RFC 4446, 2061 DOI 10.17487/RFC4446, April 2006, 2062 . 2064 [RFC4448] Martini, L., Ed., Rosen, E., El-Aawar, N., and G. Heron, 2065 "Encapsulation Methods for Transport of Ethernet over MPLS 2066 Networks", RFC 4448, DOI 10.17487/RFC4448, April 2006, 2067 . 2069 [RFC4664] Andersson, L., Ed. and E. Rosen, Ed., "Framework for Layer 2070 2 Virtual Private Networks (L2VPNs)", RFC 4664, 2071 DOI 10.17487/RFC4664, September 2006, 2072 . 2074 [RFC4665] Augustyn, W., Ed. and Y. Serbest, Ed., "Service 2075 Requirements for Layer 2 Provider-Provisioned Virtual 2076 Private Networks", RFC 4665, DOI 10.17487/RFC4665, 2077 September 2006, . 2079 [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private 2080 LAN Service (VPLS) Using BGP for Auto-Discovery and 2081 Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, 2082 . 2084 [RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., "Virtual Private 2085 LAN Service (VPLS) Using Label Distribution Protocol (LDP) 2086 Signaling", RFC 4762, DOI 10.17487/RFC4762, January 2007, 2087 . 2089 [RFC5003] Metz, C., Martini, L., Balus, F., and J. Sugimoto, 2090 "Attachment Individual Identifier (AII) Types for 2091 Aggregation", RFC 5003, DOI 10.17487/RFC5003, September 2092 2007, . 2094 [RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed., 2095 "Requirements for Multi-Segment Pseudowire Emulation Edge- 2096 to-Edge (PWE3)", RFC 5254, DOI 10.17487/RFC5254, October 2097 2008, . 2099 [RFC5659] Bocci, M. and S. Bryant, "An Architecture for Multi- 2100 Segment Pseudowire Emulation Edge-to-Edge", RFC 5659, 2101 DOI 10.17487/RFC5659, October 2009, 2102 . 2104 [RFC6073] Martini, L., Metz, C., Nadeau, T., Bocci, M., and M. 2105 Aissaoui, "Segmented Pseudowire", RFC 6073, 2106 DOI 10.17487/RFC6073, January 2011, 2107 . 2109 [RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo, 2110 "Provisioning, Auto-Discovery, and Signaling in Layer 2 2111 Virtual Private Networks (L2VPNs)", RFC 6074, 2112 DOI 10.17487/RFC6074, January 2011, 2113 . 2115 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2116 and A. Bierman, Ed., "Network Configuration Protocol 2117 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2118 . 2120 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2121 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2122 . 2124 [RFC6391] Bryant, S., Ed., Filsfils, C., Drafz, U., Kompella, V., 2125 Regan, J., and S. Amante, "Flow-Aware Transport of 2126 Pseudowires over an MPLS Packet Switched Network", 2127 RFC 6391, DOI 10.17487/RFC6391, November 2011, 2128 . 2130 [RFC6423] Li, H., Martini, L., He, J., and F. Huang, "Using the 2131 Generic Associated Channel Label for Pseudowire in the 2132 MPLS Transport Profile (MPLS-TP)", RFC 6423, 2133 DOI 10.17487/RFC6423, November 2011, 2134 . 2136 [RFC6478] Martini, L., Swallow, G., Heron, G., and M. Bocci, 2137 "Pseudowire Status for Static Pseudowires", RFC 6478, 2138 DOI 10.17487/RFC6478, May 2012, 2139 . 2141 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2142 Protocol (NETCONF) Access Control Model", RFC 6536, 2143 DOI 10.17487/RFC6536, March 2012, 2144 . 2146 [RFC6624] Kompella, K., Kothari, B., and R. Cherukuri, "Layer 2 2147 Virtual Private Networks Using BGP for Auto-Discovery and 2148 Signaling", RFC 6624, DOI 10.17487/RFC6624, May 2012, 2149 . 2151 [RFC7041] Balus, F., Ed., Sajassi, A., Ed., and N. Bitar, Ed., 2152 "Extensions to the Virtual Private LAN Service (VPLS) 2153 Provider Edge (PE) Model for Provider Backbone Bridging", 2154 RFC 7041, DOI 10.17487/RFC7041, November 2013, 2155 . 2157 [RFC7361] Dutta, P., Balus, F., Stokes, O., Calvignac, G., and D. 2158 Fedyk, "LDP Extensions for Optimized MAC Address 2159 Withdrawal in a Hierarchical Virtual Private LAN Service 2160 (H-VPLS)", RFC 7361, DOI 10.17487/RFC7361, September 2014, 2161 . 2163 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2164 RFC 7950, DOI 10.17487/RFC7950, August 2016, 2165 . 2167 [RFC8077] Martini, L., Ed. and G. Heron, Ed., "Pseudowire Setup and 2168 Maintenance Using the Label Distribution Protocol (LDP)", 2169 STD 84, RFC 8077, DOI 10.17487/RFC8077, February 2017, 2170 . 2172 Appendix A. Example Configuration 2174 This section shows an example configuration using the YANG data model 2175 defined in the document. 2177 Appendix B. Contributors 2179 The editors gratefully acknowledge the following people for their 2180 contributions to this document. 2182 Reshad Rahman 2183 Cisco Systems, Inc. 2184 Email: rrahman@cisco.com 2186 Kamran Raza 2187 Cisco Systems, Inc. 2188 Email: skraza@cisco.com 2190 Giles Heron 2191 Cisco Systems, Inc. 2192 Email: giheron@cisco.com 2194 Tapraj Singh 2195 Cisco Systems, Inc. 2196 Email: tsingh@cisco.com 2198 Zhenbin Li 2199 Huawei Technologies 2200 Email: lizhenbin@huawei.com 2202 Zhuang Shunwan 2203 Huawei Technologies 2204 Email: Zhuangshunwan@huawei.com 2206 Wang Haibo 2207 Huawei Technologies 2208 Email: rainsword.wang@huawei.com 2210 Sajjad Ahmed 2211 Ericsson 2212 Email: sajjad.ahmed@ericsson.com 2214 Matthew Bocci 2215 Nokia 2216 Email: matthew.bocci@nokia.com 2218 Jorge Rabadan 2219 Nokia 2220 Email: jorge.rabadan@nokia.com 2222 Jonathan Hardwick 2223 Metaswitch 2224 Email: jonathan.hardwick@metaswitch.com 2226 Santosh Esale 2227 Juniper Networks 2228 Email: sesale@juniper.net 2230 Nick Delregno 2231 Verizon 2232 Email: nick.deregno@verizon.com 2234 Luay Jalil 2235 Verizon 2236 Email: luay.jalil@verizon.com 2238 Maria Joecylyn 2239 Verizon 2240 Email: joecylyn.malit@verizon.com 2242 Figure 4 2244 Authors' Addresses 2246 Himanshu Shah 2247 Ciena Corporation 2249 Email: hshah@ciena.com 2251 Patrice Brissette 2252 Cisco Systems, Inc. 2254 Email: pbrisset@cisco.com 2256 Ing-When Chen 2257 The MITRE Corporation 2259 Email: ingwherchen@mitre.org 2261 Iftekar Hussain 2262 Infinera Corporation 2264 Email: ihussain@infinera.com 2265 Bin Wen 2266 Comcast 2268 Email: Bin_Wen@cable.comcast.com 2270 Kishore Tiruveedhula 2271 Juniper Networks 2273 Email: kishoret@juniper.net