idnits 2.17.1 draft-openconfig-mpls-consolidated-model-02.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 : ---------------------------------------------------------------------------- ** The document seems to lack separate sections for Informative/Normative References. All references will be assumed normative when checking for downward references. ** There are 7 instances of too long lines in the document, the longest one being 5 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 229 has weird spacing: '...address lea...' == Line 246 has weird spacing: '...up-name lea...' == Line 268 has weird spacing: '...ce-name lea...' == Line 330 has weird spacing: '...ce-name lea...' == Line 886 has weird spacing: '... uses mpls-...' == (7 more instances...) -- The document date (October 19, 2015) is 3111 days in the past. Is this intentional? Checking references for intended status: Informational ---------------------------------------------------------------------------- == Unused Reference: 'I-D.shaikh-idr-bgp-model' is defined on line 3909, but no explicit reference was found in the text == Outdated reference: A later version (-17) exists of draft-ietf-idr-bgp-model-00 == Outdated reference: A later version (-22) exists of draft-ietf-spring-segment-routing-mpls-02 Summary: 2 errors (**), 0 flaws (~~), 10 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 q 3 Network Working Group J. George 4 Internet-Draft Google 5 Intended status: Informational L. Fang 6 Expires: April 21, 2016 Microsoft 7 E. Osborne 8 Level 3 9 R. Shakir 10 Jive Communications 11 October 19, 2015 13 MPLS / TE Model for Service Provider Networks 14 draft-openconfig-mpls-consolidated-model-02 16 Abstract 18 This document defines a framework for a YANG data model for 19 configuring and managing label switched paths, including the 20 signaling protocols, traffic engineering, and operational aspects 21 based on carrier and content provider operational requirements. 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 http://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 April 21, 2016. 40 Copyright Notice 42 Copyright (c) 2015 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 (http://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. Goals and approach . . . . . . . . . . . . . . . . . . . 2 59 2. Model overview . . . . . . . . . . . . . . . . . . . . . . . 4 60 2.1. MPLS global . . . . . . . . . . . . . . . . . . . . . . . 5 61 2.2. TE global attributes . . . . . . . . . . . . . . . . . . 5 62 2.3. TE interface attributes overview . . . . . . . . . . . . 6 63 2.4. Signaling protocol overview . . . . . . . . . . . . . . . 7 64 2.5. LSP overview . . . . . . . . . . . . . . . . . . . . . . 8 65 3. Example use cases . . . . . . . . . . . . . . . . . . . . . . 11 66 3.1. Traffic engineered p2p LSP signaled with RSVP . . . . . . 11 67 3.2. Traffic engineered LSP signaled with SR . . . . . . . . . 12 68 3.3. IGP-congruent LDP-signaled LSP . . . . . . . . . . . . . 13 69 4. Security Considerations . . . . . . . . . . . . . . . . . . . 14 70 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 71 6. YANG modules . . . . . . . . . . . . . . . . . . . . . . . . 14 72 6.1. MPLS base modules . . . . . . . . . . . . . . . . . . . . 15 73 6.2. MPLS LSP submodules . . . . . . . . . . . . . . . . . . . 30 74 6.3. MPLS signaling protocol modules . . . . . . . . . . . . . 50 75 7. Contributing Authors . . . . . . . . . . . . . . . . . . . . 83 76 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 84 77 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 84 78 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 85 80 1. Introduction 82 This document describes a YANG [RFC6020] data model for MPLS and 83 traffic engineering, covering label switched path (LSP) 84 configuration, as well as signaling protocol configuration. The 85 model is intended to be vendor-neutral, in order to allow operators 86 to manage MPLS in heterogeneous environments with physical or virtual 87 devices (routers, switches, servers, etc.) supplied by multiple 88 vendors. The model is also intended to be readily mapped to existing 89 implementations, to facilitate support from as large a set of routing 90 hardware and software vendors as possible. 92 1.1. Goals and approach 94 The focus area of the model in this revision, is to set forth a 95 framework for MPLS, with hooks into which information specific to 96 various signaling-protocols can be added. The framework is built 97 around functionality from a network operator perspective rather than 98 a signaling protocol-centric approach. For example, a traffic- 99 engineered LSP will have configuration relating to its path 100 computation method, regardless of whether it is signaled with RSVP-TE 101 or with segment routing. Thus, rather than creating separate per- 102 signaling protocol models and trying to stitch them under a common 103 umbrella, this framework focuses on functionality, and adds signaling 104 protocol-specific information under it where applicable. 106 This model does not aim to be feature complete (i.e., cover all 107 possible aspects or features of MPLS). Rather its development is 108 driven by examination of actual production configurations in use 109 across a number of operator network deployments. 111 Configuration items that are deemed to be widely available in 112 existing major implementations are included in the model. Those 113 configuration items that are only available from a single 114 implementation are omitted from the model with the expectation they 115 will be available in companion modules that augment the current 116 model. This allows clarity in identifying data that is part of the 117 vendor-neutral model. 119 An important aspect of the model is the representation of operational 120 state data. This draft takes the approach described in 121 [I-D.openconfig-netmod-opstate] and models configuration and 122 operational state together. Thus, rather than building a separate 123 tree of operational state, the operational state and configuration 124 data are located in parallel containers at the leaves of the data 125 model. This approach allows easy reuse of groupings across models, 126 as well as making it easier to correlate configuration and state. 128 The consolidated MPLS model encompasses the signaling protocols, 129 label-switched paths (configuration and operational state), and 130 generic TE attributes. The model is designed from an operational and 131 functional perspective, rather than focusing on protocol-centric 132 configuration. This allows protocol-independent functions to be 133 logically separated from protocol-specific details. 135 One question that arises in this approach is how the consolidated 136 model is integrated with routing instances (e.g., VRFs). This model 137 should be considered as part of a higher level network device model 138 which includes definitions for other routing protocols and system 139 services. For example, in [I-D.openconfig-netmod-model-structure], 140 VRFs and other logical instances are defined with MPLS/TE components 141 within VRFs as appropriate. In particular, some parts of the MPLS 142 model would be instantiated within a VRF, while other parts would 143 have common definitions across VRFs. 145 Where possible, naming in the model follows conventions used in 146 available standards documents, and otherwise tries to be self- 147 explanatory with sufficient descriptions of the intended behavior. 148 Similarly, configuration data value constraints and default values, 149 where used, are based on recommendations in current standards 150 documentation. Since implementations vary widely in this respect, 151 this version of the model specifies only a limited set of defaults 152 and ranges with the expectation of being more prescriptive in future 153 versions based on actual operator use. 155 Note that this version of the model is a work-in-progress in several 156 respects. Although we present a complete framework for MPLS and 157 traffic engineering from an operational perspective, some signaling 158 protocol configuration will be completed in future revisions. The 159 current revision has focus on traffic engineered LSPs signaled with 160 RSVP. 162 2. Model overview 164 The overall MPLS model is defined across several YANG modules and 165 submodules but at a high level is organized into 4 main sections: 167 o global -- configuration affecting MPLS behavior which exists 168 independently of the underlying signaling protocol or label 169 switched path configuration. 171 o te-global-attributes -- configuration affecting MPLS-TE behavior 172 which exists independently of the underlying signaling protocol or 173 label switched path configuration. 175 o signaling protocols -- configuration specific to signaling 176 protocols used to setup and manage label switched paths. 178 o label switched paths -- configuration specific to instantiating 179 and managing individual label switched paths. 181 The top level of the model is shown in the tree view below: 183 +--rw mpls! 184 +--rw global 185 | ... 186 +--rw te-global-attributes 187 | ... 188 +--rw signaling-protocols 189 | ... 190 +--rw lsps 191 ... 193 2.1. MPLS global 195 The global section of the framework provides configuration data for 196 MPLS items which exist independently of an individual label switched 197 path or signaling protocol and are applicable to the MPLS protocol 198 itself. Items such as the depth of the label stack supported, or 199 specific label ranges may be included here. 201 2.2. TE global attributes 203 The TE global attributes section of the framework provides 204 configuration control for MPLS-TE items which exist independently of 205 an individual label switched path or signaling protocol. These 206 standalone items are applicable to the entire logical routing device, 207 and establish fundamental configuration such as the threshold for 208 interface bandwidth change that triggers update events into the IGP 209 traffic engineering database (TED). Timers are also specified which 210 determine the length of time an LSP must be present before being 211 considered viable for forwarding use (te-lsp-install-delay), and the 212 length of time between LSP teardown and removal of the LSP from the 213 network element's forwarding information base (te-lsp-cleanup-delay). 214 Also specified are the name to value mappings of MPLS administrative 215 groups (mpls-admin-groups) and shared risk link groups (mpls-te- 216 srlg). 218 +--rw te-global-attributes 219 | +--rw mpls-te-srlg 220 | | +--rw srlg* [srlg-name] 221 | | +--rw srlg-name leafref 222 | | +--rw config 223 | | | +--rw srlg-name? string 224 | | | +--rw srlg-value? uint32 225 | | | +--rw srlg-cost? uint32 226 | | +--ro state 227 ... 228 | | +--rw members-list* [from-address] 229 | | +--rw from-address leafref 230 | | +--rw config 231 | | | +--rw from-address? inet:ip-address 232 | | | +--rw to-address? inet:ip-address 233 ... 234 | +--rw igp-flooding-bandwidth 235 | | +--rw config 236 | | | +--rw threshold-type? enumeration 237 | | | +--rw delta-percentage? oc-types:percentage 238 | | | +--rw threshold-specification? enumeration 239 | | | +--rw up-thresholds* oc-types:percentage 240 | | | +--rw down-thresholds* oc-types:percentage 241 | | | +--rw up-down-thresholds* oc-types:percentage 242 | | +--ro state 243 ... 244 | +--rw mpls-admin-groups 245 | | +--rw admin-group* [admin-group-name] 246 | | +--rw admin-group-name leafref 247 | | +--rw config 248 | | | +--rw admin-group-name? string 249 | | | +--rw admin-group-value? uint32 250 | | +--rw state 251 ... 252 | +--rw te-lsp-timers 253 | +--rw config 254 | | +--rw te-lsp-install-delay? uint16 255 | | +--rw te-lsp-cleanup-delay? uint16 256 | | +--rw te-lsp-reoptimize-timer? uint16 257 | +--ro state 258 ... 260 2.3. TE interface attributes overview 262 The TE interface attributes section of the framework provides 263 configuration and state related to traffic engineering such as te- 264 metric or shared risk link group configuration. 266 +--rw te-intf-attributes 267 | +--rw interface* [interface-name] 268 | +--rw interface-name leafref 269 | +--rw config 270 | | +--rw interface-name? ocif:interface-ref 271 | | +--rw te-metric? uint32 272 | | +--rw srlg* [srlg-name] 273 ... 274 | | +--rw admin-group* [admin-group-name] 275 ... 276 | | +--rw igp-flooding-bandwidth 277 ... 278 | +--ro state 279 ... 281 2.4. Signaling protocol overview 283 The signaling protocol section of the framework provides 284 configuration elements for configuring three major methods of 285 signaling label switched paths: RSVP-TE, segment routing, and label 286 distribution protocol (LDP). BGP-LU will be included in a future 287 version of this draft by definitions in the BGP model 288 ([I-D.ietf-idr-bgp-model]) and corresponding augmentations to the 289 MPLS model. 291 +--rw signaling-protocols 292 | +--rw rsvp-te 293 | ... 294 | +--rw segment-routing 295 | ... 296 | +--rw ldp 297 | ... 299 Configuration of RSVP-TE is centered around interfaces on the device 300 which participate in the protocol. A key focus is to expose common 301 RSVP-TE configuration parameters which are used to enhance scale and 302 reliability. Items which are applicable globally in the RSVP-TE 303 protocol such as graceful restart, soft preemption and various 304 statistics are grouped into a global section under the protocol. 305 RSVP neighbor and session state are also available in the RSVP 306 section. 308 +--rw rsvp-te 309 | | +--rw rsvp-sessions 310 | | | +--rw config 311 | | | +--ro state 312 | | | +--ro rsvp-session* [source-port destination-port 313 source-address destination-address] 314 ... 315 | | +--rw rsvp-neighbors 316 | | | +--rw config 317 | | | +--ro state 318 | | | +--ro rsvp-neighbor* [neighbor-address] 319 ... 320 | | +--rw global 321 | | | +--rw graceful-restart 322 ... 323 | | | +--rw soft-preemption 324 ... 325 | | | +--ro statistics 326 | | | +--ro counters 327 .... 328 | | +--rw interface-attributes 329 | | +--rw interface* [interface-name] 330 | | +--rw interface-name leafref 331 ... 332 | | +--rw rsvp-hellos 333 ... 334 | | +--rw authentication 335 ... 336 | | +--rw subscription 337 ... 338 | | +--rw protection 339 ... 340 ... 342 Containers for specifying signaling via segment routing and LDP are 343 also present. Specific subelements will be added for those 344 protocols, as well as for BGP labeled unicast, in the next revision. 346 2.5. LSP overview 348 This part of the framework contains LSP information. At the high 349 level, LSPs are split into three categories: traffic-engineering- 350 capable (constrained-path), non-traffic-engineered determined by the 351 IGP (unconstrained-path), and hop-by-hop configured (static). 353 +--rw mpls! 354 +--rw lsps 355 +--rw constrained-path 356 | ... 357 +--rw unconstrained-path 358 | ... 359 +--rw static-lsps 360 ... 362 The first two categories, constrained-path and unconstrained-path are 363 the ones for which multiple signaling protocols exist, and are 364 organized in protocol-specific and protocol-independent sections. 365 For example, traffic-engineered (constrained path) LSPs may be set up 366 using RSVP-TE or segment routing, and unconstrained LSPs that follow 367 the IGP path may be signaled with LDP or with segment routing. IGP- 368 determined LSPs may also be signaled by RSVP but this usage is not 369 considered in the current version of the model. 371 A portion of the data model for constrained path traffic-engineered 372 LSPs signaled with RSVP is shown below. It contains configuration 373 for named explicit paths and for tunnels. Tunnel configuration 374 differs for p2p and p2mp LSPs. In either case, some part of the 375 model is signaling-protocol independent. For example for a p2p LSP, 376 attributes such as the path computation method, the constraints for 377 the the path, the bandwidth allocated to it, and even the frequency 378 of reoptimization are signaling-protocol independent, while other 379 data, such as the setup and hold priorities are protocol-specific and 380 are specified in the protocol specific part of the model. 382 +--rw mpls! 383 +--rw lsps 384 +--rw constrained-path 385 | +--rw explicit-path* [name] 386 ... 387 | +--rw tunnel* [name type] 388 | +--rw name leafref 389 | +--rw type leafref 390 | +--rw config 391 | | +--rw name? string 392 | | +--rw type? identityref 393 | | +--rw local-id? union 394 | | +--rw description? string 395 | | +--rw admin-status? identityref 396 | | +--rw preference? uint8 397 | | +--rw metric? te-metric-type 398 | | +--rw (bandwidth)? 399 ... 400 | | +--rw protection-style-requested? identityref 401 | | +--rw te-lsp-reoptimize-timer? uint16 402 | | +--rw (signaling-specific-tunnel-attributes)? 403 | | | +--:(RSVP) 404 | | | +--rw source? inet:ip-address 405 | | | +--rw soft-preemption? boolean 406 | | +--rw (tunnel-type)? 407 | | +--:(p2p) 408 | | | +--rw destination? inet:ip-address 409 | | | +--rw primary-paths* [name] 410 | | | | +--rw name string 411 | | | | +--rw preference? uint8 412 | | | | +--rw path-computation-method 413 ... 414 | | | | +--rw admin-groups 415 ... 416 | | | | +--rw no-cspf? empty 417 | | | | +--rw (sigaling-specific-path-attributes)? 418 | | | | +--:(RSVP) 419 | | | | | +--rw setup-priority? uint8 420 | | | | | +--rw hold-priority? uint8 421 | | | | | +--rw retry-timer? uint16 422 | | | | +--:(SR) 423 | | | | +--rw sid-selection-mode? enumeration 424 | | | | +--rw sid-protection-required? boolean 425 | | | +--rw secondary-paths* [name] 426 ... 427 | +--ro state 428 ... 430 Similarly, the partial model for non-traffic-engineered, or IGP- 431 based, LSPs is shown below: 433 +--rw mpls! 434 +--rw lsps 435 +--rw unconstrained-path 436 +--rw path-setup-protocol 437 +--rw ldp! 438 | ... 439 +--rw segment-routing! 440 ... 442 3. Example use cases 444 3.1. Traffic engineered p2p LSP signaled with RSVP 446 A possible scenario may be the establishment of a mesh of traffic- 447 engineered LSPs where RSVP signaling is desired, and the LSPs use a 448 local constrained path calculation to determine their path. These 449 LSPs would fall into the category of a constrained-path LSP, and the 450 tunnel type is p2p. Attributes such as metric, bandwidth or the 451 style of protection desired are also defined at this (protocol- 452 independent) level in the model. The path is defined to be locally- 453 computed under the path-computation-method container, specifying the 454 use of CSPF (use-cspf). Additional attributes for the path, such as 455 its RSVP priorities are specified at the path level under the 456 protocol-specific stanza. 458 +--rw mpls! 459 +--rw lsps 460 +--rw constrained-path 461 ... 462 | +--rw tunnel* [name type] 463 | +--rw name leafref 464 | +--rw type leafref 465 | +--rw config 466 | | +--rw name? string 467 | | +--rw type? identityref 468 | | +--rw metric? te-metric-type 469 | | +--rw (bandwidth)? 470 ... 471 | | +--rw protection-style-requested? identityref 472 | | +--rw te-lsp-reoptimize-timer? uint16 473 ... 474 | | +--rw (tunnel-type)? 475 | | +--:(p2p) 476 | | | +--rw destination? inet:ip-address 477 | | | +--rw primary-paths* [name] 478 | | | | +--rw name string 479 | | | | +--rw preference? uint8 480 | | | | +--rw path-computation-method 481 ... 482 | | | | +--rw admin-groups 483 ... 484 | | | | +--rw no-cspf? empty 485 | | | | +--rw (sigaling-specific-path-attributes)? 486 | | | | +--:(RSVP) 487 | | | | | +--rw setup-priority? uint8 488 | | | | | +--rw hold-priority? uint8 489 | | | | | +--rw retry-timer? uint16 490 | | | | +--:(SR) 491 | | | | +--rw sid-selection-mode? enumeration 492 | | | | +--rw sid-protection-required? boolean 493 | | | +--rw secondary-paths* [name] 494 ... 495 | +--ro state 497 3.2. Traffic engineered LSP signaled with SR 499 A possible scenario may be the establishment of disjoint paths in a 500 network where there is no requirement for per-LSP state to be held on 501 midpoint nodes within the network, or RSVP-TE is unsuitable (as 502 described in [I-D.ietf-spring-segment-routing-mpls] and 503 [I-D.shakir-rtgwg-sr-performance-engineered-lsps]). Such LSPs fall 504 in the constrained-path category. Similar to any other traffic 505 engineered LSPs, the path computation method must be specified. Path 506 attributes, such as the as lsp- placement-constraints (expressed as 507 administrative groups) or metric must be defined. Finally, the path 508 must be specified in a signaling- protocol specific manner 509 appropriate for SR. The same configuration elements from the tree 510 above apply in this case, except that path setup is done by the head- 511 end by building a label stack, rather than signaled. 513 3.3. IGP-congruent LDP-signaled LSP 515 A possible scenario may be the establishment of a full mesh of LSPs. 516 When traffic engineering is not an objective, no constraints are 517 placed on the end-to-end path, and the best- effort path can be setup 518 using LDP signaling simply for label distribution. The LSPs follow 519 IGP-computed paths, and fall in the unconstrained-path category in 520 the model. Protocol-specific configuration pertaining to the 521 signaling protocol used, such as the FEC definition and metrics 522 assigned are in the path- setup-protocol portion of the model. 524 The relevant part of the model for this case is shown below: 526 +--rw mpls! 527 +--rw lsps 528 +--rw unconstrained-path 529 +--rw path-setup-protocol 530 +--rw ldp! 531 +--rw tunnel 532 +--rw tunnel-type? mplst:tunnel-type 533 +--rw ldp-type? enumeration 534 +--rw p2p-lsp 535 | +--rw fec-address* inet:ip-prefix 536 +--rw p2mp-lsp 537 +--rw mp2mp-lsp 539 A common operational issue encountered when using LDP is traffic 540 blackholing under the following scenario: when an IGP failure occurs, 541 LDP is not aware of it as these are two protocols running 542 independently, resulting in traffic blackholing at the IGP failure 543 point even though LDP is up and running. LDP-IGP synchronization 544 [RFC5443] can be used to cost out the IGP failing point/segment to 545 avoid the blackholing issue. The LDP-IGP synchronization function 546 will be incorporated in a future version of this document. 548 Note that targeted LDP sessions are not discussed in this use case, 549 and will be incorporated as a separate use case in a future version 550 of this document. 552 4. Security Considerations 554 MPLS configuration has a significant impact on network operations, 555 and as such any related protocol or model carries potential security 556 risks. 558 YANG data models are generally designed to be used with the NETCONF 559 protocol over an SSH transport. This provides an authenticated and 560 secure channel over which to transfer BGP configuration and 561 operational data. Note that use of alternate transport or data 562 encoding (e.g., JSON over HTTPS) would require similar mechanisms for 563 authenticating and securing access to configuration data. 565 Most of the data elements in the configuration model could be 566 considered sensitive from a security standpoint. Unauthorized access 567 or invalid data could cause major disruption. 569 5. IANA Considerations 571 This YANG data model and the component modules currently use a 572 temporary ad-hoc namespace. If and when it is placed on redirected 573 for the standards track, an appropriate namespace URI will be 574 registered in the IETF XML Registry" [RFC3688]. The MPLS YANG 575 modules will be registered in the "YANG Module Names" registry 576 [RFC6020]. 578 6. YANG modules 580 The modules and submodules comprising the MPLS configuration and 581 operational model are currently organized as depcited below. 583 +-------+ 584 +---------------->| MPLS |<--------------+ 585 | +-------+ | 586 | ^ | 587 | | | 588 +----+-----+ +--------+-------+ +-----+-----+ 589 | TE LSPs | | IGP-based LSPs | |static LSPs| 590 | | | | | | 591 +----------+ +----------------+ +-----------+ 592 ^ ^ ^ ^ 593 | +----------------+ | +--------+ 594 | | | | 595 | +------+ +-+---+-+ +--+--+ 596 +---+ RSVP | |SEGMENT| | LDP | 597 +------+ |ROUTING| +-----+ 598 +-------+ 600 The base MPLS module includes submodules describing the three 601 different types of support LSPs, i.e., traffic-engineered 602 (constrained-path), IGP congruent (unconstrained-path), and static. 603 The signaling protocol specific parts of the model are described in 604 separate modules for RSVP, segment routing, and LDP. As mentioned 605 earlier, support for BGP labeled unicast is also planned in a future 606 revision. 608 A module defining various reusable MPLS types is included, and these 609 modules also make use of the standard Internet types, such as IP 610 addresses, as defined in RFC 6991 [RFC6991]. 612 6.1. MPLS base modules 614 file openconfig-mpls.yang 615 module openconfig-mpls { 617 yang-version "1"; 619 // namespace 620 namespace "http://openconfig.net/yang/mpls"; 622 prefix "mpls"; 624 // import some basic types 625 import openconfig-mpls-rsvp { prefix rsvp; } 626 import openconfig-mpls-sr { prefix sr; } 627 import openconfig-mpls-ldp { prefix ldp; } 628 import openconfig-types { prefix oc-types; } 629 import openconfig-interfaces { prefix ocif; } 631 // include submodules 632 include openconfig-mpls-te; 633 include openconfig-mpls-igp; 634 include openconfig-mpls-static; 636 // meta 637 organization "OpenConfig working group"; 639 contact 640 "OpenConfig working group 641 netopenconfig@googlegroups.com"; 643 description 644 "This module provides data definitions for configuration of 645 Multiprotocol Label Switching (MPLS) and associated protocols for 646 signaling and traffic engineering. 648 RFC 3031: Multiprotocol Label Switching Architecture 650 The MPLS / TE data model consists of several modules and 651 submodules as shown below. The top-level MPLS module describes 652 the overall framework. Three types of LSPs are supported: 654 i) traffic-engineered (or constrained-path) 656 ii) IGP-congruent (LSPs that follow the IGP path) 658 iii) static LSPs which are not signaled 660 The structure of each of these LSP configurations is defined in 661 corresponding submodules. Companion modules define the relevant 662 configuration and operational data specific to key signaling 663 protocols used in operational practice. 665 +-------+ 666 +---------------->| MPLS |<--------------+ 667 | +-------+ | 668 | ^ | 669 | | | 670 +----+-----+ +--------+-------+ +-----+-----+ 671 | TE LSPs | | IGP-based LSPs | |static LSPs| 672 | | | | | | 673 +----------+ +----------------+ +-----------+ 674 ^ ^ ^ ^ 675 | +----------------+ | +--------+ 676 | | | | 677 | +------+ +-+---+-+ +--+--+ 678 +---+ RSVP | |SEGMENT| | LDP | 679 +------+ |ROUTING| +-----+ 680 +-------+ 681 "; 683 revision "2015-10-14" { 684 description 685 "Work in progress"; 686 reference "TBD"; 687 } 689 // extension statements 691 // feature statements 692 // identity statements 694 // grouping statements 696 grouping mpls-admin-group_config { 697 description 698 "configuration data for MPLS link admin groups"; 700 leaf admin-group-name { 701 type string; 702 description "name for mpls admin-group"; 703 } 705 leaf admin-group-value { 706 type uint32; 707 description "value for mpls admin-group"; 708 } 710 } 712 grouping mpls-admin-groups-top { 714 description "top-level mpls admin-groups config 715 and state containers"; 717 container mpls-admin-groups { 718 description 719 "Top-level container for admin-groups configuration 720 and state"; 722 list admin-group { 723 key admin-group-name; 724 description "configuration of value to name mapping 725 for mpls affinities/admin-groups"; 727 leaf admin-group-name { 728 type leafref { 729 path "../mpls:config/mpls:admin-group-name"; 730 } 731 description 732 "name for mpls admin-group"; 733 } 734 container config { 735 description "Configurable items for admin-groups"; 736 uses mpls-admin-group_config; 737 } 738 container state { 739 description "Operational state for admin-groups"; 740 uses mpls-admin-group_config; 741 } 742 } 743 } 744 } 746 grouping mpls-te-igp-flooding-bandwidth_config { 747 description 748 "Configurable items for igp flooding bandwidth 749 threshold configuration."; 750 leaf threshold-type { 751 type enumeration { 752 enum DELTA { 753 description "DELTA indicates that the local 754 system should flood IGP updates when a 755 change in reserved bandwidth >= the specified 756 delta occurs on the interface."; 757 } 758 enum THRESHOLD-CROSSED { 759 description "THRESHOLD-CROSSED indicates that 760 the local system should trigger an update (and 761 hence flood) the reserved bandwidth when the 762 reserved bandwidth changes such that it crosses, 763 or becomes equal to one of the threshold values."; 764 } 765 } 766 description 767 "The type of threshold that should be used to specify the 768 values at which bandwidth is flooded. DELTA indicates that 769 the local system should flood IGP updates when a change in 770 reserved bandwidth >= the specified delta occurs on the 771 interface. Where THRESHOLD-CROSSED is specified, the local 772 system should trigger an update (and hence flood) the 773 reserved bandwidth when the reserved bandwidth changes such 774 that it crosses, or becomes equal to one of the threshold 775 values"; 776 } 778 leaf delta-percentage { 779 when "../threshold-type = 'DELTA'" { 780 description 781 "The percentage delta can only be specified when the 782 threshold type is specified to be a percentage delta of 783 the reserved bandwidth"; 784 } 785 type oc-types:percentage; 786 description 787 "The percentage of the maximum-reservable-bandwidth 788 considered as the delta that results in an IGP update 789 being flooded"; 790 } 792 leaf threshold-specification { 793 when "../threshold-type = 'THRESHOLD-CROSSED'" { 794 description 795 "The selection of whether mirrored or separate threshold 796 values are to be used requires user specified thresholds to 797 be set"; 798 } 799 type enumeration { 800 enum MIRRORED-UP-DOWN { 801 description 802 "MIRRORED-UP-DOWN indicates that a single set of 803 threshold values should be used for both increasing 804 and decreasing bandwidth when determining whether 805 to trigger updated bandwidth values to be flooded 806 in the IGP TE extensions."; 807 } 808 enum SEPARATE-UP-DOWN { 809 description 810 "SEPARATE-UP-DOWN indicates that a separate 811 threshold values should be used for the increasing 812 and decreasing bandwidth when determining whether 813 to trigger updated bandwidth values to be flooded 814 in the IGP TE extensions."; 815 } 816 } 817 description 819 "This value specifies whether a single set of threshold 820 values should be used for both increasing and decreasing 821 bandwidth when determining whether to trigger updated 822 bandwidth values to be flooded in the IGP TE extensions. 823 MIRRORED-UP-DOWN indicates that a single value (or set of 824 values) should be used for both increasing and decreasing 825 values, where SEPARATE-UP-DOWN specifies that the increasing 826 and decreasing values will be separately specified"; 827 } 829 leaf-list up-thresholds { 830 when "../threshold-type = 'THRESHOLD-CROSSED'" + 831 "and ../threshold-specification = 'SEPARATE-UP-DOWN'" { 832 description 833 "A list of up-thresholds can only be specified when the 834 bandwidth update is triggered based on crossing a 835 threshold and separate up and down thresholds are 836 required"; 837 } 838 type oc-types:percentage; 839 description 840 "The thresholds (expressed as a percentage of the maximum 841 reservable bandwidth) at which bandwidth updates are to be 842 triggered when the bandwidth is increasing."; 843 } 845 leaf-list down-thresholds { 846 when "../threshold-type = 'THRESHOLD-CROSSED'" + 847 "and ../threshold-specification = 'SEPARATE-UP-DOWN'" { 848 description 849 "A list of down-thresholds can only be specified when the 850 bandwidth update is triggered based on crossing a 851 threshold and separate up and down thresholds are 852 required"; 853 } 854 type oc-types:percentage; 855 description 856 "The thresholds (expressed as a percentage of the maximum 857 reservable bandwidth) at which bandwidth updates are to be 858 triggered when the bandwidth is decreasing."; 859 } 861 leaf-list up-down-thresholds { 862 when "../threshold-type = 'THRESHOLD-CROSSED'" + 863 "and ../threshold-specification = 'MIRRORED-UP-DOWN'" { 864 description 865 "A list of thresholds corresponding to both increasing 866 and decreasing bandwidths can be specified only when an 867 update is triggered based on crossing a threshold, and 868 the same up and down thresholds are required."; 869 } 870 type oc-types:percentage; 871 description 872 "The thresholds (expressed as a percentage of the maximum 873 reservable bandwidth of the interface) at which bandwidth 874 updates are flooded - used both when the bandwidth is 875 increasing and decreasing"; 876 } 877 } 879 grouping mpls-te-igp-flooding-bandwdith-if { 880 description "Interface-level group for traffic engineering 881 database flooding options options"; 882 container igp-flooding-bandwidth { 883 description "Interface bandwidth change percentages 884 that trigger update events into the IGP traffic 885 engineering database (TED)"; 886 uses mpls-te-igp-flooding-bandwidth_config; 887 } 888 } 890 grouping mpls-te-igp-flooding-bandwidth { 891 description "Top level group for traffic engineering 892 database flooding options"; 893 container igp-flooding-bandwidth { 894 description "Interface bandwidth change percentages 895 that trigger update events into the IGP traffic 896 engineering database (TED)"; 897 container config { 898 description "Configuration parameters for TED 899 update threshold "; 900 uses mpls-te-igp-flooding-bandwidth_config; 901 } 902 container state { 903 config false; 904 description "State parameters for TED update threshold "; 905 uses mpls-te-igp-flooding-bandwidth_config; 906 } 907 } 908 } 910 grouping te_lsp_delay_config { 911 description "Group for the timers goerning the delay 912 in installation and cleanup of TE LSPs"; 914 leaf te-lsp-install-delay { 915 type uint16 { 916 range 0..3600; 917 } 918 units seconds; 919 description "delay the use of newly installed te lsp for a 920 specified amount of time."; 921 } 923 leaf te-lsp-cleanup-delay { 924 type uint16; 925 units seconds; 926 description "delay the removal of old te lsp for a specified 927 amount of time"; 929 } 930 } 932 grouping te-interface-attributes-top { 933 description 934 "Top level grouping for attributes 935 for TE interfaces."; 937 list interface { 938 key interface-name; 939 description "List of TE interfaces"; 941 leaf interface-name { 942 type leafref { 943 path "../config/interface-name"; 944 require-instance true; 945 } 946 description "The interface name"; 947 } 949 container config { 950 description 951 "Configuration parameters related to TE interfaces:"; 952 uses te-interface-attributes-config; 953 } 955 container state { 956 config false; 957 description "State parameters related to TE interfaces"; 958 uses te-interface-attributes-config; 959 } 960 } 961 } 963 grouping te-interface-attributes-config { 964 description "global level definitions for interfaces 965 on which TE is run"; 967 leaf interface-name { 968 type ocif:interface-ref; 969 description "reference to interface name"; 970 } 972 leaf te-metric { 973 type uint32; 974 description "TE specific metric for the link"; 975 } 976 list srlg { 977 key srlg-name; 978 description "list of shared risk link groups on the 979 interface"; 980 leaf srlg-name { 981 type string; 982 description "The SRLG group identifier"; 983 } 984 } 986 list admin-group { 987 key admin-group-name; 988 description "list of admin groups on the 989 interface"; 990 leaf admin-group-name { 991 type string; 992 description "The admin group identifier"; 993 } 994 } 996 uses mpls-te-igp-flooding-bandwdith-if; 998 } 1000 grouping mpls-te-lsp-timers { 1001 description 1002 "Grouping for traffic engineering timers"; 1003 container te-lsp-timers { 1004 description 1005 "definition for delays associated with setup 1006 and cleanup of TE LSPs"; 1008 container config { 1009 description 1010 "Configuration parameters related 1011 to timers for TE LSPs"; 1013 uses te_lsp_delay_config; 1014 uses te-tunnel-reoptimize_config; 1015 } 1016 container state { 1017 config false; 1018 description "State related to timers for TE LSPs"; 1020 uses te_lsp_delay_config; 1021 uses te-tunnel-reoptimize_config; 1022 } 1023 } 1025 } 1027 container mpls { 1028 presence "top-level container for MPLS config and operational 1029 state"; 1031 description "Anchor point for mpls configuration and operational 1032 data"; 1034 container global { 1035 // entropy label support, label ranges will be added here. 1036 description "general mpls configuration applicable to any 1037 type of LSP and signaling protocol - label ranges, 1038 entropy label supportmay be added here"; 1039 } 1041 container te-global-attributes { 1042 description "traffic-engineering global attributes"; 1043 uses mpls-te-srlg-top; 1044 uses mpls-te-igp-flooding-bandwidth; 1045 uses mpls-admin-groups-top; 1046 uses mpls-te-lsp-timers; 1047 } 1049 container te-intf-attributes { 1050 description "traffic engineering attributes specific 1051 for interfaces"; 1052 uses te-interface-attributes-top; 1053 } 1055 container signaling-protocols { 1056 description "top-level signaling protocol configuration"; 1058 uses rsvp:rsvp-global; 1059 uses sr:sr-global; 1060 uses ldp:ldp-global; 1061 } 1063 container lsps { 1064 description "LSP definitions and configuration"; 1066 container constrained-path { 1067 description "traffic-engineered LSPs supporting different 1068 path computation and signaling methods"; 1069 uses explicit-paths-top; 1070 uses te-tunnels-top; 1072 } 1073 container unconstrained-path { 1074 description "LSPs that use the IGP-determined path, i.e., non 1075 traffic-engineered, or non constrained-path"; 1077 uses igp-lsp-common; 1078 uses igp-lsp-setup; 1080 } 1082 container static-lsps { 1083 description "statically configured LSPs, without dynamic 1084 signaling"; 1086 uses static-lsp-main; 1087 } 1088 } 1089 } 1091 // augment statements 1093 // rpc statements 1095 // notification statements 1096 } 1097 1099 file openconfig-mpls-types.yang 1100 module openconfig-mpls-types { 1102 yang-version "1"; 1104 // namespace 1105 namespace "http://openconfig.net/yang/mpls-types"; 1107 prefix "mplst"; 1109 // meta 1110 organization "OpenConfig working group"; 1112 contact 1113 "OpenConfig working group 1114 netopenconfig@googlegroups.com"; 1116 description 1117 "General types for MPLS / TE data model"; 1119 revision "2015-10-04" { 1120 description 1121 "Work in progress"; 1122 reference "TBD"; 1123 } 1125 // extension statements 1127 // feature statements 1129 // identity statements 1131 // using identities rather than enum types to simplify adding new 1132 // signaling protocols as they are introduced and supported 1133 identity path-setup-protocol { 1134 description "base identity for supported MPLS signaling 1135 protocols"; 1136 } 1138 identity path-setup-rsvp { 1139 base path-setup-protocol; 1140 description "RSVP-TE signaling protocol"; 1141 } 1143 identity path-setup-sr { 1144 base path-setup-protocol; 1145 description "Segment routing"; 1146 } 1148 identity path-setup-ldp { 1149 base path-setup-protocol; 1150 description "lDP - RFC 5036"; 1151 } 1153 identity protection-type { 1154 description "base identity for protection type"; 1155 } 1157 identity unprotected { 1158 base protection-type; 1159 description "no protection is desired"; 1160 } 1162 identity link-protection-requested { 1163 base protection-type; 1164 description "link protection is desired"; 1165 } 1166 identity link-node-protection-requested { 1167 base protection-type; 1168 description "node and link protection are both desired"; 1169 } 1171 identity lsp-role { 1172 description 1173 "Base identity for describing the role of 1174 label switched path at the current node"; 1175 } 1177 identity INGRESS { 1178 base "lsp-role"; 1179 description 1180 "Label switched path is an ingress (headend) 1181 LSP"; 1182 } 1184 identity EGRESS { 1185 base "lsp-role"; 1186 description 1187 "Label switched path is an egress (tailend) 1188 LSP"; 1189 } 1191 identity TRANSIT { 1192 base "lsp-role"; 1193 description 1194 "Label switched path is a transit LSP"; 1195 } 1197 identity tunnel-type { 1198 description 1199 "Base identity from which specific tunnel types are 1200 derived."; 1201 } 1203 identity P2P { 1204 base tunnel-type; 1205 description 1206 "TE point-to-point tunnel type."; 1207 } 1209 identity P2MP { 1210 base tunnel-type; 1211 description 1212 "TE point-to-multipoint tunnel type."; 1214 } 1216 identity lsp-oper-status { 1217 description 1218 "Base identity for LSP operational status"; 1219 } 1221 identity DOWN { 1222 base "lsp-oper-status"; 1223 description 1224 "LSP is operationally down or out of service"; 1225 } 1227 identity UP { 1228 base "lsp-oper-status"; 1229 description 1230 "LSP is operationally active and available 1231 for traffic."; 1232 } 1234 identity tunnel-admin-status { 1235 description 1236 "Base identity for tunnel administrative status"; 1237 } 1239 identity ADMIN_DOWN { 1240 base "tunnel-admin-status"; 1241 description 1242 "LSP is administratively down"; 1243 } 1245 identity ADMIN_UP { 1246 base "tunnel-admin-status"; 1247 description 1248 "LSP is administratively up"; 1249 } 1251 // typedef statements 1252 typedef mpls-label { 1253 type union { 1254 type uint32 { 1255 range 16..1048575; 1256 } 1257 type enumeration { 1258 enum IPV4_EXPLICIT_NULL { 1259 value 0; 1260 description "valid at the bottom of the label stack, 1261 indicates that stack must be popped and packet forwarded 1262 based on IPv4 header"; 1263 } 1264 enum ROUTER_ALERT { 1265 value 1; 1266 description "allowed anywhere in the label stack except 1267 the bottom, local router delivers packet to the local CPU 1268 when this label is at the top of the stack"; 1269 } 1270 enum IPV6_EXPLICIT_NULL { 1271 value 2; 1272 description "valid at the bottom of the label stack, 1273 indicates that stack must be popped and packet forwarded 1274 based on IPv6 header"; 1275 } 1276 enum IMPLICIT_NULL { 1277 value 3; 1278 description "assigned by local LSR but not carried in 1279 packets"; 1280 } 1281 enum ENTROPY_LABEL_INDICATOR { 1282 value 7; 1283 description "Entropy label indicator, to allow an LSR 1284 to distinguish between entropy label and applicaiton 1285 labels RFC 6790"; 1286 } 1287 } 1288 } 1289 description "type for MPLS label value encoding"; 1290 reference "RFC 3032 - MPLS Label Stack Encoding"; 1291 } 1293 typedef tunnel-type { 1294 type enumeration { 1295 enum P2P { 1296 description "point-to-point label-switched-path"; 1297 } 1298 enum P2MP { 1299 description "point-to-multipoint label-switched-path"; 1300 } 1301 enum MP2MP { 1302 description "multipoint-to-multipoint label-switched-path"; 1303 } 1304 } 1305 description "defines the tunnel type for the LSP"; 1306 reference 1307 "RFC 6388 - Label Distribution Protocol Extensions for 1308 Point-to-Multipoint and Multipoint-to-Multipoint Label Switched 1309 Paths 1310 RFC 4875 - Extensions to Resource Reservation Protocol 1311 - Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE 1312 Label Switched Paths (LSPs)"; 1313 } 1315 typedef bandwidth-kbps { 1316 type uint64; 1317 units kbps; 1318 } 1320 typedef bandwidth-mbps { 1321 type uint64; 1322 units mbps; 1323 } 1325 typedef bandwidth-gbps { 1326 type uint64; 1327 units gbps; 1328 } 1330 // grouping statements 1332 // data definition statements 1334 // augment statements 1336 // rpc statements 1338 // notification statements 1340 } 1341 1343 6.2. MPLS LSP submodules 1345 file openconfig-mpls-te.yang 1346 submodule openconfig-mpls-te { 1348 yang-version "1"; 1350 belongs-to "openconfig-mpls" { 1351 prefix "mpls"; 1352 } 1353 // import some basic types 1354 import ietf-inet-types { prefix inet; } 1355 import openconfig-mpls-rsvp { prefix rsvp; } 1356 import openconfig-mpls-sr { prefix sr; } 1357 import openconfig-mpls-types {prefix mplst; } 1358 import openconfig-types { prefix oc-types; } 1359 import ietf-yang-types { prefix yang; } 1361 // meta 1362 organization "OpenConfig working group"; 1364 contact 1365 "OpenConfig working group 1366 netopenconfig@googlegroups.com"; 1368 description 1369 "Configuration related to constrained-path LSPs and traffic 1370 engineering. These definitions are not specific to a particular 1371 signaling protocol or mechanism (see related submodules for 1372 signaling protocol-specific configuration)."; 1374 revision "2015-10-04" { 1375 description 1376 "Work in progress"; 1377 reference "TBD"; 1378 } 1380 // extension statements 1382 // feature statements 1384 // identity statements 1386 // using identities for path comp method, though enums may also 1387 // be appropriate if we decided these are the primary computation 1388 // mechanisms in future. 1389 identity path-computation-method { 1390 description 1391 "base identity for supported path computation 1392 mechanisms"; 1393 } 1395 identity locally-computed { 1396 base path-computation-method; 1397 description 1398 "indicates a constrained-path LSP in which the 1399 path is computed by the local LER"; 1401 } 1403 identity externally-queried { 1404 base path-computation-method; 1405 description 1406 "constrained-path LSP in which the path is 1407 obtained by querying an external source, such as a PCE server"; 1408 } 1410 identity explicitly-defined { 1411 base path-computation-method; 1412 description 1413 "constrained-path LSP in which the path is 1414 explicitly specified as a collection of strict or/and loose 1415 hops"; 1416 } 1418 // typedef statements 1420 typedef mpls-hop-type { 1421 type enumeration { 1422 enum LOOSE { 1423 description "loose hop in an explicit path"; 1424 } 1425 enum STRICT { 1426 description "strict hop in an explicit path"; 1427 } 1428 } 1429 description 1430 "enumerated type for specifying loose or strict 1431 paths"; 1432 } 1434 typedef te-metric-type { 1435 type union { 1436 type enumeration { 1437 enum IGP { 1438 description 1439 "set the LSP metric to track the underlying 1440 IGP metric"; 1441 } 1442 } 1443 type uint32; 1444 } 1445 description 1446 "union type for setting the LSP TE metric to a 1447 static value, or to track the IGP metric"; 1448 } 1449 typedef cspf-tie-breaking { 1450 type enumeration { 1451 enum RANDOM { 1452 description 1453 "CSPF calculation selects a random path among 1454 multiple equal-cost paths to the destination"; 1455 } 1456 enum LEAST_FILL { 1457 description 1458 "CSPF calculation selects the path with greatest 1459 available bandwidth"; 1460 } 1461 enum MOST_FILL { 1462 description "CSPF calculation selects the path with the least 1463 available bandwidth"; 1464 } 1465 } 1466 default RANDOM; 1467 description 1468 "type to indicate the CSPF selection policy when 1469 multiple equal cost paths are available"; 1470 } 1472 // grouping statements 1474 grouping te-tunnel-reoptimize_config { 1475 description "Definition for reoptimize timer configuration"; 1476 leaf te-lsp-reoptimize-timer { 1477 type uint16; 1478 units seconds; 1479 description 1480 "frequency of reoptimization of 1481 a traffic engineered LSP"; 1482 } 1483 } 1485 grouping path-placement-constraints { 1486 description 1487 "Top level grouping for path placement constraints"; 1489 container admin-groups { 1490 description 1491 "Include/Exclude constraints for link affinities"; 1492 uses te-lsp-exclude-admin-group_config; 1493 uses te-lsp-include-any-admin-group_config; 1494 uses te-lsp-include-all-admin-group_config; 1495 } 1497 } 1499 grouping te-tunnel-bandwidth_config { 1500 description "Bandwidth configuration for TE LSPs"; 1501 choice bandwidth { 1502 default explicit; 1503 description 1504 "select how bandwidth for the LSP will be 1505 specified and managed"; 1506 case explicit { 1507 leaf set-bandwidth { 1508 type uint32; 1509 description 1510 "set bandwidth explicitly, e.g., using 1511 offline calculation"; 1512 } 1513 } 1514 case auto { 1515 uses te-lsp-auto-bandwidth_config; 1516 } 1517 } 1518 } 1520 grouping te-lsp-auto-bandwidth_config { 1521 description "Configuration parameters related to autobandwidth"; 1522 container auto-bandwidth { 1523 description 1524 "configure auto-bandwidth operation in 1525 which devices automatically adjust bandwidth to meet 1526 requirements"; 1528 leaf enabled { 1529 type boolean; 1530 default false; 1531 description 1532 "enables mpls auto-bandwidth on the 1533 lsp"; 1534 } 1536 leaf min-bw { 1537 type uint32; 1538 description 1539 "set the minimum bandwidth in Mbps for an 1540 auto-bandwidth LSP"; 1541 } 1543 leaf max-bw { 1544 type uint32; 1545 description 1546 "set the maximum bandwidth in Mbps for an 1547 auto-bandwidth LSP"; 1548 } 1550 leaf adjust-interval { 1551 type uint32; 1552 description 1553 "time in seconds between adjustments to 1554 LSP bandwidth"; 1555 } 1557 leaf adjust-threshold { 1558 type oc-types:percentage; 1559 description 1560 "percentage difference between the LSP's 1561 specified bandwidth and its current bandwidth 1562 allocation -- if the difference is greater than the 1563 specified percentage, auto-bandwidth adjustment is 1564 triggered"; 1565 } 1567 container overflow { 1568 description 1569 "configuration of MPLS overflow bandwidth 1570 adjustement for the LSP"; 1571 uses te-lsp-overflow_config; 1572 } 1574 container underflow { 1575 description 1576 "configuration of MPLS underflow bandwidth 1577 adjustement for the LSP"; 1578 uses te-lsp-underflow_config; 1579 } 1580 } 1581 } 1583 grouping te-lsp-overflow_config { 1584 description 1585 "configuration for mpls lsp bandwidth 1586 overflow adjustment"; 1588 leaf enabled { 1589 type boolean; 1590 default false; 1591 description 1592 "enables mpls lsp bandwidth overflow 1593 adjustment on the lsp"; 1594 } 1596 leaf overflow-threshold { 1597 type oc-types:percentage; 1598 description 1599 "bandwidth percentage change to trigger 1600 an overflow event"; 1602 } 1604 leaf trigger-event-count { 1605 type uint16; 1606 description 1607 "number of consecutive overflow sample 1608 events needed to trigger an overflow adjustment"; 1609 } 1610 } 1612 grouping te-lsp-underflow_config { 1613 description 1614 "configuration for mpls lsp bandwidth 1615 underflow adjustment"; 1617 leaf enabled { 1618 type boolean; 1619 default false; 1620 description 1621 "enables bandwidth underflow 1622 adjustment on the lsp"; 1623 } 1625 leaf underflow-threshold { 1626 type oc-types:percentage; 1627 description 1628 "bandwidth percentage change to trigger 1629 and underflow event"; 1630 } 1632 leaf trigger-event-count { 1633 type uint16; 1634 description 1635 "number of consecutive underflow sample 1636 events needed to trigger an underflow adjustment"; 1637 } 1638 } 1640 grouping te-tunnel-metric_config { 1641 description "Configuration parameters related to LSP metric"; 1642 leaf metric { 1643 type te-metric-type; 1644 description "LSP metric, either explicit or IGP"; 1645 } 1646 } 1648 grouping te-lsp-exclude-admin-group_config { 1649 description 1650 "Configuration parameters related to admin-groups 1651 to exclude in path calculation"; 1652 list exclude-groups { 1654 key exclude-admin-group-name; 1656 description 1657 "list of admin-groups to exclude in path calculation"; 1659 leaf exclude-admin-group-name { 1660 type leafref { 1661 path "/mpls/te-global-attributes/mpls-admin-groups/" + 1662 "admin-group/admin-group-name"; 1663 } 1664 description 1665 "name of the admin group -- references a defined admin 1666 group"; 1667 } 1668 } 1669 } 1671 grouping te-lsp-include-all-admin-group_config { 1672 description 1673 "Configuration parameters related to admin-groups 1674 which all must be included in the path calculation"; 1675 list include-all-groups { 1677 key all-admin-group-name; 1678 description 1679 "list of admin-groups of which all must be included"; 1681 leaf all-admin-group-name { 1682 type leafref { 1683 path "/mpls/te-global-attributes/mpls-admin-groups/" + 1684 "admin-group/admin-group-name"; 1685 } 1686 description 1687 "name of the admin group -- references a defined 1688 admin group"; 1690 } 1691 } 1692 } 1694 grouping te-lsp-include-any-admin-group_config { 1695 description 1696 "Configuration parameters related to admin-groups 1697 of which one must be included in the path calculation"; 1698 list include-any-groups { 1700 key any-admin-group-name; 1701 description 1702 "list of admin-groups of which one must be included"; 1704 leaf any-admin-group-name { 1705 type leafref { 1706 path "/mpls/te-global-attributes/mpls-admin-groups/" + 1707 "admin-group/admin-group-name"; 1708 } 1709 description 1710 "name of the admin group -- references a defined 1711 admin group"; 1712 } 1713 } 1714 } 1716 grouping te-tunnel-protection_config { 1717 description 1718 "Configuration parameters related to LSP 1719 protection"; 1720 leaf protection-style-requested { 1721 type identityref { 1722 base mplst:protection-type; 1723 } 1724 default mplst:unprotected; 1725 description 1726 "style of mpls frr protection desired: can be 1727 link, link-node or unprotected."; 1728 } 1729 } 1731 grouping te-lsp-comp-explicit { 1732 description 1733 "definitions for LSPs in which hops are explicitly 1734 specified"; 1736 container explicit-path { 1737 description "LSP with explicit path specification"; 1738 leaf path-name { 1739 type leafref { 1740 path "/mpls/lsps/constrained-path/" 1741 + "explicit-path/config/named-explicit-paths/name"; 1742 require-instance true; 1743 } 1744 description "reference to a defined path"; 1745 } 1746 } 1747 } 1749 grouping te-lsp-comp-queried { 1750 description "definitons for LSPs computed by querying a remote 1751 service, e.g., PCE server"; 1753 container queried-path { 1754 description "LSP with path queried from an external server"; 1756 leaf path-computation-server { 1757 type inet:ip-address; 1758 description 1759 "Address of the external path computation 1760 server"; 1761 } 1762 } 1763 } 1765 grouping te-lsp-comp-local { 1766 description "definitons for locally-computed LSPs"; 1768 container locally-computed { 1769 description "LSP with path computed by local ingress LSR"; 1771 leaf use-cspf { 1772 type boolean; 1773 description "Flag to enable CSPF for locally computed LSPs"; 1774 } 1775 leaf cspf-tiebreaker { 1776 type cspf-tie-breaking; 1777 description 1778 "Determine the tie-breaking method to choose between 1779 equally desirable paths during CSFP computation"; 1780 } 1781 } 1782 } 1784 grouping explicit-route-subobject { 1785 description 1786 "The explicit route subobject grouping"; 1787 choice type { 1788 description 1789 "The explicit route subobject type"; 1790 case ipv4-address { 1791 description 1792 "IPv4 address explicit route subobject"; 1793 leaf address { 1794 type inet:ip-address; 1795 description "router hop for the LSP path"; 1796 } 1798 leaf hop-type { 1799 type mpls-hop-type; 1800 description "strict or loose hop"; 1801 } 1802 } 1804 case label { 1805 leaf value { 1806 type uint32; 1807 description "the label value"; 1808 } 1809 description 1810 "The Label ERO subobject"; 1811 } 1812 } 1813 } 1815 // Explicit paths config somewhat following the IETF model 1816 grouping named-explicit-path_config { 1817 description 1818 "Global explicit path configuration 1819 grouping"; 1820 list named-explicit-paths { 1821 key "name"; 1822 description 1823 "A list of explicit paths"; 1824 leaf name { 1825 type string; 1826 description 1827 "A string name that uniquely identifies 1828 an explicit path"; 1829 } 1830 list explicit-route-objects { 1831 key "index"; 1832 description 1833 "List of explicit route objects"; 1834 leaf index { 1835 type uint8 { 1836 range "0..255"; 1837 } 1838 description 1839 "Index of this explicit route object, 1840 to express the order of hops in path"; 1841 } 1842 uses explicit-route-subobject; 1843 } 1844 } 1845 } 1847 grouping explicit-paths-top { 1848 description 1849 "common information for MPLS explicit path definition"; 1850 list explicit-path { 1851 key name; 1852 description "Explicit path definition"; 1854 leaf name { 1855 type leafref { 1856 path "/mpls/lsps/constrained-path/" 1857 + "explicit-path/config/named-explicit-paths/name"; 1858 require-instance true; 1859 } 1860 description "definition for naming an explicit path"; 1862 } 1863 container config { 1864 description "configuration for an explicit path"; 1865 uses named-explicit-path_config; 1866 } 1867 container state { 1868 config false; 1869 description "operational state for LSP path name"; 1870 uses named-explicit-path_config; 1871 } 1872 } 1873 } 1875 grouping mpls-te-srlg_config { 1876 description 1877 "Configuration of various attributes associated 1878 with the SRLG"; 1880 leaf srlg-name { 1881 type string; 1882 description "SRLG group identifier"; 1883 } 1885 leaf srlg-value { 1886 type uint32; 1887 description "group ID for the SRLG"; 1888 } 1890 leaf srlg-cost { 1891 type uint32; 1892 description 1893 "The cost of the SRLG to the computation 1894 algorithm"; 1895 } 1896 } 1898 grouping mpls-te-srlg-members_config { 1899 description "Configuration of the membership of the SRLG"; 1901 leaf from-address { 1902 type inet:ip-address; 1903 description "IP address of the a-side of the SRLG link"; 1904 } 1906 leaf to-address { 1907 type inet:ip-address; 1908 description "IP address of the z-side of the SRLG link"; 1909 } 1910 } 1912 grouping mpls-te-srlg-top { 1913 description 1914 "Top level grouping for MPLS shared 1915 risk link groups."; 1916 container mpls-te-srlg { 1917 description 1918 "Shared risk link groups attributes"; 1919 list srlg { 1920 key srlg-name; 1921 description "List of shared risk link groups"; 1923 leaf srlg-name { 1924 type leafref { 1925 path "../config/srlg-name"; 1926 require-instance true; 1927 } 1928 description "The SRLG group identifier"; 1929 } 1931 container config { 1932 description "Configuration parameters related to the SRLG"; 1933 uses mpls-te-srlg_config; 1934 } 1936 container state { 1937 config false; 1938 description "State parameters related to the SRLG"; 1939 uses mpls-te-srlg_config; 1940 } 1942 list members-list { 1943 key from-address; 1944 description 1945 "List of SRLG members, which are expressed 1946 as IP address endpoints of links contained in the SRLG"; 1948 leaf from-address { 1949 type leafref { 1950 path "../config/from-address"; 1951 require-instance true; 1952 } 1953 description "The from address of the link in the SRLG"; 1954 } 1956 container config { 1957 description 1958 "Configuration parameters relating to the 1959 SRLG members"; 1960 uses mpls-te-srlg-members_config; 1961 } 1963 container state { 1964 config false; 1965 description 1966 "State parameters relating to the SRLG 1967 members"; 1968 uses mpls-te-srlg-members_config; 1969 } 1970 } 1971 } 1972 } 1973 } 1975 grouping tunnel-path_config { 1976 description 1977 "Tunnel path properties grouping"; 1978 container path-computation-method { 1979 description 1980 "select and configure the way the LSP path is 1981 computed"; 1983 leaf path-computation { 1984 type identityref { 1985 base path-computation-method; 1986 } 1987 description "path computation method to use with the LSP"; 1988 } 1990 uses te-lsp-comp-explicit; 1991 uses te-lsp-comp-queried; 1992 uses te-lsp-comp-local; 1993 } 1995 uses path-placement-constraints; 1997 leaf no-cspf { 1998 type empty; 1999 description 2000 "Indicates no CSPF is to be attempted on this 2001 path."; 2002 } 2004 choice sigaling-specific-path-attributes { 2005 description "Signaling-protocol specific path attributes."; 2006 case RSVP { 2007 uses rsvp:rsvp-p2p-path-attributes_config; 2008 } 2009 case SR { 2010 uses sr:sr-path-attributes_config; 2011 } 2012 } 2013 } 2015 grouping te-tunnel_config { 2016 description 2017 "Configuration parameters relevant to a single 2018 traffic engineered tunnel."; 2020 leaf name { 2021 type string; 2022 description "The tunnel name"; 2023 } 2024 leaf type { 2025 type identityref { 2026 base mplst:tunnel-type; 2027 } 2028 description "Tunnel type, p2p or p2mp"; 2029 } 2031 leaf local-id { 2032 type union { 2033 type uint32; 2034 type string; 2035 } 2036 description 2037 "locally signficant optional identifier for the 2038 tunnel; may be a numerical or string value"; 2039 } 2041 leaf description { 2042 type string; 2043 description "optional text description for the tunnel"; 2044 } 2046 leaf admin-status { 2047 type identityref { 2048 base mplst:tunnel-admin-status; 2049 } 2050 default mplst:ADMIN_UP; 2051 description "TE tunnel administrative state."; 2052 } 2054 leaf preference { 2055 type uint8 { 2056 range "1..255"; 2057 } 2058 description "Specifies a preference for this tunnel. 2059 A lower number signifies a better preference"; 2060 } 2062 uses te-tunnel-metric_config; 2063 uses te-tunnel-bandwidth_config; 2064 uses te-tunnel-protection_config; 2065 uses te-tunnel-reoptimize_config; 2067 choice signaling-specific-tunnel-attributes { 2068 description "Signaling-protocol specific path attributes."; 2069 case RSVP { 2070 uses rsvp:rsvp-p2p-tunnel-attributes_config; 2071 } 2073 } 2075 choice tunnel-type { 2076 description 2077 "Describes tunnel by type type"; 2078 case p2p { 2079 leaf destination { 2080 type inet:ip-address; 2081 description 2082 "P2P tunnel destination address"; 2083 } 2084 /* P2P list of path(s) */ 2085 list primary-paths { 2086 key "name"; 2087 leaf name { 2088 type string; 2089 description "Path name"; 2090 } 2091 description 2092 "List of primary paths for this 2093 tunnel."; 2094 leaf preference { 2095 type uint8 { 2096 range "1..255"; 2097 } 2098 description 2099 "Specifies a preference for 2100 this path. The lower the 2101 number higher the 2102 preference"; 2103 } 2104 uses tunnel-path_config; 2105 } 2107 list secondary-paths { 2108 key "name"; 2109 description 2110 "List of secondary paths for this 2111 tunnel."; 2112 leaf name { 2113 type string; 2114 description "Path name"; 2115 } 2116 leaf preference { 2117 type uint8 { 2118 range "1..255"; 2119 } 2120 description 2121 "Specifies a preference for 2122 this path. The lower the 2123 number higher the 2124 preference"; 2125 } 2126 uses tunnel-path_config; 2127 } 2128 } 2129 case p2mp { 2130 // TODO - complete 2131 } 2132 } 2133 } 2135 grouping te-tunnel_state { 2136 description 2137 "Counters and statistical data relevent to a single 2138 tunnel."; 2140 leaf oper-status { 2141 type identityref { 2142 base mplst:lsp-oper-status; 2143 } 2144 description 2145 "The operational status of the TE tunnel"; 2146 } 2148 leaf role { 2149 type identityref { 2150 base mplst:lsp-role; 2151 } 2152 description 2153 "The lsp role at the current node, whether it is headend, 2154 transit or tailend."; 2155 } 2157 container counters { 2158 description 2159 "State data for MPLS label switched paths. This state 2160 data is specific to a single label switched path."; 2162 leaf bytes { 2163 type yang:counter64; 2164 description 2165 "Number of bytes that have been forwarded over the 2166 label switched path."; 2167 } 2168 leaf packets { 2169 type yang:counter64; 2170 description 2171 "Number of pacets that have been forwarded over the 2172 label switched path."; 2173 } 2175 leaf path-changes { 2176 type yang:counter64; 2177 description 2178 "Number of path changes for the label switched path"; 2179 } 2181 leaf state-changes { 2182 type yang:counter64; 2183 description 2184 "Number of state changes for the label switched path"; 2185 } 2187 leaf online-time { 2188 type yang:date-and-time; 2189 description 2190 "Indication of the time the label switched path 2191 transitioned to an Oper Up or in-service state"; 2192 } 2194 leaf current-path-time { 2195 type yang:date-and-time; 2196 description 2197 "Indicates the time the LSP switched onto its 2198 current path. This is reset upon a LSP path 2199 change."; 2200 } 2202 leaf next-reoptimization-time { 2203 type yang:date-and-time; 2204 description 2205 "Indicates the next scheduled time the LSP 2206 will be reoptimized."; 2207 } 2208 } 2209 } 2211 grouping te-tunnels-top { 2212 description 2213 "Top level grouping for TE tunnels"; 2215 list tunnel { 2216 key "name type"; 2217 description "List of TE tunnels"; 2219 leaf name { 2220 type leafref { 2221 path "../config/name"; 2222 require-instance true; 2223 } 2224 description "The tunnel name"; 2225 } 2227 leaf type { 2228 type leafref { 2229 path "../config/type"; 2230 require-instance true; 2231 } 2232 description "The tunnel type, p2p or p2mp."; 2233 } 2235 container config { 2236 description 2237 "Configuration parameters related to TE tunnels:"; 2238 uses te-tunnel_config; 2239 } 2241 container state { 2242 config false; 2243 description "State parameters related to TE interfaces"; 2244 uses te-tunnel_config; 2245 uses te-tunnel_state; 2246 } 2247 } 2248 } 2250 // data definition statements 2252 // augment statements 2254 // rpc statements 2256 // notification statements 2257 } 2258 2260 6.3. MPLS signaling protocol modules 2262 file openconfig-mpls-rsvp.yang 2263 module openconfig-mpls-rsvp { 2265 yang-version "1"; 2267 // namespace 2268 namespace "http://openconfig.net/yang/rsvp"; 2270 prefix "rsvp"; 2272 // import some basic types 2273 import ietf-inet-types { prefix inet; } 2274 import openconfig-mpls-types { prefix mplst; } 2275 import ietf-yang-types { prefix yang; } 2276 import openconfig-types { prefix oc-types; } 2278 // meta 2279 organization "OpenConfig working group"; 2281 contact 2282 "OpenConfig working group 2283 netopenconfig@googlegroups.com"; 2285 description 2286 "Configuration for RSVP-TE signaling, including global protocol 2287 parameters and LSP-specific configuration for constrained-path 2288 LSPs"; 2290 revision "2015-09-18" { 2291 description 2292 "Initial revision"; 2293 reference "TBD"; 2294 } 2296 // extension statements 2298 // feature statements 2300 // identity statements 2302 // typedef statements 2304 // grouping statements 2305 grouping mpls-rsvp-soft-preemption_config { 2306 description "Configuration for MPLS soft preemption"; 2307 leaf enable { 2308 type boolean; 2309 default false; 2310 description "Enables soft preemption on a node."; 2311 } 2313 leaf soft-preemption-timeout { 2314 type uint16 { 2315 range 0..max; 2316 } 2317 // The RFC actually recommends 30 seconds as default. 2318 default 0; 2319 description 2320 "Timeout value for soft preemption to revert 2321 to hard preemption"; 2322 reference "RFC5712 MPLS-TE soft preemption"; 2323 } 2324 } 2326 grouping mpls-rsvp-soft-preemption { 2327 description "Top level group for MPLS soft preemption"; 2328 container soft-preemption { 2329 description 2330 "Protocol options relating to RSVP 2331 soft preemption"; 2332 container config { 2333 description 2334 "Configuration parameters relating to RSVP 2335 soft preemption support"; 2336 uses mpls-rsvp-soft-preemption_config; 2337 } 2338 container state { 2339 config false; 2340 description 2341 "State parameters relating to RSVP 2342 soft preemption support"; 2343 uses mpls-rsvp-soft-preemption_config; 2344 } 2345 } 2346 } 2348 grouping mpls-rsvp-hellos_config { 2349 description "RSVP protocol options configuration."; 2351 leaf hello-interval { 2352 type uint16 { 2353 range 1000..60000; 2354 } 2355 units milliseconds; 2356 default 9000; 2357 description 2358 "set the interval in ms between RSVP hello 2359 messages"; 2360 reference 2361 "RFC 3209: RSVP-TE: Extensions to RSVP for 2362 LSP Tunnels. 2363 RFC 5495: Description of the Resource 2364 Reservation Protocol - Traffic-Engineered 2365 (RSVP-TE) Graceful Restart Procedures"; 2366 } 2368 leaf refresh-reduction { 2369 type boolean; 2370 default true; 2371 description 2372 "enables all RSVP refresh reduction message 2373 bundling, RSVP message ID, reliable message delivery 2374 and summary refresh"; 2375 reference 2376 "RFC 2961 RSVP Refresh Overhead Reduction 2377 Extensions"; 2378 } 2379 } 2381 grouping mpls-rsvp-hellos { 2382 description "Top level grouping for RSVP hellos parameters"; 2383 // TODO: confirm that the described semantics are supported 2384 // on various implementations. Finer grain configuration 2385 // will be vendor-specific 2387 container rsvp-hellos { 2388 description "Top level container for RSVP hello parameters"; 2389 container config { 2390 description 2391 "Configuration parameters relating to RSVP 2392 hellos"; 2393 uses mpls-rsvp-hellos_config; 2394 } 2395 container state { 2396 config false; 2397 description "State information associated with RSVP hellos"; 2398 uses mpls-rsvp-hellos_config; 2399 } 2400 } 2402 } 2404 grouping mpls-rsvp-subscription_config { 2405 description "RSVP subscription configuration"; 2406 leaf subscription { 2407 type oc-types:percentage; 2408 description 2409 "percentage of the interface bandwidth that 2410 RSVP can reserve"; 2411 } 2412 } 2413 grouping mpls-rsvp-subscription { 2414 description "Top level group for RSVP subscription options"; 2415 container subscription { 2416 description 2417 "Bandwidth percentage reservable by RSVP 2418 on an interface"; 2419 container config { 2420 description 2421 "Configuration parameters relating to RSVP 2422 subscription options"; 2423 uses mpls-rsvp-subscription_config; 2424 } 2425 container state { 2426 config false; 2427 description 2428 "State parameters relating to RSVP 2429 subscription options"; 2430 uses mpls-rsvp-subscription_config; 2431 } 2432 } 2433 } 2435 grouping mpls-rsvp-graceful-restart_config { 2436 description 2437 "Configuration parameters relating to RSVP Graceful-Restart"; 2439 leaf enable { 2440 type boolean; 2441 default false; 2442 description "Enables graceful restart on the node."; 2443 } 2445 leaf restart-time { 2446 type uint32; 2447 description 2448 "Graceful restart time (seconds)."; 2449 reference 2450 "RFC 5495: Description of the Resource 2451 Reservation Protocol - Traffic-Engineered 2452 (RSVP-TE) Graceful Restart Procedures"; 2453 } 2454 leaf recovery-time { 2455 type uint32; 2456 description 2457 "RSVP state recovery time"; 2458 } 2459 } 2461 grouping mpls-rsvp-graceful-restart { 2462 description 2463 "Top level group for RSVP graceful-restart 2464 parameters"; 2465 container graceful-restart { 2466 description "TODO"; 2467 container config { 2468 description 2469 "Configuration parameters relating to 2470 graceful-restart"; 2471 uses mpls-rsvp-graceful-restart_config; 2472 } 2473 container state { 2474 config false; 2475 description 2476 "State information associated with 2477 RSVP graceful-restart"; 2478 uses mpls-rsvp-graceful-restart_config; 2479 } 2480 } 2481 } 2483 grouping mpls-rsvp-authentication_config { 2484 description "RSVP authentication parameters container."; 2485 leaf enable { 2486 type boolean; 2487 default false; 2488 description "Enables RSVP authentication on the node."; 2489 } 2490 leaf authentication-key { 2491 type string { 2492 // Juniper supports 1..16 while 2493 // Cisco has a much bigger range, up to 60. 2494 length "1..32"; 2495 } 2496 description 2497 "authenticate RSVP signaling 2498 messages"; 2499 reference 2500 "RFC 2747: RSVP Cryptographic Authentication"; 2501 } 2502 } 2504 grouping mpls-rsvp-authentication { 2505 description 2506 "Top level group for RSVP authentication, 2507 as per RFC2747"; 2508 container authentication { 2509 description "TODO"; 2510 container config { 2511 description 2512 "Configuration parameters relating 2513 to authentication"; 2514 uses mpls-rsvp-authentication_config; 2515 } 2516 container state { 2517 config false; 2518 description 2519 "State information associated 2520 with authentication"; 2521 uses mpls-rsvp-authentication_config; 2522 } 2523 } 2524 } 2526 grouping mpls-rsvp-protection_config { 2527 description "RSVP facility (link/node) protection configuration"; 2529 leaf link-protection-style-requested { 2530 type identityref { 2531 base mplst:protection-type; 2532 } 2533 default mplst:link-node-protection-requested; 2534 description 2535 "style of mpls frr protection desired: 2536 link, link-node, or unprotected"; 2537 } 2539 leaf bypass-optimize-interval { 2540 type uint16; 2541 units seconds; 2542 description 2543 "interval between periodic optimization 2544 of the bypass LSPs"; 2545 // note: this is interface specific on juniper 2546 // on iox, this is global. need to resolve. 2547 } 2548 // to be completed, things like enabling link protection, 2549 // optimization times, etc. 2550 } 2552 grouping mpls-rsvp-link-protection { 2553 description "Top level group for RSVP protection"; 2554 container protection { 2555 description "link-protection (NHOP) related configuration"; 2556 container config { 2557 description "Configuration for link-protection"; 2558 uses mpls-rsvp-protection_config; 2559 } 2560 container state { 2561 config false; 2562 description "State for link-protection"; 2563 uses mpls-rsvp-protection_config; 2564 } 2565 } 2566 } 2568 grouping mpls-rsvp-error-statistics { 2569 description "RSVP-TE packet statistics"; 2570 container error { 2571 description "RSVP-TE error statistics"; 2572 leaf authentication-failure { 2573 type yang:counter32; 2574 description 2575 "Authentication failure count"; 2576 } 2578 leaf path-error { 2579 type yang:counter32; 2580 description 2581 "Path error to client count"; 2582 } 2584 leaf resv-error { 2585 type yang:counter32; 2586 description 2587 "Resv error to client count"; 2588 } 2590 leaf path-timeout { 2591 type yang:counter32; 2592 description 2593 "Path timeout count"; 2595 } 2597 leaf resv-timeout { 2598 type yang:counter32; 2599 description 2600 "Resv timeout count"; 2601 } 2603 leaf rate-limit { 2604 type yang:counter32; 2605 description 2606 "Count of packets that were rate limited"; 2607 } 2609 // TODO - complete the other error statistics 2610 } 2611 } 2613 grouping mpls-rsvp-protocol-statistics { 2614 description "RSVP protocol statistics"; 2615 container protocol { 2616 description "RSVP-TE protocol statistics"; 2617 leaf hello-sent { 2618 type yang:counter32; 2619 description 2620 "Hello sent count"; 2621 } 2623 leaf hello-rcvd { 2624 type yang:counter32; 2625 description 2626 "Hello received count"; 2627 } 2629 leaf path-sent { 2630 type yang:counter32; 2631 description 2632 "Path sent count"; 2633 } 2635 leaf path-rcvd { 2636 type yang:counter32; 2637 description 2638 "Path received count"; 2639 } 2641 // TODO - To be completed the other packet statistics 2642 } 2644 } 2646 grouping mpls-rsvp-statistics { 2647 description "Top level grouping for RSVP protocol state"; 2648 uses mpls-rsvp-protocol-state; 2649 } 2651 grouping rsvp-global { 2652 description "Global RSVP protocol configuration"; 2653 container rsvp-te { 2654 description "RSVP-TE global signaling protocol configuration"; 2656 container rsvp-sessions { 2657 description "Configuration and state of RSVP sessions"; 2659 container config { 2660 description 2661 "Configuration of RSVP sessions on the device"; 2662 } 2664 container state { 2665 config false; 2666 description 2667 "State information relating to RSVP sessions 2668 on the device"; 2669 uses mpls-rsvp-session-state; 2670 } 2671 } 2673 container rsvp-neighbors { 2674 description 2675 "Configuration and state for RSVP neighbors connecting 2676 to the device"; 2678 container config { 2679 description "Configuration of RSVP neighbor information"; 2680 } 2682 container state { 2683 config false; 2684 description 2685 "State information relating to RSVP neighbors"; 2686 uses mpls-rsvp-neighbor-state; 2687 } 2688 } 2690 container global { 2691 description "Platform wide RSVP configuration and state"; 2692 uses mpls-rsvp-graceful-restart; 2693 uses mpls-rsvp-soft-preemption; 2695 container statistics { 2696 config false; 2697 description "Platform wide RSVP state, including counters"; 2698 // TODO - reconcile global and per-interface 2699 // protocol-related statistics 2701 container counters { 2702 config false; 2703 description 2704 "Platform wide RSVP statistics and counters"; 2705 uses mpls-rsvp-global-protocol-state; 2706 uses mpls-rsvp-statistics; 2707 } 2708 } 2709 } 2711 container interface-attributes { 2712 // interfaces, bw percentages, hello timers, etc goes here"; 2714 list interface { 2715 key interface-name; 2716 description "list of per-interface RSVP configurations"; 2718 // TODO: update to interface ref -- move to separate 2719 // augmentation. 2720 leaf interface-name { 2721 type leafref { 2722 path "../config/interface-name"; 2723 require-instance true; 2724 } 2725 description "references a configured IP interface"; 2726 } 2728 container config { 2729 description 2730 "Configuration of per-interface RSVP parameters"; 2732 leaf interface-name { 2733 type string; 2734 description "Name of configured IP interface"; 2735 } 2736 } 2738 container state { 2739 config false; 2740 description 2741 "Per-interface RSVP protocol and state information"; 2742 uses mpls-rsvp-interfaces-state; 2744 container counters { 2745 config false; 2746 description 2747 "Interface specific RSVP statistics and counters"; 2748 uses mpls-rsvp-protocol-state; 2749 } 2750 } 2752 uses mpls-rsvp-hellos; 2753 uses mpls-rsvp-authentication; 2754 uses mpls-rsvp-subscription; 2755 uses mpls-rsvp-link-protection; 2756 } 2757 } 2758 } 2759 } 2761 grouping rsvp-p2p-tunnel-attributes_config { 2762 description "properties of RSPP point-to-point paths"; 2764 leaf source { 2765 type inet:ip-address; 2766 description 2767 "tunnel source address"; 2768 } 2770 leaf soft-preemption { 2771 type boolean; 2772 default false; 2773 description "enables RSVP soft-preemption on this LSP"; 2774 } 2775 } 2777 grouping rsvp-p2p-path-attributes_config { 2778 description "properties of RSPP point-to-point paths"; 2779 leaf setup-priority { 2780 type uint8 { 2781 range 0..7; 2782 } 2783 default 7; 2784 description 2785 "preemption priority during LSP setup, lower is 2786 higher priority; default 7 indicates that LSP will not 2787 preempt established LSPs during setup"; 2788 reference "RFC 3209 - RSVP-TE: Extensions to RSVP for 2789 LSP Tunnels"; 2790 } 2792 leaf hold-priority { 2793 type uint8 { 2794 range 0..7; 2795 } 2796 default 0; 2797 description 2798 "preemption priority once the LSP is established, 2799 lower is higher priority; default 0 indicates other LSPs 2800 will not preempt the LSPs once established"; 2801 reference "RFC 3209 - RSVP-TE: Extensions to RSVP for 2802 LSP Tunnels"; 2803 } 2805 leaf retry-timer { 2806 type uint16 { 2807 range 1..600; 2808 } 2809 units seconds; 2810 description 2811 "sets the time between attempts to establish the 2812 LSP"; 2813 } 2814 } 2816 grouping mpls-rsvp-neighbor-state { 2817 description "State information for RSVP neighbors"; 2819 list rsvp-neighbor { 2820 key "neighbor-address"; 2821 description 2822 "List of RSVP neighbors connecting to the device, 2823 keyed by neighbor address"; 2825 leaf neighbor-address { 2826 type inet:ip-address; 2827 description "Address of RSVP neighbor"; 2828 } 2830 leaf detected-interface { 2831 type string; 2832 description "Interface where RSVP neighbor was detected"; 2833 } 2834 leaf neighbor-status { 2835 type enumeration { 2836 enum UP { 2837 description 2838 "RSVP hello messages are detected from the neighbor"; 2839 } 2840 enum DOWN { 2841 description 2842 "RSVP neighbor not detected as up, due to a 2843 communication failure or IGP notification 2844 the neighbor is unavailable"; 2845 } 2846 } 2847 description "Enumuration of possible RSVP neighbor states"; 2848 } 2850 leaf neighbor-refresh-reduction { 2851 type boolean; 2852 description 2853 "Suppport of neighbor for RSVP refresh reduction"; 2854 reference 2855 "RFC 2961 RSVP Refresh Overhead Reduction 2856 Extensions"; 2857 } 2858 } 2859 } 2861 grouping mpls-rsvp-session-state { 2862 description "State information for RSVP TE sessions"; 2863 list rsvp-session { 2864 key "source-port destination-port 2865 source-address destination-address"; 2866 description "List of RSVP sessions"; 2868 leaf source-address { 2869 type inet:ip-address; 2870 description "Origin address of RSVP session"; 2871 } 2873 leaf destination-address { 2874 type inet:ip-address; 2875 description "Destination address of RSVP session"; 2876 } 2878 leaf source-port { 2879 type uint16; 2880 description "RSVP source port"; 2881 reference "RFC 2205"; 2883 } 2885 leaf destination-port { 2886 type uint16; 2887 description "RSVP source port"; 2888 reference "RFC 2205"; 2890 } 2892 leaf session-state { 2893 type enumeration { 2894 enum UP { 2895 description "RSVP session is up"; 2896 } 2897 enum DOWN { 2898 description "RSVP session is down"; 2899 } 2900 } 2901 description "Enumeration of RSVP session states"; 2902 } 2904 leaf session-type { 2905 type enumeration { 2906 enum SOURCE { 2907 description "RSVP session originates on this device"; 2908 } 2909 enum TRANSIT { 2910 description "RSVP session transits this device only"; 2911 } 2912 enum DESTINATION { 2913 description "RSVP session terminates on this device"; 2914 } 2915 } 2916 description "Enumeration of possible RSVP session types"; 2917 } 2919 leaf tunnel-id { 2920 type uint16; 2921 description "Unique identifier of RSVP session"; 2922 } 2924 leaf label-in { 2925 type mplst:mpls-label; 2926 description 2927 "Incoming MPLS label associated with this RSVP session"; 2928 } 2930 leaf label-out { 2931 type mplst:mpls-label; 2932 description 2933 "Outgoing MPLS label associated with this RSVP session"; 2934 } 2936 leaf-list associated-lsps { 2937 type leafref { 2938 path "/mpls/lsps/constrained-path/tunnel/" + 2939 "config/name"; 2940 } 2941 description 2942 "List of label switched paths associated with this RSVP 2943 session"; 2944 } 2945 } 2946 } //rsvp-session-state 2948 grouping mpls-rsvp-interfaces-state { 2949 description "RSVP state information relevant to an interface"; 2951 list bandwidth { 2952 key priority; 2953 description 2954 "Available and reserved bandwidth by priority on 2955 the interface."; 2957 leaf priority { 2958 type uint8 { 2959 range 0..7; 2960 } 2961 description 2962 "RSVP priority level for LSPs traversing the interface"; 2963 } 2965 leaf available-bandwidth { 2966 type mplst:bandwidth-mbps; 2967 description "Bandwidth currently available"; 2968 } 2970 leaf reserved-bandwidth { 2971 type mplst:bandwidth-mbps; 2972 description "Bandwidth currently reserved"; 2973 } 2974 } 2976 leaf highwater-mark { 2977 type mplst:bandwidth-mbps; 2978 description "Maximum bandwidth ever reserved"; 2980 } 2982 leaf active-reservation-count { 2983 type yang:gauge64; 2984 description "Number of active RSVP reservations"; 2985 } 2986 } 2988 grouping mpls-rsvp-global-protocol-state { 2989 description "RSVP protocol statistics which may not apply 2990 on an interface, but are significant globally."; 2992 leaf path-timeouts { 2993 type yang:counter64; 2994 description "TODO"; 2995 } 2997 leaf reservation-timeouts { 2998 type yang:counter64; 2999 description "TODO"; 3000 } 3002 leaf rate-limited-messages { 3003 type yang:counter64; 3004 description "RSVP messages dropped due to rate limiting"; 3005 } 3006 } 3008 grouping mpls-rsvp-protocol-state { 3009 description "RSVP protocol statistics and message counters"; 3010 leaf in-path-messages { 3011 type yang:counter64; 3012 description "Number of received RSVP Path messages"; 3013 } 3015 leaf in-path-error-messages { 3016 type yang:counter64; 3017 description "Number of received RSVP Path Error messages"; 3018 } 3020 leaf in-path-tear-messages { 3021 type yang:counter64; 3022 description "Number of received RSVP Path Tear messages"; 3023 } 3025 leaf in-reservation-messages { 3026 type yang:counter64; 3027 description "Number of received RSVP Resv messages"; 3029 } 3031 leaf in-reservation-error-messages { 3032 type yang:counter64; 3033 description "Number of received RSVP Resv Error messages"; 3034 } 3036 leaf in-reservation-tear-messages { 3037 type yang:counter64; 3038 description "Number of received RSVP Resv Tear messages"; 3039 } 3041 leaf in-rsvp-hello-messages { 3042 type yang:counter64; 3043 description "Number of received RSVP hello messages"; 3044 } 3046 leaf in-rsvp-srefresh-messages { 3047 type yang:counter64; 3048 description "Number of received RSVP summary refresh messages"; 3049 } 3051 leaf in-rsvp-ack-messages { 3052 type yang:counter64; 3053 description 3054 "Number of received RSVP refresh reduction ack 3055 messages"; 3056 } 3058 leaf out-path-messages { 3059 type yang:counter64; 3060 description "Number of sent RSVP PATH messages"; 3061 } 3063 leaf out-path-error-messages { 3064 type yang:counter64; 3065 description "Number of sent RSVP Path Error messages"; 3066 } 3068 leaf out-path-tear-messages { 3069 type yang:counter64; 3070 description "Number of sent RSVP Path Tear messages"; 3071 } 3073 leaf out-reservation-messages { 3074 type yang:counter64; 3075 description "Number of sent RSVP Resv messages"; 3076 } 3077 leaf out-reservation-error-messages { 3078 type yang:counter64; 3079 description "Number of sent RSVP Resv Error messages"; 3080 } 3082 leaf out-reservation-tear-messages { 3083 type yang:counter64; 3084 description "Number of sent RSVP Resv Tear messages"; 3085 } 3087 leaf out-rsvp-hello-messages { 3088 type yang:counter64; 3089 description "Number of sent RSVP hello messages"; 3090 } 3092 leaf out-rsvp-srefresh-messages { 3093 type yang:counter64; 3094 description "Number of sent RSVP summary refresh messages"; 3095 } 3097 leaf out-rsvp-ack-messages { 3098 type yang:counter64; 3099 description 3100 "Number of sent RSVP refresh reduction ack messages"; 3101 } 3102 } 3104 // data definition statements 3106 // augment statements 3108 // rpc statements 3110 // notification statements 3112 } 3113 3115 file openconfig-mpls-sr.yang 3116 module openconfig-mpls-sr { 3118 yang-version "1"; 3120 // namespace 3121 namespace "http://openconfig.net/yang/sr"; 3123 prefix "sr"; 3125 // import some basic types 3126 import ietf-inet-types { prefix inet; } 3127 import openconfig-mpls-types { prefix mplst; } 3129 // meta 3130 organization "OpenConfig working group"; 3132 contact 3133 "OpenConfig working group 3134 netopenconfig@googlegroups.com"; 3136 description 3137 "Configuration for MPLS with segment routing-based LSPs, 3138 including global parameters, and LSP-specific configuration for 3139 both constrained-path and IGP-congruent LSPs"; 3141 revision "2015-10-14" { 3142 description 3143 "Work in progress"; 3144 reference "TBD"; 3145 } 3147 // extension statements 3149 // feature statements 3151 // identity statements 3153 // typedef statements 3155 grouping srgb_config { 3157 // Matches the "global" configuration options in 3158 // draft-litkowski-spring-yang... 3159 // TODO: request to Stephane for this to be a separate 3160 // grouping such that it can be included. 3162 leaf lower-bound { 3163 type uint32; 3164 description 3165 "Lower value in the block."; 3166 } 3167 leaf upper-bound { 3168 type uint32; 3169 description 3170 "Upper value in the block."; 3171 } 3172 description 3173 "List of global blocks to be advertised."; 3174 } 3176 grouping srgb_state { 3177 description 3178 "State parameters relating to the SRGB"; 3180 leaf size { 3181 type uint32; 3182 description 3183 "Number of indexes in the SRGB block"; 3184 } 3185 leaf free { 3186 type uint32; 3187 description 3188 "Number of SRGB indexes that have not yet been allocated"; 3189 } 3190 leaf used { 3191 type uint32; 3192 description 3193 "Number of SRGB indexes that are currently allocated"; 3194 } 3196 // TODO: where do we put LFIB entries? 3198 } 3200 grouping adjacency-sid_config { 3201 description 3202 "Configuration related to an Adjacency Segment Identifier 3203 (SID)"; 3205 // tuned from draft-litkowski-spring-yang 3206 // TODO: need to send a patch to Stephane 3208 leaf-list advertise { 3209 type enumeration { 3210 enum "PROTECTED" { 3211 description 3212 "Advertise an Adjacency-SID for this interface, which is 3213 eligible to be protected using a local protection 3214 mechanism on the local LSR. The local protection 3215 mechanism selected is dependent upon the configuration 3216 of RSVP-TE FRR or LFA elsewhere on the system"; 3217 } 3218 enum UNPROTECTED { 3219 description 3220 "Advertise an Adajcency-SID for this interface, which is 3221 explicitly excluded from being protected by any local 3222 protection mechanism"; 3223 } 3224 } 3225 description 3226 "Specifies the type of adjacency SID which should be 3227 advertised for the specified entity."; 3228 } 3230 leaf-list groups { 3231 type uint32; 3232 description 3233 "Specifies the groups to which this interface belongs. 3234 Setting a value in this list results in an additional AdjSID 3235 being advertised, with the S-bit set to 1. The AdjSID is 3236 assumed to be protected"; 3237 } 3238 } 3240 grouping interface_config { 3241 description 3242 "Configuration parameters relating to a Segment Routing 3243 enabled interface"; 3245 leaf interface { 3246 type string; 3247 // TODO: this should be changed to a leafref. 3248 description 3249 "Reference to the interface for which segment routing 3250 configuration is to be applied."; 3251 } 3252 } 3254 // grouping statements 3256 grouping sr-global { 3257 description "global segment routing signaling configuration"; 3259 container segment-routing { 3260 description "SR global signaling config"; 3262 list srgb { 3263 key "lower-bound upper-bound"; 3264 uses srgb_config; 3265 container config { 3266 description 3267 "Configuration parameters relating to the Segment Routing 3268 Global Block (SRGB)"; 3269 uses srgb_config; 3270 } 3271 container state { 3272 config false; 3273 description 3274 "State parameters relating to the Segment Routing Global 3275 Block (SRGB)"; 3276 uses srgb_config; 3277 uses srgb_state; 3278 } 3279 description 3280 "List of Segment Routing Global Block (SRGB) entries. These 3281 label blocks are reserved to be allocated as domain-wide 3282 entries."; 3283 } 3285 list interfaces { 3286 key "interface"; 3287 uses interface_config; 3288 container config { 3289 description 3290 "Interface configuration parameters for Segment Routing 3291 relating to the specified interface"; 3292 uses interface_config; 3293 } 3294 container state { 3295 config false; 3296 description 3297 "State parameters for Segment Routing features relating 3298 to the specified interface"; 3299 uses interface_config; 3300 } 3301 container adjacency-sid { 3302 description 3303 "Configuration for Adjacency SIDs that are related to 3304 the specified interface"; 3305 container config { 3306 description 3307 "Configuration parameters for the Adjacency-SIDs 3308 that are related to this interface"; 3309 uses adjacency-sid_config; 3310 } 3311 container state { 3312 config false; 3313 description 3314 "State parameters for the Adjacency-SIDs that are 3315 related to this interface"; 3316 uses adjacency-sid_config; 3317 } 3318 } 3319 description 3320 "List of interfaces with associated segment routing 3321 configuration"; 3322 } 3323 } 3324 } 3326 grouping sr-path-attributes_config { 3327 description 3328 "Configuration parameters relating to SR-TE LSPs"; 3330 leaf sid-selection-mode { 3331 type enumeration { 3332 enum "ADJ-SID-ONLY" { 3333 description 3334 "The SR-TE tunnel should only use adjacency SIDs 3335 to build the SID stack to be pushed for the LSP"; 3336 } 3337 enum "MIXED-MODE" { 3338 description 3339 "The SR-TE tunnel can use a mix of adjacency 3340 and prefix SIDs to build the SID stack to be pushed 3341 to the LSP"; 3342 } 3343 } 3344 default "MIXED-MODE"; 3345 description 3346 "The restrictions placed on the SIDs to be selected by the 3347 calculation method for the SR-TE LSP"; 3348 } 3350 leaf sid-protection-required { 3351 type boolean; 3352 default "false"; 3353 description 3354 "When this value is set to true, only SIDs that are 3355 protected are to be selected by the calculating method 3356 for the SR-TE LSP."; 3357 } 3358 } 3359 grouping sr_fec-address_config { 3360 description 3361 "Configuration parameters relating to a FEC that is to be 3362 advertised by Segment Routing"; 3364 leaf fec-address { 3365 type inet:ip-prefix; 3366 description 3367 "FEC that is to be advertised as part of the Prefix-SID"; 3368 } 3369 } 3371 grouping sr_fec-prefix-sid_config { 3372 description 3373 "Configuration parameters relating to the nature of the 3374 Prefix-SID that is to be advertised for a particular FEC"; 3376 leaf type { 3377 type enumeration { 3378 enum "INDEX" { 3379 description 3380 "Set when the value of the prefix SID should be specified 3381 as an off-set from the SRGB's zero-value. When multiple 3382 SRGBs are specified, the zero-value is the minimum 3383 of their lower bounds"; 3384 } 3385 enum "ABSOLUTE" { 3386 description 3387 "Set when the value of a prefix SID is specified as the 3388 absolute value within an SRGB. It is an error to specify 3389 an absolute value outside of a specified SRGB"; 3390 } 3391 } 3392 default "INDEX"; 3393 description 3394 "Specifies how the value of the Prefix-SID should be 3395 interpreted - whether as an offset to the SRGB, or as an 3396 absolute value"; 3397 } 3399 leaf node-flag { 3400 type boolean; 3401 description 3402 "Specifies that the Prefix-SID is to be treated as a Node-SID 3403 by setting the N-flag in the advertised Prefix-SID TLV in the 3404 IGP"; 3405 } 3406 leaf last-hop-behavior { 3407 type enumeration { 3408 enum "EXPLICIT-NULL" { 3409 description 3410 "Specifies that the explicit null label is to be used 3411 when the penultimate hop forwards a labelled packet to 3412 this Prefix-SID"; 3413 } 3414 enum "UNCHANGED" { 3415 description 3416 "Specicies that the Prefix-SID's label value is to be 3417 left in place when the penultimate hop forwards to this 3418 Prefix-SID"; 3419 } 3420 enum "PHP" { 3421 description 3422 "Specicies that the penultimate hop should pop the 3423 Prefix-SID label before forwarding to the eLER"; 3424 } 3425 } 3426 description 3427 "Configuration relating to the LFIB actions for the 3428 Prefix-SID to be used by the penultimate-hop"; 3429 } 3430 } 3432 grouping igp-tunnel-sr { 3433 description "defintiions for SR-signaled, IGP-based LSP tunnel 3434 types"; 3436 container tunnel { 3437 description "contains configuration stanzas for different LSP 3438 tunnel types (P2P, P2MP, etc.)"; 3440 leaf tunnel-type { 3441 type mplst:tunnel-type; 3442 description "specifies the type of LSP, e.g., P2P or P2MP"; 3443 } 3445 container p2p-lsp { 3446 when "tunnel-type = 'P2P'" { 3447 description "container active when LSP tunnel type is 3448 point to point"; 3449 } 3450 description "properties of point-to-point tunnels"; 3452 list fec { 3453 key "fec-address"; 3454 uses sr_fec-address_config; 3456 description 3457 "List of FECs that are to be originated as SR LSPs"; 3459 container config { 3460 description 3461 "Configuration parameters relating to the FEC to be 3462 advertised by SR"; 3463 uses sr_fec-address_config; 3464 } 3465 container state { 3466 config false; 3467 description 3468 "Operational state relating to a FEC advertised by SR"; 3469 uses sr_fec-address_config; 3470 } 3471 container prefix-sid { 3472 description 3473 "Parameters relating to the Prefix-SID 3474 used for the originated FEC"; 3476 container config { 3477 description 3478 "Configuration parameters relating to the Prefix-SID 3479 used for the originated FEC"; 3480 uses sr_fec-prefix-sid_config; 3481 } 3482 container state { 3483 config false; 3484 description 3485 "Operational state parameters relating to the 3486 Prefix-SID used for the originated FEC"; 3487 uses sr_fec-prefix-sid_config; 3488 } 3489 } 3490 } 3491 } 3492 } 3493 } 3495 grouping igp-lsp-sr-setup { 3496 description "grouping for SR-IGP path setup for IGP-congruent 3497 LSPs"; 3499 container segment-routing { 3500 presence "Presence of this container sets the LSP to use 3501 SR signaling"; 3503 description "segment routing signaling extensions for 3504 IGP-confgruent LSPs"; 3506 uses igp-tunnel-sr; 3508 } 3509 } 3511 // data definition statements 3513 // augment statements 3515 // rpc statements 3517 // notification statements 3519 } 3520 3522 file openconfig-mpls-ldp.yang 3523 module openconfig-mpls-ldp { 3525 yang-version "1"; 3527 // namespace 3528 namespace "http://openconfig.net/yang/ldp"; 3530 prefix "ldp"; 3532 // import some basic types 3533 import ietf-inet-types { prefix inet; } 3534 import openconfig-mpls-types { prefix mplst; } 3536 // meta 3537 organization "OpenConfig working group"; 3539 contact 3540 "OpenConfig working group 3541 netopenconfig@googlegroups.com"; 3543 description 3544 "Configuration of Label Distribution Protocol global and LSP- 3545 specific parameters for IGP-congruent LSPs"; 3547 revision "2015-07-04" { 3548 description 3549 "Initial revision"; 3550 reference "TBD"; 3551 } 3553 // extension statements 3555 // feature statements 3557 // identity statements 3559 // typedef statements 3561 // grouping statements 3563 grouping ldp-global { 3564 description "global LDP signaling configuration"; 3566 container ldp { 3567 description "LDP global signaling configuration"; 3569 container timers { 3570 description "LDP timers"; 3571 } 3572 } 3573 } 3575 grouping igp-tunnel-ldp { 3576 description "common defintiions for LDP-signaled LSP tunnel 3577 types"; 3579 container tunnel { 3580 description "contains configuration stanzas for different LSP 3581 tunnel types (P2P, P2MP, etc.)"; 3583 leaf tunnel-type { 3584 type mplst:tunnel-type; 3585 description "specifies the type of LSP, e.g., P2P or P2MP"; 3586 } 3588 leaf ldp-type { 3589 type enumeration { 3590 enum BASIC { 3591 description "basic hop-by-hop LSP"; 3593 } 3594 enum TARGETED { 3595 description "tLDP LSP"; 3596 } 3597 } 3598 description "specify basic or targeted LDP LSP"; 3599 } 3601 container p2p-lsp { 3602 when "tunnel-type = 'P2P'" { 3603 description "container active when LSP tunnel type is 3604 point to point"; 3605 } 3607 description "properties of point-to-point tunnels"; 3609 leaf-list fec-address { 3610 type inet:ip-prefix; 3611 description "Address prefix for packets sharing the same 3612 forwarding equivalence class for the IGP-based LSP"; 3613 } 3614 } 3616 container p2mp-lsp { 3617 when "tunnel-type = 'P2MP'" { 3618 description "container is active when LSP tunnel type is 3619 point to multipoint"; 3620 } 3622 description "properties of point-to-multipoint tunnels"; 3624 // TODO: specify group/source, etc. 3626 } 3628 container mp2mp-lsp { 3629 when "tunnel-type = 'MP2MP'" { 3630 description "container is active when LSP tunnel type is 3631 multipoint to multipoint"; 3632 } 3634 description "properties of multipoint-to-multipoint tunnels"; 3636 // TODO: specify group/source, etc. 3638 } 3639 } 3640 } 3641 grouping igp-lsp-ldp-setup { 3642 description "grouping for LDP setup attributes"; 3644 container ldp { 3646 presence "Presence of this container sets the LSP to use 3647 LDP signaling"; 3649 description "LDP signaling setup for IGP-congruent LSPs"; 3651 // include tunnel (p2p, p2mp, ...) 3653 uses igp-tunnel-ldp; 3655 } 3656 } 3658 // data definition statements 3660 // augment statements 3662 // rpc statements 3664 // notification statements 3666 } 3667 3669 file openconfig-mpls-igp.yang 3670 submodule openconfig-mpls-igp { 3672 yang-version "1"; 3674 belongs-to "openconfig-mpls" { 3675 prefix "mpls"; 3676 } 3678 // import some basic types 3679 import openconfig-mpls-ldp { prefix ldp; } 3680 import openconfig-mpls-sr { prefix sr; } 3682 // meta 3683 organization "OpenConfig working group"; 3684 contact 3685 "OpenConfig working group 3686 netopenconfig@googlegroups.com"; 3688 description 3689 "Configuration generic configuration parameters for IGP-congruent 3690 LSPs"; 3692 revision "2015-07-04" { 3693 description 3694 "Initial revision"; 3695 reference "TBD"; 3696 } 3698 // extension statements 3700 // feature statements 3702 // identity statements 3704 // typedef statements 3706 // grouping statements 3708 grouping igp-lsp-common { 3709 description "common definitions for IGP-congruent LSPs"; 3711 // container path-attributes { 3712 // description "general path attribute settings for IGP-based 3713 // LSPs"; 3715 //} 3717 } 3719 grouping igp-lsp-setup { 3720 description "signaling protocol definitions for IGP-based LSPs"; 3722 container path-setup-protocol { 3723 description "select and configure the signaling method for 3724 the LSP"; 3726 // uses path-setup-common; 3727 uses ldp:igp-lsp-ldp-setup; 3728 uses sr:igp-lsp-sr-setup; 3729 } 3731 } 3733 // data definition statements 3735 // augment statements 3737 // rpc statements 3739 // notification statements 3741 } 3742 3744 file openconfig-mpls-static.yang 3745 submodule openconfig-mpls-static { 3747 yang-version "1"; 3749 belongs-to "openconfig-mpls" { 3750 prefix "mpls"; 3751 } 3753 // import some basic types 3754 import openconfig-mpls-types {prefix mplst; } 3755 import ietf-inet-types { prefix inet; } 3757 // meta 3758 organization "OpenConfig working group"; 3760 contact 3761 "OpenConfig working group 3762 netopenconfig@googlegroups.com"; 3764 description 3765 "Defines static LSP configuration"; 3767 revision "2015-07-04" { 3768 description 3769 "Initial revision"; 3770 reference "TBD"; 3771 } 3773 // extension statements 3774 // feature statements 3776 // identity statements 3778 // typedef statements 3780 // grouping statements 3782 grouping static-lsp-common { 3783 description "common definitions for static LSPs"; 3785 leaf next-hop { 3786 type inet:ip-address; 3787 description "next hop IP address for the LSP"; 3788 } 3790 leaf incoming-label { 3791 type mplst:mpls-label; 3792 description "label value on the incoming packet"; 3793 } 3795 leaf push-label { 3796 type mplst:mpls-label; 3797 description "label value to push at the current hop for the 3798 LSP"; 3799 } 3800 } 3802 grouping static-lsp-main { 3803 description "grouping for top level list of static LSPs"; 3805 list label-switched-path { 3806 key name; 3807 description "list of defined static LSPs"; 3809 leaf name { 3810 type string; 3811 description "name to identify the LSP"; 3812 } 3814 // TODO: separation into ingress, transit, egress may help 3815 // to figure out what exactly is configured, but need to 3816 // consider whether implementations can support the 3817 // separation 3818 container ingress { 3819 description "Static LSPs for which the router is an 3820 ingress node"; 3822 uses static-lsp-common; 3823 } 3825 container transit { 3826 description "static LSPs for which the router is a 3827 transit node"; 3829 uses static-lsp-common; 3830 } 3832 container egress { 3833 description "static LSPs for which the router is a 3834 egress node"; 3836 uses static-lsp-common; 3837 } 3838 } 3839 } 3841 // data definition statements 3843 // augment statements 3845 // rpc statements 3847 // notification statements 3849 } 3850 3852 7. Contributing Authors 3854 The following people contributed significantly to this document and 3855 are listed below: 3857 Ina Minei 3858 Google 3859 1600 Amphitheatre Parkway 3860 Mountain View, CA 94043 3861 US 3862 Email: inaminei@google.com 3864 Anees Shaikh 3865 Google 3866 1600 Amphitheatre Parkway 3867 Mountain View, CA 94043 3868 US 3869 Email: aashaikh@google.com 3871 Phil Bedard 3872 Cox Communications 3873 Atlanta, GA 30319 3874 US 3875 Email: phil.bedard@cox.com 3877 8. Acknowledgements 3879 The authors are grateful for valuable contributions to this document 3880 and the associated models from: Ebben Aires, Deepak Bansal, Nabil 3881 Bitar, Feihong Chen, Mazen Khaddam. 3883 9. References 3885 [I-D.ietf-idr-bgp-model] 3886 Shaikh, A., Shakir, R., Patel, K., Hares, S., D'Souza, K., 3887 Bansal, D., Clemm, A., Alex, A., Jethanandani, M., and X. 3888 Liu, "BGP Model for Service Provider Networks", draft- 3889 ietf-idr-bgp-model-00 (work in progress), July 2015. 3891 [I-D.ietf-spring-segment-routing-mpls] 3892 Filsfils, C., Previdi, S., Bashandy, A., Decraene, B., 3893 Litkowski, S., Horneffer, M., rjs@rob.sh, r., Tantsura, 3894 J., and E. Crabbe, "Segment Routing with MPLS data plane", 3895 draft-ietf-spring-segment-routing-mpls-02 (work in 3896 progress), October 2015. 3898 [I-D.openconfig-netmod-model-structure] 3899 Shaikh, A., Shakir, R., D'Souza, K., and L. Fang, 3900 "Operational Structure and Organization of YANG Models", 3901 draft-openconfig-netmod-model-structure-00 (work in 3902 progress), March 2015. 3904 [I-D.openconfig-netmod-opstate] 3905 Shakir, R., Shaikh, A., and M. Hines, "Consistent Modeling 3906 of Operational State Data in YANG", draft-openconfig- 3907 netmod-opstate-01 (work in progress), July 2015. 3909 [I-D.shaikh-idr-bgp-model] 3910 Shaikh, A., Shakir, R., Patel, K., Hares, S., D'Souza, K., 3911 Bansal, D., Clemm, A., Alex, A., Jethanandani, M., and X. 3912 Liu, "BGP Model for Service Provider Networks", draft- 3913 shaikh-idr-bgp-model-02 (work in progress), June 2015. 3915 [I-D.shakir-rtgwg-sr-performance-engineered-lsps] 3916 Shakir, R., Vernals, D., and A. Capello, "Performance 3917 Engineered LSPs using the Segment Routing Data-Plane", 3918 draft-shakir-rtgwg-sr-performance-engineered-lsps-00 (work 3919 in progress), July 2013. 3921 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 3922 DOI 10.17487/RFC3688, January 2004, 3923 . 3925 [RFC5443] Jork, M., Atlas, A., and L. Fang, "LDP IGP 3926 Synchronization", RFC 5443, DOI 10.17487/RFC5443, March 3927 2009, . 3929 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 3930 the Network Configuration Protocol (NETCONF)", RFC 6020, 3931 DOI 10.17487/RFC6020, October 2010, 3932 . 3934 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 3935 RFC 6991, DOI 10.17487/RFC6991, July 2013, 3936 . 3938 Authors' Addresses 3940 Joshua George 3941 Google 3942 1600 Amphitheatre Pkwy 3943 Mountain View, CA 94043 3944 US 3946 Email: jgeorge@google.com 3948 Luyuan Fang 3949 Microsoft 3950 15590 NE 31st St 3951 Redmond, WA 98052 3952 US 3954 Email: lufang@microsoft.com 3956 Eric Osborne 3957 Level 3 3959 Email: eric.osborne@level3.com 3960 Rob Shakir 3961 Jive Communications, Inc. 3962 1275 West 1600 North, Suite 100 3963 Orem, UT 84057 3965 Email: rjs@rob.sh