idnits 2.17.1 draft-ietf-mpls-base-yang-06.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 167 has weird spacing: '...o index uin...' == Line 177 has weird spacing: '...o index uin...' == Line 185 has weird spacing: '...- index uin...' == Line 194 has weird spacing: '...- index uin...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (February 15, 2018) is 2259 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 (~~), 6 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: August 19, 2018 Cisco Systems Inc 6 X. Liu 7 Jabil 8 V. Beeram 9 Juniper Networks 10 February 15, 2018 12 A YANG Data Model for MPLS Base 13 draft-ietf-mpls-base-yang-06 15 Abstract 17 This document contains a specification of the the MPLS base YANG 18 model. The MPLS base YANG module serves as a base framework for 19 configuring and managing an MPLS switching subsystem. It is expected 20 that other MPLS technology YANG models (e.g. MPLS LSP Static, LDP or 21 RSVP-TE models) will augment the MPLS base YANG model. 23 Status of This Memo 25 This Internet-Draft is submitted in full conformance with the 26 provisions of BCP 78 and BCP 79. 28 Internet-Drafts are working documents of the Internet Engineering 29 Task Force (IETF). Note that other groups may also distribute 30 working documents as Internet-Drafts. The list of current Internet- 31 Drafts is at https://datatracker.ietf.org/drafts/current/. 33 Internet-Drafts are draft documents valid for a maximum of six months 34 and may be updated, replaced, or obsoleted by other documents at any 35 time. It is inappropriate to use Internet-Drafts as reference 36 material or to cite them other than as "work in progress." 38 This Internet-Draft will expire on August 19, 2018. 40 Copyright Notice 42 Copyright (c) 2018 IETF Trust and the persons identified as the 43 document authors. All rights reserved. 45 This document is subject to BCP 78 and the IETF Trust's Legal 46 Provisions Relating to IETF Documents 47 (https://trustee.ietf.org/license-info) in effect on the date of 48 publication of this document. Please review these documents 49 carefully, as they describe your rights and restrictions with respect 50 to this document. Code Components extracted from this document must 51 include Simplified BSD License text as described in Section 4.e of 52 the Trust Legal Provisions and are provided without warranty as 53 described in the Simplified BSD License. 55 Table of Contents 57 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 58 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 59 1.1.1. Keywords . . . . . . . . . . . . . . . . . . . . . . 3 60 1.2. MPLS Base Tree Diagram . . . . . . . . . . . . . . . . . 3 61 1.3. MPLS Base Module . . . . . . . . . . . . . . . . . . . . 5 62 2. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 63 3. Security Considerations . . . . . . . . . . . . . . . . . . . 13 64 4. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 14 65 5. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 14 66 6. Normative References . . . . . . . . . . . . . . . . . . . . 14 67 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 69 1. Introduction 71 A core routing data model is defined in [RFC8022], and it provides a 72 basis for the development of data models for routing protocols. The 73 MPLS base model augments this model with additional data specific to 74 MPLS switching [RFC3031]. The interface data model is defined in 75 [RFC7223] and is used for referencing interface from the MPLS base 76 model. 78 The MPLS base YANG module augments the "routing" read-write (rw) and 79 "routing-state" read-only (ro) branches of the ietf-routing module 80 defined in [RFC8022]. 82 This document defines the specification for the "ietf-mpls" YANG 83 module that provides base components of the MPLS data model. It is 84 expected that other MPLS YANG modules will augment the "ietf-mpls" 85 base model to define data models for other MPLS technologies (e.g. 86 MPLS LDP or MPLS RSVP-TE). 88 This document also defines a way to model MPLS labelled routes as an 89 augmentation of the the routing RIB model defined in [RFC8022] for IP 90 prefix routes that are MPLS labelled. Other MPLS non-IP prefix 91 routes are also modelled by introducing a new "mpls" address-family 92 RIB. 94 1.1. Terminology 96 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 97 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 98 document are to be interpreted as described in BCP 14, RFC 2119 99 RFC2119}}. 101 1.1.1. Keywords 103 The following terms are defined in [RFC6020]: 105 o augment, 107 o configuration data, 109 o data model, 111 o data node, 113 o feature, 115 o mandatory node, 117 o module, 119 o schema tree, 121 o state data, 123 o RPC operation. 125 1.2. MPLS Base Tree Diagram 127 The MPLS base tree diagram is shown in Figure 1. 129 module: ietf-mpls 130 augment /rt:routing: 131 +--rw mpls 132 +--rw config 133 | +--rw ttl-propagate? boolean 134 +--ro state 135 | +--ro ttl-propagate? boolean 136 +--rw label-blocks 137 | +--rw label-block* [index] 138 | +--rw index -> ../config/index 139 | +--rw start-label? -> ../config/start-label 140 | +--rw end-label? -> ../config/end-label 141 | +--rw config 142 | | +--rw index? string 143 | | +--rw start-label? rt-types:mpls-label 144 | | +--rw end-label? rt-types:mpls-label 145 | | +--rw block-allocation-mode? identityref 146 | +--ro state 147 | +--ro index? string 148 | +--ro start-label? rt-types:mpls-label 149 | +--ro end-label? rt-types:mpls-label 150 | +--ro block-allocation-mode? identityref 151 | +--ro free-labels-count? uint32 152 | +--ro inuse-labels-count? uint32 153 +--rw interface* [name] 154 +--rw name if:interface-ref 155 +--rw config 156 | +--rw enabled? boolean 157 | +--rw mtu? uint32 158 +--ro state 159 +--ro enabled? boolean 160 +--ro mtu? uint32 161 augment /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route: 162 +--ro local-label? rt-types:mpls-label 163 augment 164 /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/rt:next-hop/ 165 rt:next-hop-options/rt:simple-next-hop: 166 +--ro remote-labels* [index] 167 +--ro index uint8 168 +--ro label? rt-types:mpls-label 169 augment 170 /rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/rt:next-hop/ 171 rt:next-hop-options/rt:next-hop-list/rt:next-hop-list/rt:next-hop: 172 +--ro index? string 173 +--ro backup-index? string 174 +--ro loadshare? uint16 175 +--ro role? nhlfe-role 176 +--ro remote-labels* [index] 177 +--ro index uint8 178 +--ro label? rt-types:mpls-label 179 augment /rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input: 180 +---- index? string 181 +---- backup-index? string 182 +---- loadshare? uint16 183 +---- role? nhlfe-role 184 +---- remote-labels* [index] 185 +---- index uint8 186 +---- label? rt-types:mpls-label 187 augment 188 /rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:output/rt:route: 189 +---- index? string 190 +---- backup-index? string 191 +---- loadshare? uint16 192 +---- role? nhlfe-role 193 +---- remote-labels* [index] 194 +---- index uint8 195 +---- label? rt-types:mpls-label 197 Figure 1: MPLS Base tree diagram 199 1.3. MPLS Base Module 201 file "ietf-mpls@2017-07-02.yang" 202 module ietf-mpls { 204 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls"; 206 prefix "mpls"; 208 import ietf-routing { 209 prefix "rt"; 210 } 212 import ietf-interfaces { 213 prefix "if"; 214 } 216 import ietf-routing-types { 217 prefix "rt-types"; 218 } 220 organization "IETF MPLS Working Group"; 222 contact 223 "WG Web: 225 WG List: 227 WG Chair: Loa Andersson 228 230 WG Chair: Ross Callon 231 233 WG Chair: George Swallow 234 236 Editor: Tarek Saad 237 239 Editor: Kamran Raza 240 242 Editor: Rakesh Gandhi 243 245 Editor: Xufeng Liu 246 248 Editor: Vishnu Pavan Beeram 249 251 Editor: Himanshu Shah 252 254 Editor: Igor Bryskin 255 257 Editor: Xia Chen 258 260 Editor: Raqib Jones 261 263 Editor: Bin Wen 264 "; 266 description 267 "This YANG module defines the essential components for the 268 management of the MPLS subsystem."; 270 revision "2017-07-02" { 271 description 272 "Latest revision: 273 - Addressed MPLS-RT review comments"; 274 reference "RFC 3031: A YANG Data Model for base MPLS"; 275 } 277 /* Identities */ 279 identity mpls { 280 base rt:address-family; 281 description 282 "This identity represents the MPLS address family."; 283 } 285 identity label-block-alloc-mode { 286 description 287 "Base identity label-block allocation mode"; 288 } 290 identity label-block-alloc-mode-manager { 291 base label-block-alloc-mode; 292 description 293 "Label block allocation on reserved block 294 is managed by label manager"; 295 } 297 identity label-block-alloc-mode-application { 298 base label-block-alloc-mode; 299 description 300 "Label block allocation on reserved block 301 is managed by application"; 302 } 304 typedef nhlfe-role { 305 type enumeration { 306 enum PRIMARY { 307 description 308 "Next-hop acts as primary traffic carrying"; 309 } 310 enum BACKUP { 311 description 312 "Next-hop acts as backup"; 313 } 314 enum PRIMARY_AND_BACKUP { 315 description 316 "Next-hop acts as primary and backup simultaneously"; 317 } 318 } 319 description "The next-hop role"; 320 } 322 grouping nhlfe-simple-contents { 323 description 324 "MPLS simple NHLFE contents"; 325 list remote-labels { 326 key "index"; 327 description "Remote label list"; 328 leaf index { 329 type uint8 { 330 range "0..255"; 331 } 332 description 333 "Index of the label. Index 0 indicates 334 top of the label stack"; 336 } 337 leaf label { 338 type rt-types:mpls-label; 339 description 340 "The outgoing MPLS labels to impose"; 341 } 342 } 343 } 345 grouping nhlfe-contents { 346 description 347 "MPLS NHLFE contents"; 348 leaf index { 349 type string; 350 description 351 "A user-specified identifier utilised to uniquely 352 reference the next-hop entry in the next-hop list. 353 The value of this index has no semantic meaning 354 other than for referencing the entry."; 355 } 357 leaf backup-index { 358 type string; 359 description 360 "A user-specified identifier utilised to uniquely 361 reference the backup next-hop entry in the NHLFE list. 362 The value of this index has no semantic meaning 363 other than for referencing the entry."; 364 } 366 leaf loadshare { 367 type uint16; 368 description 369 "This value is used to compute a loadshare to perform un-equal 370 load balancing when multiple outgoing next-hop(s) are 371 specified. A share is computed as a ratio of this number to the 372 total under all next-hops(s)."; 373 } 375 leaf role { 376 type nhlfe-role; 377 description "NHLFE role"; 378 } 379 uses nhlfe-simple-contents; 380 } 382 grouping interface-mpls_config { 383 description "MPLS interface contents grouping"; 384 leaf enabled { 385 type boolean; 386 description 387 "'true' if mpls encapsulation is enabled on the 388 interface. 'false' if mpls encapsulation is enabled 389 on the interface."; 390 } 391 leaf mtu { 392 type uint32; 393 description 394 "MPLS Maximum Transmission Unit (MTU)"; 395 } 396 } 398 grouping interfaces-mpls { 399 description "List of MPLS interfaces"; 400 list interface { 401 key "name"; 402 description "List of MPLS interfaces"; 403 leaf name { 404 type if:interface-ref; 405 description 406 "The name of a configured MPLS interface"; 407 } 408 container config { 409 description "Holds intended configuration"; 410 uses interface-mpls_config; 411 } 412 container state { 413 config false; 414 description "Holds inuse configuration"; 415 uses interface-mpls_config; 416 } 417 } 418 } 420 grouping label-block_config { 421 description "Label-block configuration items"; 422 leaf index { 423 type string; 424 description 425 "A user-specified identifier utilised to uniquely 426 reference the next-hop entry in the next-hop list. 427 The value of this index has no semantic meaning 428 other than for referencing the entry."; 429 } 430 leaf start-label { 431 type rt-types:mpls-label; 432 description "Label-block start"; 433 } 434 leaf end-label { 435 type rt-types:mpls-label; 436 description "Label-block end"; 437 } 438 leaf block-allocation-mode { 439 type identityref { 440 base label-block-alloc-mode; 441 } 442 description "Label-block allocation mode"; 443 } 444 } 446 grouping label-block_state { 447 description "Label-block state items"; 448 leaf free-labels-count { 449 when 450 "../block-allocation-mode = 'label-block-alloc-mode-manager'"; 451 type uint32; 452 description "Label-block free labels count"; 453 } 454 leaf inuse-labels-count { 455 when 456 "../block-allocation-mode = 'label-block-alloc-mode-manager'"; 457 type uint32; 458 description "Label-block inuse labels count"; 459 } 460 } 462 grouping globals_config { 463 description "MPLS global configuration leafs grouping"; 464 leaf ttl-propagate { 465 type boolean; 466 default 'true'; 467 description "Propagate TTL between IP and MPLS"; 468 } 469 } 471 grouping globals { 472 description "MPLS global configuration grouping"; 473 container config { 474 description "Holds intended configuration"; 475 uses globals_config; 476 } 477 container state { 478 config false; 479 description "Holds inuse configuration"; 480 uses globals_config; 481 } 482 } 483 grouping label-blocks { 484 description "Label-block allocation grouping"; 485 container label-blocks { 486 description "Label-block allocation container"; 487 list label-block { 488 must "start-label >= end-label" { 489 error-message "start-label can not be less than end-label"; 490 } 491 key index; 492 unique "start-label end-label"; 493 leaf index { 494 type leafref { 495 path "../config/index"; 496 } 497 description "Label-block index"; 498 } 499 leaf start-label { 500 type leafref { 501 path "../config/start-label"; 502 } 503 description 504 "Label-block start label reference"; 505 } 506 leaf end-label { 507 type leafref { 508 path "../config/end-label"; 509 } 510 description 511 "Label-block end label reference"; 512 } 513 description "List of MPLS label-blocks"; 514 container config { 515 description "Holds intended configuration"; 516 uses label-block_config; 517 } 518 container state { 519 config false; 520 description "Holds inuse configuration"; 521 uses label-block_config; 522 uses label-block_state; 523 } 524 } 525 } 526 } 527 augment "/rt:routing" { 528 description "MPLS augmentation."; 529 container mpls { 530 description 531 "MPLS container, to be used as an augmentation target node 532 other MPLS sub-features config, e.g. MPLS static LSP, MPLS 533 LDP LSPs, and Trafic Engineering MPLS LSP Tunnels, etc."; 534 uses globals; 535 uses label-blocks; 536 uses interfaces-mpls; 537 } 538 } 540 /* State data */ 541 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" { 542 description 543 "This leaf augments an IPv4 unicast route."; 544 leaf local-label { 545 type rt-types:mpls-label; 546 description 547 "MPLS local label."; 548 } 549 } 551 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" 552 + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { 553 description 554 "Augment 'simple-next-hop' case in IPv4 unicast routes."; 555 uses nhlfe-simple-contents; 556 } 558 augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/" 559 + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" 560 + "rt:next-hop-list/rt:next-hop" { 561 description 562 "This leaf augments the 'next-hop-list' case of IPv4 unicast 563 routes."; 564 uses nhlfe-contents; 565 } 567 augment 568 "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input" { 569 description 570 "This augment adds the input parameter of the 'active-route' 571 action."; 572 uses nhlfe-contents; 573 } 574 augment "/rt:routing-state/rt:ribs/rt:rib/rt:active-route/" 575 + "rt:output/rt:route" { 576 description 577 "This augment adds the destination prefix to the reply of the 578 'active-route' action."; 579 uses nhlfe-contents; 580 } 581 } 582 584 Figure 2: MPLS base YANG module 586 2. IANA Considerations 588 This document registers the following URIs in the IETF XML registry 589 [RFC3688]. Following the format in [RFC3688], the following 590 registration is requested to be made. 592 URI: urn:ietf:params:xml:ns:yang:ietf-mpls XML: N/A, the requested 593 URI is an XML namespace. 595 This document registers a YANG module in the YANG Module Names 596 registry [RFC6020]. 598 name: ietf-mpls namespace: urn:ietf:params:xml:ns:yang:ietf-mpls 599 prefix: ietf-mpls reference: RFC3031 601 3. Security Considerations 603 The YANG module defined in this document is designed to be accessed 604 via the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 605 secure transport layer and the mandatory-to-implement secure 606 transport is SSH [RFC6242]. The NETCONF access control model 607 [RFC6536] provides means to restrict access for particular NETCONF 608 users to a pre-configured subset of all available NETCONF protocol 609 operations and content. 611 There are a number of data nodes defined in the YANG module which are 612 writable/creatable/deletable (i.e., config true, which is the 613 default). These data nodes may be considered sensitive or vulnerable 614 in some network environments. Write operations (e.g., ) 615 to these data nodes without proper protection can have a negative 616 effect on network operations. 618 4. Acknowledgement 620 The authors would like to thank the members of the multi-vendor YANG 621 design team who are involved in the definition of this model. 623 5. Contributors 625 Igor Bryskin 626 Huawei Technologies 627 email: Igor.Bryskin@huawei.com 629 Himanshu Shah 630 Ciena 631 email: hshah@ciena.com 633 6. Normative References 635 [RFC3031] Rosen, E., Viswanathan, A., and R. Callon, "Multiprotocol 636 Label Switching Architecture", RFC 3031, 637 DOI 10.17487/RFC3031, January 2001, 638 . 640 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 641 DOI 10.17487/RFC3688, January 2004, 642 . 644 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 645 the Network Configuration Protocol (NETCONF)", RFC 6020, 646 DOI 10.17487/RFC6020, October 2010, 647 . 649 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 650 and A. Bierman, Ed., "Network Configuration Protocol 651 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 652 . 654 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 655 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 656 . 658 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 659 Protocol (NETCONF) Access Control Model", RFC 6536, 660 DOI 10.17487/RFC6536, March 2012, 661 . 663 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 664 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 665 . 667 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 668 Management", RFC 8022, DOI 10.17487/RFC8022, November 669 2016, . 671 Authors' Addresses 673 Tarek Saad 674 Cisco Systems Inc 676 Email: tsaad@cisco.com 678 Kamran Raza 679 Cisco Systems Inc 681 Email: skraza@cisco.com 683 Rakesh Gandhi 684 Cisco Systems Inc 686 Email: rgandhi@cisco.com 688 Xufeng Liu 689 Jabil 691 Email: Xufeng_Liu@jabil.com 693 Vishnu Pavan Beeram 694 Juniper Networks 696 Email: vbeeram@juniper.net