idnits 2.17.1 draft-ietf-mpls-base-yang-04.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 == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (March 12, 2017) is 2573 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 normative reference: RFC 6536 (Obsoleted by RFC 8341) ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) Summary: 3 errors (**), 0 flaws (~~), 2 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 MPLS Working Group T. Saad 3 Internet-Draft K. Raza 4 Intended status: Standards Track R. Gandhi 5 Expires: September 13, 2017 Cisco Systems Inc 6 X. Liu 7 Jabil 8 V. Beeram 9 Juniper Networks 10 H. Shah 11 Ciena 12 I. Bryskin 13 X. Chen 14 Huawei Technologies 15 R. Jones 16 Brocade 17 B. Wen 18 Comcast 19 March 12, 2017 21 A YANG Data Model for MPLS Base 22 draft-ietf-mpls-base-yang-04 24 Abstract 26 This document contains a specification of the the MPLS base YANG 27 model. The MPLS base YANG module serves as a base framework for 28 configuring and managing an MPLS switching subsystem. It is expected 29 that other MPLS technology YANG models (e.g. MPLS LSP Static, LDP or 30 RSVP-TE models) will augment the MPLS base YANG model. 32 Status of This Memo 34 This Internet-Draft is submitted in full conformance with the 35 provisions of BCP 78 and BCP 79. 37 Internet-Drafts are working documents of the Internet Engineering 38 Task Force (IETF). Note that other groups may also distribute 39 working documents as Internet-Drafts. The list of current Internet- 40 Drafts is at http://datatracker.ietf.org/drafts/current/. 42 Internet-Drafts are draft documents valid for a maximum of six months 43 and may be updated, replaced, or obsoleted by other documents at any 44 time. It is inappropriate to use Internet-Drafts as reference 45 material or to cite them other than as "work in progress." 47 This Internet-Draft will expire on September 13, 2017. 49 Copyright Notice 51 Copyright (c) 2017 IETF Trust and the persons identified as the 52 document authors. All rights reserved. 54 This document is subject to BCP 78 and the IETF Trust's Legal 55 Provisions Relating to IETF Documents 56 (http://trustee.ietf.org/license-info) in effect on the date of 57 publication of this document. Please review these documents 58 carefully, as they describe your rights and restrictions with respect 59 to this document. Code Components extracted from this document must 60 include Simplified BSD License text as described in Section 4.e of 61 the Trust Legal Provisions and are provided without warranty as 62 described in the Simplified BSD License. 64 Table of Contents 66 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 67 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 68 1.1.1. Keywords . . . . . . . . . . . . . . . . . . . . . . 3 69 1.2. MPLS Base Tree Diagram . . . . . . . . . . . . . . . . . 3 70 1.3. MPLS Base Module . . . . . . . . . . . . . . . . . . . . 5 71 2. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 72 3. Security Considerations . . . . . . . . . . . . . . . . . . . 13 73 4. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 74 4.1. Normative References . . . . . . . . . . . . . . . . . . 13 75 4.2. Informative References . . . . . . . . . . . . . . . . . 14 76 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 78 1. Introduction 80 A core routing data model is defined in [RFC8022], and it provides a 81 basis for the development of data models for routing protocols. The 82 MPLS base model augments this model with additional data specific to 83 MPLS switching [RFC3031]. The interface data model is defined in 84 [RFC7223] and is used for referencing interface from the MPLS base 85 model. 87 The MPLS base YANG module augments the "routing" read-write (rw) and 88 "routing-state" read-only (ro) branches of the ietf-routing module 89 defined in [RFC8022]. The approach described in 90 [I-D.openconfig-netmod-opstate] is adopted to represent data 91 pertaining to configuration intended, applied state and derived state 92 data elements. Each container in the model holds a "config" and 93 "state" sub-container. The "config" sub-container contains the 94 intended configuration data, and the state sub-container contains 95 both the applied configuration and any derived state, such as 96 counters or statistical information. 98 This document defines the specification for the "ietf-mpls" YANG 99 module that provides base components of the MPLS data model. It is 100 expected that other MPLS YANG modules will augment the "ietf-mpls" 101 base model to define data models for other MPLS technologies (e.g. 102 MPLS LDP or MPLS RSVP-TE). 104 This document also defines a way to model MPLS labelled routes as an 105 augmentation of the the routing RIB model defined in [RFC8022] for IP 106 prefix routes that are MPLS labelled. Other MPLS non-IP prefix 107 routes are also modelled by introducing a new "mpls" address-family 108 RIB. 110 1.1. Terminology 112 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 113 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 114 document are to be interpreted as described in BCP 14, RFC 2119 115 RFC2119}}. 117 1.1.1. Keywords 119 The following terms are defined in [RFC6020]: 121 o augment, 123 o configuration data, 125 o data model, 127 o data node, 129 o feature, 131 o mandatory node, 133 o module, 135 o schema tree, 137 o state data, 139 o RPC operation. 141 1.2. MPLS Base Tree Diagram 143 The MPLS base tree diagram is shown in Figure 1. 145 module: ietf-mpls 146 augment /rt:routing: 147 +--rw mpls 148 +--rw config 149 | +--rw ttl-propagate? boolean 150 +--ro state 151 | +--ro ttl-propagate? boolean 152 +--rw label-blocks 153 | +--rw label-block* [index] 154 | +--rw index -> ../config/index 155 | +--rw start-label? -> ../config/start-label 156 | +--rw end-label? -> ../config/end-label 157 | +--rw config 158 | | +--rw index? string 159 | | +--rw start-label? rt-types:mpls-label 160 | | +--rw end-label? rt-types:mpls-label 161 | | +--rw block-allocation-mode? identityref 162 | +--ro state 163 | +--ro index? string 164 | +--ro start-label? rt-types:mpls-label 165 | +--ro end-label? rt-types:mpls-label 166 | +--ro block-allocation-mode? identityref 167 | +--ro free-labels-count? uint32 168 | +--ro inuse-labels-count? uint32 169 +--rw interface* [name] 170 +--rw name if:interface-ref 171 +--rw config 172 | +--rw enabled? boolean 173 | +--rw mtu? uint32 174 +--ro state 175 +--ro enabled? boolean 176 +--ro mtu? uint32 177 augment 178 /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route: 179 +--ro local-label? rt-types:mpls-label 180 augment 181 /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/rt:next-hop/ 182 rt:next-hop-options/rt:simple-next-hop: 183 +--ro remote-labels* rt-types:mpls-label 184 augment 185 /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/rt:next-hop/ 186 rt:next-hop-options/rt:next-hop-list/rt:next-hop-list/rt:next-hop: 187 +--ro index? string 188 +--ro backup-index? string 189 +--ro loadshare? uint16 190 +--ro role? nhlfe-role 191 +--ro remote-labels* rt-types:mpls-label 192 augment /rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input: 193 +---- index? string 194 +---- backup-index? string 195 +---- loadshare? uint16 196 +---- role? nhlfe-role 197 +---- remote-labels* rt-types:mpls-label 198 augment 199 /rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:output/rt:route: 200 +---- index? string 201 +---- backup-index? string 202 +---- loadshare? uint16 203 +---- role? nhlfe-role 204 +---- remote-labels* rt-types:mpls-label 206 Figure 1: MPLS Base tree diagram 208 1.3. MPLS Base Module 210 file "ietf-mpls@2017-03-11.yang" 211 module ietf-mpls { 213 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls"; 215 prefix "mpls"; 217 import ietf-routing { 218 prefix "rt"; 219 } 221 import ietf-interfaces { 222 prefix "if"; 223 } 225 import ietf-routing-types { 226 prefix "rt-types"; 227 } 229 organization "IETF MPLS Working Group"; 231 contact 232 "WG Web: 234 WG List: 236 WG Chair: Loa Andersson 237 239 WG Chair: Ross Callon 240 242 WG Chair: George Swallow 243 245 Editor: Tarek Saad 246 248 Editor: Kamran Raza 249 251 Editor: Rakesh Gandhi 252 254 Editor: Xufeng Liu 255 257 Editor: Vishnu Pavan Beeram 258 260 Editor: Himanshu Shah 261 263 Editor: Igor Bryskin 264 266 Editor: Xia Chen 267 269 Editor: Raqib Jones 270 272 Editor: Bin Wen 273 "; 275 description 276 "This YANG module defines the essential components for the 277 management of the MPLS subsystem."; 279 revision "2017-03-11" { 280 description 281 "Latest revision: 282 - Addressed MPLS-RT review comments"; 283 reference "RFC 3031: A YANG Data Model for base MPLS"; 284 } 286 /* Identities */ 287 identity mpls { 288 base rt:address-family; 289 description 290 "This identity represents the MPLS address family."; 291 } 293 identity label-block-alloc-mode { 294 description 295 "Base identity label-block allocation mode"; 296 } 298 identity label-block-alloc-mode-manager { 299 base label-block-alloc-mode; 300 description 301 "Label block allocation on reserved block 302 is managed by label manager"; 303 } 305 identity label-block-alloc-mode-application { 306 base label-block-alloc-mode; 307 description 308 "Label block allocation on reserved block 309 is managed by application"; 310 } 312 typedef nhlfe-role { 313 type enumeration { 314 enum PRIMARY { 315 description 316 "Next-hop acts as primary traffic carrying"; 317 } 318 enum BACKUP { 319 description 320 "Next-hop acts as backup"; 321 } 322 enum PRIMARY_AND_BACKUP { 323 description 324 "Next-hop acts as primary and backup simultaneously"; 325 } 326 } 327 description "The next-hop role"; 328 } 330 grouping nhlfe-simple-contents { 331 description 332 "MPLS simple NHLFE contents"; 333 leaf-list remote-labels { 334 type rt-types:mpls-label; 335 description "The MPLS label stack"; 336 } 337 } 339 grouping nhlfe-contents { 340 description 341 "MPLS NHLFE contents"; 342 leaf index { 343 type string; 344 description 345 "A user-specified identifier utilised to uniquely 346 reference the next-hop entry in the next-hop list. 347 The value of this index has no semantic meaning 348 other than for referencing the entry."; 349 } 351 leaf backup-index { 352 type string; 353 description 354 "A user-specified identifier utilised to uniquely 355 reference the backup next-hop entry in the NHLFE list. 356 The value of this index has no semantic meaning 357 other than for referencing the entry."; 358 } 360 leaf loadshare { 361 type uint16; 362 description 363 "This value is used to compute a loadshare to perform un-equal 364 load balancing when multiple outgoing next-hop(s) are 365 specified. A share is computed as a ratio of this number to the 366 total under all next-hops(s)."; 367 } 369 leaf role { 370 type nhlfe-role; 371 description "NHLFE role"; 372 } 373 uses nhlfe-simple-contents; 374 } 376 grouping interface-mpls_config { 377 description "MPLS interface contents grouping"; 378 leaf enabled { 379 type boolean; 380 description 381 "'true' if mpls encapsulation is enabled on the 382 interface. 'false' if mpls encapsulation is enabled 383 on the interface."; 384 } 385 leaf mtu { 386 type uint32; 387 description 388 "MPLS Maximum Transmission Unit (MTU)"; 389 } 390 } 392 grouping interfaces-mpls { 393 description "List of MPLS interfaces"; 394 list interface { 395 key "name"; 396 description "List of MPLS interfaces"; 397 leaf name { 398 type if:interface-ref; 399 description 400 "The name of a configured MPLS interface"; 401 } 402 container config { 403 description "Holds intended configuration"; 404 uses interface-mpls_config; 405 } 406 container state { 407 config false; 408 description "Holds inuse configuration"; 409 uses interface-mpls_config; 410 } 411 } 412 } 414 grouping label-block_config { 415 description "Label-block configuration items"; 416 leaf index { 417 type string; 418 description 419 "A user-specified identifier utilised to uniquely 420 reference the next-hop entry in the next-hop list. 421 The value of this index has no semantic meaning 422 other than for referencing the entry."; 423 } 424 leaf start-label { 425 type rt-types:mpls-label; 426 description "Label-block start"; 427 } 428 leaf end-label { 429 type rt-types:mpls-label; 430 description "Label-block end"; 432 } 433 leaf block-allocation-mode { 434 type identityref { 435 base label-block-alloc-mode; 436 } 437 description "Label-block allocation mode"; 438 } 439 } 441 grouping label-block_state { 442 description "Label-block state items"; 443 leaf free-labels-count { 444 when 445 "../block-allocation-mode = 'label-block-alloc-mode-manager'"; 446 type uint32; 447 description "Label-block free labels count"; 448 } 449 leaf inuse-labels-count { 450 when 451 "../block-allocation-mode = 'label-block-alloc-mode-manager'"; 452 type uint32; 453 description "Label-block inuse labels count"; 454 } 455 } 457 grouping globals_config { 458 description "MPLS global configuration leafs grouping"; 459 leaf ttl-propagate { 460 type boolean; 461 default 'true'; 462 description "Propagate TTL between IP and MPLS"; 463 } 464 } 466 grouping globals { 467 description "MPLS global configuration grouping"; 468 container config { 469 description "Holds intended configuration"; 470 uses globals_config; 471 } 472 container state { 473 config false; 474 description "Holds inuse configuration"; 475 uses globals_config; 476 } 477 } 478 grouping label-blocks { 479 description "Label-block allocation grouping"; 480 container label-blocks { 481 description "Label-block allocation container"; 482 list label-block { 483 must "start-label >= end-label" { 484 error-message "start-label can not be less than end-label"; 485 } 486 key index; 487 unique "start-label end-label"; 488 leaf index { 489 type leafref { 490 path "../config/index"; 491 } 492 description "Label-block index"; 493 } 494 leaf start-label { 495 type leafref { 496 path "../config/start-label"; 497 } 498 description 499 "Label-block start label reference"; 500 } 501 leaf end-label { 502 type leafref { 503 path "../config/end-label"; 504 } 505 description 506 "Label-block end label reference"; 507 } 508 description "List of MPLS label-blocks"; 509 container config { 510 description "Holds intended configuration"; 511 uses label-block_config; 512 } 513 container state { 514 config false; 515 description "Holds inuse configuration"; 516 uses label-block_config; 517 uses label-block_state; 518 } 519 } 520 } 521 } 523 augment "/rt:routing" { 524 description "MPLS augmentation."; 525 container mpls { 526 description 527 "MPLS container, to be used as an augmentation target node 528 other MPLS sub-features config, e.g. MPLS static LSP, MPLS 529 LDP LSPs, and Trafic Engineering MPLS LSP Tunnels, etc."; 530 uses globals; 531 uses label-blocks; 532 uses interfaces-mpls; 533 } 534 } 536 /* State data */ 537 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { 538 description 539 "This leaf augments an IPv4 unicast route."; 540 leaf local-label { 541 type rt-types:mpls-label; 542 description 543 "MPLS local label."; 544 } 545 } 547 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" 548 + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { 549 description 550 "Augment 'simple-next-hop' case in IPv4 unicast routes."; 551 uses nhlfe-simple-contents; 552 } 554 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" 555 + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" 556 + "rt:next-hop-list/rt:next-hop" { 557 description 558 "This leaf augments the 'next-hop-list' case of IPv4 unicast 559 routes."; 560 uses nhlfe-contents; 561 } 563 augment 564 "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input" { 565 description 566 "This augment adds the input parameter of the 'active-route' 567 action."; 568 uses nhlfe-contents; 569 } 571 augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" 572 + "rt:output/rt:route" { 573 description 574 "This augment adds the destination prefix to the reply of the 575 'active-route' action."; 577 uses nhlfe-contents; 578 } 579 } 580 582 Figure 2: MPLS base YANG module 584 2. IANA Considerations 586 This document registers the following URIs in the IETF XML registry 587 [RFC3688]. Following the format in [RFC3688], the following 588 registration is requested to be made. 590 URI: urn:ietf:params:xml:ns:yang:ietf-mpls XML: N/A, the requested 591 URI is an XML namespace. 593 This document registers a YANG module in the YANG Module Names 594 registry [RFC6020]. 596 name: ietf-mpls namespace: urn:ietf:params:xml:ns:yang:ietf-mpls 597 prefix: ietf-mpls reference: RFC3031 599 3. Security Considerations 601 The YANG module defined in this document is designed to be accessed 602 via the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 603 secure transport layer and the mandatory-to-implement secure 604 transport is SSH [RFC6242]. The NETCONF access control model 605 [RFC6536] provides means to restrict access for particular NETCONF 606 users to a pre-configured subset of all available NETCONF protocol 607 operations and content. 609 There are a number of data nodes defined in the YANG module which are 610 writable/creatable/deletable (i.e., config true, which is the 611 default). These data nodes may be considered sensitive or vulnerable 612 in some network environments. Write operations (e.g., ) 613 to these data nodes without proper protection can have a negative 614 effect on network operations. 616 4. References 618 4.1. Normative References 620 [RFC3031] Rosen, E., Viswanathan, A., and R. Callon, "Multiprotocol 621 Label Switching Architecture", RFC 3031, DOI 10.17487/ 622 RFC3031, January 2001, 623 . 625 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 626 DOI 10.17487/RFC3688, January 2004, 627 . 629 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 630 the Network Configuration Protocol (NETCONF)", RFC 6020, 631 DOI 10.17487/RFC6020, October 2010, 632 . 634 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 635 and A. Bierman, Ed., "Network Configuration Protocol 636 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 637 . 639 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 640 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 641 . 643 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 644 Protocol (NETCONF) Access Control Model", RFC 6536, DOI 645 10.17487/RFC6536, March 2012, 646 . 648 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 649 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 650 . 652 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 653 Management", RFC 8022, DOI 10.17487/RFC8022, November 654 2016, . 656 4.2. Informative References 658 [I-D.openconfig-netmod-opstate] 659 Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling 660 of Operational State Data in YANG", draft-openconfig- 661 netmod-opstate-01 (work in progress), July 2015. 663 Authors' Addresses 665 Tarek Saad 666 Cisco Systems Inc 668 Email: tsaad@cisco.com 669 Kamran Raza 670 Cisco Systems Inc 672 Email: skraza@cisco.com 674 Rakesh Gandhi 675 Cisco Systems Inc 677 Email: rgandhi@cisco.com 679 Xufeng Liu 680 Jabil 682 Email: Xufeng_Liu@jabil.com 684 Vishnu Pavan Beeram 685 Juniper Networks 687 Email: vbeeram@juniper.net 689 Himanshu Shah 690 Ciena 692 Email: tsaad@cisco.com 694 Igor Bryskin 695 Huawei Technologies 697 Email: Igor.Bryskin@huawei.com 699 Xia Chen 700 Huawei Technologies 702 Email: jescia.chenxia@huawei.com 704 Raqib Jones 705 Brocade 707 Email: raqib@Brocade.com 708 Bin Wen 709 Comcast 711 Email: Bin_Wen@cable.comcast.com