idnits 2.17.1 draft-ietf-bess-evpn-yang-01.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 139 has weird spacing: '...pecific inter...' == Line 152 has weird spacing: '...in this docu...' == Line 225 has weird spacing: '...guisher str...' == Line 227 has weird spacing: '...t-value str...' == Line 253 has weird spacing: '...guisher str...' == (15 more instances...) == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (July 8, 2016) is 2843 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) Summary: 0 errors (**), 0 flaws (~~), 8 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 BESS Working Group P. Brissette 3 A.Sajassi 4 Internet Draft Cisco System 5 Intended Status: Proposed Standard H. Shah 6 Expires: January 9, 2017 Ciena Corporation 7 Z. Li 8 Huawei Technologies 9 I. Chen 10 Ericsson 11 K. Tiruveedhula 12 Juniper Networks 13 I. Hussain 14 Infinera Corporation 15 J. Rabadan 16 Nokia 18 July 8, 2016 20 Yang Data Model for EVPN 21 draft-ietf-bess-evpn-yang-01 23 Abstract 25 This document describes a YANG data model for Ethernet VPN services. 26 The model is agnostic of the underlay. It apply to MPLS as well as to 27 VxLAN encapsulation. The model is also agnostic of the services 28 including E-LAN, E-LINE and E-TREE services. Any "add-on" features 29 such as EVPN IRB, EVPN overlay, etc. are for future investigation. 30 This document mainly focuses on EVPN and Ethernet-Segment instance 31 framework. 33 Status of this Memo 35 This Internet-Draft is submitted to IETF 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), its areas, and its working groups. Note that 40 other groups may also distribute working documents as 41 Internet-Drafts. 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." 47 The list of current Internet-Drafts can be accessed at 48 http://www.ietf.org/1id-abstracts.html 50 The list of Internet-Draft Shadow Directories can be accessed at 51 http://www.ietf.org/shadow.html 53 Copyright and License Notice 55 Copyright (c) 2016 IETF Trust and the persons identified as the 56 document authors. All rights reserved. 58 This document is subject to BCP 78 and the IETF Trust's Legal 59 Provisions Relating to IETF Documents 60 (http://trustee.ietf.org/license-info) in effect on the date of 61 publication of this document. Please review these documents 62 carefully, as they describe your rights and restrictions with respect 63 to this document. Code Components extracted from this document must 64 include Simplified BSD License text as described in Section 4.e of 65 the Trust Legal Provisions and are provided without warranty as 66 described in the Simplified BSD License. 68 Convention 70 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 71 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 72 document are to be interpreted as described in [RFC2119]. 74 Table of Contents 76 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 77 2. Specification of Requirements . . . . . . . . . . . . . . . . . 5 78 3. EVPN YANG Model . . . . . . . . . . . . . . . . . . . . . . . . 5 79 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 5 80 3.2 Ethernet-Segment Model . . . . . . . . . . . . . . . . . . . 6 81 3.3 EVPN Model . . . . . . . . . . . . . . . . . . . . . . . . . 6 82 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . . 7 83 4.1 Ethernet Segment Yang Module . . . . . . . . . . . . . . . . 7 84 4.2 EVPN Yang Module . . . . . . . . . . . . . . . . . . . . . . 9 85 5. Security Considerations . . . . . . . . . . . . . . . . . . . . 11 86 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 11 87 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . 11 88 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12 89 8.1. Normative References . . . . . . . . . . . . . . . . . . . 12 90 8.2. Informative References . . . . . . . . . . . . . . . . . . 12 91 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 12 93 1. Introduction 95 The Network Configuration Protocol (NETCONF) [RFC6241] is a network 96 management protocol that defines mechanisms to manage network 97 devices. YANG [RFC6020] is a modular language that represents data 98 structures in an XML or JSON tree format, and is used as a data 99 modeling language for the NETCONF. 101 This document introduces a YANG data model for Ethernet VPN services 102 (EVPN) [RFC7432], Provider Backbone Bridging Combined with Ethernet 103 VPN (PBB-EVPN) [RFC7623] as well as other WG draft such as EVPN-VPWS, 104 etc... The EVPN services runs over MPLS and VxLAN underlay. 106 The Yang data model in this document defines Ethernet VPN based 107 services. The model will leverage the definitions used in other IETF 108 Yang draft such as L2VPN Yang. 110 The goal is to propose a data object model consisting of building 111 blocks that can be assembled in different order to realize different 112 EVPN-based services. The definition work is undertaken initially by a 113 smaller working group with members representing various vendors and 114 service providers. The EVPN basic framework consist of two modules: 115 EVPN and Ethernet-Segment. These models are completely orthogonal. 116 They usually work in pair but user can definitely use one or the 117 other for its own need. 119 The data model is defined for following constructs that are used for 120 managing the services: 122 o Configuration 124 o Operational State 126 o Executables (Actions) 128 o Notifications 130 The document is organized to first define the data model for the 131 configuration, operational state, actions and notifications of EVPN 132 and Ethernet-Segment. 134 The EVPN data object model defined in this document uses the instance 135 centric approach whereby EVPN service attributes are specified for a 136 given EVPN instance. 138 The Ethernet-Segment data object model defined in this document refer 139 to a specific interface. That interface can be a physical interface, 140 a bundle interface or virtual interface. The latter includes 141 pseudowires. The purpose of creating a separate module is due to the 142 fact that it can be used without having the need to have EVPN 143 configured as layer 2 service. For example, an access node can be 144 dual-homed to two service nodes servicing a VPLS core. The access 145 connectivity can be represented by an Ethernet-Segment where EVPN BGP 146 DF election is performed over both service nodes. The core remains 147 VPLS where no EVPN instance is required. 148 2. Specification of Requirements 150 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL 151 NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" 152 in this document are to be interpreted as described in [RFC2119]. 154 3. EVPN YANG Model 156 3.1. Overview 158 Two top level module, Ethernet-Segment and EVPN, are defined. The 159 Ethernet-Segment contains a list of interface to which any Ethernet- 160 Segment attributes are configured/applied. 162 The EVPN module has 2 main containers: common and instance. The 163 first one has common attributes to all VPNs where as the latter has 164 attributes specific to an EVI. This document state the scope of the 165 EVPN object models definition. The following documents are within the 166 scope. This is not an exhaustive list but a representation of 167 documents that are covered for this work: 169 o Requirements for EVPN: RFC 7209 170 o EVPN: RFC 7432 171 o PBB-EVPN: RFC 7623 173 The integration with L2VPN instance Yang model is being done as part 174 of the L2VPN Yang model. 175 Following documents will be covered at that time: 176 o VPWS support in EVPN: 177 draft-ietf-bess-evpn-vpws 178 o E-TREE Support in EVPN & PBB-EVPN: 179 draft-ietf-bess-evpn-etree 180 o (PBB-)EVPN Seamless Integration with (PBB-)VPLS: 181 draft-ietf-bess-evpn-vpls-seamless-integ 182 o EVPN Virtual Ethernet Segment: 183 draft-sajassi-bess-evpn-virtual-eth-segment 185 The VxLAN aspect and the work related to Layer 3 is also for future 186 definition. Following documents will be covered at that time: 188 o IP Prefix Advertisement in EVPN: 189 draft-ietf-bess-evpn-prefix-advertisement 190 o VXLAN DCI Using EVPN: 191 draft-boutros-l2vpn-vxlan-evpn 192 o A Network Virtualization Overlay Solution using EVPN: 193 draft-ietf-bess-evpn-overlay- 194 o Interconnect Solution for EVPN Overlay networks: 195 draft-ietf-bess-dci-evpn-overlay 196 o Integrated Routing and Bridging in EVPN: 197 draft-ietf-bess-evpn-inter-subnet-forwarding 199 3.2 Ethernet-Segment Model 201 The Ethernet-Segment data model has a list of ES where each refer to 202 an interface. All attributes are optional due to auto-sensing default 203 mode where all values are auto-derive from the network connectivity. 205 module: ietf-ethernet-segment 206 +--rw ethernet-segments 207 | +--rw ethernet-segment* [name] 208 | +--rw name string 209 | +--rw (ac-or-pw)? 210 | | +--:(ac) 211 | | | +--rw ac? string 212 | | +--:(pw) 213 | | +--rw pw? string 214 | +--rw ethernet-segment-identifier? uint32 215 | +--rw (active-mode) 216 | | +--:(single-active) 217 | | | +--rw single-active-mode? empty 218 | | +--:(all-active) 219 | | +--rw all-active-mode? empty 220 | +--rw pbb-parameters {ethernet-segment-pbb-params}? 221 | | +--rw backbone-src-mac? yang:mac-address 222 | +--rw bgp-parameters 223 | | +--rw common 224 | | +--rw rd-rt* [route-distinguisher] 225 | | +--rw route-distinguisher string 226 | | +--rw vpn-target* [rt-value] 227 | | +--rw rt-value string 228 | | +--rw rt-type bgp-rt-type 229 | +--rw df-election 230 | | +--rw (df-election-method)? 231 | | | +--:(highest-random-weight) 232 | | | +--rw hrw? boolean 233 | | +--rw election-wait-time? uint32 234 | +--rw ead-evi-route? boolean 235 +--ro ethernet-segments-state 236 +--ro ethernet-segment-state* [name] 237 +--ro name string 238 +--ro service-type? string 239 +--ro status? status-type 240 +--ro (ac-or-pw)? 241 | +--:(ac) 242 | | +--ro ac? string 243 | +--:(pw) 244 | +--ro pw? string 245 +--ro interface-status? status-type 246 +--ro ethernet-segment-identifier? uint32 247 +--ro active-mode? string 248 +--ro pbb-parameters {ethernet-segment-pbb-params}? 249 | +--ro backbone-src-mac? yang:mac-address 250 +--ro bgp-parameters 251 | +--ro common 252 | +--ro rd-rt* [route-distinguisher] 253 | +--ro route-distinguisher string 254 | +--ro vpn-target* [rt-value] 255 | +--ro rt-value string 256 | +--ro rt-type bgp-rt-type 257 +--ro df-election 258 | +--ro hrw-enabled? boolean 259 | +--ro election-wait-time? uint32 260 +--ro ead-evi-route-enabled? boolean 261 +--ro esi-label? string 262 +--ro member* 263 | +--ro ip-address? inet:ip-address 264 +--ro df* 265 +--ro service-identifier? uint32 266 +--ro vlan? uint32 267 +--ro ip-address? inet:ip-address 269 3.3 EVPN Model 271 The evpn-instances container contains a list of evpn-instance. 272 Each entry of the evpn-instance represents a different Ethernet VPN 273 and it is represented by a EVI. Again, mainly all attributes are 274 optional for the same reason as for the Ethernet-Segment module. 276 module: ietf-evpn 277 +--rw evpn 278 +--rw common 279 | +--rw (replication-type)? 280 | +--:(ingress-replication) 281 | | +--rw ingress-replication? boolean 282 | +--:(p2mp-replication) 283 | +--rw p2mp-replication? boolean 284 +--rw evpn-instances 285 | +--rw evpn-instance* [name] 286 | +--rw name string 287 | +--rw evi? uint32 288 | +--rw pbb-parameters {evpn-pbb-params}? 289 | | +--rw source-bmac? yang:hex-string 290 | +--rw bgp-parameters 291 | | +--rw common 292 | | +--rw rd-rt* [route-distinguisher] 293 | | +--rw route-distinguisher string 294 | | +--rw vpn-target* [rt-value] 295 | | +--rw rt-value string 296 | | +--rw rt-type bgp-rt-type 297 | +--rw arp-proxy? boolean 298 | +--rw arp-suppression? boolean 299 | +--rw nd-proxy? boolean 300 | +--rw nd-suppression? boolean 301 | +--rw underlay-multicast? boolean 302 | +--rw flood-unknown-unicast-supression? boolean 303 +--ro evpn-instances-state 304 +--ro evpn-instance-state* 305 +--ro name? string 306 +--ro evi? uint32 307 +--ro pbb-parameters 308 | +--ro source-bmac? yang:hex-string 309 +--ro bgp-parameters 310 | +--ro common 311 | +--ro rd-rt* [route-distinguisher] 312 | +--ro route-distinguisher string 313 | +--ro vpn-target* [rt-value] 314 | +--ro rt-value string 315 | +--ro rt-type bgp-rt-type 316 +--ro advertise-mac-suppression-enabled? boolean 317 +--ro arp-proxy-enabled? boolean 318 +--ro arp-suppression-enabled? boolean 319 +--ro nd-proxy-enabled? boolean 320 +--ro nd-suppression-enabled? boolean 321 +--ro underlay-multicast-enabled? boolean 322 +--ro flood-unknown-unicast-suppression-enabled? boolean 323 +--ro routes 324 | +--ro ethernet-auto-discovery-route* 325 | | +--ro rd-rt* [route-distinguisher] 326 | | | +--ro route-distinguisher string 327 | | | +--ro vpn-target* [rt-value] 328 | | | +--ro rt-value string 329 | | +--ro ethernet-segment-identifier? uint32 330 | | +--ro ethernet-tag? uint32 331 | | +--ro path* 332 | | +--ro next-hop? inet:ip-address 333 | | +--ro label? mpls:mpls-label 334 | | +--ro detail 335 | | +--ro attributes 336 | | | +--ro extended-community* string 337 | | +--ro bestpath? empty 338 | +--ro mac-ip-advertisement-route* 339 | | +--ro rd-rt* [route-distinguisher] 340 | | | +--ro route-distinguisher string 341 | | | +--ro vpn-target* [rt-value] 342 | | | +--ro rt-value string 343 | | +--ro ethernet-segment-identifier? uint32 344 | | +--ro ethernet-tag? uint32 345 | | +--ro mac-address? yang:hex-string 346 | | +--ro mac-address-length? uint8 347 | | +--ro ip-prefix? inet:ip-prefix 348 | | +--ro path* 349 | | +--ro next-hop? inet:ip-address 350 | | +--ro label? mpls:mpls-label 351 | | +--ro label2? mpls:mpls-label 352 | | +--ro detail 353 | | +--ro attributes 354 | | | +--ro extended-community* string 355 | | +--ro bestpath? empty 356 | +--ro inclusive-multicast-ethernet-tag-route* 357 | | +--ro rd-rt* [route-distinguisher] 358 | | | +--ro route-distinguisher string 359 | | | +--ro vpn-target* [rt-value] 360 | | | +--ro rt-value string 361 | | +--ro ethernet-segment-identifier? uint32 362 | | +--ro originator-ip-prefix? inet:ip-prefix 363 | | +--ro path* 364 | | +--ro next-hop? inet:ip-address 365 | | +--ro label? mpls:mpls-label 366 | | +--ro detail 367 | | +--ro attributes 368 | | | +--ro extended-community* string 369 | | +--ro bestpath? empty 370 | +--ro ethernet-segment-route* 371 | | +--ro rd-rt* [route-distinguisher] 372 | | | +--ro route-distinguisher string 373 | | | +--ro vpn-target* [rt-value] 374 | | | +--ro rt-value string 375 | | +--ro ethernet-segment-identifier? uint32 376 | | +--ro originator-ip-prefix? inet:ip-prefix 377 | | +--ro path* 378 | | +--ro next-hop? inet:ip-address 379 | | +--ro detail 380 | | +--ro attributes 381 | | | +--ro extended-community* string 382 | | +--ro bestpath? empty 383 | +--ro ip-prefix-route* 384 | +--ro rd-rt* [route-distinguisher] 385 | | +--ro route-distinguisher string 386 | | +--ro vpn-target* [rt-value] 387 | | +--ro rt-value string 388 | +--ro ethernet-segment-identifier? uint32 389 | +--ro ip-prefix? inet:ip-prefix 390 | +--ro path* 391 | +--ro next-hop? inet:ip-address 392 | +--ro label? mpls:mpls-label 393 | +--ro detail 394 | +--ro attributes 395 | | +--ro extended-community* string 396 | +--ro bestpath? empty 397 +--ro statistics 398 +--ro tx-count? uint32 399 +--ro rx-count? uint32 400 +--ro detail 401 +--ro broadcast-tx-count? uint32 402 +--ro broadcast-rx-count? uint32 403 +--ro multicast-tx-count? uint32 404 +--ro multicast-rx-count? uint32 405 +--ro unicast-tx-count? uint32 406 +--ro unicast-rx-count? uint32 408 4. YANG Module 410 The EVPN configuration container is logically divided into 411 following high level config areas: 413 4.1 Ethernet Segment Yang Module 415 file "ietf-ethernet-segment@2016-07-08.yang" 416 module ietf-ethernet-segment { 417 namespace "urn:ietf:params:xml:ns:yang:ietf-ethernet-segment"; 418 prefix "es"; 420 import ietf-yang-types { 421 prefix "yang"; 422 } 424 import ietf-evpn { 425 prefix "evpn"; 427 } 429 import ietf-inet-types { 430 prefix "inet"; 431 } 433 organization "ietf"; 434 contact "ietf"; 435 description "ethernet segment"; 437 revision "2016-07-08" { 438 description " - Added the configuration option to enable or " + 439 " disable per-EVI/EAD route " + 440 " - Added PBB parameter backbone-src-mac " + 441 " - Added operational state branch, initially " + 442 " to match the configuration branch" + 443 ""; 444 reference ""; 445 } 447 revision "2016-06-23" { 448 description "WG document adoption"; 449 reference ""; 450 } 452 revision "2015-10-15" { 453 description "Initial revision"; 454 reference ""; 455 } 457 /* Features */ 459 feature ethernet-segment-bgp-params { 460 description "Ethernet segment's BGP parameters"; 461 } 463 feature ethernet-segment-pbb-params { 464 description "Ethernet segment's PBB parameters"; 465 } 467 /* Typedefs */ 469 typedef status-type { 470 type enumeration { 471 enum up { 472 description "Status is up"; 473 } 474 enum down { 475 description "Status is down"; 476 } 477 } 478 description "status type"; 479 } 481 /* EVPN Ethernet Segment YANG Model */ 483 container ethernet-segments { 485 description "ethernet-segment"; 486 list ethernet-segment { 487 key "name"; 488 leaf name { 489 type string; 490 description "Name of the ethernet segment"; 491 } 492 choice ac-or-pw { 493 description "ac-or-pw"; 494 case ac { 495 leaf ac { 496 type string; 497 description "Eventual reference to standard " + 498 "attachment circuit definition"; 499 } 500 } 501 case pw { 502 leaf pw { 503 type string; 504 description "Eventual reference to standard " + 505 "pseudowire definition"; 506 } 507 } 508 } 509 leaf ethernet-segment-identifier { 510 type uint32; 511 description "Ethernet segment identifier (esi)"; 512 } 513 choice active-mode { 514 mandatory true; 515 description "Choice of active mode"; 516 case single-active { 517 leaf single-active-mode { 518 type empty; 519 description "single-active-mode"; 520 } 522 } 523 case all-active { 524 leaf all-active-mode { 525 type empty; 526 description "all-active-mode"; 527 } 528 } 529 } 530 container pbb-parameters { 531 if-feature ethernet-segment-pbb-params; 532 description "PBB configuration"; 533 leaf backbone-src-mac { 534 type yang:mac-address; 535 description "backbone-src-mac, only if this is a PBB"; 536 } 537 } 538 uses evpn:bgp-parameters-grp { 539 if-feature ethernet-segment-bgp-params; 540 } 541 container df-election { 542 description "df-election"; 543 choice df-election-method { 544 description "Choice of df election method"; 545 case highest-random-weight { 546 leaf hrw { 547 type boolean; 548 description "Enable (TRUE) or disable (FALSE) " + 549 "highest random weight"; 550 } 551 } 552 } 553 leaf election-wait-time { 554 type uint32; 555 description "election-wait-time"; 556 } 557 } 558 leaf ead-evi-route { 559 type boolean; 560 default false; 561 description "Enable (true) or disable (false) ead-evi-route"; 562 } 563 description "An ethernet segment"; 564 } 565 } 567 container ethernet-segments-state { 568 config false; 569 description "Ethernet segmet operational state"; 570 list ethernet-segment-state { 571 key "name"; 572 leaf name { 573 type string; 574 description "Name of the ethernet segment"; 575 } 576 leaf service-type { 577 type string; 578 description "service-type"; 579 } 580 leaf status { 581 type status-type; 582 description "Ethernet segment status"; 583 } 584 choice ac-or-pw { 585 description "ac-or-pw"; 586 case ac { 587 leaf ac { 588 type string; 589 description "Name of attachment circuit"; 590 } 591 } 592 case pw { 593 leaf pw { 594 type string; 595 description "Name of pseudowire"; 596 } 597 } 598 } 599 leaf interface-status { 600 type status-type; 601 description "interface status"; 602 } 603 leaf ethernet-segment-identifier { 604 type uint32; 605 description "Ethernet segment identifier (esi)"; 606 } 607 leaf active-mode { 608 type string; 609 description "Single-active-mode/all-active-mode"; 610 } 611 container pbb-parameters { 612 if-feature "ethernet-segment-pbb-params"; 613 description "PBB configuration"; 614 leaf backbone-src-mac { 615 type yang:mac-address; 616 description "backbone-src-mac, only if this is a PBB"; 617 } 619 } 620 uses evpn:bgp-parameters-grp { 621 if-feature ethernet-segment-bgp-params; 622 } 623 container df-election { 624 description "df-election"; 625 leaf hrw-enabled { 626 type boolean; 627 description "hrw-enabled is enabled (TRUE) " + 628 "or disabled (FALSE)"; 629 } 630 leaf election-wait-time { 631 type uint32; 632 description "election-wait-time"; 633 } 634 } 635 leaf ead-evi-route-enabled { 636 type boolean; 637 description "ead-evi-route is enabled (TRUE) " + 638 "or disabled (FALSE)"; 639 } 640 leaf esi-label { 641 type string; 642 description "esi-label"; 643 } 644 list member { 645 leaf ip-address { 646 type inet:ip-address; 647 description "ip-address"; 648 } 649 description "member of the ethernet segment"; 650 } 651 list df { 652 leaf service-identifier { 653 type uint32; 654 description "service-identifier"; 655 } 656 leaf vlan { 657 type uint32; 658 description "vlan"; 659 } 660 leaf ip-address { 661 type inet:ip-address; 662 description "ip-address"; 663 } 664 description "df of an evpn instance's vlan"; 665 } 666 description "An ethernet segment"; 668 } 669 } 670 } 672 674 4.2 EVPN Yang Module 676 file "ietf-evpn@2016-07-08.yang" 677 module ietf-evpn { 678 namespace "urn:ietf:params:xml:ns:yang:ietf-evpn"; 679 prefix "evpn"; 681 import ietf-inet-types { 682 prefix "inet"; 683 } 685 import ietf-mpls { 686 prefix "mpls"; 687 } 689 import ietf-yang-types { 690 prefix "yang"; 691 } 693 organization "ietf"; 694 contact "ietf"; 695 description "evpn"; 697 revision "2016-07-08" { 698 description " - Added operational state" + 699 " - Added a configuration knob to enable/disable " + 700 " underlay-multicast " + 701 " - Added a configuration knob to enable/disable " + 702 " flooding of unknonw unicast " + 703 " - Added several configuration knobs " + 704 " to manage ARP and ND" + 705 ""; 706 reference ""; 707 } 709 revision "2016-06-23" { 710 description "WG document adoption"; 711 reference ""; 712 } 714 revision "2015-10-15" { 715 description "Initial revision"; 716 reference ""; 717 } 719 feature evpn-bgp-params { 720 description "EVPN's BGP parameters"; 721 } 723 feature evpn-pbb-params { 724 description "EVPN's PBB parameters"; 725 } 727 /* Typedefs */ 729 typedef bgp-rt-type { 730 type enumeration { 731 enum import { 732 description "For import"; 733 } 734 enum export { 735 description "For export"; 736 } 737 enum both { 738 description "For both import and export"; 739 } 740 } 741 description "BGP route-target type. Import from BGP YANG"; 742 } 744 /* Groupings */ 746 grouping bgp-rd-grp { 747 description "BGP RD grouping"; 748 leaf route-distinguisher { 749 type string; 750 description "BGP RD"; 751 } 752 } 754 grouping bgp-rd-rt-grp { 755 description "BGP RD-RT grouping"; 756 list rd-rt { 757 key "route-distinguisher"; 758 leaf route-distinguisher { 759 type string; 760 description "BGP RD"; 761 } 762 list vpn-target { 763 key "rt-value"; 764 leaf rt-value { 765 type string; 766 description "BGP route target"; 767 } 768 description "List of route targets"; 769 } 770 description "List of RD"; 771 } 772 } 774 grouping bgp-parameters-grp { 775 description "BGP parameters grouping"; 776 container bgp-parameters { 777 description "BGP parameters"; 778 container common { 779 description "Common BGP parameters"; 780 uses bgp-rd-rt-grp { 781 refine "rd-rt" { 782 max-elements 1; 783 } 784 augment "rd-rt/vpn-target" { 785 description "Add type of RT"; 786 leaf rt-type { 787 type bgp-rt-type; 788 mandatory true; 789 description "Type of RT"; 790 } 791 } 792 } 793 } 794 } 795 } 797 grouping common-route-parameters-grp { 798 description "common-route-parameters-grp"; 799 uses bgp-rd-rt-grp; 800 leaf ethernet-segment-identifier { 801 type uint32; 802 description "Ethernet segment identifier (esi)"; 803 } 804 } 806 grouping next-hop-label-grp { 807 description "next-hop-label-grp"; 808 leaf next-hop { 809 type inet:ip-address; 810 description "next-hop"; 812 } 813 leaf label { 814 type mpls:mpls-label; 815 description "label"; 816 } 817 } 819 grouping next-hop-label2-grp { 820 description "next-hop-label2-grp"; 821 leaf label2 { 822 type mpls:mpls-label; 823 description "label2"; 824 } 825 } 827 grouping path-detail-grp { 828 description "path-detail-grp"; 829 container detail { 830 config false; 831 description "path details"; 832 container attributes { 833 leaf-list extended-community { 834 type string; 835 description "extended-community"; 836 } 837 description "attributes"; 838 } 839 leaf bestpath { 840 type empty; 841 description "Indicate this path is the best path"; 842 } 843 } 844 } 846 /* EVPN YANG Model */ 848 container evpn { 849 description "evpn"; 850 container common { 851 description "common epn attributes"; 852 choice replication-type { 853 description "A choice of replication type"; 854 case ingress-replication { 855 leaf ingress-replication { 856 type boolean; 857 description "ingress-replication"; 858 } 860 } 861 case p2mp-replication { 862 leaf p2mp-replication { 863 type boolean; 864 description "p2mp-replication"; 865 } 866 } 867 } 868 } 869 container evpn-instances { 870 description "evpn-instances"; 871 list evpn-instance { 872 key "name"; 873 description "An EVPN instance"; 874 leaf name { 875 type string; 876 description "Name of EVPN instance"; 877 } 878 leaf evi { 879 type uint32; 880 description "evi"; 881 } 882 container pbb-parameters { 883 if-feature "evpn-pbb-params"; 884 description "PBB parameters"; 885 leaf source-bmac { 886 type yang:hex-string; 887 description "source-bmac"; 888 } 889 } 890 uses bgp-parameters-grp { 891 if-feature "evpn-bgp-params"; 892 } 893 leaf arp-proxy { 894 type boolean; 895 default false; 896 description "Enable (TRUE) or disable (FALSE) ARP proxy"; 897 } 898 leaf arp-suppression { 899 type boolean; 900 default false; 901 description "Enable (TRUE) or disable (FALSE) " + 902 "ARP suppression"; 903 } 904 leaf nd-proxy { 905 type boolean; 906 default false; 907 description "Enable (TRUE) or disable (FALSE) ND proxy"; 909 } 910 leaf nd-suppression { 911 type boolean; 912 default false; 913 description "Enable (TRUE) or disable (FALSE) " + 914 "ND suppression"; 915 } 916 leaf underlay-multicast { 917 type boolean; 918 default false; 919 description "Enable (TRUE) or disable (FALSE) " + 920 "underlay multicast"; 921 } 922 leaf flood-unknown-unicast-supression { 923 type boolean; 924 default false; 925 description "Enable (TRUE) or disable (FALSE) " + 926 "flood unknown unicast suppression"; 927 } 928 } 929 } 930 container evpn-instances-state { 931 config false; 932 description "evpn-instances-state"; 933 list evpn-instance-state { 934 description "The state of an EVPN instance"; 935 leaf name { 936 type string; 937 description "Name of EVPN instance"; 938 } 939 leaf evi { 940 type uint32; 941 description "evi"; 942 } 943 container pbb-parameters { 944 if-feature "evpn-pbb-params"; 945 description "PBB parameters"; 946 leaf source-bmac { 947 type yang:hex-string; 948 description "source-bmac"; 949 } 950 } 951 uses bgp-parameters-grp { 952 if-feature "evpn-bgp-params"; 953 } 954 leaf advertise-mac-suppression-enabled { 955 type boolean; 956 description "advertise-mac-suppression " + 957 "is enabled (TRUE) " + 958 "or disabled (FALSE)"; 959 } 960 leaf arp-proxy-enabled { 961 type boolean; 962 description "arp-proxy is enabled (TRUE) " + 963 "or disabled (FALSE)"; 964 } 965 leaf arp-suppression-enabled { 966 type boolean; 967 description "arp-suppression is enabled (TRUE) " + 968 "or disabled (FALSE)"; 969 } 970 leaf nd-proxy-enabled { 971 type boolean; 972 description "nd-proxy is enabled (TRUE) " + 973 "or disabled (FALSE)"; 974 } 975 leaf nd-suppression-enabled { 976 type boolean; 977 description "nd-suppression is enabled (TRUE) " + 978 "or disabled (FALSE)"; 979 } 980 leaf underlay-multicast-enabled { 981 type boolean; 982 description "underlay-multicast is enabled (TRUE) " + 983 "or disabled (FALSE)"; 984 } 985 leaf flood-unknown-unicast-suppression-enabled { 986 type boolean; 987 description "flood-unknown-unicast-suppression is " + 988 "enabled (TRUE) or disabled (FALSE)"; 989 } 990 container routes { 991 description "routes"; 992 list ethernet-auto-discovery-route { 993 uses common-route-parameters-grp; 994 leaf ethernet-tag { 995 type uint32; 996 description "An ethernet tag (etag) indentifying a " + 997 "broadcast domain"; 998 } 999 list path { 1000 uses next-hop-label-grp; 1001 uses path-detail-grp; 1002 description "path"; 1003 } 1004 description "ethernet-auto-discovery-route"; 1006 } 1007 list mac-ip-advertisement-route { 1008 uses common-route-parameters-grp; 1009 leaf ethernet-tag { 1010 type uint32; 1011 description "An ethernet tag (etag) indentifying a " + 1012 "broadcast domain"; 1013 } 1014 leaf mac-address { 1015 type yang:hex-string; 1016 description "Route mac address"; 1017 } 1018 leaf mac-address-length { 1019 type uint8 { 1020 range "0..48"; 1021 } 1022 description "mac address length"; 1023 } 1024 leaf ip-prefix { 1025 type inet:ip-prefix; 1026 description "ip-prefix"; 1027 } 1028 list path { 1029 uses next-hop-label-grp; 1030 uses next-hop-label2-grp; 1031 uses path-detail-grp; 1032 description "path"; 1033 } 1034 description "mac-ip-advertisement-route"; 1035 } 1036 list inclusive-multicast-ethernet-tag-route { 1037 uses common-route-parameters-grp; 1038 leaf originator-ip-prefix { 1039 type inet:ip-prefix; 1040 description "originator-ip-prefix"; 1041 } 1042 list path { 1043 uses next-hop-label-grp; 1044 uses path-detail-grp; 1045 description "path"; 1046 } 1047 description "inclusive-multicast-ethernet-tag-route"; 1048 } 1049 list ethernet-segment-route { 1050 uses common-route-parameters-grp; 1051 leaf originator-ip-prefix { 1052 type inet:ip-prefix; 1053 description "originator ip-prefix"; 1055 } 1056 list path { 1057 leaf next-hop { 1058 type inet:ip-address; 1059 description "next-hop"; 1060 } 1061 uses path-detail-grp; 1062 description "path"; 1063 } 1064 description "ethernet-segment-route"; 1065 } 1066 list ip-prefix-route { 1067 uses common-route-parameters-grp; 1068 leaf ip-prefix { 1069 type inet:ip-prefix; 1070 description "ip-prefix"; 1071 } 1072 list path { 1073 uses next-hop-label-grp; 1074 uses path-detail-grp; 1075 description "path"; 1076 } 1077 description "ip-prefix route"; 1078 } 1079 } 1080 container statistics { 1081 description "Statistics"; 1082 leaf tx-count { 1083 type uint32; 1084 description "transmission count"; 1085 } 1086 leaf rx-count { 1087 type uint32; 1088 description "receive count"; 1089 } 1090 container detail { 1091 description "Detailed statistics"; 1092 leaf broadcast-tx-count { 1093 type uint32; 1094 description "broadcast transmission count"; 1095 } 1096 leaf broadcast-rx-count { 1097 type uint32; 1098 description "broadcast receive count"; 1099 } 1100 leaf multicast-tx-count { 1101 type uint32; 1102 description "multicast transmission count"; 1104 } 1105 leaf multicast-rx-count { 1106 type uint32; 1107 description "multicast receive count"; 1108 } 1109 leaf unicast-tx-count { 1110 type uint32; 1111 description "unicast transmission count"; 1112 } 1113 leaf unicast-rx-count { 1114 type uint32; 1115 description "unicast receive count"; 1116 } 1117 } 1118 } 1120 } 1121 } 1122 } 1123 } 1124 1126 5. Security Considerations 1128 The configuration, state, action and notification data defined in 1129 this document are designed to be accessed via the NETCONF protocol 1130 [RFC6241]. The lowest NETCONF layer is the secure transport layer 1131 and the mandatory-to-implement secure transport is SSH [RFC6242]. The 1132 NETCONF access control model [RFC6536] provides means to restrict 1133 access for particular NETCONF users to a pre-configured subset of all 1134 available NETCONF protocol operations and content. 1136 The security concerns listed above are, however, no different than 1137 faced by other routing protocols. Hence, this draft does not change 1138 any underlying security issues inherent in [I-D.ietf-netmod-routing- 1139 cfg] 1141 6. IANA Considerations 1143 None. 1145 7. Acknowledgments 1147 The authors would like to acknowledge TBD for their useful 1148 comments. 1150 8. References 1151 8.1. Normative References 1153 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1154 Requirement Levels", BCP 14, RFC 2119, March 1997. 1156 8.2. Informative References 1157 [RFC6241] R.Enns et al., "Network Configuration 1158 Protocol (NETCONF)", 1159 RFC 6241, June 2011 1161 [RFC6020] M. Bjorklund, "YANG - A Data Modeling Language for 1162 the Network Configuration Protocol (NETCONF)", 1163 RFC 6020, October 2010. 1165 [RFC6242] M. Wasserman, "Using the NETCONF Protocol over 1166 Secure Shell (SSH)", 1167 RFC 6242, June 2011. 1169 [RFC6536] A. Bierman et al., "Network Configuration Protocol 1170 (NETCONF) Access Control Model" 1171 RFC 6536, March 2012. 1173 [RFC7432] Sajassi et al., "BGP MPLS-Based Ethernet VPN", 1174 RFC 7432, February 2015. 1176 [RFC7623] Sajassi et al., "Provider Backbone Bridging 1177 Combined with Ethernet VPN (PBB-EVPN)", 1178 RFC 7623, September 2015 1180 Authors' Addresses 1182 Patrice Brissette 1183 Cisco Systems, Inc. 1184 EMail: pbrisset@cisco.com 1186 Ali Sajassi 1187 Cisco Systems, Inc. 1188 EMail: sajassi@cisco.com 1190 Himanshu Shah 1191 Ciena Corporation 1192 EMail: hshah@ciena.com 1194 Zhenbin Li 1195 Huawei Technologies 1196 EMail: lizhenbin@huawei.com 1198 Helen Chen 1199 Ericsson 1200 EMail: ichen@kuatrotech.com 1202 Kishore Tiruveedhula 1203 Juniper Networks 1204 EMail: kishoret@juniper.net 1206 Iftekar Hussain 1207 Infinera Corporation 1208 EMail: ihussain@infinera.com 1210 Jorge Rabadan 1211 Nokia 1212 EMail: jorge.rabadan@nokia.com