idnits 2.17.1 draft-ietf-mpls-base-yang-15.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 (August 17, 2020) is 1341 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) No issues found here. Summary: 0 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 Juniper Networks 4 Intended status: Standards Track K. Raza 5 Expires: February 18, 2021 R. Gandhi 6 Cisco Systems Inc 7 X. Liu 8 Volta Networks 9 V. Beeram 10 Juniper Networks 11 August 17, 2020 13 A YANG Data Model for MPLS Base 14 draft-ietf-mpls-base-yang-15 16 Abstract 18 This document contains a specification of the MPLS base YANG model. 19 The MPLS base YANG model serves as a base framework for configuring 20 and managing an MPLS switching subsystem on an MPLS-enabled router. 21 It is expected that other MPLS YANG models (e.g. MPLS Label Switched 22 Path (LSP) Static, LDP or RSVP-TE YANG models) will augment the MPLS 23 base YANG model. 25 Status of This Memo 27 This Internet-Draft is submitted in full conformance with the 28 provisions of BCP 78 and BCP 79. 30 Internet-Drafts are working documents of the Internet Engineering 31 Task Force (IETF). Note that other groups may also distribute 32 working documents as Internet-Drafts. The list of current Internet- 33 Drafts is at https://datatracker.ietf.org/drafts/current/. 35 Internet-Drafts are draft documents valid for a maximum of six months 36 and may be updated, replaced, or obsoleted by other documents at any 37 time. It is inappropriate to use Internet-Drafts as reference 38 material or to cite them other than as "work in progress." 40 This Internet-Draft will expire on February 18, 2021. 42 Copyright Notice 44 Copyright (c) 2020 IETF Trust and the persons identified as the 45 document authors. All rights reserved. 47 This document is subject to BCP 78 and the IETF Trust's Legal 48 Provisions Relating to IETF Documents 49 (https://trustee.ietf.org/license-info) in effect on the date of 50 publication of this document. Please review these documents 51 carefully, as they describe your rights and restrictions with respect 52 to this document. Code Components extracted from this document must 53 include Simplified BSD License text as described in Section 4.e of 54 the Trust Legal Provisions and are provided without warranty as 55 described in the Simplified BSD License. 57 Table of Contents 59 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 60 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 61 1.2. Acronyms and Abbreviations . . . . . . . . . . . . . . . 3 62 2. MPLS Base Model . . . . . . . . . . . . . . . . . . . . . . . 4 63 2.1. Model Overview . . . . . . . . . . . . . . . . . . . . . 4 64 2.2. Model Organization . . . . . . . . . . . . . . . . . . . 4 65 2.3. Model Design . . . . . . . . . . . . . . . . . . . . . . 6 66 2.4. Model Tree Diagram . . . . . . . . . . . . . . . . . . . 7 67 2.5. Model YANG Module . . . . . . . . . . . . . . . . . . . . 8 68 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 69 4. Security Considerations . . . . . . . . . . . . . . . . . . . 19 70 5. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 19 71 6. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 19 72 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 73 7.1. Normative References . . . . . . . . . . . . . . . . . . 20 74 7.2. Informative References . . . . . . . . . . . . . . . . . 21 75 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 77 1. Introduction 79 A core routing data model is defined in [RFC8349], and it provides a 80 basis for the development of routing data models for specific Address 81 Families (AFs). Specifically, [RFC8349] defines a model for a 82 generic Routing Information Base (RIB) that is Address-Family (AF) 83 agnostic. [RFC8349] also defines two instances of RIBs based on the 84 generic RIB model for IPv4 and IPv6 AFs. 86 The MPLS base model that is defined in this document augments the 87 generic RIB model defined in [RFC8349] with additional data that 88 enables MPLS forwarding for the specific destination prefix(es) 89 present in the AF RIB(s) as described in the MPLS architecture 90 document [RFC3031]. 92 The MPLS base model also defines a new instance of the generic RIB 93 model as defined in {!RFC8349}} to store native MPLS routes. The 94 native MPLS RIB instance stores route(s) that are not associated with 95 other AF instance RIBs (such as IPv4, or IPv6 instance RIB(s)), but 96 are enabled for MPLS forwarding. Examples of such native MPLS routes 97 are routes programmed by RSVP on transit MPLS router(s) along the 98 path of a Label Switched Path (LSP). Other example(s) are MPLS 99 routes that cross-connect to specific Layer-2 adjacencies, such as 100 Layer-2 Attachment Circuit(s) (ACs)), or Layer-3 adjacencies, such as 101 Segment-Routing (SR) Adjacency Segments (Adj-SIDs) described in 102 [RFC8402]. 104 The MPLS base model serves as a basis for future development of MPLS 105 data models covering more-sophisticated MPLS feature(s) and sub- 106 system(s). The main purpose is to provide essential building blocks 107 for other models involving different control-plane protocols, and 108 MPLS functions. 110 To this end, it is expected that the MPLS base data model will be 111 augmented by a number of other modules developed at IETF (e.g. by 112 TEAS and MPLS working groups). 114 The YANG module in this document conforms to the Network Management 115 Datastore Architecture (NMDA) [RFC8342]. 117 1.1. Terminology 119 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 120 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 121 "OPTIONAL" in this document are to be interpreted as described in BCP 122 14 [RFC2119] [RFC8174] when, and only when, they appear in all 123 capitals, as shown here. 125 The terminology for describing YANG data models is found in 126 [RFC7950]. 128 1.2. Acronyms and Abbreviations 130 MPLS: Multiprotocol Label Switching 132 RIB: Routing Information Base 134 LSP: Label Switched Path 136 LSR: Label Switching Router 138 LER: Label Edge Router 140 FEC: Forwarding Equivalence Class 142 NHLFE: Next Hop Label Forwarding Entry 144 ILM: Incoming Label Map 146 2. MPLS Base Model 148 This document describes the 'ietf-mpls' YANG module that provides 149 base components of the MPLS data model. It is expected that other 150 MPLS YANG modules will augment 'ietf-mpls' module for other MPLS 151 extension to provision Label Switched Paths (LSPs) (e.g. MPLS 152 Static, MPLS LDP or MPLS RSVP-TE LSP(s)). 154 2.1. Model Overview 156 This document models MPLS labeled routes as an augmentation of the 157 generic routing RIB data model as defined in [RFC8349]. For example, 158 IP prefix routes (e.g. routes stored in IPv4 or IPv6 RIBs) are 159 augmented to carry additional data to enable it for MPLS forwarding. 161 This document also defines a new instance of the generic RIB defined 162 in [RFC8349] to store native MPLS route(s) (described further in 163 Section 2.3) by extending the identity 'address-family' defined in 164 [RFC8349] with a new "mpls" identity as suggested in Section 3 of 165 [RFC8349]. 167 2.2. Model Organization 169 Routing module +---------------+ v: import 170 | ietf-routing | o: augment 171 +---------------+ 172 o 173 | 174 v 175 MPLS base +-----------+ v: import 176 module | ietf-mpls | o: augment 177 +-----------+ 178 o o------+ 179 | \ 180 v v 181 +-------------------+ +---------------------+ 182 MPLS Static | ietf-mpls-static@ | | ietf-mpls-ldp.yang@ | . . 183 LSP module +-------------------+ +---------------------+ 185 @: not in this document, shown for illustration only 187 Figure 1: Relationship between MPLS modules 189 The 'ietf-mpls' module defines the following identities: 191 mpls: 193 This identity extends the 'address-family' identity for RIB 194 instance(s) identity as defined in [RFC8349] to represent the 195 native MPLS RIB instance. 197 label-block-alloc-mode: 199 A base YANG identity for supported label block allocation mode(s). 201 The ietf-mpls module contains the following high-level types and 202 groupings: 204 mpls-operations-type: 206 An enumeration type that represents support possible MPLS 207 operation types (impose-and-forward, pop-and-forward, pop-impose- 208 and-forward, and pop-and-lookup) 210 nhlfe-role: 212 An enumeration type that represents the role of the NHLFE entry. 214 nhlfe-single-contents: 216 A YANG grouping that describes single NHLFE and its associated 217 parameters as described in the MPLS architecture document 218 [RFC3031]. 220 nhlfe-multiple-contents: 222 A YANG grouping that describes a set of NHLFE(s) and their 223 associated parameters as described in the MPLS architecture 224 document [RFC3031]. 226 interfaces-mpls: 228 A YANG grouping that describes the list of MPLS enabled interfaces 229 on a device. 231 label-blocks: 233 A YANG grouping that describes the list of assigned MPLS label 234 blocks and their properties. 236 rib-mpls-properties: 238 A YANG grouping for the augmentation of MPLS label forwarding data 239 to the generic RIB as defined in [RFC3031]. 241 rib-active-route-mpls-input: 243 A YANG grouping for the augmentation to the 'active-route' RPC 244 that is specific to the MPLS RIB instance. 246 2.3. Model Design 248 The MPLS routing model is based on the core routing data model 249 defined in [RFC8349]. Figure 2 shows the extensions introduced by 250 the MPLS base model on defined RIB(s). 252 +-----------------+ 253 | MPLS base model | 254 +-----------------+ 255 ____/ | |_____ |________ 256 / | \ \ 257 / | \ \ 258 o o o + 259 +---------+ +---------+ +--------+ +-----------+ 260 | RIB(v4) | | RIB(v6) | | RIB(x) | | RIB(mpls) | 261 +---------+ +---------+ +--------+ +-----------+ 263 +: created by the MPLS base model 264 o: augmented by the MPLS base model 266 Figure 2: Relationship between MPLS model and RIB instances 268 As shown in Figure 2, the MPLS base YANG model augments defined 269 instance(s) of AF RIB(s) with additional data that enables MPLS 270 forwarding for destination prefix(es) store in such RIB(s). For 271 example, an IPv4 prefix stored in RIB(v4) is augmented to carry a 272 MPLS local label and per next-hop remote label(s) to enable MPLS 273 forwarding for such prefix. 275 The MPLS base model also creates a separate instance of the generic 276 RIB model defined in [RFC8349] to store MPLS native route(s) that are 277 enabled for MPLS forwarding, but not stored in other AF RIB(s). 279 Some examples of such native MPLS routes are: 281 o routes programmed by RSVP on Label Switched Router(s) (LSRs) along 282 the path of a Label Switched Path (LSP), 284 o routes that cross-connect an MPLS local label to a Layer-2, or 285 Layer-3 VRF, 287 o routes that cross-connect an MPLS local label to a specific 288 Layer-2 adjacency or interface, such as Layer-2 Attachment 289 Circuit(s) (ACs), or 291 o routes that cross-connect an MPLS local label to a Layer-3 292 adjacency or interface - such as MPLS Segment-Routing (SR) 293 Adjecency Segments (Adj-SIDs), SR MPLS Binding SIDs, etc. as 294 defined in [RFC8402]. 296 2.4. Model Tree Diagram 298 The MPLS base tree diagram that follows the notation defined in 299 [RFC8340] is shown in Figure 3. 301 module: ietf-mpls 302 augment /rt:routing: 303 +--rw mpls {mpls}? 304 +--rw ttl-propagate? boolean 305 +--rw label-blocks 306 | +--rw label-block* [index] 307 | +--rw index string 308 | +--rw start-label? rt-types:mpls-label 309 | +--rw end-label? rt-types:mpls-label 310 | +--rw block-allocation-mode? identityref 311 | +--ro free-labels-count? yang:counter32 312 | +--ro inuse-labels-count? yang:counter32 313 +--rw interface* [name] 314 +--rw name if:interface-ref 315 +--rw enabled? boolean 316 +--rw maximum-labeled-packet? uint32 317 augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route: 318 +--ro mpls-enabled? boolean {mpls}? 319 +--ro local-label? rt-types:mpls-label {mpls}? 320 +--ro destination-prefix? -> ../local-label {mpls}? 321 +--ro route-context? string {mpls}? 322 augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rt:next-hop 323 /rt:next-hop-options/rt:simple-next-hop: 324 +--ro mpls-label-stack 325 +--ro entry* [id] 326 +--ro id uint8 327 +--ro label? rt-types:mpls-label 328 +--ro ttl? uint8 329 +--ro traffic-class? uint8 330 augment /rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/rt:next-hop 331 /rt:next-hop-options/rt:next-hop-list/rt:next-hop-list 332 /rt:next-hop: 333 +--ro index? string 334 +--ro backup-index? string 335 +--ro loadshare? uint16 336 +--ro role? nhlfe-role 337 +--ro mpls-label-stack 338 +--ro entry* [id] 339 +--ro id uint8 340 +--ro label? rt-types:mpls-label 341 +--ro ttl? uint8 342 +--ro traffic-class? uint8 343 augment /rt:routing/rt:ribs/rt:rib/rt:active-route/rt:input: 344 +---w destination-address? -> ../local-label 345 +---w local-label? rt-types:mpls-label 346 augment /rt:routing/rt:ribs/rt:rib/rt:active-route/rt:output 347 /rt:route/rt:next-hop/rt:next-hop-options 348 /rt:simple-next-hop: 349 +-- mpls-label-stack 350 +-- entry* [id] 351 +-- id uint8 352 +-- label? rt-types:mpls-label 353 +-- ttl? uint8 354 +-- traffic-class? uint8 355 augment /rt:routing/rt:ribs/rt:rib/rt:active-route/rt:output 356 /rt:route/rt:next-hop/rt:next-hop-options 357 /rt:next-hop-list/rt:next-hop-list/rt:next-hop: 358 +-- index? string 359 +-- backup-index? string 360 +-- loadshare? uint16 361 +-- role? nhlfe-role 362 +-- mpls-label-stack 363 +-- entry* [id] 364 +-- id uint8 365 +-- label? rt-types:mpls-label 366 +-- ttl? uint8 367 +-- traffic-class? uint8 369 Figure 3: MPLS Base tree diagram 371 2.5. Model YANG Module 373 This section describes the "ietf-mpls" YANG module that provides base 374 components of the MPLS data model. Other YANG module(s) may import 375 and augment the base MPLS module to add feature specific data. 377 The ietf-mpls module imports the following modules: 379 o ietf-routing defined in [RFC8349] 381 o ietf-routing-types defined in [RFC8294] 382 o ietf-interfaces defined in [RFC8343] 384 This model also references the following RFCs in defining the types 385 and YANG grouping of the YANG module: [RFC3032], [RFC3031], and 386 [RFC7424]. 388 file "ietf-mpls@2020-08-17.yang" 389 module ietf-mpls { 390 yang-version 1.1; 391 namespace "urn:ietf:params:xml:ns:yang:ietf-mpls"; 393 /* Replace with IANA when assigned */ 395 prefix mpls; 397 import ietf-routing { 398 prefix rt; 399 reference 400 "RFC8349: A YANG Data Model for Routing Management"; 401 } 402 import ietf-routing-types { 403 prefix rt-types; 404 reference 405 "RFC8294:Common YANG Data Types for the Routing Area"; 406 } 407 import ietf-yang-types { 408 prefix yang; 409 reference 410 "RFC6991: Common YANG Data Types"; 411 } 412 import ietf-interfaces { 413 prefix if; 414 reference 415 "RFC8343: A YANG Data Model for Interface Management"; 416 } 418 organization 419 "IETF MPLS Working Group"; 420 contact 421 "WG Web: 423 WG List: 425 Editor: Tarek Saad 426 428 Editor: Kamran Raza 429 431 Editor: Rakesh Gandhi 432 434 Editor: Xufeng Liu 435 437 Editor: Vishnu Pavan Beeram 438 "; 439 description 440 "This YANG module defines the essential components for the 441 management of the MPLS subsystem. The model fully conforms 442 to the Network Management Datastore Architecture (NMDA). 444 Copyright (c) 2018 IETF Trust and the persons 445 identified as authors of the code. All rights reserved. 447 Redistribution and use in source and binary forms, with or 448 without modification, is permitted pursuant to, and subject 449 to the license terms contained in, the Simplified BSD License 450 set forth in Section 4.c of the IETF Trust's Legal Provisions 451 Relating to IETF Documents 452 (https://trustee.ietf.org/license-info). 453 This version of this YANG module is part of RFC XXXX; see 454 the RFC itself for full legal notices."; 456 // RFC Ed.: replace XXXX with actual RFC number and remove this 457 // note. 458 // RFC Ed.: update the date below with the date of RFC publication 459 // and remove this note. 461 revision 2020-08-17 { 462 description 463 "Initial revision."; 464 reference 465 "RFC XXXX: A YANG Data Model for base MPLS"; 466 } 468 feature mpls { 469 description 470 "Indicates support for MPLS switching."; 471 reference 472 "RFC3031"; 473 } 475 /* Identities */ 477 identity mpls { 478 base rt:address-family; 479 description 480 "This identity represents the MPLS address family."; 481 } 483 identity label-block-alloc-mode { 484 description 485 "Base identity label-block allocation mode."; 486 } 488 identity label-block-alloc-mode-manager { 489 base label-block-alloc-mode; 490 description 491 "Label block allocation on reserved block 492 is managed by label manager."; 493 } 495 identity label-block-alloc-mode-application { 496 base label-block-alloc-mode; 497 description 498 "Label block allocation on reserved block 499 is managed by application."; 500 } 502 /** 503 * Typedefs 504 */ 506 typedef mpls-operations-type { 507 type enumeration { 508 enum impose-and-forward { 509 description 510 "Operation impose outgoing label(s) and forward to 511 next-hop."; 512 } 513 enum pop-and-forward { 514 description 515 "Operation pop incoming label and forward to next-hop."; 516 } 517 enum pop-impose-and-forward { 518 description 519 "Operation pop incoming label, impose one or more 520 outgoing label(s) and forward to next-hop."; 521 } 522 enum swap-and-forward { 523 description 524 "Operation swap incoming label, with outgoing label and 525 forward to next-hop."; 526 } 527 enum pop-and-lookup { 528 description 529 "Operation pop incoming label and perform a lookup."; 530 } 531 } 532 description 533 "MPLS operations types."; 534 } 536 typedef nhlfe-role { 537 type enumeration { 538 enum PRIMARY { 539 description 540 "Next-hop acts as primary traffic carrying."; 541 } 542 enum BACKUP { 543 description 544 "Next-hop acts as backup."; 545 } 546 enum PRIMARY_AND_BACKUP { 547 description 548 "Next-hop acts as primary and backup simultaneously."; 549 } 550 } 551 description 552 "The next-hop role."; 553 } 555 grouping nhlfe-single-contents { 556 description 557 "MPLS simple NHLFE contents."; 558 uses rt-types:mpls-label-stack; 559 } 561 grouping nhlfe-multiple-contents { 562 description 563 "MPLS NHLFE contents."; 564 leaf index { 565 type string; 566 description 567 "A user-specified identifier utilised to uniquely 568 reference the next-hop entry in the next-hop list. 569 The value of this index has no semantic meaning 570 other than for referencing the entry."; 571 } 572 leaf backup-index { 573 type string; 574 description 575 "A user-specified identifier utilised to uniquely 576 reference the backup next-hop entry in the NHLFE list. 577 The value of this index has no semantic meaning 578 other than for referencing the entry."; 579 } 580 leaf loadshare { 581 type uint16; 582 description 583 "This value is used to compute a loadshare to perform un-equal 584 load balancing when multiple outgoing next-hop(s) are 585 specified. A share is computed as a ratio of this number to the 586 total under all next-hops(s)."; 587 reference 588 "RFC7424, section 5.4, 589 RFC3031, section 3.11 and 3.12."; 590 } 591 leaf role { 592 type nhlfe-role; 593 description 594 "NHLFE role."; 595 } 596 uses nhlfe-single-contents; 597 } 599 grouping interfaces-mpls { 600 description 601 "List of MPLS interfaces."; 602 list interface { 603 key "name"; 604 description 605 "List of MPLS interfaces."; 606 leaf name { 607 type if:interface-ref; 608 description 609 "The name of a configured MPLS interface."; 610 } 611 leaf enabled { 612 type boolean; 613 description 614 "'true' if mpls encapsulation is enabled on the interface. 615 'false' if mpls encapsulation is disabled on the interface."; 616 } 617 leaf maximum-labeled-packet { 618 type uint32; 619 units "octets"; 620 description 621 "Maximum labeled packet size."; 622 reference 623 "RFC3032, section 3.2."; 624 } 625 } 626 } 628 grouping globals { 629 description 630 "MPLS global configuration grouping."; 631 leaf ttl-propagate { 632 type boolean; 633 default "true"; 634 description 635 "Propagate TTL between IP and MPLS."; 636 } 637 } 639 grouping label-blocks { 640 description 641 "Label-block allocation grouping."; 642 container label-blocks { 643 description 644 "Label-block allocation container."; 645 list label-block { 646 key "index"; 647 unique "start-label end-label"; 648 description 649 "List of MPLS label-blocks."; 650 leaf index { 651 type string; 652 description 653 "A user-specified identifier utilised to uniquely 654 reference an MPLS label block."; 655 } 656 leaf start-label { 657 type rt-types:mpls-label; 658 must '. >= ../end-label' { 659 error-message "The start-label must be less than or equal " 660 + "to end-label"; 661 } 662 description 663 "Label-block start."; 664 } 665 leaf end-label { 666 type rt-types:mpls-label; 667 must '. <= ../start-label' { 668 error-message "The end-label must be greater than or equal " 669 + "to start-label"; 670 } 671 description 672 "Label-block end."; 673 } 674 leaf block-allocation-mode { 675 type identityref { 676 base label-block-alloc-mode; 677 } 678 description 679 "Label-block allocation mode."; 680 } 681 leaf free-labels-count { 682 when "derived-from-or-self(../block-allocation-mode, " 683 + "'mpls:label-block-alloc-mode-manager')"; 684 type yang:counter32; 685 config false; 686 description 687 "Label-block free labels count."; 688 } 689 leaf inuse-labels-count { 690 when "derived-from-or-self(../block-allocation-mode, " 691 + "'mpls:label-block-alloc-mode-manager')"; 692 type yang:counter32; 693 config false; 694 description 695 "Label-block inuse labels count."; 696 } 697 } 698 } 699 } 701 grouping rib-mpls-properties { 702 description 703 "A grouping of native MPLS RIB properties."; 704 leaf destination-prefix { 705 type leafref { 706 path "../local-label"; 707 } 708 description 709 "MPLS destination prefix."; 710 } 711 leaf route-context { 712 type string; 713 description 714 "A context associated with the native MPLS route."; 715 } 716 } 718 grouping rib-active-route-mpls-input { 719 description 720 "A grouping applicable to native MPLS RIB 'active-route' 721 RPC input augmentation."; 722 leaf destination-address { 723 type leafref { 724 path "../local-label"; 725 } 726 description 727 "MPLS native active route destination."; 728 } 729 leaf local-label { 730 type rt-types:mpls-label; 731 description 732 "MPLS local label."; 733 } 734 } 736 augment "/rt:routing" { 737 if-feature "mpls"; 738 description 739 "MPLS augmentation."; 740 container mpls { 741 description 742 "MPLS container, to be used as an augmentation target node 743 other MPLS sub-features config, e.g. MPLS static LSP, MPLS 744 LDP LSPs, and Trafic Engineering MPLS LSP Tunnels, etc."; 745 uses globals; 746 uses label-blocks; 747 uses interfaces-mpls; 748 } 749 } 751 /* MPLS routes augmentation */ 753 augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" { 754 if-feature "mpls"; 755 description 756 "This augmentation is applicable to all MPLS routes."; 757 leaf mpls-enabled { 758 type boolean; 759 default "false"; 760 description 761 "Indicates whether MPLS is enabled for this route."; 762 } 763 leaf local-label { 764 when "../mpls-enabled = 'true'"; 765 type rt-types:mpls-label; 766 description 767 "MPLS local label associated with the route."; 768 } 769 uses rib-mpls-properties { 770 /* MPLS AF aaugmentation to native MPLS RIB */ 771 when "derived-from-or-self(../../rt:address-family, " 772 + "'mpls:mpls')" { 773 description 774 "This augment is valid only for routes of native MPLS 775 RIB."; 776 } 777 } 778 } 780 /* MPLS simple-next-hop augmentation */ 782 augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/" 783 + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { 784 description 785 "Augment 'simple-next-hop' case in IP unicast routes."; 786 uses nhlfe-single-contents { 787 when "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" 788 + "/mpls:mpls-enabled = 'true'"; 789 } 790 } 792 /* MPLS next-hop-list augmentation */ 794 augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route/" 795 + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" 796 + "rt:next-hop-list/rt:next-hop" { 797 description 798 "This leaf augments the 'next-hop-list' case of IP unicast 799 routes."; 800 uses nhlfe-multiple-contents { 801 when "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" 802 + "/mpls:mpls-enabled = 'true'"; 803 } 804 } 806 /* MPLS RPC input augmentation */ 808 augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/rt:input" { 809 description 810 "Input MPLS augmentation for the 'active-route' action 811 statement."; 812 uses rib-active-route-mpls-input { 813 /* MPLS AF aaugmentation to native MPLS RIB */ 814 when "derived-from-or-self(../rt:address-family, " 815 + "'mpls:mpls')" { 816 description 817 "This augment is valid only for routes of native MPLS 818 RIB."; 819 } 820 } 821 } 823 /* MPLS RPC output augmentation */ 825 augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/" 826 + "rt:output/rt:route/" 827 + "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" { 828 description 829 "Output MPLS augmentation for the 'active-route' action 830 statement."; 831 uses nhlfe-single-contents; 832 } 834 augment "/rt:routing/rt:ribs/rt:rib/rt:active-route/" 835 + "rt:output/rt:route/" 836 + "rt:next-hop/rt:next-hop-options/rt:next-hop-list/" 837 + "rt:next-hop-list/rt:next-hop" { 838 description 839 "Output MPLS augmentation for the 'active-route' action 840 statement."; 841 uses nhlfe-multiple-contents; 842 } 843 } 844 846 Figure 4: MPLS base YANG module 848 3. IANA Considerations 850 This document registers the following URIs in the IETF XML registry 851 [RFC3688]. Following the format in [RFC3688], the following 852 registration is requested to be made. 854 URI: urn:ietf:params:xml:ns:yang:ietf-mpls 855 Registrant Contact: The MPLS WG of the IETF. 856 XML: N/A, the requested URI is an XML namespace. 858 This document registers a YANG module in the YANG Module Names 859 registry [RFC6020]. 861 name: ietf-mpls 862 namespace: urn:ietf:params:xml:ns:yang:ietf-mpls 863 prefix: mpls 864 // RFC Ed.: replace XXXX with RFC number and remove this note 865 reference: RFCXXXX 867 4. Security Considerations 869 The YANG modules specified in this document define a schema for data 870 that is designed to be accessed via network management protocols such 871 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 872 is the secure transport layer, and the mandatory-to-implement secure 873 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 874 is HTTPS, and the mandatory-to-implement secure transport is TLS 875 [RFC8446]. 877 The NETCONF access control model [RFC8341] provides the means to 878 restrict access for particular NETCONF or RESTCONF users to a 879 preconfigured subset of all available NETCONF or RESTCONF protocol 880 operations and content. 882 Some of the readable data nodes in these YANG modules may be 883 considered sensitive or vulnerable in some network environments. It 884 is thus important to control read access (e.g., via get, get-config, 885 or notification) to these data nodes. These are the subtrees and 886 data nodes and their sensitivity/vulnerability: 888 /rt:routing/rt:ribs/rt:rib/rt:active-route/rt:output/rt:route: this 889 path is augmented by additional MPLS leaf(s) defined in this model. 890 Access to this information may disclose the per prefix and/or other 891 information. 893 /rt:routing/rt:ribs/rt:rib/rt:active-route/rt:output/rt:route/ 894 rt:next-hop/rt:next-hop-options/rt:simple-next-hop: this path is 895 augmented by additional MPLS leaf(s) defined in this model. Access 896 to this information may disclose the next-hop or path per prefix and/ 897 or other information. 899 5. Acknowledgement 901 The authors would like to thank the members of the multi-vendor YANG 902 design team who are involved in the definition of this model. 904 6. Contributors 905 Igor Bryskin 906 Huawei Technologies 907 email: Igor.Bryskin@huawei.com 909 Himanshu Shah 910 Ciena 911 email: hshah@ciena.com 913 7. References 915 7.1. Normative References 917 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 918 Requirement Levels", BCP 14, RFC 2119, 919 DOI 10.17487/RFC2119, March 1997, 920 . 922 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 923 DOI 10.17487/RFC3688, January 2004, 924 . 926 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 927 the Network Configuration Protocol (NETCONF)", RFC 6020, 928 DOI 10.17487/RFC6020, October 2010, 929 . 931 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 932 and A. Bierman, Ed., "Network Configuration Protocol 933 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 934 . 936 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 937 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 938 . 940 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 941 RFC 7950, DOI 10.17487/RFC7950, August 2016, 942 . 944 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 945 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 946 . 948 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 949 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 950 May 2017, . 952 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 953 "Common YANG Data Types for the Routing Area", RFC 8294, 954 DOI 10.17487/RFC8294, December 2017, 955 . 957 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 958 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 959 . 961 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 962 Access Control Model", STD 91, RFC 8341, 963 DOI 10.17487/RFC8341, March 2018, 964 . 966 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 967 and R. Wilton, "Network Management Datastore Architecture 968 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 969 . 971 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 972 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 973 . 975 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 976 Routing Management (NMDA Version)", RFC 8349, 977 DOI 10.17487/RFC8349, March 2018, 978 . 980 [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., 981 Decraene, B., Litkowski, S., and R. Shakir, "Segment 982 Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, 983 July 2018, . 985 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 986 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 987 . 989 7.2. Informative References 991 [RFC3031] Rosen, E., Viswanathan, A., and R. Callon, "Multiprotocol 992 Label Switching Architecture", RFC 3031, 993 DOI 10.17487/RFC3031, January 2001, 994 . 996 [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., 997 Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack 998 Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, 999 . 1001 [RFC7424] Krishnan, R., Yong, L., Ghanwani, A., So, N., and B. 1002 Khasnabish, "Mechanisms for Optimizing Link Aggregation 1003 Group (LAG) and Equal-Cost Multipath (ECMP) Component Link 1004 Utilization in Networks", RFC 7424, DOI 10.17487/RFC7424, 1005 January 2015, . 1007 Authors' Addresses 1009 Tarek Saad 1010 Juniper Networks 1012 Email: tsaad@juniper.net 1014 Kamran Raza 1015 Cisco Systems Inc 1017 Email: skraza@cisco.com 1019 Rakesh Gandhi 1020 Cisco Systems Inc 1022 Email: rgandhi@cisco.com 1024 Xufeng Liu 1025 Volta Networks 1027 Email: xufeng.liu.ietf@gmail.com 1029 Vishnu Pavan Beeram 1030 Juniper Networks 1032 Email: vbeeram@juniper.net