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