idnits 2.17.1 draft-ietf-spring-sr-yang-30.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 186 has weird spacing: '...r-bound uin...' == Line 187 has weird spacing: '...r-bound uin...' == Line 190 has weird spacing: '...r-bound uin...' == Line 191 has weird spacing: '...r-bound uin...' == Line 1236 has weird spacing: '...t index which...' -- The document date (January 25, 2021) is 737 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 6 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 SPRING Working Group S. Litkowski 3 Internet-Draft Cisco Systems 4 Intended status: Standards Track Y. Qu 5 Expires: July 29, 2021 Futurewei 6 A. Lindem 7 Cisco Systems 8 P. Sarkar 9 Arrcus Networks 10 J. Tantsura 11 Apstra 12 January 25, 2021 14 YANG Data Model for Segment Routing 15 draft-ietf-spring-sr-yang-30 17 Abstract 19 This document defines a YANG data model for segment routing 20 configuration and operation, which is to be augmented by different 21 segment routing data planes. The document also defines a YANG model 22 that is intended to be used on network elements to configure or 23 operate the segment routing MPLS data plane, as well as some generic 24 containers to be reused by IGP protocol modules to support segment 25 routing. 27 Status of This Memo 29 This Internet-Draft is submitted in full conformance with the 30 provisions of BCP 78 and BCP 79. 32 Internet-Drafts are working documents of the Internet Engineering 33 Task Force (IETF). Note that other groups may also distribute 34 working documents as Internet-Drafts. The list of current Internet- 35 Drafts is at https://datatracker.ietf.org/drafts/current/. 37 Internet-Drafts are draft documents valid for a maximum of six months 38 and may be updated, replaced, or obsoleted by other documents at any 39 time. It is inappropriate to use Internet-Drafts as reference 40 material or to cite them other than as "work in progress." 42 This Internet-Draft will expire on July 29, 2021. 44 Copyright Notice 46 Copyright (c) 2021 IETF Trust and the persons identified as the 47 document authors. All rights reserved. 49 This document is subject to BCP 78 and the IETF Trust's Legal 50 Provisions Relating to IETF Documents 51 (https://trustee.ietf.org/license-info) in effect on the date of 52 publication of this document. Please review these documents 53 carefully, as they describe your rights and restrictions with respect 54 to this document. Code Components extracted from this document must 55 include Simplified BSD License text as described in Section 4.e of 56 the Trust Legal Provisions and are provided without warranty as 57 described in the Simplified BSD License. 59 Table of Contents 61 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 62 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 63 2.1. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 3 64 2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3 65 3. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 66 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 6 67 5. IGP Control plane configuration . . . . . . . . . . . . . . . 6 68 5.1. IGP interface configuration . . . . . . . . . . . . . . . 7 69 5.1.1. Adjacency SID properties . . . . . . . . . . . . . . 7 70 5.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 7 71 5.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 8 72 6. State Data . . . . . . . . . . . . . . . . . . . . . . . . . 8 73 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8 74 8. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 8 75 8.1. YANG Module for Segment Routing . . . . . . . . . . . . . 9 76 8.2. YANG Module for Segment Routing Common Types . . . . . . 10 77 8.3. YANG Module for Segment Routing MPLS . . . . . . . . . . 16 78 9. Security Considerations . . . . . . . . . . . . . . . . . . . 27 79 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 29 80 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 81 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 82 12.1. Normative References . . . . . . . . . . . . . . . . . . 30 83 12.2. Informative References . . . . . . . . . . . . . . . . . 32 84 Appendix A. Configuration examples . . . . . . . . . . . . . . . 32 85 A.1. SR MPLS with IPv4 . . . . . . . . . . . . . . . . . . . . 32 86 A.2. SR MPLS with IPv6 . . . . . . . . . . . . . . . . . . . . 35 87 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38 89 1. Introduction 91 This document defines a YANG data model [RFC7950] for segment routing 92 [RFC8402] configuration and operation. The document also defines a 93 YANG model that is intended to be used on network elements to 94 configure or operate the segment routing MPLS data plane [RFC8660]. 95 This document does not define the IGP extensions to support segment 96 routing but defines generic groupings to be reused by IGP extension 97 modules. The reason of this design choice is to not require 98 implementations to support all IGP extensions. For example, an 99 implementation may support the IS-IS extension but not the OSPF 100 extension. 102 The YANG modules in this document conform to the Network Management 103 Datastore Architecture (NMDA) [RFC8342]. 105 2. Terminology and Notation 107 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 108 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 109 "OPTIONAL" in this document are to be interpreted as described in BCP 110 14 [RFC2119] [RFC8174] when, and only when, they appear in all 111 capitals, as shown here. 113 2.1. Tree diagram 115 Tree diagrams used in this document follow the notation defined in 116 [RFC8340]. 118 2.2. Prefixes in Data Node Names 120 In this document, names of data nodes, actions, and other data model 121 objects are often used without a prefix, as long as it is clear from 122 the context in which YANG module each name is defined. Otherwise, 123 names are prefixed using the standard prefix associated with the 124 corresponding YANG module, as shown in Table 1. 126 +----------+--------------------+-----------+ 127 | Prefix | YANG module | Reference | 128 +----------+--------------------+-----------+ 129 | if | ietf-interfaces | [RFC8343] | 130 | rt | ietf-routing | [RFC8349] | 131 | rt-types | ietf-routing-types | [RFC8294] | 132 | yang | ietf-yang-types | [RFC6991] | 133 | inet | ietf-inet-types | [RFC6991] | 134 +----------+--------------------+-----------+ 136 Table 1: Prefixes and Corresponding YANG Modules 138 3. Design of the Data Model 140 Module ietf-segment-routing augments the routing container in the 141 ietf-routing model [RFC8349], and defines generic segment routing 142 configuration and operational state. This module is augmented by 143 modules supporting different data planes. 145 Module ietf-segment-routing-mpls augments ietf-segment-routing, and 146 supports SR MPLS data plane configuration and operational state. 148 Module ietf-segment-routing-common defines generic types and 149 groupings that SHOULD be reused by IGP extension modules. 151 module: ietf-segment-routing 152 augment /rt:routing: 153 +--rw segment-routing 155 module: ietf-segment-routing-mpls 156 augment /rt:routing/sr:segment-routing: 157 +--rw sr-mpls 158 +--rw bindings 159 | +--rw mapping-server {mapping-server}? 160 | | +--rw policy* [name] 161 | | +--rw name string 162 | | +--rw entries 163 | | +--rw mapping-entry* [prefix algorithm] 164 | | +--rw prefix inet:ip-prefix 165 | | +--rw value-type? enumeration 166 | | +--rw start-sid uint32 167 | | +--rw range? uint32 168 | | +--rw algorithm identityref 169 | +--rw connected-prefix-sid-map 170 | | +--rw connected-prefix-sid* [prefix algorithm] 171 | | +--rw prefix inet:ip-prefix 172 | | +--rw value-type? enumeration 173 | | +--rw start-sid uint32 174 | | +--rw range? uint32 175 | | +--rw algorithm identityref 176 | | +--rw last-hop-behavior? enumeration 177 | +--rw local-prefix-sid 178 | +--rw local-prefix-sid* [prefix algorithm] 179 | +--rw prefix inet:ip-prefix 180 | +--rw value-type? enumeration 181 | +--rw start-sid uint32 182 | +--rw range? uint32 183 | +--rw algorithm identityref 184 +--rw srgb 185 | +--rw srgb* [lower-bound upper-bound] 186 | +--rw lower-bound uint32 187 | +--rw upper-bound uint32 188 +--rw srlb 189 | +--rw srlb* [lower-bound upper-bound] 190 | +--rw lower-bound uint32 191 | +--rw upper-bound uint32 192 +--ro label-blocks* [] 193 | +--ro lower-bound? uint32 194 | +--ro upper-bound? uint32 195 | +--ro size? uint32 196 | +--ro free? uint32 197 | +--ro used? uint32 198 | +--ro scope? enumeration 199 +--ro sid-db 200 +--ro sid* [target sid source source-protocol binding-type] 201 +--ro target string 202 +--ro sid uint32 203 +--ro algorithm? uint8 204 +--ro source inet:ip-address 205 +--ro used? boolean 206 +--ro source-protocol -> /rt:routing 207 /control-plane-protocols 208 /control-plane-protocol/name 209 +--ro binding-type enumeration 210 +--ro scope? enumeration 212 notifications: 213 +---n segment-routing-srgb-collision 214 | +--ro srgb-collisions* [] 215 | +--ro lower-bound? uint32 216 | +--ro upper-bound? uint32 217 | +--ro routing-protocol? -> /rt:routing 218 | /control-plane-protocols 219 | /control-plane-protocol/name 220 | +--ro originating-rtr-id? router-or-system-id 221 +---n segment-routing-global-sid-collision 222 | +--ro received-target? string 223 | +--ro new-sid-rtr-id? router-or-system-id 224 | +--ro original-target? string 225 | +--ro original-sid-rtr-id? router-or-system-id 226 | +--ro index? uint32 227 | +--ro routing-protocol? -> /rt:routing 228 | /control-plane-protocols 229 | /control-plane-protocol/name 230 +---n segment-routing-index-out-of-range 231 +--ro received-target? string 232 +--ro received-index? uint32 233 +--ro routing-protocol? -> /rt:routing 234 /control-plane-protocols 235 /control-plane-protocol/name 237 4. Configuration 239 The module ietf-segment-routing-mpls augments the "/rt:routing/ 240 sr:segment-routing:" with an sr-mpls container. This container 241 defines all the configuration parameters related to the segment- 242 routing MPLS data plane. 244 The sr-mpls configuration is split in global configuration and 245 interface configuration. 247 The global configuration includes : 249 o bindings : Defines prefix to SID mappings. The operator can 250 control advertisement of Prefix-SID independently for IPv4 and 251 IPv6. Two types of mappings are available: 253 * Mapping-server : maps non local prefixes to a segment ID. 254 Configuration of bindings does not automatically allow 255 advertisement of those bindings. Advertisement must be 256 controlled by each routing-protocol instance (see Section 5). 257 Multiple mapping policies may be defined. 259 * Connected prefixes : maps connected prefixes to a segment ID. 260 Advertisement of the mapping will be done by IGP when enabled 261 for segment routing (see Section 5). The SID value can be 262 expressed as an index (default), or an absolute value. The 263 "last-hop-behavior" configuration dictates the MPLS PHP 264 behavior: "explicit-null", "php", or "non-php". 266 o SRGB (Segment Routing Global Block): Defines a list of label 267 blocks represented by a pair of lower-bound/upper-bound labels. 268 The SRGB is also agnostic to the control plane used. So all 269 routing-protocol instance will have to advertise the same SRGB. 271 o SRLB (Segment Routing Local Block): Defines a list of label blocks 272 represented by a pair of lower-bound/upper-bound labels, reserved 273 for local SIDs. 275 5. IGP Control plane configuration 277 Support of segment-routing extensions for a particular IGP control 278 plane is done by augmenting routing-protocol configuration with 279 segment-routing extensions. This augmentation SHOULD be part of 280 separate YANG modules in order to not create any dependency for 281 implementations to support all protocol extensions. 283 This module defines groupings that SHOULD be used by IGP segment 284 routing modules. 286 The "sr-control-plane" grouping defines the generic global 287 configuration for the IGP. 289 The "enabled" leaf enables segment-routing extensions for the 290 routing-protocol instance. 292 The "bindings" container controls the routing-protocol instance's 293 advertisement of local bindings and the processing of received 294 bindings. 296 5.1. IGP interface configuration 298 The interface configuration is part of the "igp-interface" grouping 299 and includes Adjacency SID properties. 301 5.1.1. Adjacency SID properties 303 5.1.1.1. Bundling 305 In case of parallel IP links between routers, an additional Adjacency 306 SID [RFC8402] may be advertised representing more than one adjacency 307 (i.e., a bundle of adjacencies). The "advertise-adj-group-sid" 308 configuration controls controls for which group(s) an additional 309 adjacency SID is advertised. 311 The "advertise-adj-group-sid" is a list of "group-id". The "group- 312 id" will identify interfaces that are bundled together. 314 +-------+ +------+ 315 | | ------- L1 ---- | | 316 | R1 | ------- L2 ---- | R2 | 317 | | ------- L3 ---- | | 318 | | ------- L4 ---- | | 319 +-------+ +------+ 321 In the figure above, R1 and R2 are interconnected by four links. A 322 routing protocol adjacency is established on each link. Operator 323 would like to create segment-routing Adj-SIDs that represent some 324 bundles of links. We can imagine two different bundles : L1/L2 and 325 L3/L4. To achieve this behavior, the service provider will configure 326 a "group-id" X for both interfaces L1 and L2 and a "group-id" Y for 327 both interfaces L3 and L4. This will result in R1 advertising an 328 additional an Adj-SID for each adjacency, for example an Adj-SID with 329 a value of 400 will be added to L1 and L2. An Adj-SID and a value of 330 500 will be added to L3 and L4. As L1/L2 and L3/L4 does not share 331 the same "group-id", a different SID value will be allocated. 333 5.1.1.2. Protection 335 The "advertise-protection" defines how protection for an interface is 336 advertised. It does not control the activation or deactivation of 337 protection. If the "single" option is used, a single Adj-SID will be 338 advertised for the interface. If the interface is protected, the 339 B-Flag for the Adj-SID advertisement will be set. If the "dual" 340 option is used and if the interface is protected, two Adj-SIDs will 341 be advertised for the interface adjacencies. One Adj-SID will always 342 have the B-Flag set and the other will have the B-Flag clear. This 343 option is intended to be used in the case of traffic engineering 344 where a path must use either protected segments or non-protected 345 segments. 347 6. State Data 349 The operational states contain information reflecting the usage of 350 allocated SRGB labels. 352 It also includes a list of all global SIDs, their associated 353 bindings, and other information such as the source protocol and 354 algorithm. 356 7. Notifications 358 The model defines the following notifications for segment-routing. 360 o segment-routing-srgb-collision: Raised when a control plane 361 advertised SRGB blocks have conflicts. 363 o segment-routing-global-sid-collision: Raised when a control plane 364 advertised index is already associated with another target (in 365 this version, the only defined targets are IPv4 and IPv6 366 prefixes). 368 o segment-routing-index-out-of-range: Raised when a control plane 369 advertised index falls outside the range of SRGBs configured for 370 the network device. 372 8. YANG Modules 374 There are three YANG modules included in this document. 376 The following RFCs and drafts are not referenced in the document text 377 but are referenced in the ietf-segment-routing.yang, ietf-segment- 378 routing-common.yang, and/or ietf-segment-routing-mpls.yang modules: 379 [RFC6991], [RFC8294], [RFC8476], [RFC8491], [RFC8665], [RFC8667], 380 [RFC8669], and [RFC8814]. 382 8.1. YANG Module for Segment Routing 384 ietf-segment-routing.yang: This module defines a generic framework 385 for Segment Routing, and it is to be augmented by models for 386 different SR data planes. 388 file "ietf-segment-routing@2021-01-25.yang" 389 module ietf-segment-routing { 390 yang-version 1.1; 391 namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing"; 392 prefix sr; 394 import ietf-routing { 395 prefix rt; 396 reference "RFC 8349: A YANG Data Model for Routing 397 Management (NMDA Version)"; 398 } 400 organization 401 "IETF SPRING - SPRING Working Group"; 402 contact 403 "WG Web: 404 WG List: 406 Author: Stephane Litkowski 407 408 Author: Yingzhen Qu 409 410 Author: Acee Lindem 411 412 Author: Pushpasis Sarkar 413 414 Author: Jeff Tantsura 415 417 "; 418 description 419 "The YANG module defines a generic framework for Segment 420 Routing. It is to be augmented by models for different 421 SR data planes. 423 This YANG model conforms to the Network Management 424 Datastore Architecture (NMDA) as described in RFC 8242. 426 Copyright (c) 2021 IETF Trust and the persons identified as 427 authors of the code. All rights reserved. 429 Redistribution and use in source and binary forms, with or 430 without modification, is permitted pursuant to, and subject 431 to the license terms contained in, the Simplified BSD License 432 set forth in Section 4.c of the IETF Trust's Legal Provisions 433 Relating to IETF Documents 434 (https://trustee.ietf.org/license-info). 436 This version of this YANG module is part of RFC XXXX; 437 see the RFC itself for full legal notices. 439 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 440 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 441 'MAY', and 'OPTIONAL' in this document are to be interpreted as 442 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 443 they appear in all capitals, as shown here."; 445 reference "RFC XXXX: YANG Data Model for Segment Routing."; 447 revision 2021-01-25 { 448 description 449 "Initial Version"; 450 reference "RFC XXXX: YANG Data Model for Segment Routing."; 451 } 453 augment "/rt:routing" { 454 description 455 "This module augments routing data model (RFC 8349) 456 with Segment Routing (SR)."; 457 container segment-routing { 458 description 459 "Segment Routing configuration. This container 460 is to be augmented by models for different SR 461 data planes."; 462 reference "RFC 8402: Segment Routing Architecture."; 463 } 464 } 465 } 466 468 8.2. YANG Module for Segment Routing Common Types 470 ietf-segment-routing-common.yang: This module defines a collection of 471 generic types and groupings for SR as defined in [RFC8402]. 473 file "ietf-segment-routing-common@2021-01-25.yang" 474 module ietf-segment-routing-common { 475 yang-version 1.1; 476 namespace 477 "urn:ietf:params:xml:ns:yang:ietf-segment-routing-common"; 478 prefix sr-cmn; 480 import ietf-inet-types { 481 prefix inet; 482 reference "RFC 6991: Common YANG Data Types"; 483 } 485 organization 486 "IETF SPRING - SPRING Working Group"; 488 contact 489 "WG Web: 490 WG List: 492 Author: Stephane Litkowski 493 494 Author: Yingzhen Qu 495 496 Author: Acee Lindem 497 498 Author: Pushpasis Sarkar 499 500 Author: Jeff Tantsura 501 503 "; 504 description 505 "The YANG module defines a collection of generic types and 506 groupings for Segment Routing (SR) as described in RFC 8402. 508 This YANG model conforms to the Network Management 509 Datastore Architecture (NMDA) as described in RFC 8242. 511 Copyright (c) 2021 IETF Trust and the persons identified as 512 authors of the code. All rights reserved. 514 Redistribution and use in source and binary forms, with or 515 without modification, is permitted pursuant to, and subject 516 to the license terms contained in, the Simplified BSD License 517 set forth in Section 4.c of the IETF Trust's Legal Provisions 518 Relating to IETF Documents 519 (https://trustee.ietf.org/license-info). 521 This version of this YANG module is part of RFC XXXX; 522 see the RFC itself for full legal notices. 524 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 525 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 526 'MAY', and 'OPTIONAL' in this document are to be interpreted as 527 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 528 they appear in all capitals, as shown here."; 530 reference "RFC XXXX: YANG Data Model for Segment Routing."; 532 revision 2021-01-25 { 533 description 534 "Initial version"; 535 reference "RFC XXXX: YANG Data Model for Segment Routing."; 536 } 538 feature sid-last-hop-behavior { 539 description 540 "Configurable last hop behavior."; 541 reference "RFC 8660: Segment Routing with the MPLS Data Plane"; 542 } 544 identity prefix-sid-algorithm { 545 description 546 "Base identity for prefix-sid algorithm."; 547 reference "RFC 8402: Segment Routing Architecture"; 548 } 550 identity prefix-sid-algorithm-shortest-path { 551 base prefix-sid-algorithm; 552 description 553 "Shortest Path First (SPF) prefix-sid algorithm. This 554 is the default algorithm."; 555 } 557 identity prefix-sid-algorithm-strict-spf { 558 base prefix-sid-algorithm; 559 description 560 "This algorithm mandates that the packet is forwarded 561 according to ECMP-aware SPF algorithm."; 562 } 564 grouping srlr { 565 description 566 "Grouping for SR Label Range configuration."; 567 leaf lower-bound { 568 type uint32; 569 description 570 "Lower value in the label range."; 571 } 572 leaf upper-bound { 573 type uint32; 574 must "../lower-bound < ../upper-bound" { 575 error-message 576 "The upper-bound must be greater than the lower-bound."; 577 description 578 "The value must be greater than 'lower-bound'."; 579 } 580 description 581 "Upper value in the label range."; 582 } 583 } 585 grouping srgb { 586 description 587 "Grouping for SR Global Label range."; 588 list srgb { 589 key "lower-bound upper-bound"; 590 ordered-by user; 591 description 592 "List of global blocks to be advertised."; 593 uses srlr; 594 } 595 } 597 grouping srlb { 598 description 599 "Grouping for SR Local Block range."; 600 list srlb { 601 key "lower-bound upper-bound"; 602 ordered-by user; 603 description 604 "List of SRLBs."; 605 uses srlr; 606 } 607 } 609 grouping sid-value-type { 610 description 611 "Defines how the SID value is expressed."; 612 leaf value-type { 613 type enumeration { 614 enum "index" { 615 description 616 "The value will be interpreted as an index."; 617 } 618 enum "absolute" { 619 description 620 "The value will become interpreted as an absolute 621 value."; 622 } 623 } 624 default "index"; 625 description 626 "This leaf defines how value must be interpreted."; 627 } 628 } 630 grouping prefix-sid { 631 description 632 "This grouping defines cfg of prefix SID."; 633 leaf prefix { 634 type inet:ip-prefix; 635 description 636 "connected prefix sid."; 637 } 638 uses prefix-sid-attributes; 639 } 641 grouping ipv4-sid { 642 description 643 "Grouping for an IPv4 prefix SID."; 644 leaf prefix { 645 type inet:ipv4-prefix; 646 description 647 "Connected IPv4 prefix sid."; 648 } 649 uses prefix-sid-attributes; 650 } 651 grouping ipv6-sid { 652 description 653 "Grouping for an IPv6 prefix SID."; 654 leaf prefix { 655 type inet:ipv6-prefix; 656 description 657 "Connected ipv6 prefix sid."; 658 } 659 uses prefix-sid-attributes; 660 } 662 grouping last-hop-behavior { 663 description 664 "Defines last hop behavior"; 665 leaf last-hop-behavior { 666 if-feature "sid-last-hop-behavior"; 667 type enumeration { 668 enum "explicit-null" { 669 description 670 "Use explicit-null for the SID."; 671 } 672 enum "no-php" { 673 description 674 "Do not use MPLS Penultimate Hop Popping (PHP) 675 for the SID."; 676 } 677 enum "php" { 678 description 679 "Use MPLS PHP for the SID."; 680 } 681 } 682 description 683 "Configure last hop behavior."; 684 } 685 } 687 grouping prefix-sid-attributes { 688 description 689 "Grouping for Segment Routing (SR) prefix attributes."; 690 uses sid-value-type; 691 leaf start-sid { 692 type uint32; 693 mandatory true; 694 description 695 "Value associated with prefix. The value must be 696 interpreted in the context of value-type."; 697 } 698 leaf range { 699 type uint32; 700 description 701 "Indicates how many SIDs can be allocated."; 702 } 703 leaf algorithm { 704 type identityref { 705 base prefix-sid-algorithm; 706 } 707 description 708 "Prefix-sid algorithm."; 709 } 710 } 711 } 712 714 8.3. YANG Module for Segment Routing MPLS 716 ietf-segment-routing-mpls.yang: This module defines the configuration 717 and operational states for the Segment Routing MPLS data plane. 719 file "ietf-segment-routing-mpls@2021-01-25.yang" 720 module ietf-segment-routing-mpls { 721 yang-version 1.1; 722 namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls"; 723 prefix sr-mpls; 725 import ietf-inet-types { 726 prefix inet; 727 reference "RFC 6991: Common YANG Data Types"; 728 } 729 import ietf-routing { 730 prefix rt; 731 reference "RFC 8349: A YANG Data Model for Routing 732 Management (NMDA Version)"; 733 } 734 import ietf-routing-types { 735 prefix rt-types; 736 reference "RFC 8294: Common YANG Data Types for the 737 Routing Area"; 738 } 739 import ietf-segment-routing { 740 prefix sr; 741 reference "RFC XXXX: YANG Data Model for Segment Routing."; 742 } 743 import ietf-segment-routing-common { 744 prefix sr-cmn; 745 reference "RFC XXXX: YANG Data Model for Segment Routing."; 746 } 748 organization 749 "IETF SPRING - SPRING Working Group"; 750 contact 751 "WG Web: 752 WG List: 754 Author: Stephane Litkowski 755 756 Author: Yingzhen Qu 757 758 Author: Acee Lindem 759 760 Author: Pushpasis Sarkar 761 763 Author: Jeff Tantsura 764 766 "; 767 description 768 "The YANG module defines a generic configuration model for 769 the Segment Routing MPLS data plane. 771 This YANG model conforms to the Network Management 772 Datastore Architecture (NMDA) as described in RFC 8242. 774 Copyright (c) 2021 IETF Trust and the persons identified as 775 authors of the code. All rights reserved. 777 Redistribution and use in source and binary forms, with or 778 without modification, is permitted pursuant to, and subject 779 to the license terms contained in, the Simplified BSD License 780 set forth in Section 4.c of the IETF Trust's Legal Provisions 781 Relating to IETF Documents 782 (https://trustee.ietf.org/license-info). 784 This version of this YANG module is part of RFC XXXX; 785 see the RFC itself for full legal notices. 787 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 788 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 789 'MAY', and 'OPTIONAL' in this document are to be interpreted as 790 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 791 they appear in all capitals, as shown here."; 793 reference "RFC XXXX: YANG Data Model for Segment Routing."; 795 revision 2021-01-25 { 796 description 797 "Initial Version"; 798 reference "RFC XXXX: YANG Data Model for Segment Routing."; 799 } 801 feature mapping-server { 802 description 803 "Support for Segment Routing Mapping Server (SRMS)."; 804 reference "RFC 8661: Segment Routing MPLS Interworking 805 with LDP"; 806 } 808 feature protocol-srgb { 809 description 810 "Support for per-protocol Segment Routing Global Block 811 (SRGB) configuration."; 812 reference "RFC 8660: Segment Routing with the MPLS 813 Data Plane"; 814 } 816 typedef system-id { 817 type string { 818 pattern 819 '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; 820 } 821 description 822 "This type defines IS-IS system-id using pattern, 823 An example system-id is 0143.0438.AEF0"; 824 } 826 typedef router-or-system-id { 827 type union { 828 type rt-types:router-id; 829 type system-id; 830 } 831 description 832 "OSPF/BGP router-id or ISIS system ID."; 833 } 835 grouping sr-control-plane { 836 description 837 "Defines protocol configuration."; 838 container segment-routing { 839 description 840 "Segment Routing global configuration."; 841 leaf enabled { 842 type boolean; 843 default "false"; 844 description 845 "Enables segment-routing control-plane protocol 846 extensions."; 847 } 848 container bindings { 849 if-feature mapping-server; 850 description 851 "Control of binding advertisement and reception."; 852 container advertise { 853 description 854 "Control advertisement of local mappings 855 in binding TLVs."; 856 leaf-list policies { 857 type leafref { 858 path "/rt:routing/sr:segment-routing/sr-mpls:sr-mpls" 859 + "/sr-mpls:bindings/sr-mpls:mapping-server" 860 + "/sr-mpls:policy/sr-mpls:name"; 861 } 862 description 863 "List of binding advertisement policies."; 864 } 865 } 866 leaf receive { 867 type boolean; 868 default "true"; 869 description 870 "Allow the reception and usage of binding TLVs."; 871 } 872 } 873 } 874 } 876 grouping igp-interface { 877 description 878 "Grouping for IGP interface configuration."; 879 container segment-routing { 880 description 881 "Container for SR interface configuration."; 882 container adjacency-sid { 883 description 884 "Adjacency SID configuration."; 885 reference "RFC 8660: Segment Routing with the MPLS 886 Data Plane"; 887 list adj-sids { 888 key "value"; 889 uses sr-cmn:sid-value-type; 890 leaf value { 891 type uint32; 892 description 893 "Value of the Adj-SID."; 894 } 895 leaf protected { 896 type boolean; 897 default false; 898 description 899 "It is used to protect the manual adj-SID, e.g. using 900 IPFRR or MPLS-FRR."; 901 } 902 leaf weight { 903 type uint8; 904 description 905 "The load-balancing factor over parallel adjacencies."; 906 reference "RFC 8402: Segment Routing Architecture 907 RFC 8665: OSPF Extensions for Segment Routing 908 RFC 8667: IS-IS Extensions for Segment 909 Routing"; 910 } 911 description 912 "List of adj-sid configuration."; 913 } 914 list advertise-adj-group-sid { 915 key "group-id"; 916 description 917 "Control advertisement of S or G flag. Enable 918 advertisement of a common Adj-SID for parallel 919 links."; 920 reference "RFC 8665: OSPF Extensions for Segment Routing 921 Section 6.1 922 RFC 8667: IS-IS Extensions for Segment 923 Routing Section 2.2.1"; 924 leaf group-id { 925 type uint32; 926 description 927 "The value is an internal value to identify a 928 group-ID. Interfaces with the same group-ID 929 will be bundled together."; 930 } 931 } 932 leaf advertise-protection { 933 type enumeration { 934 enum "single" { 935 description 936 "A single Adj-SID is associated with the adjacency 937 and reflects the protection configuration."; 938 } 939 enum "dual" { 940 description 941 "Two Adj-SIDs will be associated with the adjacency 942 if the interface is protected. In this case, one 943 Adj-SID will be advertised with the backup-flag set 944 and the other with the backup-flag clear. In the 945 case where protection is not configured, a single 946 Adj-SID will be advertised with the backup-flag 947 clear."; 948 } 949 } 950 description 951 "If set, the Adj-SID refers to a protected adjacency."; 952 reference "RFC 8665: OSPF Extensions for Segment Routing 953 Section 6.1 954 RFC 8667: IS-IS Extensions for Segment 955 Routing Section 2.2.1"; 956 } 957 } 958 } 959 } 961 augment "/rt:routing/sr:segment-routing" { 962 description 963 "This augments routing data model (RFC 8349) 964 with Segment Routing (SR) with the MPLS Data Plane."; 965 container sr-mpls { 966 description 967 "Segment Routing global configuration and 968 operational state."; 970 container bindings { 971 description 972 "List of bindings."; 973 container mapping-server { 974 if-feature "mapping-server"; 975 description 976 "Configuration of mapping-server local entries."; 977 list policy { 978 key "name"; 979 description 980 "List mapping-server policies."; 981 leaf name { 982 type string; 983 description 984 "Name of the mapping policy."; 985 } 986 container entries { 987 description 988 "IPv4/IPv6 mapping entries."; 989 list mapping-entry { 990 key "prefix algorithm"; 991 description 992 "Mapping entries."; 993 uses sr-cmn:prefix-sid; 994 } 995 } 996 } 997 } 998 container connected-prefix-sid-map { 999 description 1000 "Prefix SID configuration."; 1001 list connected-prefix-sid { 1002 key "prefix algorithm"; 1003 description 1004 "List of prefix SID mapped to IPv4/IPv6 1005 local prefixes."; 1006 uses sr-cmn:prefix-sid; 1007 uses sr-cmn:last-hop-behavior; 1008 } 1009 } 1010 container local-prefix-sid { 1011 description 1012 "Local sid configuration."; 1013 list local-prefix-sid { 1014 key "prefix algorithm"; 1015 description 1016 "List of local IPv4/IPv6 prefix-sids."; 1017 uses sr-cmn:prefix-sid; 1018 } 1019 } 1020 } 1021 container srgb { 1022 description 1023 "Global SRGB configuration."; 1024 uses sr-cmn:srgb; 1025 } 1026 container srlb { 1027 description 1028 "Segment Routing Local Block (SRLB) configuration."; 1029 uses sr-cmn:srlb; 1030 } 1032 list label-blocks { 1033 config false; 1034 description 1035 "List of label blocks currently in use."; 1036 leaf lower-bound { 1037 type uint32; 1038 description 1039 "Lower bound of the label block."; 1040 } 1041 leaf upper-bound { 1042 type uint32; 1043 description 1044 "Upper bound of the label block."; 1045 } 1046 leaf size { 1047 type uint32; 1048 description 1049 "Number of indexes in the block."; 1050 } 1051 leaf free { 1052 type uint32; 1053 description 1054 "Number of free indexes in the block."; 1055 } 1056 leaf used { 1057 type uint32; 1058 description 1059 "Number of indexes in use in the block."; 1060 } 1061 leaf scope { 1062 type enumeration { 1063 enum "global" { 1064 description 1065 "Global SID."; 1066 } 1067 enum "local" { 1068 description 1069 "Local SID."; 1070 } 1071 } 1072 description 1073 "Scope of this label block."; 1074 } 1075 } 1076 container sid-db { 1077 config false; 1078 description 1079 "List of prefix and SID associations."; 1080 list sid { 1081 key "target sid source source-protocol binding-type"; 1082 ordered-by system; 1083 description 1084 "SID Binding."; 1085 leaf target { 1086 type string; 1087 description 1088 "Defines the target of the binding. It can be a 1089 prefix or something else."; 1090 } 1091 leaf sid { 1092 type uint32; 1093 description 1094 "Index associated with the prefix."; 1095 } 1096 leaf algorithm { 1097 type uint8; 1098 description 1099 "Algorithm to be used for the prefix SID."; 1100 reference "RFC 8665: OSPF Extensions for Segment Routing 1101 RFC 8667: IS-IS Extensions for Segment 1102 Routing 1103 RFC 8669: Segment Routing Prefix Segment 1104 Identifier Extensions to BGP"; 1105 } 1106 leaf source { 1107 type inet:ip-address; 1108 description 1109 "IP address of the router that owns the binding."; 1110 } 1111 leaf used { 1112 type boolean; 1113 description 1114 "Indicates if the binding is installed in the 1115 forwarding plane."; 1116 } 1117 leaf source-protocol { 1118 type leafref { 1119 path "/rt:routing/rt:control-plane-protocols/" 1120 + "rt:control-plane-protocol/rt:name"; 1121 } 1122 description 1123 "Routing protocol that owns the binding"; 1124 } 1125 leaf binding-type { 1126 type enumeration { 1127 enum "prefix-sid" { 1128 description 1129 "Binding is learned from a prefix SID."; 1130 } 1131 enum "binding-tlv" { 1132 description 1133 "Binding is learned from a binding TLV."; 1134 } 1135 } 1136 description 1137 "Type of binding."; 1138 } 1139 leaf scope { 1140 type enumeration { 1141 enum "global" { 1142 description 1143 "Global SID."; 1144 } 1145 enum "local" { 1146 description 1147 "Local SID."; 1148 } 1149 } 1150 description 1151 "SID scoping."; 1152 } 1153 } 1154 } 1155 } 1156 } 1158 notification segment-routing-srgb-collision { 1159 description 1160 "This notification is sent when SRGB blocks received from 1161 routers collide."; 1162 list srgb-collisions { 1163 description 1164 "List of SRGB blocks that collide."; 1165 leaf lower-bound { 1166 type uint32; 1167 description 1168 "Lower value in the block."; 1169 } 1170 leaf upper-bound { 1171 type uint32; 1172 description 1173 "Upper value in the block."; 1174 } 1175 leaf routing-protocol { 1176 type leafref { 1177 path "/rt:routing/rt:control-plane-protocols/" 1178 + "rt:control-plane-protocol/rt:name"; 1179 } 1180 description 1181 "Routing protocol reference for SRGB collision."; 1182 } 1183 leaf originating-rtr-id { 1184 type router-or-system-id; 1185 description 1186 "Originating Router ID of this SRGB block."; 1187 } 1188 } 1189 } 1190 notification segment-routing-global-sid-collision { 1191 description 1192 "This notification is sent when a new mapping is learned 1193 containing a mapping where the SID is already used. 1194 The notification generation must be throttled with at least 1195 a 5 second gap between notifications."; 1196 leaf received-target { 1197 type string; 1198 description 1199 "Target received in the router advertisement that caused 1200 the SID collision."; 1201 } 1202 leaf new-sid-rtr-id { 1203 type router-or-system-id; 1204 description 1205 "Router ID that advertised the colliding SID."; 1206 } 1207 leaf original-target { 1208 type string; 1209 description 1210 "Target already available in the database with the same SID 1211 as the received target."; 1212 } 1213 leaf original-sid-rtr-id { 1214 type router-or-system-id; 1215 description 1216 "Router-ID for the router that originally advertised the 1217 conlliding SID, i.e., the instance in the database."; 1218 } 1219 leaf index { 1220 type uint32; 1221 description 1222 "Value of the index used by two different prefixes."; 1223 } 1224 leaf routing-protocol { 1225 type leafref { 1226 path "/rt:routing/rt:control-plane-protocols/" 1227 + "rt:control-plane-protocol/rt:name"; 1228 } 1229 description 1230 "Routing protocol reference for colliding SID."; 1231 } 1232 } 1233 notification segment-routing-index-out-of-range { 1234 description 1235 "This notification is sent when a binding is received 1236 containing a segment index which is out of the local 1237 configured ranges. The notification generation must be 1238 throttled with at least a 5 second gap between 1239 notifications."; 1240 leaf received-target { 1241 type string; 1242 description 1243 "A human-readable string representing the target 1244 received in the protocol-specific advertisement 1245 corresponding to the out-of-range index."; 1246 } 1247 leaf received-index { 1248 type uint32; 1249 description 1250 "Value of the index received."; 1251 } 1252 leaf routing-protocol { 1253 type leafref { 1254 path "/rt:routing/rt:control-plane-protocols/" 1255 + "rt:control-plane-protocol/rt:name"; 1256 } 1257 description 1258 "Routing protocol reference for out-of-range indexd."; 1259 } 1260 } 1261 } 1262 1264 9. Security Considerations 1266 The YANG modules specified in this document define a schema for data 1267 that is designed to be accessed via network management protocols such 1268 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 1269 is the secure transport layer, and the mandatory-to-implement secure 1270 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 1271 is HTTPS, and the mandatory-to-implement secure transport is TLS 1272 [RFC8446]. 1274 The NETCONF access control model [RFC8341] provides the means to 1275 restrict access for particular NETCONF or RESTCONF users to a pre- 1276 configured subset of all available NETCONF or RESTCONF protocol 1277 operations and content. 1279 There are a number of data nodes defined in the modules that are 1280 writable/creatable/deletable (i.e., config true, which is the 1281 default). These data nodes may be considered sensitive or vulnerable 1282 in some network environments. Write operations (e.g., edit-config) 1283 to these data nodes without proper protection can have a negative 1284 effect on network operations. Writable data nodes represent 1285 configuration of the router's bindings and the global and local label 1286 blocks. These correspond to the following schema nodes: 1288 /segment-routing 1290 /segment-routing/mpls 1291 /segment-routing/mpls/bindings - Modification to the local 1292 bindings could result in a Denial of Service (DoS) attack. An 1293 attacker may also try to create segment conflicts (using the same 1294 segment identifier for different purposes) to redirect traffic 1295 within the trusted domain. However, the traffic will remain 1296 within the trusted domain. Redirection could be used to route the 1297 traffic to compromised nodes within the trusted domain or to avoid 1298 certain security functions (e.g., firewall). Refer to section 8.1 1299 of [RFC8402] for a discussion of the SR-MPLS trusted domain. 1301 /segment-routing/mpls/srgb - Modification of the Segment Routing 1302 Global Block (SRGB) could be used to mount a DoS attack. For 1303 example, if the SRGB size is reduced to a very small value, a lot 1304 of existing segments could no longer be installed leading to a 1305 traffic disruption. 1307 /segment-routing/mpls/srlb - Modification of the Segment Routing 1308 Local Block (SRLB) could be used to mount a DoS attacks similar to 1309 those applicable to the SRGB. 1311 Some of the readable data nodes in the modules may be considered 1312 sensitive or vulnerable in some network environments. It is thus 1313 important to control read access (e.g., via get, get-config, or 1314 notification) to these data nodes. The exposure of either the local 1315 bindings or SID database would provide an attacker the segment 1316 routing paths and related topology information. These correspond to 1317 the following schema nodes: 1319 /segment-routing/mpls/bindings - Knowledge of these data nodes can 1320 be used to attack the local router with a Denial of Service (DoS) 1321 attack. 1323 /segment-routing/mpls/sid-db - Knowledge of these data nodes can 1324 be used to attack the other routers in the segment routing domain 1325 with either a a Denial of Service (DoS) attack or redirection 1326 traffic destined for those routers. 1328 Furthermore exposure the node's capabilities may be useful in 1329 mounting a Denial-of-Service (DOS) attack by sending the node SR 1330 packets that the router can't process. These correspond to the 1331 following schema nodes: 1333 /segment-routing/mpls/node-capabilities 1335 /segment-routing/mpls/msd 1337 10. Acknowledgements 1339 The authors would like to thank Derek Yeung, Greg Hankins, Hannes 1340 Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge, Les Ginsberg for 1341 their contributions. 1343 Thanks to Ladislav Lhotka and Tom Petch for their thorough reviews 1344 and helpful comments. 1346 The authors would like to thank Benjamin Kaduk, Alvaro Retana, and 1347 Roman Danyliw for IESG review and comments. 1349 11. IANA Considerations 1351 This document registers a URI in the IETF XML registry [RFC3688]. 1352 Following the format in [RFC3688], the following registration is 1353 requested to be made: 1355 URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-commmon 1356 Registrant Contact: The IESG. 1357 XML: N/A, the requested URI is an XML namespace. 1359 URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing 1360 Registrant Contact: The IESG. 1361 XML: N/A, the requested URI is an XML namespace. 1363 URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls 1364 Registrant Contact: The IESG. 1365 XML: N/A, the requested URI is an XML namespace. 1367 This document registers a YANG module in the YANG Module Names 1368 registry [RFC6020]. 1370 name: ietf-segment-routing-common 1371 namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-common 1372 prefix: sr-cmn 1373 reference: RFC XXXX 1375 name: ietf-segment-routing 1376 namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing 1377 prefix: sr 1378 reference: RFC XXXX 1380 name: ietf-segment-routing-mpls 1381 namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls 1382 prefix: sr-mpls 1383 reference: RFC XXXX 1385 12. References 1387 12.1. Normative References 1389 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1390 Requirement Levels", BCP 14, RFC 2119, 1391 DOI 10.17487/RFC2119, March 1997, 1392 . 1394 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1395 DOI 10.17487/RFC3688, January 2004, 1396 . 1398 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1399 the Network Configuration Protocol (NETCONF)", RFC 6020, 1400 DOI 10.17487/RFC6020, October 2010, 1401 . 1403 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1404 and A. Bierman, Ed., "Network Configuration Protocol 1405 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1406 . 1408 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1409 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1410 . 1412 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1413 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1414 . 1416 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1417 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1418 . 1420 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1421 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 1422 . 1424 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 1425 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 1426 May 2017, . 1428 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 1429 "Common YANG Data Types for the Routing Area", RFC 8294, 1430 DOI 10.17487/RFC8294, December 2017, 1431 . 1433 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 1434 Access Control Model", STD 91, RFC 8341, 1435 DOI 10.17487/RFC8341, March 2018, 1436 . 1438 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1439 and R. Wilton, "Network Management Datastore Architecture 1440 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1441 . 1443 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 1444 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 1445 . 1447 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1448 Routing Management (NMDA Version)", RFC 8349, 1449 DOI 10.17487/RFC8349, March 2018, 1450 . 1452 [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., 1453 Decraene, B., Litkowski, S., and R. Shakir, "Segment 1454 Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, 1455 July 2018, . 1457 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 1458 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 1459 . 1461 [RFC8476] Tantsura, J., Chunduri, U., Aldrin, S., and P. Psenak, 1462 "Signaling Maximum SID Depth (MSD) Using OSPF", RFC 8476, 1463 DOI 10.17487/RFC8476, December 2018, 1464 . 1466 [RFC8491] Tantsura, J., Chunduri, U., Aldrin, S., and L. Ginsberg, 1467 "Signaling Maximum SID Depth (MSD) Using IS-IS", RFC 8491, 1468 DOI 10.17487/RFC8491, November 2018, 1469 . 1471 [RFC8660] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S., 1472 Decraene, B., Litkowski, S., and R. Shakir, "Segment 1473 Routing with the MPLS Data Plane", RFC 8660, 1474 DOI 10.17487/RFC8660, December 2019, 1475 . 1477 [RFC8665] Psenak, P., Ed., Previdi, S., Ed., Filsfils, C., Gredler, 1478 H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF 1479 Extensions for Segment Routing", RFC 8665, 1480 DOI 10.17487/RFC8665, December 2019, 1481 . 1483 [RFC8667] Previdi, S., Ed., Ginsberg, L., Ed., Filsfils, C., 1484 Bashandy, A., Gredler, H., and B. Decraene, "IS-IS 1485 Extensions for Segment Routing", RFC 8667, 1486 DOI 10.17487/RFC8667, December 2019, 1487 . 1489 [RFC8669] Previdi, S., Filsfils, C., Lindem, A., Ed., Sreekantiah, 1490 A., and H. Gredler, "Segment Routing Prefix Segment 1491 Identifier Extensions for BGP", RFC 8669, 1492 DOI 10.17487/RFC8669, December 2019, 1493 . 1495 [RFC8814] Tantsura, J., Chunduri, U., Talaulikar, K., Mirsky, G., 1496 and N. Triantafillis, "Signaling Maximum SID Depth (MSD) 1497 Using the Border Gateway Protocol - Link State", RFC 8814, 1498 DOI 10.17487/RFC8814, August 2020, 1499 . 1501 12.2. Informative References 1503 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1504 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1505 . 1507 [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, 1508 "Handling Long Lines in Content of Internet-Drafts and 1509 RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, 1510 . 1512 Appendix A. Configuration examples 1514 Note: '\' line wrapping per [RFC8792]. 1516 A.1. SR MPLS with IPv4 1518 The following is an XML example using the SR MPLS YANG modules with 1519 IPv4 addresses. 1521 1522 1524 1526 1527 1528 1529 mapping 1 1530 1531 1532 198.51.100.0/24 1533 \ 1535 sr-cmn:prefix-sid-algorithm-shortest-path\ 1536 1537 200 1538 100 1539 1540 1541 1542 1543 1544 1545 192.0.2.0/24 1546 \ 1548 sr-cmn:prefix-sid-algorithm-strict-spf 1549 100 1550 1 1551 php 1552 1553 1554 1555 1556 1557 45000 1558 55000 1559 1560 1561 1562 1563 1565 The following is the same example using JSON format. 1567 { 1568 "ietf-routing:routing": { 1569 "ietf-segment-routing:segment-routing": { 1570 "ietf-segment-routing-mpls:sr-mpls": { 1571 "bindings": { 1572 "mapping-server": { 1573 "policy": [ 1574 { 1575 "name": "mapping 1", 1576 "entries": { 1577 "mapping-entry": [ 1578 { 1579 "prefix": "198.51.100.0/24", 1580 "algorithm": "ietf-segment-routing-common:\ 1581 prefix-sid-algorithm-shortest-path", 1582 "start-sid": 200, 1583 "range": 100 1584 } 1585 ] 1586 } 1587 } 1588 ] 1589 }, 1590 "connected-prefix-sid-map": { 1591 "connected-prefix-sid": [ 1592 { 1593 "prefix": "192.0.2.0/24", 1594 "algorithm": "ietf-segment-routing-common:\ 1595 prefix-sid-algorithm-strict-spf", 1596 "start-sid": 100, 1597 "range": 1, 1598 "last-hop-behavior": "php" 1599 } 1600 ] 1601 } 1602 }, 1603 "srgb": { 1604 "srgb": [ 1605 { 1606 "lower-bound": 45000, 1607 "upper-bound": 55000 1608 } 1609 ] 1610 } 1611 } 1612 } 1613 } 1614 } 1616 A.2. SR MPLS with IPv6 1618 The following is an XML example using the SR MPLS YANG modules with 1619 IPv6 addresses. 1621 1622 1624 1626 1627 1628 1629 mapping 1 1630 1631 1632 2001:db8:aaaa:bbbb::/64 1633 \ 1635 sr-cmn:prefix-sid-algorithm-shortest-path\ 1636 1637 200 1638 100 1639 1640 1641 1642 1643 1644 1645 2001:db8:aaaa:cccc::/64 1646 \ 1648 sr-cmn:prefix-sid-algorithm-strict-spf 1649 100 1650 1 1651 php 1652 1653 1654 1655 1656 1657 45000 1658 55000 1659 1660 1661 1662 1663 1665 The following is the same example using JSON format. 1667 { 1668 "ietf-routing:routing": { 1669 "ietf-segment-routing:segment-routing": { 1670 "ietf-segment-routing-mpls:sr-mpls": { 1671 "bindings": { 1672 "mapping-server": { 1673 "policy": [ 1674 { 1675 "name": "mapping 1", 1676 "entries": { 1677 "mapping-entry": [ 1678 { 1679 "prefix": "2001:db8:aaaa:bbbb::/64", 1680 "algorithm": "ietf-segment-routing-common:\ 1681 prefix-sid-algorithm-shortest-path", 1682 "start-sid": 200, 1683 "range": 100 1684 } 1685 ] 1686 } 1687 } 1688 ] 1689 }, 1690 "connected-prefix-sid-map": { 1691 "connected-prefix-sid": [ 1692 { 1693 "prefix": "2001:db8:aaaa:cccc::/64", 1694 "algorithm": "ietf-segment-routing-common:\ 1695 prefix-sid-algorithm-strict-spf", 1696 "start-sid": 100, 1697 "range": 1, 1698 "last-hop-behavior": "php" 1699 } 1700 ] 1701 } 1702 }, 1703 "srgb": { 1704 "srgb": [ 1705 { 1706 "lower-bound": 45000, 1707 "upper-bound": 55000 1708 } 1709 ] 1710 } 1711 } 1712 } 1713 } 1714 } 1716 Authors' Addresses 1718 Stephane Litkowski 1719 Cisco Systems 1721 Email: slitkows.ietf@gmail.com 1723 Yingzhen Qu 1724 Futurewei 1726 Email: yingzhen.qu@futurewei.com 1728 Acee Lindem 1729 Cisco Systems 1730 301 Mindenhall Way 1731 Cary, NC 27513 1732 US 1734 Email: acee@cisco.com 1736 Pushpasis Sarkar 1737 Arrcus Networks 1739 Email: pushpasis.ietf@gmail.com 1741 Jeff Tantsura 1742 Apstra 1744 Email: jefftant.ietf@gmail.com