idnits 2.17.1 draft-ietf-bess-l2vpn-yang-02.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 39 instances of too long lines in the document, the longest one being 53 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 399 has weird spacing: '...t-value str...' == Line 489 has weird spacing: '...rw name str...' == Line 527 has weird spacing: '...t-value str...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (October 29, 2016) is 2735 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 4447 (Obsoleted by RFC 8077) -- Obsolete informational reference (is this intentional?): RFC 6536 (Obsoleted by RFC 8341) Summary: 1 error (**), 0 flaws (~~), 5 warnings (==), 3 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: May 2, 2017 Cisco Systems, Inc. 6 I. Chen, Ed. 7 Ericsson 8 I. Hussain, Ed. 9 Infinera Corporation 10 B. Wen, Ed. 11 Comcast 12 October 29, 2016 14 YANG Data Model for MPLS-based L2VPN 15 draft-ietf-bess-l2vpn-yang-02.txt 17 Abstract 19 This document describes a YANG data model for Layer 2 VPN (L2VPN) 20 services over MPLS networks. These services include point-to-point 21 Virtual Private Wire Service (VPWS) and multipoint Virtual Private 22 LAN service (VPLS) that uses LDP and BGP signaled Pseudowires. It is 23 expected that this model will be used by the management tools run by 24 the network operators in order to manage and monitor the network 25 resources that they use to deliver L2VPN services. 27 Status of This Memo 29 This Internet-Draft is submitted in full conformance with the 30 provisions of BCP 78 and BCP 79. 32 Internet-Drafts are working documents of the Internet Engineering 33 Task Force (IETF). Note that other groups may also distribute 34 working documents as Internet-Drafts. The list of current Internet- 35 Drafts is at http://datatracker.ietf.org/drafts/current/. 37 Internet-Drafts are draft documents valid for a maximum of six months 38 and may be updated, replaced, or obsoleted by other documents at any 39 time. It is inappropriate to use Internet-Drafts as reference 40 material or to cite them other than as "work in progress." 42 This Internet-Draft will expire on May 2, 2017. 44 Copyright Notice 46 Copyright (c) 2016 IETF Trust and the persons identified as the 47 document authors. All rights reserved. 49 This document is subject to BCP 78 and the IETF Trust's Legal 50 Provisions Relating to IETF Documents 51 (http://trustee.ietf.org/license-info) in effect on the date of 52 publication of this document. Please review these documents 53 carefully, as they describe your rights and restrictions with respect 54 to this document. Code Components extracted from this document must 55 include Simplified BSD License text as described in Section 4.e of 56 the Trust Legal Provisions and are provided without warranty as 57 described in the Simplified BSD License. 59 Table of Contents 61 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 62 2. Specification of Requirements . . . . . . . . . . . . . . . . 3 63 3. L2VPN YANG Model . . . . . . . . . . . . . . . . . . . . . . 3 64 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 65 3.2. L2VPN Common . . . . . . . . . . . . . . . . . . . . . . 7 66 3.2.1. ac-templates . . . . . . . . . . . . . . . . . . . . 7 67 3.2.2. pw-templates . . . . . . . . . . . . . . . . . . . . 7 68 3.3. Point-to-Point and Multipoint service . . . . . . . . . . 7 69 3.3.1. ac list . . . . . . . . . . . . . . . . . . . . . . . 7 70 3.3.2. pw list . . . . . . . . . . . . . . . . . . . . . . . 7 71 3.3.3. redundancy-grp choice . . . . . . . . . . . . . . . . 7 72 3.3.4. endpoint container . . . . . . . . . . . . . . . . . 8 73 3.3.5. point-to-point or multipoint service . . . . . . . . 8 74 3.4. Operational State . . . . . . . . . . . . . . . . . . . . 8 75 3.5. Yang tree . . . . . . . . . . . . . . . . . . . . . . . . 8 76 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 17 77 5. Security Considerations . . . . . . . . . . . . . . . . . . . 49 78 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 79 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49 80 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 81 8.1. Normative References . . . . . . . . . . . . . . . . . . 49 82 8.2. Informative References . . . . . . . . . . . . . . . . . 49 83 Appendix A. Example Configuration . . . . . . . . . . . . . . . 52 84 Appendix B. Contributors . . . . . . . . . . . . . . . . . . . . 52 85 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 87 1. Introduction 89 The Network Configuration Protocol (NETCONF) [RFC6241] is a network 90 management protocol that defines mechanisms to manage network 91 devices. YANG [RFC6020] is a modular language that represents data 92 structures in an XML or JSON tree format, and is used as a data 93 modeling language for the NETCONF. 95 This document defines a YANG data model for MPLS based Layer 2 VPN 96 services (L2VPN) [RFC4664] and includes switching between the local 97 attachment circuits. The L2VPN model covers point-to-point VPWS and 98 Multipoint VPLS services. These services use signaling of 99 Pseudowires across MPLS networks using LDP [RFC4447][RFC4762] or 100 BGP[RFC4761]. 102 Initially, the data model covers Ethernet based Layer 2 services. 103 The Ethernet Attachment Circuits are not defined. Instead, they are 104 leveraged from other standards organizations such as IEEE802.1 and 105 Metro Ethernet Forum (MEF). 107 Other Layer 2 services, such as ATM, Frame Relay, TDM, etc are 108 included in the scope but will be covered as the future work items. 110 The objective of the model is to define building blocks that can be 111 easily assembled in different order to realize different services. 113 The data model uses following constructs for configuration and 114 management: 116 o Configuration 118 o Operational State 120 o Executables (Actions) 122 o Notifications 124 The current document focuses on definition of configuration and state 125 objects. The future revisions is expected to cover the actions and 126 notifications aspects of the model. 128 The L2VPN data object model uses the instance centric approach. The 129 attributes of each service; VPWS, VPLS, etc are specified for a given 130 service instance. 132 2. Specification of Requirements 134 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 135 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 136 document are to be interpreted as described in [RFC2119]. 138 3. L2VPN YANG Model 140 3.1. Overview 142 In this version of the document, one single container, l2vpn, is 143 defined. Within the l2vpn container, endpoint-a, endpoint-z and a 144 list of endpoints are defined. For the point-to-point VPWS 145 configuration, endpoint-a and endpoint-z are used. For the 146 multipoint service, endpoint list is used. Each endpoint contains 147 the definitions for attachment circuit, pseudowire and a redundancy 148 group. The yang data model for l2vpn in this document differs 149 significantly from the previous version which used explicit 150 containers such as VPLS and VPWS within l2vpn, which in turn 151 contained the definition of relevent endpoints. For example, VPWS 152 used endpoint-a and endpoint-z while VPLS used the bridge table 153 containing a list of endpoints. 155 The l2vpn container also includes definition of common building 156 blocks for redundancy-grp templates and pseudowire-templates. The 157 operations state object holds read-only information of objects that 158 has either been configured or dynamically created. 160 The IETF working group has defined the VPWS and VPLS services that 161 leverages the pseudowire technologies defined by the PWE3 working 162 group. A large number of RFCs from these working groups cover this 163 subject matter. Hence, it is prudent that this document state the 164 scope of the MPLS L2VPN object model definitions. 166 The following documents are within the scope. This is not an 167 exhaustive list but a representation of documents that are covered 168 for this work: 170 o Requirements for Pseudo-wire Emulation Edge-to-Edge (PWE3) 171 [RFC3916] 173 o Pseudo-wire Emulation Edge-to-Edge (PWE3) Architecture [RFC3985] 175 o IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3) 176 [RFC4446] 178 o Pseudowire Setup and Maintenance Using the Label Distribution 179 Protocol (LDP) [RFC4447] 181 o Encapsulation Methods for Transport of Ethernet over MPLS Networks 182 [RFC4448] 184 o Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over 185 an MPLS PSN [RFC4385] 187 o Requirements for Multi-Segment Pseudowire Emulation Edge-to-Edge 188 (PWE3) [RFC5254] 190 o An Architecture for Multi-Segment Pseudowire Emulation Edge-to- 191 Edge [RFC5659] 193 o Segmented Pseudowire [RFC6073] 195 o Framework for Layer 2 Virtual Private Networks [RFC4664] 197 o Service Requirements for Layer 2 Provider-Provisioned Virtual 198 Private Networks [RFC4665] 200 o Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery 201 and Signaling [RFC4761] 203 o Virtual Private LAN Service (VPLS) Using Label Distribution 204 Protocol (LDP) Signaling [RFC4762] 206 o Attachment Individual Identifier (AII) Types for Aggregation 207 [RFC5003] 209 o Provisioning, Auto-Discovery, and Signaling in Layer 2 Virtual 210 Private Networks (L2VPNs) [RFC6074] 212 o Flow-Aware Transport of Pseudowires over an MPLS Packet Switched 213 Network [RFC6391] 215 o Layer 2 Virtual Private Networks Using BGP for Auto-Discovery and 216 Signaling [RFC6624] 218 o Extensions to the Virtual Private LAN Service (VPLS) Provider Edge 219 (PE) Model for Provider Backbone Bridging [RFC7041] 221 o LDP Extensions for Optimized MAC Address Withdrawal in a 222 Hierarchical Virtual Private LAN Service (H-VPLS) [RFC7361] 224 o Using the generic associated channel label for Pseudowire in the 225 MPLS Transport Profile [RFC6423] 227 o Pseudowire status for static pseudowire [RFC6478] 229 The specifics of pseudowire over MPLS-TP LSPs is in scope. However, 230 the initial effort addresses definitions of object models that are 231 commonly deployed. 233 The IETF work in L2VPN and PWE3 working group relating to L2TP, OAM, 234 multicast (e.g. p2mp, etree, etc) and access specific protocols such 235 as G.8032, MSTP, etc is out-of-scope for this document. 237 The following is the high level view of the L2VPN data model. 239 template-ref PW // PW 240 template 241 attributes 243 template-ref Redundancy-Group // redundancy-group 244 template 245 attributes 247 l2vpn-instances // containter 249 common attributes 251 BGP-parameters // container 252 common attributes 253 auto-discovery attributes 254 signaling attributes 256 evpn-instance // reference 258 // list of PWs being used 259 PW // container 260 template-ref PW 261 attribute-override 263 endpoint-A // container 264 redundancy-grp // container 265 AC // eventual reference to standard AC 266 PW // reference 268 endpoint-Z // container 269 redundancy-grp // container 270 AC // eventual reference to standard AC 271 PW // reference 273 PBB-parameters // container 274 pbb specific attributes 276 // List of endpoints, where each member endpoint container is - 277 PW // reference 278 redundancy-grp // container 279 AC // eventual reference to standard AC 280 PW // reference 282 l2vpn-state // read-only container 284 Figure 1 286 3.2. L2VPN Common 288 3.2.1. ac-templates 290 The ac-templates container does not exist. The AC will be referenced 291 from definitions by IEEE and/or MEF. 293 3.2.2. pw-templates 295 The pw-templates container contains a list of pw-template. Each pw- 296 template defines a list of common pseudowire attributes such as PW 297 MTU, control word support etc. 299 3.3. Point-to-Point and Multipoint service 301 3.3.1. ac list 303 AC resides within endpoint container as member of ac-or-pw-or- 304 redundandancy-grp. 306 3.3.2. pw list 308 Each endpoint instance defines a list of PWs which are participating 309 members of the given service instance. Each entry of the PW consists 310 of one pw-template with pre-defined attributes and values, but also 311 defines attributes that override those defined in referenced pw- 312 template. 314 No restrictions are placed on type of signaling (i.e. LDP or BGP) 315 used for a given PW. It is entirely possible to define two PWs, one 316 signaled by LDP and other by BGP. 318 The VPLS specific attribute(s) are present in the definition of the 319 PW that are member of VPLS instance only and not applicable to VPWS 320 service. 322 3.3.3. redundancy-grp choice 324 The redundancy-grp is a generic redundancy construct which can hold 325 primary and backup members of AC and PWs. This flexibility permits 326 combinations of - 328 o primary and backup AC 330 o primary and backup PW 332 o primary AC and backup PW 333 o primary PW and backup AC 335 3.3.4. endpoint container 337 The endpoint container in general holds AC, PW or redundancy-grp 338 references. The core aspect of endpoint container is its flexible 339 personality based on what user decides to include in it. It is 340 future-proofed with possible extensions that can be included in the 341 endpoint container such as Integrated Route Bridging (IRB), PW 342 Headend, Virtual Switch Instance, etc. 344 3.3.5. point-to-point or multipoint service 346 The point-to-point service as defined for VPWS is represented by 347 endpoint-a and endpoint-z container that is representation of a layer 348 2 cross-connect of two endpoints. 350 The multipoint service is represented by a list of endpoints. Each 351 endpoint container may contain a list of ACs or PWs as well as a 352 redundancy group. The endpoint has split-horizon attribute defined 353 and could be applicable to a list of PWs that are member of a given 354 endpoint. 356 The augmentation of ietf-l2vpn module is TBD. All IP addresses 357 defined in this module are currently scoped under global VRF/table. 359 3.4. Operational State 361 The operational state of L2VPN can be queried and obtained from the 362 read-only container defined in this document as "l2vpn-state". This 363 container holds the runtime information of the bridge-table-instance 364 and vpws-instance. 366 3.5. Yang tree 368 module: ietf-l2vpn 370 +--rw l2vpn 371 | +--rw common 372 | | +--rw pw-templates 373 | | | +--rw pw-template* [name] 374 | | | +--rw name string 375 | | | +--rw mtu? uint16 376 | | | +--rw cw-negotiation? cw-negotiation-type 377 | | | +--rw tunnel-policy? string 378 | | +--rw redundancy-group-templates 379 | | +--rw redundancy-group-template* [name] 380 | | +--rw name string 381 | | +--rw protection-mode? enumeration 382 | | +--rw reroute-mode? enumeration 383 | | +--rw dual-receive? boolean 384 | | +--rw revert? boolean 385 | | +--rw reroute-delay? uint16 386 | | +--rw revert-delay? uint16 387 | +--rw l2vpn-instances 388 | +--rw l2vpn-instance* [name type] 389 | +--rw name string 390 | +--rw type identityref 391 | +--rw mtu? uint16 392 | +--rw mac-aging-timer? uint32 393 | +--rw service-type? l2vpn-service-type 394 | +--rw discovery-type? l2vpn-discovery-type 395 | +--rw signaling-type l2vpn-signaling-type 396 | +--rw bgp-auto-discovery 397 | | +--rw route-distinguisher? string 398 | | +--rw vpn-target* [rt-value] 399 | | | +--rw rt-value string 400 | | | +--rw rt-type bgp-rt-type 401 | | +--rw vpn-id? string 402 | +--rw bgp-signaling 403 | | +--rw site-id? uint16 404 | | +--rw site-range? uint16 405 | +--rw pw* [name] 406 | | +--rw name string 407 | | +--rw template? pw-template-ref 408 | | +--rw mtu? uint16 409 | | +--rw mac-withdraw? boolean 410 | | +--rw cw-negotiation? cw-negotiation-type 411 | | +--rw tunnel-policy? string 412 | | +--rw (pw-type)? 413 | | | +--:(ldp-or-static-pw) 414 | | | | +--rw peer-ip? inet:ip-address 415 | | | | +--rw pw-id? uint32 416 | | | | +--rw icb? boolean 417 | | | | +--rw transmit-label? mpls:mpls-label 418 | | | | +--rw receive-label? mpls:mpls-label 419 | | | +--:(bgp-pw) 420 | | | | +--rw remote-pe-id? inet:ip-address 421 | | | +--:(bgp-ad-pw) 422 | | | +--rw remote-ve-id? uint16 423 | | +--rw vccv-ability? boolean 424 | | +--rw request-vlanid? uint16 425 | | +--rw vlan-tpid? string 426 | | +--rw ttl? uint8 427 | +--rw endpoint-a 428 | | +--rw (ac-or-pw-or-redundancy-grp)? 429 | | +--:(ac) 430 | | | +--rw ac? string 431 | | +--:(pw) 432 | | | +--rw pw? -> ../../pw/name 433 | | +--:(redundancy-grp) 434 | | +--rw (primary) 435 | | | +--:(primary-ac) 436 | | | | +--rw primary-ac? string 437 | | | +--:(primary-pw) 438 | | | +--rw primary-pw? -> ../../pw/name 439 | | +--rw (backup)? 440 | | | +--:(backup-ac) 441 | | | | +--rw backup-ac? string 442 | | | +--:(backup-pw) 443 | | | +--rw backup-pw? -> ../../pw/name 444 | | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name 445 | | +--rw protection-mode? enumeration 446 | | +--rw reroute-mode? enumeration 447 | | +--rw dual-receive? boolean 448 | | +--rw revert? boolean 449 | | +--rw reroute-delay? uint16 450 | | +--rw revert-delay? uint16 451 | +--rw endpoint-z 452 | | +--rw (ac-or-pw-or-redundancy-grp)? 453 | | +--:(ac) 454 | | | +--rw ac? string 455 | | +--:(pw) 456 | | | +--rw pw? -> ../../pw/name 457 | | +--:(redundancy-grp) 458 | | +--rw (primary) 459 | | | +--:(primary-ac) 460 | | | | +--rw primary-ac? string 461 | | | +--:(primary-pw) 462 | | | +--rw primary-pw? -> ../../pw/name 463 | | +--rw (backup)? 464 | | | +--:(backup-ac) 465 | | | | +--rw backup-ac? string 466 | | | +--:(backup-pw) 467 | | | +--rw backup-pw? -> ../../pw/name 468 | | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name 469 | | +--rw protection-mode? enumeration 470 | | +--rw reroute-mode? enumeration 471 | | +--rw dual-receive? boolean 472 | | +--rw revert? boolean 473 | | +--rw reroute-delay? uint16 474 | | +--rw revert-delay? uint16 475 | +--rw pbb-parameters 476 | | +--rw (component-type)? 477 | | +--:(i-component) 478 | | | +--rw i-sid? i-sid-type 479 | | | +--rw backbone-src-mac? yang:mac-address 480 | | +--:(b-component) 481 | | +--rw bind-b-component-name? l2vpn-instance-name-ref 482 | +--rw evpn-instance? string 483 | +--rw endpoint* [name] 484 | +--rw name string 485 | +--rw split-horizon-group? string 486 | +--rw (ac-or-pw-or-redundancy-grp)? 487 | +--:(ac) 488 | | +--rw ac* [name] 489 | | +--rw name string 490 | +--:(pw) 491 | | +--rw pw* [name] 492 | | +--rw name -> ../../../pw/name 493 | +--:(redundancy-grp) 494 | +--rw (primary) 495 | | +--:(primary-ac) 496 | | | +--rw primary-ac? string 497 | | +--:(primary-pw) 498 | | +--rw primary-pw* [name] 499 | | +--rw name -> ../../../pw/name 500 | +--rw (backup)? 501 | | +--:(backup-ac) 502 | | | +--rw backup-ac? string 503 | | +--:(backup-pw) 504 | | +--rw backup-pw* [name] 505 | | +--rw name -> ../../../pw/name 506 | | +--rw precedence? uint32 507 | +--rw template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name 508 | +--rw protection-mode? enumeration 509 | +--rw reroute-mode? enumeration 510 | +--rw dual-receive? boolean 511 | +--rw revert? boolean 512 | +--rw reroute-delay? uint16 513 | +--rw revert-delay? uint16 514 +--ro l2vpn-state 515 +--ro l2vpn-instances 516 +--ro l2vpn-instance* 517 +--ro name? string 518 +--ro type? identityref 519 +--ro mtu? uint16 520 +--ro mac-aging-timer? uint32 521 +--ro service-type? l2vpn-service-type 522 +--ro discovery-type? l2vpn-discovery-type 523 +--ro signaling-type l2vpn-signaling-type 524 +--ro bgp-auto-discovery 525 | +--ro route-distinguisher? string 526 | +--ro vpn-target* [rt-value] 527 | | +--ro rt-value string 528 | | +--ro rt-type bgp-rt-type 529 | +--ro vpn-id? string 530 +--ro bgp-signaling 531 | +--ro site-id? uint16 532 | +--ro site-range? uint16 533 +--ro endpoint-a 534 | +--ro (ac-or-pw-or-redundancy-grp)? 535 | +--:(ac) 536 | | +--ro ac 537 | | +--ro name? string 538 | | +--ro state? operational-state-type 539 | +--:(pw) 540 | | +--ro pw 541 | | +--ro name? string 542 | | +--ro state? operational-state-type 543 | | +--ro mtu? uint16 544 | | +--ro mac-withdraw? boolean 545 | | +--ro cw-negotiation? cw-negotiation-type 546 | | +--ro vccv-ability? boolean 547 | | +--ro tunnel-policy? string 548 | | +--ro request-vlanid? uint16 549 | | +--ro vlan-tpid? string 550 | | +--ro ttl? uint8 551 | | +--ro (pw-type)? 552 | | +--:(ldp-or-static-pw) 553 | | | +--ro peer-ip? inet:ip-address 554 | | | +--ro pw-id? uint32 555 | | | +--ro icb? boolean 556 | | | +--ro transmit-label? mpls:mpls-label 557 | | | +--ro receive-label? mpls:mpls-label 558 | | +--:(bgp-pw) 559 | | | +--ro remote-pe-id? inet:ip-address 560 | | +--:(bgp-ad-pw) 561 | | +--ro remote-ve-id? uint16 562 | +--:(redundancy-grp) 563 | +--ro (primary) 564 | | +--:(primary-ac) 565 | | | +--ro primary-ac 566 | | | +--ro name? string 567 | | | +--ro state? operational-state-type 568 | | +--:(primary-pw) 569 | | +--ro primary-pw 570 | | +--ro name? string 571 | | +--ro state? operational-state-type 572 | | +--ro mtu? uint16 573 | | +--ro mac-withdraw? boolean 574 | | +--ro cw-negotiation? cw-negotiation-type 575 | | +--ro vccv-ability? boolean 576 | | +--ro tunnel-policy? string 577 | | +--ro request-vlanid? uint16 578 | | +--ro vlan-tpid? string 579 | | +--ro ttl? uint8 580 | | +--ro (pw-type)? 581 | | +--:(ldp-or-static-pw) 582 | | | +--ro peer-ip? inet:ip-address 583 | | | +--ro pw-id? uint32 584 | | | +--ro icb? boolean 585 | | | +--ro transmit-label? mpls:mpls-label 586 | | | +--ro receive-label? mpls:mpls-label 587 | | +--:(bgp-pw) 588 | | | +--ro remote-pe-id? inet:ip-address 589 | | +--:(bgp-ad-pw) 590 | | +--ro remote-ve-id? uint16 591 | +--ro (backup)? 592 | | +--:(backup-ac) 593 | | | +--ro backup-ac 594 | | | +--ro name? string 595 | | | +--ro state? operational-state-type 596 | | +--:(backup-pw) 597 | | +--ro backup-pw 598 | | +--ro name? string 599 | | +--ro state? operational-state-type 600 | | +--ro mtu? uint16 601 | | +--ro mac-withdraw? boolean 602 | | +--ro cw-negotiation? cw-negotiation-type 603 | | +--ro vccv-ability? boolean 604 | | +--ro tunnel-policy? string 605 | | +--ro request-vlanid? uint16 606 | | +--ro vlan-tpid? string 607 | | +--ro ttl? uint8 608 | | +--ro (pw-type)? 609 | | +--:(ldp-or-static-pw) 610 | | | +--ro peer-ip? inet:ip-address 611 | | | +--ro pw-id? uint32 612 | | | +--ro icb? boolean 613 | | | +--ro transmit-label? mpls:mpls-label 614 | | | +--ro receive-label? mpls:mpls-label 615 | | +--:(bgp-pw) 616 | | | +--ro remote-pe-id? inet:ip-address 617 | | +--:(bgp-ad-pw) 618 | | +--ro remote-ve-id? uint16 619 | +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name 620 | +--ro protection-mode? enumeration 621 | +--ro reroute-mode? enumeration 622 | +--ro dual-receive? boolean 623 | +--ro revert? boolean 624 | +--ro reroute-delay? uint16 625 | +--ro revert-delay? uint16 626 +--ro endpoint-z 627 | +--ro (ac-or-pw-or-redundancy-grp)? 628 | +--:(ac) 629 | | +--ro ac 630 | | +--ro name? string 631 | | +--ro state? operational-state-type 632 | +--:(pw) 633 | | +--ro pw 634 | | +--ro name? string 635 | | +--ro state? operational-state-type 636 | | +--ro mtu? uint16 637 | | +--ro mac-withdraw? boolean 638 | | +--ro cw-negotiation? cw-negotiation-type 639 | | +--ro vccv-ability? boolean 640 | | +--ro tunnel-policy? string 641 | | +--ro request-vlanid? uint16 642 | | +--ro vlan-tpid? string 643 | | +--ro ttl? uint8 644 | | +--ro (pw-type)? 645 | | +--:(ldp-or-static-pw) 646 | | | +--ro peer-ip? inet:ip-address 647 | | | +--ro pw-id? uint32 648 | | | +--ro icb? boolean 649 | | | +--ro transmit-label? mpls:mpls-label 650 | | | +--ro receive-label? mpls:mpls-label 651 | | +--:(bgp-pw) 652 | | | +--ro remote-pe-id? inet:ip-address 653 | | +--:(bgp-ad-pw) 654 | | +--ro remote-ve-id? uint16 655 | +--:(redundancy-grp) 656 | +--ro (primary) 657 | | +--:(primary-ac) 658 | | | +--ro primary-ac 659 | | | +--ro name? string 660 | | | +--ro state? operational-state-type 661 | | +--:(primary-pw) 662 | | +--ro primary-pw 663 | | +--ro name? string 664 | | +--ro state? operational-state-type 665 | | +--ro mtu? uint16 666 | | +--ro mac-withdraw? boolean 667 | | +--ro cw-negotiation? cw-negotiation-type 668 | | +--ro vccv-ability? boolean 669 | | +--ro tunnel-policy? string 670 | | +--ro request-vlanid? uint16 671 | | +--ro vlan-tpid? string 672 | | +--ro ttl? uint8 673 | | +--ro (pw-type)? 674 | | +--:(ldp-or-static-pw) 675 | | | +--ro peer-ip? inet:ip-address 676 | | | +--ro pw-id? uint32 677 | | | +--ro icb? boolean 678 | | | +--ro transmit-label? mpls:mpls-label 679 | | | +--ro receive-label? mpls:mpls-label 680 | | +--:(bgp-pw) 681 | | | +--ro remote-pe-id? inet:ip-address 682 | | +--:(bgp-ad-pw) 683 | | +--ro remote-ve-id? uint16 684 | +--ro (backup)? 685 | | +--:(backup-ac) 686 | | | +--ro backup-ac 687 | | | +--ro name? string 688 | | | +--ro state? operational-state-type 689 | | +--:(backup-pw) 690 | | +--ro backup-pw 691 | | +--ro name? string 692 | | +--ro state? operational-state-type 693 | | +--ro mtu? uint16 694 | | +--ro mac-withdraw? boolean 695 | | +--ro cw-negotiation? cw-negotiation-type 696 | | +--ro vccv-ability? boolean 697 | | +--ro tunnel-policy? string 698 | | +--ro request-vlanid? uint16 699 | | +--ro vlan-tpid? string 700 | | +--ro ttl? uint8 701 | | +--ro (pw-type)? 702 | | +--:(ldp-or-static-pw) 703 | | | +--ro peer-ip? inet:ip-address 704 | | | +--ro pw-id? uint32 705 | | | +--ro icb? boolean 706 | | | +--ro transmit-label? mpls:mpls-label 707 | | | +--ro receive-label? mpls:mpls-label 708 | | +--:(bgp-pw) 709 | | | +--ro remote-pe-id? inet:ip-address 710 | | +--:(bgp-ad-pw) 711 | | +--ro remote-ve-id? uint16 712 | +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name 713 | +--ro protection-mode? enumeration 714 | +--ro reroute-mode? enumeration 715 | +--ro dual-receive? boolean 716 | +--ro revert? boolean 717 | +--ro reroute-delay? uint16 718 | +--ro revert-delay? uint16 719 +--ro pbb-parameters 720 | +--ro (component-type)? 721 | +--:(i-component) 722 | | +--ro i-sid? i-sid-type 723 | | +--ro backbone-src-mac? yang:mac-address 724 | +--:(b-component) 725 | +--ro bind-b-component-name? string 726 | +--ro bind-b-component-type? identityref 727 +--ro evpn-instance-name? string 728 +--ro endpoint* 729 +--ro name? string 730 +--ro split-horizon-group? string 731 +--ro (ac-or-pw-or-redundancy-grp)? 732 +--:(ac) 733 | +--ro ac* 734 | +--ro name? string 735 | +--ro state? operational-state-type 736 +--:(pw) 737 | +--ro pw* 738 | +--ro name? string 739 | +--ro state? operational-state-type 740 | +--ro mtu? uint16 741 | +--ro mac-withdraw? boolean 742 | +--ro cw-negotiation? cw-negotiation-type 743 | +--ro discovery-type? l2vpn-discovery-type 744 | +--ro signaling-type? l2vpn-signaling-type 745 | +--ro peer-ip? inet:ip-address 746 | +--ro pw-id? uint32 747 | +--ro transmit-label? mpls:mpls-label 748 | +--ro receive-label? mpls:mpls-label 749 | +--ro tunnel-policy? string 750 +--:(redundancy-grp) 751 +--ro (primary) 752 | +--:(primary-ac) 753 | | +--ro primary-ac 754 | | +--ro name? string 755 | | +--ro state? operational-state-type 756 | +--:(primary-pw) 757 | +--ro primary-pw* 758 | +--ro name? string 759 | +--ro state? operational-state-type 760 | +--ro mtu? uint16 761 | +--ro mac-withdraw? boolean 762 | +--ro cw-negotiation? cw-negotiation-type 763 | +--ro discovery-type? l2vpn-discovery-type 764 | +--ro signaling-type? l2vpn-signaling-type 765 | +--ro peer-ip? inet:ip-address 766 | +--ro pw-id? uint32 767 | +--ro transmit-label? mpls:mpls-label 768 | +--ro receive-label? mpls:mpls-label 769 | +--ro tunnel-policy? string 770 +--ro (backup)? 771 | +--:(backup-ac) 772 | | +--ro backup-ac 773 | | +--ro name? string 774 | | +--ro state? operational-state-type 775 | +--:(backup-pw) 776 | +--ro backup-pw* 777 | +--ro name? string 778 | +--ro state? operational-state-type 779 | +--ro mtu? uint16 780 | +--ro mac-withdraw? boolean 781 | +--ro cw-negotiation? cw-negotiation-type 782 | +--ro discovery-type? l2vpn-discovery-type 783 | +--ro signaling-type? l2vpn-signaling-type 784 | +--ro peer-ip? inet:ip-address 785 | +--ro pw-id? uint32 786 | +--ro transmit-label? mpls:mpls-label 787 | +--ro receive-label? mpls:mpls-label 788 | +--ro tunnel-policy? string 789 | +--ro precedence? uint32 790 +--ro template? -> /l2vpn/common/redundancy-group-templates/redundancy-group-template/name 791 +--ro protection-mode? enumeration 792 +--ro reroute-mode? enumeration 793 +--ro dual-receive? boolean 794 +--ro revert? boolean 795 +--ro reroute-delay? uint16 796 +--ro revert-delay? uint16 798 Figure 2 800 4. YANG Module 802 The L2VPN configuration container is logically divided into following 803 high level config areas: 805 file "ietf-l2vpn@2016-10-24.yang" 807 module ietf-l2vpn { 808 namespace "urn:ietf:params:xml:ns:yang:ietf-l2vpn"; 809 prefix "l2vpn"; 811 import ietf-inet-types { 812 prefix "inet"; 813 } 815 import ietf-yang-types { 816 prefix "yang"; 817 } 819 import ietf-mpls { 820 prefix "mpls"; 821 } 823 organization "ietf"; 824 contact "ietf"; 825 description "l2vpn"; 827 revision "2016-10-24" { 828 description "Fifth revision " + 829 " - Edits based on Giles's comments " + 830 " 5) Remove relative leafrefs in groupings, " + 831 " and the resulting new groupings are: " + 832 " bgp-auto-discovery-parameters-grp " + 833 " bgp-signaling-parameters-grp " + 834 " endpoint-grp " + 835 " 11) Merge VPLS and VPWS into one single list " + 836 " and use augment statements to handle " + 837 " differences between VPLS and VPWS " + 838 " - Add a new grouping l2vpn-common-parameters-grp " + 839 " to make VPLS and VPWS more consistent"; 840 reference ""; 841 } 843 revision "2016-05-31" { 844 description "Fourth revision " + 845 " - Edits based on Giles's comments " + 846 " 1) Change enumeration to identityref type for: " + 847 " l2vpn-service-type " + 848 " l2vpn-discovery-type " + 849 " l2vpn-signaling-type " + 850 " bgp-rt-type, cw-negotiation, and " + 851 " pbb-component remain enumerations " + 852 " 2) Define i-sid-type for leaf 'i-sid' " + 853 " (which is renamed from 'i-tag') " + 854 " 3) Rename 'vpn-targets' to 'vpn-target' " + 855 " 4) Import ietf-mpls.yang and reuse the " + 856 " 'mpls-label' type defined in ietf-mpls.yang " + 857 " transmit-label and receive-label " + 858 " 8) Change endpoint list's key to name " + 859 " 9) Changed MTU to type uint16 " + 860 ""; 861 reference ""; 862 } 864 revision "2016-03-07" { 865 description "Third revision " + 866 " - Changed the module name to ietf-l2vpn " + 867 " - Merged EVPN into L2VPN " + 868 " - Eliminated the definitions of attachment " + 869 " circuit with the intention to reuse other " + 870 " layer-2 definitions " + 871 " - Added state branch"; 872 reference ""; 873 } 875 revision "2015-10-08" { 876 description "Second revision " + 877 " - Added container vpls-instances " + 878 " - Rearranged groupings and typedefs to be " + 879 " reused across vpls-instance and vpws-instances"; 880 reference ""; 881 } 883 revision "2015-06-30" { 884 description "Initial revision"; 885 reference ""; 886 } 888 /* identities */ 890 identity l2vpn-instance-type { 891 description "Base identity from which identities of " + 892 "l2vpn service instance types are derived"; 893 } 895 identity vpws-instance-type { 896 base l2vpn-instance-type; 897 description "This identity represents VPWS instance type"; 898 } 900 identity vpls-instance-type { 901 base l2vpn-instance-type; 902 description "This identity represents VPLS instance type"; 903 } 905 identity link-discovery-protocol { 906 description "Base identiy from which identities describing " + 907 "link discovery protocols are derived"; 909 } 911 identity lacp { 912 base "link-discovery-protocol"; 913 description "This identity represents LACP"; 914 } 916 identity lldp { 917 base "link-discovery-protocol"; 918 description "This identity represents LLDP"; 919 } 921 identity bpdu { 922 base "link-discovery-protocol"; 923 description "This identity represens BPDU"; 924 } 926 identity cpd { 927 base "link-discovery-protocol"; 928 description "This identity represents CPD"; 929 } 931 identity udld { 932 base "link-discovery-protocol"; 933 description "This identity represens UDLD"; 934 } 936 identity l2vpn-service { 937 description "Base identity from which identities describing " + 938 "L2VPN services are derived"; 939 } 941 identity Ethernet { 942 base "l2vpn-service"; 943 description "This identity represents Ethernet service"; 944 } 946 identity ATM { 947 base "l2vpn-service"; 948 description "This identity represents Asynchronous Transfer " + 949 "Mode service"; 950 } 952 identity FR { 953 base "l2vpn-service"; 954 description "This identity represent Frame-Relay service"; 955 } 956 identity TDM { 957 base "l2vpn-service"; 958 description "This identity represent Time Devision " + 959 "Multiplexing service"; 960 } 962 identity l2vpn-discovery { 963 description "Base identity from which identities describing " + 964 "L2VPN discovery protocols are derived"; 965 } 967 identity manual-discovery { 968 base "l2vpn-discovery"; 969 description "Manual configuration of l2vpn service"; 970 } 972 identity bgp-auto-discovery { 973 base "l2vpn-discovery"; 974 description "Border Gateway Protocol (BGP) auto-discovery of " + 975 "l2vpn service"; 976 } 978 identity ldp-discovery { 979 base "l2vpn-discovery"; 980 description "Label Distribution Protocol (LDP) discovery of " + 981 "l2vpn service"; 982 } 984 identity mixed-discovery { 985 base "l2vpn-discovery"; 986 description "Mixed discovery methods of l2vpn service"; 987 } 989 identity l2vpn-signaling { 990 description "Base identity from which identities describing " + 991 "L2VPN signaling protocols are derived"; 992 } 994 identity static-configuration { 995 base "l2vpn-signaling"; 996 description "Static configuration of labels (no signaling)"; 997 } 999 identity ldp-signaling { 1000 base "l2vpn-signaling"; 1001 description "Label Distribution Protocol (LDP) signaling"; 1002 } 1003 identity bgp-signaling { 1004 base "l2vpn-signaling"; 1005 description "Border Gateway Protocol (BGP) signaling"; 1006 } 1008 identity mixed-signaling { 1009 base "l2vpn-signaling"; 1010 description "Mixed signaling methods"; 1011 } 1013 /* typedefs */ 1015 typedef l2vpn-service-type { 1016 type identityref { 1017 base "l2vpn-service"; 1018 } 1019 description "L2VPN service type"; 1020 } 1022 typedef l2vpn-discovery-type { 1023 type identityref { 1024 base "l2vpn-discovery"; 1025 } 1026 description "L2VPN discovery type"; 1027 } 1029 typedef l2vpn-signaling-type { 1030 type identityref { 1031 base "l2vpn-signaling"; 1032 } 1033 description "L2VPN signaling type"; 1034 } 1036 typedef bgp-rt-type { 1037 type enumeration { 1038 enum import { 1039 description "For import"; 1040 } 1041 enum export { 1042 description "For export"; 1043 } 1044 enum both { 1045 description "For both import and export"; 1046 } 1047 } 1048 description "BGP route-target type. Import from BGP YANG"; 1049 } 1050 typedef cw-negotiation-type { 1051 type enumeration { 1052 enum "non-preferred" { 1053 description "No preference for control-word"; 1054 } 1055 enum "preferred" { 1056 description "Prefer to have control-word negotiation"; 1057 } 1058 } 1059 description "control-word negotiation preference type"; 1060 } 1062 typedef link-discovery-protocol-type { 1063 type identityref { 1064 base "link-discovery-protocol"; 1065 } 1066 description "This type is used to identify " + 1067 "link discovery protocol"; 1068 } 1070 typedef pbb-component-type { 1071 type enumeration { 1072 enum "b-component" { 1073 description "Identifies as a b-component"; 1074 } 1075 enum "i-component" { 1076 description "Identifies as an i-component"; 1077 } 1078 } 1079 description "This type is used to identify " + 1080 "the type of PBB component"; 1081 } 1083 typedef pw-template-ref { 1084 type leafref { 1085 path "/l2vpn/common/pw-templates/pw-template/name"; 1086 } 1087 description "pw-template-ref"; 1088 } 1090 typedef redundancy-group-template-ref { 1091 type leafref { 1092 path "/l2vpn/common/redundancy-group-templates" + 1093 "/redundancy-group-template/name"; 1094 } 1095 description "redundancy-group-template-ref"; 1096 } 1097 typedef l2vpn-instance-name-ref { 1098 type leafref { 1099 path "/l2vpn/l2vpn-instances" + 1100 "/l2vpn-instance/name"; 1101 } 1102 description "l2vpn-instance-name-ref"; 1103 } 1105 typedef l2vpn-instance-type-ref { 1106 type leafref { 1107 path "/l2vpn/l2vpn-instances" + 1108 "/l2vpn-instance/type"; 1109 } 1110 description "l2vpn-instance-type-ref"; 1111 } 1113 typedef operational-state-type { 1114 type enumeration { 1115 enum 'up' { 1116 description "Operational state is up"; 1117 } 1118 enum 'down' { 1119 description "Operational state is down"; 1120 } 1121 } 1122 description "operational-state-type"; 1123 } 1125 typedef i-sid-type { 1126 type uint32 { 1127 range "0..16777216"; 1128 } 1129 description "I-SID type that is 24-bits. " + 1130 "This should be moved to ieee-types.yang at " + 1131 "http://www.ieee802.org/1/files/public/docs2015" + 1132 "/new-mholness-ieee-types-yang-v01.yang"; 1133 } 1135 /* groupings */ 1137 grouping pbb-parameters-grp { 1138 description "PBB parameters grouping"; 1139 container pbb-parameters { 1140 description "pbb-parameters"; 1141 choice component-type { 1142 description "PBB component type"; 1143 case i-component { 1144 leaf i-sid { 1145 type i-sid-type; 1146 description "I-SID"; 1147 } 1148 leaf backbone-src-mac { 1149 type yang:mac-address; 1150 description "backbone-src-mac"; 1151 } 1152 } 1153 case b-component { 1154 leaf bind-b-component-name { 1155 type l2vpn-instance-name-ref; 1156 description "Reference to the associated b-component"; 1157 } 1158 must "/l2vpn" + 1159 "/l2vpn-instances[name=current()/bind-b-component]" + 1160 "/type = 'vpls-instance-type'" { 1161 description "A b-component must be an L2VPN instance " + 1162 "of type vpls-instance-type"; 1163 } 1164 } 1165 } 1166 } 1167 } 1169 grouping pbb-parameters-state-grp { 1170 description "PBB parameters grouping"; 1171 container pbb-parameters { 1172 description "pbb-parameters"; 1173 choice component-type { 1174 description "PBB component type"; 1175 case i-component { 1176 leaf i-sid { 1177 type i-sid-type; 1178 description "I-SID"; 1179 } 1180 leaf backbone-src-mac { 1181 type yang:mac-address; 1182 description "backbone-src-mac"; 1183 } 1184 } 1185 case b-component { 1186 leaf bind-b-component-name { 1187 type string; 1188 description "Name of the associated b-component"; 1189 } 1190 leaf bind-b-component-type { 1191 type identityref { 1192 base l2vpn-instance-type; 1194 } 1195 must ". = 'vpls-instance-type'" { 1196 description "The associated b-component must have " + 1197 "type vpls-instance-type"; 1198 } 1199 description "Type of the associated b-component"; 1200 } 1201 } 1202 } 1203 } 1204 } 1206 grouping l2vpn-common-parameters-grp { 1207 description "L2VPN common parameters"; 1208 leaf name { 1209 type string; 1210 description "Name of L2VPN service instance"; 1211 } 1212 leaf type { 1213 type identityref { 1214 base l2vpn-instance-type; 1215 } 1216 description "Type of L2VPN service instance"; 1217 } 1218 leaf mtu { 1219 type uint16; 1220 description "MTU of L2VPN service"; 1221 } 1222 leaf mac-aging-timer { 1223 type uint32; 1224 description "mac-aging-timer, the duration after which" + 1225 "a MAC entry is considered aged out"; 1226 } 1227 leaf service-type { 1228 type l2vpn-service-type; 1229 default Ethernet; 1230 description "L2VPN service type"; 1231 } 1232 leaf discovery-type { 1233 type l2vpn-discovery-type; 1234 default manual-discovery; 1235 description "L2VPN service discovery type"; 1236 } 1237 leaf signaling-type { 1238 type l2vpn-signaling-type; 1239 mandatory true; 1240 description "L2VPN signaling type"; 1241 } 1243 } 1245 grouping bgp-auto-discovery-parameters-grp { 1246 description "BGP parameters for auto-discovery"; 1247 leaf route-distinguisher { 1248 type string; 1249 description "BGP RD"; 1250 } 1251 list vpn-target { 1252 key rt-value; 1253 description "Route Targets"; 1254 leaf rt-value { 1255 type string; 1256 description "Route-Target value"; 1257 } 1258 leaf rt-type { 1259 type bgp-rt-type; 1260 mandatory true; 1261 description "Type of RT"; 1262 } 1263 } 1264 leaf vpn-id { 1265 type string; 1266 description "VPN ID"; 1267 } 1268 } 1270 grouping bgp-signaling-parameters-grp { 1271 description "BGP parameters for signaling"; 1272 leaf site-id { 1273 type uint16; 1274 description "Site ID"; 1275 } 1276 leaf site-range { 1277 type uint16; 1278 description "Site Range"; 1279 } 1280 } 1282 grouping pw-common-parameters-grp { 1283 description "Pseudowire parameters common to both " + 1284 "VPWS and VPLS pseudowires"; 1285 leaf name { 1286 type string; 1287 description "pseudowire name"; 1288 } 1289 leaf template { 1290 type pw-template-ref; 1291 description "pseudowire template"; 1292 } 1293 leaf mtu { 1294 type uint16; 1295 description "PW MTU"; 1296 } 1297 leaf mac-withdraw { 1298 type boolean; 1299 default false; 1300 description "Enable (true) or disable (false) MAC withdraw"; 1301 } 1302 leaf cw-negotiation { 1303 type cw-negotiation-type; 1304 description "cw-negotiation"; 1305 } 1306 leaf tunnel-policy { 1307 type string; 1308 description "tunnel policy name"; 1309 } 1310 uses pw-type-grp; 1311 } 1313 grouping pw-type-grp { 1314 description "pseudowire type grouping"; 1315 choice pw-type { 1316 description "A choice of pseudowire type"; 1317 case ldp-or-static-pw { 1318 leaf peer-ip { 1319 type inet:ip-address; 1320 description "peer IP address"; 1321 } 1322 leaf pw-id { 1323 type uint32; 1324 description "pseudowire id"; 1325 } 1326 leaf icb { 1327 type boolean; 1328 description "inter-chassis backup"; 1329 } 1330 leaf transmit-label { 1331 type mpls:mpls-label; 1332 description "transmit lable"; 1333 } 1334 leaf receive-label { 1335 type mpls:mpls-label; 1336 description "receive label"; 1337 } 1338 } 1339 case bgp-pw { 1340 leaf remote-pe-id { 1341 type inet:ip-address; 1342 description "remote pe id"; 1343 } 1344 } 1345 case bgp-ad-pw { 1346 leaf remote-ve-id { 1347 type uint16; 1348 description "remote ve id"; 1349 } 1350 } 1351 } 1352 } 1354 grouping redundancy-group-properties-grp { 1355 description "redundancy-group-properties-grp"; 1356 leaf protection-mode { 1357 type enumeration { 1358 enum "frr" { 1359 value 0; 1360 description "fast reroute"; 1361 } 1362 enum "master-slave" { 1363 value 1; 1364 description "master-slave"; 1365 } 1366 enum "independent" { 1367 value 2; 1368 description "independent"; 1369 } 1370 } 1371 description "protection-mode"; 1372 } 1373 leaf reroute-mode { 1374 type enumeration { 1375 enum "immediate" { 1376 value 0; 1377 description "immediate reroute"; 1378 } 1379 enum "delayed" { 1380 value 1; 1381 description "delayed reroute"; 1382 } 1383 enum "never" { 1384 value 2; 1385 description "never reroute"; 1386 } 1388 } 1389 description "reroute-mode"; 1390 } 1391 leaf dual-receive { 1392 type boolean; 1393 description 1394 "allow extra traffic to be carried by backup"; 1395 } 1396 leaf revert { 1397 type boolean; 1398 description "allow forwarding to revert to primary " + 1399 "after restoring primary"; 1400 } 1401 } 1403 grouping endpoint-grp { 1404 description "A grouping that defines the structure of " + 1405 "an endpoint"; 1406 choice ac-or-pw-or-redundancy-grp { 1407 description "A choice ofattachment circuit or " + 1408 "pseudowire or redundancy group"; 1409 case ac { 1410 description "Attachment circuit(s) as an endpoint"; 1411 } 1412 case pw { 1413 description "Pseudowire(s) as an endpoint"; 1414 } 1415 case redundancy-grp { 1416 description "Redundancy group as an endpoint"; 1417 choice primary { 1418 mandatory true; 1419 description "primary options"; 1420 case primary-ac { 1421 description "primary-ac"; 1422 } 1423 case primary-pw { 1424 description "primary-pw"; 1425 } 1426 } 1427 choice backup { 1428 description "backup options"; 1429 case backup-ac { 1430 description "backup-ac"; 1431 } 1432 case backup-pw { 1433 description "backup-pw"; 1434 } 1435 } 1436 leaf template { 1437 type leafref { 1438 path "/l2vpn/common/redundancy-group-templates" + 1439 "/redundancy-group-template/name"; 1440 } 1441 description "Reference a redundancy group " + 1442 "properties template"; 1443 } 1444 uses redundancy-group-properties-grp; 1445 } 1446 } 1447 } 1449 grouping vpls-pw-state-grp { 1450 description "vpls-pw-state-grp"; 1451 leaf name { 1452 type string; 1453 description "pseudowire name"; 1454 } 1455 leaf state { 1456 type operational-state-type; 1457 description "pseudowire up/down state"; 1458 } 1459 leaf mtu { 1460 type uint16; 1461 description "pseudowire mtu"; 1462 } 1463 leaf mac-withdraw { 1464 type boolean; 1465 description "MAC withdraw is enabled (true) or disabled (false)"; 1466 } 1467 leaf cw-negotiation { 1468 type cw-negotiation-type; 1469 description "cw-negotiation"; 1470 } 1471 leaf discovery-type { 1472 type l2vpn-discovery-type; 1473 description "VPLS discovery type"; 1474 } 1475 leaf signaling-type { 1476 type l2vpn-signaling-type; 1477 description "VPLS signaling type"; 1478 } 1479 leaf peer-ip { 1480 type inet:ip-address; 1481 description "peer IP address"; 1482 } 1483 leaf pw-id { 1484 type uint32; 1485 description "pseudowire id"; 1486 } 1487 leaf transmit-label { 1488 type mpls:mpls-label; 1489 description "transmit lable"; 1490 } 1491 leaf receive-label { 1492 type mpls:mpls-label; 1493 description "receive label"; 1494 } 1495 leaf tunnel-policy { 1496 type string; 1497 description "tunnel policy name"; 1498 } 1499 } 1501 grouping ac-state-grp { 1502 description "vpls-ac-state-grp"; 1503 leaf name { 1504 type string; 1505 description "attachment circuit name"; 1506 } 1507 leaf state { 1508 type operational-state-type; 1509 description "attachment circuit up/down state"; 1510 } 1511 } 1513 grouping vpws-pw-state-grp { 1514 description "vpws-pw-state-grp"; 1515 leaf name { 1516 type string; 1517 description "pseudowire name"; 1518 } 1519 leaf state { 1520 type operational-state-type; 1521 description "pseudowire operation state up/down"; 1522 } 1523 leaf mtu { 1524 type uint16; 1525 description "PW MTU"; 1526 } 1527 leaf mac-withdraw { 1528 type boolean; 1529 description "MAC withdraw is enabled (ture) or disabled (false)"; 1530 } 1531 leaf cw-negotiation { 1532 type cw-negotiation-type; 1533 description "Override the control-word negotiation " + 1534 "preference specified in the " + 1535 "pseudowire template."; 1536 } 1537 leaf vccv-ability { 1538 type boolean; 1539 description "vccv-ability"; 1540 } 1541 leaf tunnel-policy { 1542 type string; 1543 description "Used to override the tunnel policy name " + 1544 "specified in the pseduowire template"; 1545 } 1546 leaf request-vlanid { 1547 type uint16; 1548 description "request vlanid"; 1549 } 1550 leaf vlan-tpid { 1551 type string; 1552 description "vlan tpid"; 1553 } 1554 leaf ttl { 1555 type uint8; 1556 description "time-to-live"; 1557 } 1558 uses pw-type-grp; 1559 } 1561 /* L2VPN YANG Model */ 1563 container l2vpn { 1564 description "l2vpn"; 1565 container common { 1566 description "common l2pn attributes"; 1567 container pw-templates { 1568 description "pw-templates"; 1569 list pw-template { 1570 key "name"; 1571 description "pw-template"; 1572 leaf name { 1573 type string; 1574 description "name"; 1575 } 1576 leaf mtu { 1577 type uint16; 1578 description "pseudowire mtu"; 1579 } 1580 leaf cw-negotiation { 1581 type cw-negotiation-type; 1582 default "preferred"; 1583 description 1584 "control-word negotiation preference"; 1585 } 1586 leaf tunnel-policy { 1587 type string; 1588 description "tunnel policy name"; 1589 } 1590 } 1591 } 1592 container redundancy-group-templates { 1593 description "redundancy group templates"; 1594 list redundancy-group-template { 1595 key "name"; 1596 description "redundancy-group-template"; 1597 leaf name { 1598 type string; 1599 description "name"; 1600 } 1601 uses redundancy-group-properties-grp; 1602 leaf reroute-delay { 1603 when "../reroute-mode = 'delayed'" { 1604 description "Specify amount of time to " + 1605 "delay reroute only when " + 1606 "delayed route is configured"; 1607 } 1608 type uint16; 1609 description "amount of time to delay reroute"; 1610 } 1611 leaf revert-delay { 1612 when "../revert = 'true'" { 1613 description "Specify the amount of time to " + 1614 "wait to revert to primary " + 1615 "only if reversion is configured"; 1616 } 1617 type uint16; 1618 description "amount ot time to wait to " + 1619 "revert to primary"; 1620 } 1621 } 1622 } 1623 } 1625 container l2vpn-instances { 1626 description "A list of L2VPN instances"; 1627 list l2vpn-instance { 1628 key "name type"; 1629 description "An L2VPN service instance"; 1630 uses l2vpn-common-parameters-grp; 1631 container bgp-auto-discovery { 1632 when "../discovery-type = 'bgp-auto-discovery'" { 1633 description "Check discovery type: " + 1634 "Can only configure BGP discovery if " + 1635 "discovery type is BGP-AD"; 1636 } 1637 description "BGP auto-discovery parameters"; 1638 uses bgp-auto-discovery-parameters-grp; 1639 } 1640 container bgp-signaling { 1641 when "../signaling-type = 'bgp-signaling'" { 1642 description "Check signaling type: " + 1643 "Can only configure BGP signaling if " + 1644 "signaling type is BGP"; 1645 } 1646 description "BGP signaling parameters"; 1647 uses bgp-signaling-parameters-grp; 1648 } 1649 list pw { 1650 key "name"; 1651 description "A pseudowire"; 1652 uses pw-common-parameters-grp; 1653 } 1654 } 1655 } 1656 } 1658 container l2vpn-state { 1659 config false; 1660 description "l2vpn state"; 1662 container l2vpn-instances { 1663 description "L2VPN instances state"; 1664 list l2vpn-instance { 1665 description "An L2VPN instance's state"; 1666 uses l2vpn-common-parameters-grp; 1667 container bgp-auto-discovery { 1668 description "BGP auto-discovery parameters"; 1669 uses bgp-auto-discovery-parameters-grp; 1670 } 1671 container bgp-signaling { 1672 description "BGP signaling parameters"; 1673 uses bgp-signaling-parameters-grp; 1674 } 1675 } 1677 } 1678 } 1680 /* augments */ 1682 augment "/l2vpn/l2vpn-instances/l2vpn-instance/pw" { 1683 when "../type = 'vpws-l2vpn-instance-type'" { 1684 description "Pseudowire parameters only for VPWS pseudowires"; 1685 } 1686 description "Augment for peudowire parameters for " + 1687 "VPWS pseudowires"; 1688 leaf vccv-ability { 1689 type boolean; 1690 description "vccvability"; 1691 } 1692 leaf request-vlanid { 1693 type uint16; 1694 description "request vlanid"; 1695 } 1696 leaf vlan-tpid { 1697 type string; 1698 description "vlan tpid"; 1699 } 1700 leaf ttl { 1701 type uint8; 1702 description "time-to-live"; 1703 } 1704 } 1706 augment "/l2vpn/l2vpn-instances/l2vpn-instance" { 1707 when "type = 'vpws-l2vpn-instance-type'" { 1708 description "Endpoints specifically for a VPWS instance"; 1709 } 1710 description "Augment for endpoints for a VPWS instance"; 1711 container endpoint-a { 1712 description "endpoint-a"; 1713 uses endpoint-grp { 1714 description "endpoint configuration"; 1715 augment "ac-or-pw-or-redundancy-grp/ac" { 1716 description "An attachment circuits as the endpoint"; 1717 leaf ac { 1718 type string; 1719 description "Name of attachment circuit. " + 1720 "This field is intended to " + 1721 "reference standardized " + 1722 "layer-2 definitions."; 1723 } 1724 } 1725 augment "ac-or-pw-or-redundancy-grp/pw" { 1726 description "A pseudowire as the endpoint"; 1727 leaf pw { 1728 type leafref { 1729 path "../../pw/name"; 1730 } 1731 description "name of pseudowire"; 1732 } 1733 } 1734 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1735 "primary/primary-ac" { 1736 description "The primary attachment circuit of a " + 1737 "redundancy group endpoint"; 1738 leaf primary-ac { 1739 type string; 1740 description "Name of primary attachment circuit. " + 1741 "This field is intended to reference " + 1742 "standardized layer-2 definitions."; 1743 } 1744 } 1745 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1746 "primary/primary-pw" { 1747 description "The primary pseudowires of a " + 1748 "redundancy group endpoint"; 1749 leaf primary-pw { 1750 type leafref { 1751 path "../../pw/name"; 1752 } 1753 description "name of pseudowire"; 1754 } 1755 } 1756 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1757 "backup/backup-ac" { 1758 description "The backup attachment circuit of a " + 1759 "redundancy group endpoint"; 1760 leaf backup-ac { 1761 type string; 1762 description "Name of backup attachment circuit. " + 1763 "This field is intended to reference " + 1764 "standardized layer-2 definitions."; 1765 } 1766 } 1767 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1768 "backup/backup-pw" { 1769 description "The backup pseudowires of a " + 1770 "redundancy group endpoint"; 1771 leaf backup-pw { 1772 type leafref { 1773 path "../../pw/name"; 1774 } 1775 description "Reference an attachment circuit"; 1776 } 1777 } 1778 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 1779 description "Additional conditional " + 1780 "redunadancy group parameters"; 1781 leaf reroute-delay { 1782 when "../reroute-mode = 'delayed'" { 1783 description "Specify amount of time to " + 1784 "delay reroute only when " + 1785 "delayed route is configured"; 1786 } 1787 type uint16; 1788 description "amount of time to delay reroute"; 1789 } 1790 leaf revert-delay { 1791 when "../revert = 'true'" { 1792 description "Specify the amount of time to " + 1793 "wait to revert to primary " + 1794 "only if reversion is configured"; 1795 } 1796 type uint16; 1797 description "amount ot time to wait to " + 1798 "revert to primary"; 1799 } 1800 } 1801 } 1802 } 1803 container endpoint-z { 1804 description "endpoint-z"; 1805 uses endpoint-grp { 1806 description "endpoint configuration"; 1807 augment "ac-or-pw-or-redundancy-grp/ac" { 1808 description "An attachment circuits as the endpoint"; 1809 leaf ac { 1810 type string; 1811 description "Name of attachment circuit. " + 1812 "This field is intended to " + 1813 "reference standardized " + 1814 "layer-2 definitions."; 1815 } 1816 } 1817 augment "ac-or-pw-or-redundancy-grp/pw" { 1818 description "A pseudowire as the endpoint"; 1819 leaf pw { 1820 type leafref { 1821 path "../../pw/name"; 1822 } 1823 description "name of pseudowire"; 1824 } 1825 } 1826 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1827 "primary/primary-ac" { 1828 description "The primary attachment circuit of a " + 1829 "redundancy group endpoint"; 1830 leaf primary-ac { 1831 type string; 1832 description "Name of primary attachment circuit. " + 1833 "This field is intended to reference " + 1834 "standardized layer-2 definitions."; 1835 } 1836 } 1837 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1838 "primary/primary-pw" { 1839 description "The primary pseudowires of a " + 1840 "redundancy group endpoint"; 1841 leaf primary-pw { 1842 type leafref { 1843 path "../../pw/name"; 1844 } 1845 description "name of pseudowire"; 1846 } 1847 } 1848 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1849 "backup/backup-ac" { 1850 description "The backup attachment circuit of a " + 1851 "redundancy group endpoint"; 1852 leaf backup-ac { 1853 type string; 1854 description "Name of backup attachment circuit. " + 1855 "This field is intended to reference " + 1856 "standardized layer-2 definitions."; 1857 } 1858 } 1859 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1860 "backup/backup-pw" { 1861 description "The backup pseudowires of a " + 1862 "redundancy group endpoint"; 1863 leaf backup-pw { 1864 type leafref { 1865 path "../../pw/name"; 1866 } 1867 description "Reference an attachment circuit"; 1868 } 1870 } 1871 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 1872 description "Additional conditional " + 1873 "redunadancy group parameters"; 1874 leaf reroute-delay { 1875 when "../reroute-mode = 'delayed'" { 1876 description "Specify amount of time to " + 1877 "delay reroute only when " + 1878 "delayed route is configured"; 1879 } 1880 type uint16; 1881 description "amount of time to delay reroute"; 1882 } 1883 leaf revert-delay { 1884 when "../revert = 'true'" { 1885 description "Specify the amount of time to " + 1886 "wait to revert to primary " + 1887 "only if reversion is configured"; 1888 } 1889 type uint16; 1890 description "amount ot time to wait to " + 1891 "revert to primary"; 1892 } 1893 } 1894 } 1895 } 1896 } 1898 augment "/l2vpn/l2vpn-instances/l2vpn-instance" { 1899 when "type = 'vpls-l2vpn-instance-type'" { 1900 description "Parameters specifically for a VPLS instance"; 1901 } 1902 description "Augment for parameters for a VPLS instance"; 1903 uses pbb-parameters-grp; 1904 leaf evpn-instance { 1905 type string; 1906 description "Eventual reference to standard EVPN instance"; 1907 } 1908 list endpoint { 1909 key "name"; 1910 leaf name { 1911 type string; 1912 description "endpoint name"; 1913 } 1914 leaf split-horizon-group { 1915 type string; 1916 description "Identify a split horizon group"; 1917 } 1918 uses endpoint-grp { 1919 description "endpoint configuration"; 1920 augment "ac-or-pw-or-redundancy-grp/ac" { 1921 description "A list of attachment circuits as the endpoint"; 1922 list ac { 1923 key "name"; 1924 leaf name { 1925 type string; 1926 description "Name of attachment circuit. " + 1927 "This field is intended to " + 1928 "reference standardized " + 1929 "layer-2 definitions."; 1930 } 1931 description "A bridge table instance's " + 1932 "attachment circuit list"; 1933 } 1934 } 1935 augment "ac-or-pw-or-redundancy-grp/pw" { 1936 description "A list of pseudowires as the endpoint"; 1937 list pw { 1938 key "name"; 1939 leaf name { 1940 type leafref { 1941 path "../../../pw/name"; 1942 } 1943 description "name of pseudowire"; 1944 } 1945 description "A VPLS instance's pseudowire list"; 1946 } 1947 } 1948 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1949 "primary/primary-ac" { 1950 description "The primary attachment circuit of a " + 1951 "redundancy group endpoint"; 1952 leaf primary-ac { 1953 type string; 1954 description "Name of primary attachment circuit. " + 1955 "This field is intended to reference " + 1956 "standardized layer-2 definitions."; 1957 } 1958 } 1959 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1960 "primary/primary-pw" { 1961 description "The primary pseudowires of a " + 1962 "redundancy group endpoint"; 1963 list primary-pw { 1964 key "name"; 1965 leaf name { 1966 type leafref { 1967 path "../../../pw/name"; 1968 } 1969 description "name of pseudowire"; 1970 } 1971 description "A bridge table instance's pseudowire list"; 1972 } 1973 } 1974 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1975 "backup/backup-ac" { 1976 description "The backup attachment circuit of a " + 1977 "redundancy group endpoint"; 1978 leaf backup-ac { 1979 type string; 1980 description "Name of backup attachment circuit. " + 1981 "This field is intended to reference " + 1982 "standardized layer-2 definitions."; 1983 } 1984 } 1985 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 1986 "backup/backup-pw" { 1987 description "The backup pseudowires of a " + 1988 "redundancy group endpoint"; 1989 list backup-pw { 1990 key "name"; 1991 leaf name { 1992 type leafref { 1993 path "../../../pw/name"; 1994 } 1995 description "Reference an attachment circuit"; 1996 } 1997 leaf precedence { 1998 type uint32; 1999 description "precedence of the pseudowire"; 2000 } 2001 description "A list of backup pseudowires"; 2002 } 2003 } 2004 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 2005 description "Additional conditional " + 2006 "redunadancy group parameters"; 2007 leaf reroute-delay { 2008 when "../reroute-mode = 'delayed'" { 2009 description "Specify amount of time to " + 2010 "delay reroute only when " + 2011 "delayed route is configured"; 2012 } 2013 type uint16; 2014 description "amount of time to delay reroute"; 2015 } 2016 leaf revert-delay { 2017 when "../revert = 'true'" { 2018 description "Specify the amount of time to " + 2019 "wait to revert to primary " + 2020 "only if reversion is configured"; 2021 } 2022 type uint16; 2023 description "amount ot time to wait to revert to primary"; 2024 } 2025 } 2026 } 2027 description "List of endpoints"; 2028 } 2029 } 2031 augment "/l2vpn-state/l2vpn-instances/l2vpn-instance" { 2032 when "type = 'vpws-l2vpn-instance-type'" { 2033 description "Additional perational state specifically for " + 2034 "a VPWS instance"; 2035 } 2036 description "Augment for a VPWS instance's " + 2037 "operational state"; 2038 container endpoint-a { 2039 description "endpoint-a"; 2040 uses endpoint-grp { 2041 description "endpoint configuration"; 2042 augment "ac-or-pw-or-redundancy-grp/ac" { 2043 description "An attachment circuit as the endpoint"; 2044 container ac { 2045 description "The attachment circuit"; 2046 uses ac-state-grp; 2047 } 2048 } 2049 augment "ac-or-pw-or-redundancy-grp/pw" { 2050 description "A pseudowire as the endpoint"; 2051 container pw { 2052 description "The pseuduowire"; 2053 uses vpws-pw-state-grp; 2054 } 2055 } 2056 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2057 "primary/primary-ac" { 2058 description "The primary attachment circuit of a " + 2059 "redundancy group endpoint"; 2060 container primary-ac { 2061 description "The primary attachment circuit"; 2062 uses ac-state-grp; 2063 } 2064 } 2065 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2066 "primary/primary-pw" { 2067 description "The primary pseudowires of a " + 2068 "redundancy group endpoint"; 2069 container primary-pw { 2070 description "The primary pseudowire"; 2071 uses vpws-pw-state-grp; 2072 } 2073 } 2074 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2075 "backup/backup-ac" { 2076 description "The backup attachment circuit of a " + 2077 "redundancy group endpoint"; 2078 container backup-ac { 2079 description "The backup attachment circuit"; 2080 uses ac-state-grp; 2081 } 2082 } 2083 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2084 "backup/backup-pw" { 2085 description "The backup pseudowires of a " + 2086 "redundancy group endpoint"; 2087 container backup-pw { 2088 description "The backup pseudowire"; 2089 uses vpws-pw-state-grp; 2090 } 2091 } 2092 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 2093 description "Additional conditional " + 2094 "redunadancy group parameters"; 2095 leaf reroute-delay { 2096 when "../reroute-mode = 'delayed'" { 2097 description "Specify amount of time to " + 2098 "delay reroute only when " + 2099 "delayed route is configured"; 2100 } 2101 type uint16; 2102 description "amount of time to delay reroute"; 2103 } 2104 leaf revert-delay { 2105 when "../revert = 'true'" { 2106 description "Specify the amount of time to " + 2107 "wait to revert to primary " + 2108 "only if reversion is configured"; 2109 } 2110 type uint16; 2111 description "amount ot time to wait to revert to primary"; 2112 } 2113 } 2114 } 2115 } 2116 container endpoint-z { 2117 description "endpoint-z"; 2118 uses endpoint-grp { 2119 description "endpoint configuration"; 2120 augment "ac-or-pw-or-redundancy-grp/ac" { 2121 description "An attachment circuit as the endpoint"; 2122 container ac { 2123 description "The attachment circuit"; 2124 uses ac-state-grp; 2125 } 2126 } 2127 augment "ac-or-pw-or-redundancy-grp/pw" { 2128 description "A pseudowire as the endpoint"; 2129 container pw { 2130 description "The pseuduowire"; 2131 uses vpws-pw-state-grp; 2132 } 2133 } 2134 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2135 "primary/primary-ac" { 2136 description "The primary attachment circuit of a " + 2137 "redundancy group endpoint"; 2138 container primary-ac { 2139 description "The primary attachment circuit"; 2140 uses ac-state-grp; 2141 } 2142 } 2143 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2144 "primary/primary-pw" { 2145 description "The primary pseudowires of a " + 2146 "redundancy group endpoint"; 2147 container primary-pw { 2148 description "The primary pseudowire"; 2149 uses vpws-pw-state-grp; 2150 } 2151 } 2152 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2153 "backup/backup-ac" { 2154 description "The backup attachment circuit of a " + 2155 "redundancy group endpoint"; 2156 container backup-ac { 2157 description "The backup attachment circuit"; 2158 uses ac-state-grp; 2159 } 2160 } 2161 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2162 "backup/backup-pw" { 2163 description "The backup pseudowires of a " + 2164 "redundancy group endpoint"; 2165 container backup-pw { 2166 description "The backup pseudowire"; 2167 uses vpws-pw-state-grp; 2168 } 2169 } 2170 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 2171 description "Additional conditional " + 2172 "redunadancy group parameters"; 2173 leaf reroute-delay { 2174 when "../reroute-mode = 'delayed'" { 2175 description "Specify amount of time to " + 2176 "delay reroute only when " + 2177 "delayed route is configured"; 2178 } 2179 type uint16; 2180 description "amount of time to delay reroute"; 2181 } 2182 leaf revert-delay { 2183 when "../revert = 'true'" { 2184 description "Specify the amount of time to " + 2185 "wait to revert to primary " + 2186 "only if reversion is configured"; 2187 } 2188 type uint16; 2189 description "amount ot time to wait to revert to primary"; 2190 } 2191 } 2192 } 2193 } 2194 } 2196 augment "/l2vpn-state/l2vpn-instances/l2vpn-instance" { 2197 when "type = 'vpls-l2vpn-instance-type'" { 2198 description "Additional perational state specifically for " + 2199 "a VPLS instance"; 2200 } 2201 description "Augment for a VPLS instance's " + 2202 "operational state"; 2203 uses pbb-parameters-state-grp; 2204 leaf evpn-instance-name { 2205 type string; 2206 description "Name of associated an EVPN instance"; 2207 } 2208 list endpoint { 2209 leaf name { 2210 type string; 2211 description "endpoint name"; 2212 } 2213 leaf split-horizon-group { 2214 type string; 2215 description "Identify a split horizon group"; 2216 } 2217 uses endpoint-grp { 2218 description "endpoint configuration"; 2219 augment "ac-or-pw-or-redundancy-grp/ac" { 2220 description "A list of attachment circuits as the endpoint"; 2221 list ac { 2222 uses ac-state-grp; 2223 description "The attachment circuits"; 2224 } 2225 } 2226 augment "ac-or-pw-or-redundancy-grp/pw" { 2227 description "A list of pseudowires as the endpoint"; 2228 list pw { 2229 uses vpls-pw-state-grp; 2230 description "The pseudowires"; 2231 } 2232 } 2233 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2234 "primary/primary-ac" { 2235 description "The primary attachment circuit of a " + 2236 "redundancy group endpoint"; 2237 container primary-ac { 2238 description "The primary attachment circuit"; 2239 uses ac-state-grp; 2240 } 2241 } 2242 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2243 "primary/primary-pw" { 2244 description "The primary pseudowires of a " + 2245 "redundancy group endpoint"; 2246 list primary-pw { 2247 uses vpls-pw-state-grp; 2248 description "The pseudowires"; 2249 } 2250 } 2251 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2252 "backup/backup-ac" { 2253 description "The backup attachment circuit of a " + 2254 "redundancy group endpoint"; 2255 container backup-ac { 2256 description "The backup attachment circuit"; 2257 uses ac-state-grp; 2258 } 2259 } 2260 augment "ac-or-pw-or-redundancy-grp/redundancy-grp/" + 2261 "backup/backup-pw" { 2262 description "The backup pseudowires of a " + 2263 "redundancy group endpoint"; 2264 list backup-pw { 2265 uses vpls-pw-state-grp; 2266 leaf precedence { 2267 type uint32; 2268 description "precedence of the pseudowire"; 2269 } 2270 description "The backup pseudowires"; 2271 } 2272 } 2273 augment "ac-or-pw-or-redundancy-grp/redundancy-grp" { 2274 description "Additional conditional " + 2275 "redunadancy group parameters"; 2276 leaf reroute-delay { 2277 when "../reroute-mode = 'delayed'" { 2278 description "Specify amount of time to " + 2279 "delay reroute only when " + 2280 "delayed route is configured"; 2281 } 2282 type uint16; 2283 description "amount of time to delay reroute"; 2284 } 2285 leaf revert-delay { 2286 when "../revert = 'true'" { 2287 description "Specify the amount of time to " + 2288 "wait to revert to primary " + 2289 "only if reversion is configured"; 2290 } 2291 type uint16; 2292 description "amount ot time to wait to revert to primary"; 2293 } 2294 } 2295 } 2296 description "List of endpoints"; 2297 } 2298 } 2300 } 2301 2303 Figure 3 2305 5. Security Considerations 2307 The configuration, state, action and notification data defined in 2308 this document are designed to be accessed via the NETCONF protocol 2309 [RFC6241]. The lowest NETCONF layer is the secure transport layer 2310 and the mandatory-to-implement secure transport is SSH [RFC6242]. 2311 The NETCONF access control model [RFC6536] provides means to restrict 2312 access for particular NETCONF users to a pre-configured subset of all 2313 available NETCONF protocol operations and content. 2315 The security concerns listed above are, however, no different than 2316 faced by other routing protocols. Hence, this draft does not change 2317 any underlying security issues inherent in [I-D.ietf-netmod-routing- 2318 cfg] 2320 6. IANA Considerations 2322 None. 2324 7. Acknowledgments 2326 The authors would like to acknowledge Giles Heron and others for 2327 their useful comments. 2329 8. References 2331 8.1. Normative References 2333 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2334 Requirement Levels", BCP 14, RFC 2119, 2335 DOI 10.17487/RFC2119, March 1997, 2336 . 2338 8.2. Informative References 2340 [RFC3916] Xiao, X., Ed., McPherson, D., Ed., and P. Pate, Ed., 2341 "Requirements for Pseudo-Wire Emulation Edge-to-Edge 2342 (PWE3)", RFC 3916, DOI 10.17487/RFC3916, September 2004, 2343 . 2345 [RFC3985] Bryant, S., Ed. and P. Pate, Ed., "Pseudo Wire Emulation 2346 Edge-to-Edge (PWE3) Architecture", RFC 3985, 2347 DOI 10.17487/RFC3985, March 2005, 2348 . 2350 [RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, 2351 "Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for 2352 Use over an MPLS PSN", RFC 4385, DOI 10.17487/RFC4385, 2353 February 2006, . 2355 [RFC4446] Martini, L., "IANA Allocations for Pseudowire Edge to Edge 2356 Emulation (PWE3)", BCP 116, RFC 4446, 2357 DOI 10.17487/RFC4446, April 2006, 2358 . 2360 [RFC4447] Martini, L., Ed., Rosen, E., El-Aawar, N., Smith, T., and 2361 G. Heron, "Pseudowire Setup and Maintenance Using the 2362 Label Distribution Protocol (LDP)", RFC 4447, 2363 DOI 10.17487/RFC4447, April 2006, 2364 . 2366 [RFC4448] Martini, L., Ed., Rosen, E., El-Aawar, N., and G. Heron, 2367 "Encapsulation Methods for Transport of Ethernet over MPLS 2368 Networks", RFC 4448, DOI 10.17487/RFC4448, April 2006, 2369 . 2371 [RFC4664] Andersson, L., Ed. and E. Rosen, Ed., "Framework for Layer 2372 2 Virtual Private Networks (L2VPNs)", RFC 4664, 2373 DOI 10.17487/RFC4664, September 2006, 2374 . 2376 [RFC4665] Augustyn, W., Ed. and Y. Serbest, Ed., "Service 2377 Requirements for Layer 2 Provider-Provisioned Virtual 2378 Private Networks", RFC 4665, DOI 10.17487/RFC4665, 2379 September 2006, . 2381 [RFC4761] Kompella, K., Ed. and Y. Rekhter, Ed., "Virtual Private 2382 LAN Service (VPLS) Using BGP for Auto-Discovery and 2383 Signaling", RFC 4761, DOI 10.17487/RFC4761, January 2007, 2384 . 2386 [RFC4762] Lasserre, M., Ed. and V. Kompella, Ed., "Virtual Private 2387 LAN Service (VPLS) Using Label Distribution Protocol (LDP) 2388 Signaling", RFC 4762, DOI 10.17487/RFC4762, January 2007, 2389 . 2391 [RFC5003] Metz, C., Martini, L., Balus, F., and J. Sugimoto, 2392 "Attachment Individual Identifier (AII) Types for 2393 Aggregation", RFC 5003, DOI 10.17487/RFC5003, September 2394 2007, . 2396 [RFC5254] Bitar, N., Ed., Bocci, M., Ed., and L. Martini, Ed., 2397 "Requirements for Multi-Segment Pseudowire Emulation Edge- 2398 to-Edge (PWE3)", RFC 5254, DOI 10.17487/RFC5254, October 2399 2008, . 2401 [RFC5659] Bocci, M. and S. Bryant, "An Architecture for Multi- 2402 Segment Pseudowire Emulation Edge-to-Edge", RFC 5659, 2403 DOI 10.17487/RFC5659, October 2009, 2404 . 2406 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2407 the Network Configuration Protocol (NETCONF)", RFC 6020, 2408 DOI 10.17487/RFC6020, October 2010, 2409 . 2411 [RFC6073] Martini, L., Metz, C., Nadeau, T., Bocci, M., and M. 2412 Aissaoui, "Segmented Pseudowire", RFC 6073, 2413 DOI 10.17487/RFC6073, January 2011, 2414 . 2416 [RFC6074] Rosen, E., Davie, B., Radoaca, V., and W. Luo, 2417 "Provisioning, Auto-Discovery, and Signaling in Layer 2 2418 Virtual Private Networks (L2VPNs)", RFC 6074, 2419 DOI 10.17487/RFC6074, January 2011, 2420 . 2422 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2423 and A. Bierman, Ed., "Network Configuration Protocol 2424 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2425 . 2427 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2428 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2429 . 2431 [RFC6391] Bryant, S., Ed., Filsfils, C., Drafz, U., Kompella, V., 2432 Regan, J., and S. Amante, "Flow-Aware Transport of 2433 Pseudowires over an MPLS Packet Switched Network", 2434 RFC 6391, DOI 10.17487/RFC6391, November 2011, 2435 . 2437 [RFC6423] Li, H., Martini, L., He, J., and F. Huang, "Using the 2438 Generic Associated Channel Label for Pseudowire in the 2439 MPLS Transport Profile (MPLS-TP)", RFC 6423, 2440 DOI 10.17487/RFC6423, November 2011, 2441 . 2443 [RFC6478] Martini, L., Swallow, G., Heron, G., and M. Bocci, 2444 "Pseudowire Status for Static Pseudowires", RFC 6478, 2445 DOI 10.17487/RFC6478, May 2012, 2446 . 2448 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2449 Protocol (NETCONF) Access Control Model", RFC 6536, 2450 DOI 10.17487/RFC6536, March 2012, 2451 . 2453 [RFC6624] Kompella, K., Kothari, B., and R. Cherukuri, "Layer 2 2454 Virtual Private Networks Using BGP for Auto-Discovery and 2455 Signaling", RFC 6624, DOI 10.17487/RFC6624, May 2012, 2456 . 2458 [RFC7041] Balus, F., Ed., Sajassi, A., Ed., and N. Bitar, Ed., 2459 "Extensions to the Virtual Private LAN Service (VPLS) 2460 Provider Edge (PE) Model for Provider Backbone Bridging", 2461 RFC 7041, DOI 10.17487/RFC7041, November 2013, 2462 . 2464 [RFC7361] Dutta, P., Balus, F., Stokes, O., Calvignac, G., and D. 2465 Fedyk, "LDP Extensions for Optimized MAC Address 2466 Withdrawal in a Hierarchical Virtual Private LAN Service 2467 (H-VPLS)", RFC 7361, DOI 10.17487/RFC7361, September 2014, 2468 . 2470 Appendix A. Example Configuration 2472 This section shows an example configuration using the YANG data model 2473 defined in the document. 2475 Appendix B. Contributors 2477 The editors gratefully acknowledge the following people for their 2478 contributions to this document. 2480 Reshad Rahman Cisco Systems, Inc. Email: rrahman@cisco.com Kamran 2481 Raza Cisco Systems, Inc. Email: skraza@cisco.com Tapraj Singh Cisco 2482 Systems, Inc. Email: tsingh@cisco.com Zhenbin Li Huawei Technologies 2483 Email: lizhenbin@huawei.com Zhuang Shunwan Huawei Technologies Email: 2484 Zhuangshunwan@huawei.com Wang Haibo Huawei Technologies Email: 2486 rainsword.wang@huawei.com Sajjad Ahmed Ericsson Email: 2487 sajjad.ahmed@ericsson.com Matthew Bocci Nokia Email: 2488 matthew.bocci@nokia.com Jonathan Hardwick Metaswitch Email: 2489 jonathan.hardwick@metaswitch.com Santosh Esale Juniper Networks 2490 Email: sesale@juniper.net Kishore Tiruveedhula Juniper Networks 2491 Email: kishoret@juniper.net Nick Delregno Verizon Email: 2492 nick.deregno@verizon.com Luay Jalil Verizon Email: 2493 luay.jalil@verizon.com Maria Joecylyn Verizon Email: 2494 joecylyn.malit@verizon.com 2496 Authors' Addresses 2498 Himanshu Shah 2499 Ciena Corporation 2501 Email: hshah@ciena.com 2503 Patrice Brissette 2504 Cisco Systems, Inc. 2506 Email: pbrisset@cisco.com 2508 Ing-When Chen 2509 Ericsson 2511 Email: ichen@kuatrotech.com 2513 Iftekar Hussain 2514 Infinera Corporation 2516 Email: ihussain@infinera.com 2518 Bin Wen 2519 Comcast 2521 Email: Bin_Wen@cable.comcast.com