idnits 2.17.1 draft-ietf-mpls-base-yang-03.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 11, 2017) is 2600 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 12, 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 11, 2017 21 A YANG Data Model for MPLS Base 22 draft-ietf-mpls-base-yang-03 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 12, 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/r 186 t: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 description 300 "Label block allocation on reserved block 301 is managed by label manager"; 302 } 304 identity label-block-alloc-mode-application { 305 description 306 "Label block allocation on reserved block 307 is managed by application"; 308 } 310 typedef nhlfe-role { 311 type enumeration { 312 enum PRIMARY { 313 description 314 "Next-hop acts as primary traffic carrying"; 315 } 316 enum BACKUP { 317 description 318 "Next-hop acts as backup"; 319 } 320 enum PRIMARY_AND_BACKUP { 321 description 322 "Next-hop acts as primary and backup simultaneously"; 323 } 324 } 325 description "The next-hop role"; 326 } 328 grouping nhlfe-simple-contents { 329 description 330 "MPLS simple NHLFE contents"; 331 leaf-list remote-labels { 332 type rt-types:mpls-label; 333 description "The MPLS label stack"; 334 } 336 } 338 grouping nhlfe-contents { 339 description 340 "MPLS NHLFE contents"; 341 leaf index { 342 type string; 343 description 344 "A user-specified identifier utilised to uniquely 345 reference the next-hop entry in the next-hop list. 346 The value of this index has no semantic meaning 347 other than for referencing the entry."; 348 } 350 leaf backup-index { 351 type string; 352 description 353 "A user-specified identifier utilised to uniquely 354 reference the backup next-hop entry in the NHLFE list. 355 The value of this index has no semantic meaning 356 other than for referencing the entry."; 357 } 359 leaf loadshare { 360 type uint16; 361 description 362 "This value is used to compute a loadshare to perform un-equal 363 load balancing when multiple outgoing next-hop(s) are 364 specified. A share is computed as a ratio of this number to the 365 total under all next-hops(s)."; 366 } 368 leaf role { 369 type nhlfe-role; 370 description "NHLFE role"; 371 } 372 uses nhlfe-simple-contents; 373 } 375 grouping interface-mpls_config { 376 description "MPLS interface contents grouping"; 377 leaf enabled { 378 type boolean; 379 description 380 "'true' if mpls encapsulation is enabled on the 381 interface. 'false' if mpls encapsulation is enabled 382 on the interface."; 383 } 384 leaf mtu { 385 type uint32; 386 description 387 "MPLS Maximum Transmission Unit (MTU)"; 388 } 389 } 391 grouping interfaces-mpls { 392 description "List of MPLS interfaces"; 393 list interface { 394 key "name"; 395 description "List of MPLS interfaces"; 396 leaf name { 397 type if:interface-ref; 398 description 399 "The name of a configured MPLS interface"; 400 } 401 container config { 402 description "Holds intended configuration"; 403 uses interface-mpls_config; 404 } 405 container state { 406 config false; 407 description "Holds inuse configuration"; 408 uses interface-mpls_config; 409 } 410 } 411 } 413 grouping label-block_config { 414 description "Label-block configuration items"; 415 leaf index { 416 type string; 417 description 418 "A user-specified identifier utilised to uniquely 419 reference the next-hop entry in the next-hop list. 420 The value of this index has no semantic meaning 421 other than for referencing the entry."; 422 } 423 leaf start-label { 424 type rt-types:mpls-label; 425 description "Label-block start"; 426 } 427 leaf end-label { 428 type rt-types:mpls-label; 429 description "Label-block end"; 430 } 431 leaf block-allocation-mode { 432 type identityref { 433 base label-block-alloc-mode; 434 } 435 description "Label-block allocation mode"; 436 } 437 } 439 grouping label-block_state { 440 description "Label-block state items"; 441 leaf free-labels-count { 442 when 443 "../block-allocation-mode = 'label-block-alloc-mode-manager'"; 444 type uint32; 445 description "Label-block free labels count"; 446 } 447 leaf inuse-labels-count { 448 when 449 "../block-allocation-mode = 'label-block-alloc-mode-manager'"; 450 type uint32; 451 description "Label-block inuse labels count"; 452 } 453 } 455 grouping globals_config { 456 description "MPLS global configuration leafs grouping"; 457 leaf ttl-propagate { 458 type boolean; 459 default 'true'; 460 description "Propagate TTL between IP and MPLS"; 461 } 462 } 464 grouping globals { 465 description "MPLS global configuration grouping"; 466 container config { 467 description "Holds intended configuration"; 468 uses globals_config; 469 } 470 container state { 471 config false; 472 description "Holds inuse configuration"; 473 uses globals_config; 474 } 475 } 476 grouping label-blocks { 477 description "Label-block allocation grouping"; 478 container label-blocks { 479 description "Label-block allocation container"; 480 list label-block { 481 must "start-label >= end-label" { 482 error-message "start-label can not be less than end-label"; 483 } 484 key index; 485 unique "start-label end-label"; 486 leaf index { 487 type leafref { 488 path "../config/index"; 489 } 490 description "Label-block index"; 491 } 492 leaf start-label { 493 type leafref { 494 path "../config/start-label"; 495 } 496 description 497 "Label-block start label reference"; 498 } 499 leaf end-label { 500 type leafref { 501 path "../config/end-label"; 502 } 503 description 504 "Label-block end label reference"; 505 } 506 description "List of MPLS label-blocks"; 507 container config { 508 description "Holds intended configuration"; 509 uses label-block_config; 510 } 511 container state { 512 config false; 513 description "Holds inuse configuration"; 514 uses label-block_config; 515 uses label-block_state; 516 } 517 } 518 } 519 } 521 augment "/rt:routing" { 522 description "MPLS augmentation."; 523 container mpls { 524 description 525 "MPLS container, to be used as an augmentation target node 526 other MPLS sub-features config, e.g. MPLS static LSP, MPLS 527 LDP LSPs, and Trafic Engineering MPLS LSP Tunnels, etc."; 529 uses globals; 530 uses label-blocks; 531 uses interfaces-mpls; 532 } 533 } 535 /* State data */ 536 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { 537 description 538 "This leaf augments an IPv4 unicast route."; 539 leaf local-label { 540 type rt-types:mpls-label; 541 description 542 "MPLS local label."; 543 } 544 } 546 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" 547 + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { 548 description 549 "Augment 'simple-next-hop' case in IPv4 unicast routes."; 550 uses nhlfe-simple-contents; 551 } 553 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" 554 + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" 555 + "rt:next-hop-list/rt:next-hop" { 556 description 557 "This leaf augments the 'next-hop-list' case of IPv4 unicast 558 routes."; 559 uses nhlfe-contents; 560 } 562 augment 563 "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input" { 564 description 565 "This augment adds the input parameter of the 'active-route' 566 action."; 567 uses nhlfe-contents; 568 } 570 augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" 571 + "rt:output/rt:route" { 572 description 573 "This augment adds the destination prefix to the reply of the 574 'active-route' action."; 575 uses nhlfe-contents; 576 } 578 } 579 581 Figure 2: MPLS base YANG module 583 2. IANA Considerations 585 This document registers the following URIs in the IETF XML registry 586 [RFC3688]. Following the format in [RFC3688], the following 587 registration is requested to be made. 589 URI: urn:ietf:params:xml:ns:yang:ietf-mpls XML: N/A, the requested 590 URI is an XML namespace. 592 This document registers a YANG module in the YANG Module Names 593 registry [RFC6020]. 595 name: ietf-mpls namespace: urn:ietf:params:xml:ns:yang:ietf-mpls 596 prefix: ietf-mpls reference: RFC3031 598 3. Security Considerations 600 The YANG module defined in this document is designed to be accessed 601 via the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 602 secure transport layer and the mandatory-to-implement secure 603 transport is SSH [RFC6242]. The NETCONF access control model 604 [RFC6536] provides means to restrict access for particular NETCONF 605 users to a pre-configured subset of all available NETCONF protocol 606 operations and content. 608 There are a number of data nodes defined in the YANG module which are 609 writable/creatable/deletable (i.e., config true, which is the 610 default). These data nodes may be considered sensitive or vulnerable 611 in some network environments. Write operations (e.g., ) 612 to these data nodes without proper protection can have a negative 613 effect on network operations. 615 4. References 617 4.1. Normative References 619 [RFC3031] Rosen, E., Viswanathan, A., and R. Callon, "Multiprotocol 620 Label Switching Architecture", RFC 3031, DOI 10.17487/ 621 RFC3031, January 2001, 622 . 624 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 625 DOI 10.17487/RFC3688, January 2004, 626 . 628 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 629 the Network Configuration Protocol (NETCONF)", RFC 6020, 630 DOI 10.17487/RFC6020, October 2010, 631 . 633 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 634 and A. Bierman, Ed., "Network Configuration Protocol 635 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 636 . 638 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 639 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 640 . 642 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 643 Protocol (NETCONF) Access Control Model", RFC 6536, DOI 644 10.17487/RFC6536, March 2012, 645 . 647 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 648 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 649 . 651 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 652 Management", RFC 8022, DOI 10.17487/RFC8022, November 653 2016, . 655 4.2. Informative References 657 [I-D.openconfig-netmod-opstate] 658 Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling 659 of Operational State Data in YANG", draft-openconfig- 660 netmod-opstate-01 (work in progress), July 2015. 662 Authors' Addresses 664 Tarek Saad 665 Cisco Systems Inc 667 Email: tsaad@cisco.com 668 Kamran Raza 669 Cisco Systems Inc 671 Email: skraza@cisco.com 673 Rakesh Gandhi 674 Cisco Systems Inc 676 Email: rgandhi@cisco.com 678 Xufeng Liu 679 Jabil 681 Email: Xufeng_Liu@jabil.com 683 Vishnu Pavan Beeram 684 Juniper Networks 686 Email: vbeeram@juniper.net 688 Himanshu Shah 689 Ciena 691 Email: tsaad@cisco.com 693 Igor Bryskin 694 Huawei Technologies 696 Email: Igor.Bryskin@huawei.com 698 Xia Chen 699 Huawei Technologies 701 Email: jescia.chenxia@huawei.com 703 Raqib Jones 704 Brocade 706 Email: raqib@Brocade.com 707 Bin Wen 708 Comcast 710 Email: Bin_Wen@cable.comcast.com