idnits 2.17.1 draft-ietf-spring-sr-yang-11.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 abstract seems to contain references ([RFC8402], [RFC7950], [RFC6020]), which it shouldn't. Please replace those with straight textual mentions of the documents in question. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 137 has weird spacing: '...t-plane ide...' == Line 143 has weird spacing: '...terface if:...' == Line 174 has weird spacing: '...r-bound uin...' == Line 175 has weird spacing: '...r-bound uin...' == Line 178 has weird spacing: '...r-bound uin...' == (1 more instance...) -- The document date (February 15, 2019) is 1895 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) == Unused Reference: 'RFC8491' is defined on line 1388, but no explicit reference was found in the text Summary: 1 error (**), 0 flaws (~~), 8 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 Orange Business Service 4 Intended status: Standards Track Y. Qu 5 Expires: August 19, 2019 Huawei 6 P. Sarkar 7 Individual 8 J. Tantsura 9 Apstra 10 A. Lindem 11 Cisco 12 February 15, 2019 14 YANG Data Model for Segment Routing 15 draft-ietf-spring-sr-yang-11 17 Abstract 19 This document defines a YANG data model ([RFC6020], [RFC7950]) for 20 segment routing ([RFC8402]) configuration and operation. This YANG 21 model is intended to be used on network elements to configure or 22 operate segment routing. This document defines also generic 23 containers that SHOULD be reused by IGP protocol modules to support 24 segment routing. 26 Status of This Memo 28 This Internet-Draft is submitted in full conformance with the 29 provisions of BCP 78 and BCP 79. 31 Internet-Drafts are working documents of the Internet Engineering 32 Task Force (IETF). Note that other groups may also distribute 33 working documents as Internet-Drafts. The list of current Internet- 34 Drafts is at https://datatracker.ietf.org/drafts/current/. 36 Internet-Drafts are draft documents valid for a maximum of six months 37 and may be updated, replaced, or obsoleted by other documents at any 38 time. It is inappropriate to use Internet-Drafts as reference 39 material or to cite them other than as "work in progress." 41 This Internet-Draft will expire on August 19, 2019. 43 Copyright Notice 45 Copyright (c) 2019 IETF Trust and the persons identified as the 46 document authors. All rights reserved. 48 This document is subject to BCP 78 and the IETF Trust's Legal 49 Provisions Relating to IETF Documents 50 (https://trustee.ietf.org/license-info) in effect on the date of 51 publication of this document. Please review these documents 52 carefully, as they describe your rights and restrictions with respect 53 to this document. Code Components extracted from this document must 54 include Simplified BSD License text as described in Section 4.e of 55 the Trust Legal Provisions and are provided without warranty as 56 described in the Simplified BSD License. 58 Table of Contents 60 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 61 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 62 2.1. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 3 63 2.2. Prefixes in Data Node Names . . . . . . . . . . . . . . . 3 64 3. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 65 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5 66 5. IGP Control plane configuration . . . . . . . . . . . . . . . 6 67 5.1. IGP interface configuration . . . . . . . . . . . . . . . 7 68 5.1.1. Adjacency SID properties . . . . . . . . . . . . . . 7 69 5.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 7 70 5.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 8 71 6. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 72 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8 73 8. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 74 9. Security Considerations . . . . . . . . . . . . . . . . . . . 28 75 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 76 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 77 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 78 12.1. Normative References . . . . . . . . . . . . . . . . . . 28 79 12.2. Informative References . . . . . . . . . . . . . . . . . 30 80 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 82 1. Introduction 84 This document defines a YANG data model for segment routing 85 configuration and operation. This document does not define the IGP 86 extensions to support segment routing but defines generic groupings 87 that SHOULD be reused by IGP extension modules. The reason of this 88 design choice is to not require implementations to support all IGP 89 extensions. For example, an implementation may support IS-IS 90 extension but not OSPF. 92 The YANG modules in this document conform to the Network Management 93 Datastore Architecture (NMDA) [RFC8342]. 95 2. Terminology and Notation 97 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 98 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 99 document are to be interpreted as described in [RFC2119]. 101 2.1. Tree diagram 103 Tree diagrams used in this document follow the notation defined in 104 [RFC8340]. 106 2.2. Prefixes in Data Node Names 108 In this document, names of data nodes, actions, and other data model 109 objects are often used without a prefix, as long as it is clear from 110 the context in which YANG module each name is defined. Otherwise, 111 names are prefixed using the standard prefix associated with the 112 corresponding YANG module, as shown in Table 1. 114 +----------+--------------------+-----------+ 115 | Prefix | YANG module | Reference | 116 +----------+--------------------+-----------+ 117 | if | ietf-interfaces | [RFC8343] | 118 | rt | ietf-routing | [RFC8349] | 119 | rt-types | ietf-routing-types | [RFC8294] | 120 | yang | ietf-yang-types | [RFC6991] | 121 | inet | ietf-inet-types | [RFC6991] | 122 +----------+--------------------+-----------+ 124 Table 1: Prefixes and Corresponding YANG Modules 126 3. Design of the Data Model 128 As the module definition is just starting, it is expected that there 129 will be changes as the module matures. 131 module: ietf-segment-routing 132 augment /rt:routing: 133 +--rw segment-routing 134 +--rw transport-type? identityref 135 +--ro node-capabilities 136 | +--ro transport-planes* [transport-plane] 137 | | +--ro transport-plane identityref 138 | +--ro entropy-readable-label-depth? uint8 139 +--rw msd {max-sid-depth}? 140 | +--rw node-msd? uint8 141 | +--rw link-msd 142 | +--rw link-msds* [interface] 143 | +--rw interface if:interface-ref 144 | +--rw msd? uint8 145 +--rw bindings 146 | +--rw mapping-server {mapping-server}? 147 | | +--rw policy* [name] 148 | | +--rw name string 149 | | +--rw entries 150 | | +--rw mapping-entry* [prefix algorithm] 151 | | +--rw prefix inet:ip-prefix 152 | | +--rw value-type? enumeration 153 | | +--rw start-sid uint32 154 | | +--rw range? uint32 155 | | +--rw algorithm identityref 156 | +--rw connected-prefix-sid-map 157 | | +--rw connected-prefix-sid* [prefix algorithm] 158 | | +--rw prefix inet:ip-prefix 159 | | +--rw value-type? enumeration 160 | | +--rw start-sid uint32 161 | | +--rw range? uint32 162 | | +--rw algorithm identityref 163 | | +--rw last-hop-behavior? enumeration 164 | | {sid-last-hop-behavior}? 165 | +--rw local-prefix-sid 166 | +--rw local-prefix-sid* [prefix algorithm] 167 | +--rw prefix inet:ip-prefix 168 | +--rw value-type? enumeration 169 | +--rw start-sid uint32 170 | +--rw range? uint32 171 | +--rw algorithm identityref 172 +--rw global-srgb 173 | +--rw srgb* [lower-bound upper-bound] 174 | +--rw lower-bound uint32 175 | +--rw upper-bound uint32 176 +--rw srlb 177 | +--rw srlb* [lower-bound upper-bound] 178 | +--rw lower-bound uint32 179 | +--rw upper-bound uint32 180 +--ro label-blocks* 181 | +--ro lower-bound? uint32 182 | +--ro upper-bound? uint32 183 | +--ro size? uint32 184 | +--ro free? uint32 185 | +--ro used? uint32 186 | +--ro scope? enumeration 187 +--ro sid-list 188 +--ro sid* [target sid source source-protocol binding-type] 189 +--ro target string 190 +--ro sid uint32 191 +--ro algorithm? uint8 192 +--ro source inet:ip-address 193 +--ro used? boolean 194 +--ro source-protocol -> /rt:routing 195 /control-plane-protocols 196 /control-plane-protocol/name 197 +--ro binding-type enumeration 198 +--ro scope? enumeration 200 notifications: 201 +---n segment-routing-global-srgb-collision 202 | +--ro srgb-collisions* 203 | +--ro lower-bound? uint32 204 | +--ro upper-bound? uint32 205 | +--ro routing-protocol? -> /rt:routing 206 | /control-plane-protocols 207 | /control-plane-protocol/name 208 | +--ro originating-rtr-id? router-id 209 +---n segment-routing-global-sid-collision 210 | +--ro received-target? string 211 | +--ro new-sid-rtr-id? router-id 212 | +--ro original-target? string 213 | +--ro original-sid-rtr-id? router-id 214 | +--ro index? uint32 215 | +--ro routing-protocol? -> /rt:routing 216 | /control-plane-protocols 217 | /control-plane-protocol/name 218 +---n segment-routing-index-out-of-range 219 +--ro received-target? string 220 +--ro received-index? uint32 221 +--ro routing-protocol? -> /rt:routing 222 /control-plane-protocols 223 /control-plane-protocol/name 225 4. Configuration 227 This module augments the "/rt:routing:" with a segment-routing 228 container. This container defines all the configuration parameters 229 related to segment-routing. 231 The segment-routing configuration is split in global configuration 232 and interface configuration. 234 The global configuration includes : 236 o segment-routing transport type : The underlying transport type for 237 segment routing. The version of the model limits the transport 238 type to an MPLS dataplane. The transport-type is only defined 239 once for a particular routing-instance and is agnostic to the 240 control plane used. Only a single transport-type is supported in 241 this version of the model. 243 o bindings : Defines prefix to SID mappings. The operator can 244 control advertisement of Prefix-SID independently for IPv4 and 245 IPv6. Two types of mappings are available : 247 * Mapping-server : maps non local prefixes to a segment ID. 248 Configuration of bindings does not automatically allow 249 advertisement of those bindings. Advertisement must be 250 controlled by each routing-protocol instance (see Section 5). 251 Multiple mapping policies may be defined. 253 * Connected prefixes : maps connected prefixes to a segment ID. 254 Advertisement of the mapping will be done by IGP when enabled 255 for segment routing (see Section 5). The SID value can be 256 expressed as an index (default), or an absolute value. The 257 "last-hop-behavior" configuration dictates the PHP behavior: 258 "explicit-null", "php", or "non-php". 260 o SRGB (Segment Routing Global Block): Defines a list of label 261 blocks represented by a pair of lower-bound/upper-bound labels. 262 The SRGB is also agnostic to the control plane used. So all 263 routing-protocol instance will have to advertise the same SRGB. 265 o SRLB (Segment Routing Local Block): Defines a list of label blocks 266 represented by a pair of lower-bound/upper-bound labels, reserved 267 for lcoal SIDs. 269 5. IGP Control plane configuration 271 Support of segment-routing extensions for a particular IGP control 272 plane is done by augmenting routing-protocol configuration with 273 segment-routing extensions. This augmentation SHOULD be part of 274 separate YANG modules in order to not create any dependency for 275 implementations to support all protocol extensions. 277 This module defines groupings that SHOULD be used by IGP segment 278 routing modules. 280 The "controlplane-cfg" grouping defines the generic global 281 configuration for the IGP. 283 The "enabled" leaf enables segment-routing extensions for the 284 routing-protocol instance. 286 The "bindings" container controls the routing-protocol instance's 287 advertisement of local bindings and the processing of received 288 bindings. 290 5.1. IGP interface configuration 292 The interface configuration is part of the "igp-interface-cfg" 293 grouping and includes Adjacency SID properties. 295 5.1.1. Adjacency SID properties 297 5.1.1.1. Bundling 299 This section is a first proposal on how to use S-bit in Adj-SID to 300 create bundles. Authors would like to trigger discussion based on 301 this first proposal. 303 In case of parallel IP links between routers, an additional Adjacency 304 SID may be advertised representing more than one adjacency (i.e., a 305 bundle of adjacencies). The "advertise-adj-group-sid" configuration 306 controls whether or not an additional adjacency SID is advertised. 308 The "advertise-adj-group-sid" would be a list of "group-id". The 309 "group-id" will permit to identify interfaces that must be bundled 310 together. 312 +-------+ +------+ 313 | | ------- L1 ---- | | 314 | R1 | ------- L2 ---- | R2 | 315 | | ------- L3 ---- | | 316 | | ------- L4 ---- | | 317 +-------+ +------+ 319 In the figure above, R1 and R2 are interconnected by four links. A 320 routing protocol adjacency is established on each link. Operator 321 would like to create segment-routing Adj-SID that represent some 322 bundles of links. We can imagine two different bundles : L1/L2 and 323 L2/L3. To achieve this behavior, the service provider will configure 324 a "group-id" X for both interfaces L1 and L2 and a "group-id" Y for 325 both interfaces L3 and L3. This will result in R1 advertising an 326 additional Adj-SID for each adjacency, for example a Adj-SID with S 327 flag set and value of 400 will be added to L1 and L2. A Adj-SID with 328 S flag set and value of 500 will be added to L3 and L4. As L1/L2 and 329 L3/L4 does not share the same "group-id", a different SID value will 330 be allocated. 332 5.1.1.2. Protection 334 The "advertise-protection" defines how protection for an interface is 335 advertised. It does not control the activation or deactivation of 336 protection. If the "single" option is used, a single Adj-SID will be 337 advertised for the interface. If the interface is protected, the 338 B-Flag for the Adj-SID advertisement will be set. If the "dual" 339 option is used and if the interface is protected, two Adj-SIDs will 340 be advertised for the interface adjacencies. One Adj-SID will always 341 have the B-Flag set and the other will have the B-Flag clear. This 342 option is intended to be used in the case of traffic engineering 343 where a path must use either protected segments or non-protected 344 segments. 346 6. States 348 The operational states contains information reflecting the usage of 349 allocated SRGB labels. 351 It also includes a list of all global SIDs, their associated 352 bindings, and other information such as the source protocol and 353 algorithm. 355 7. Notifications 357 The model defines the following notifications for segment-routing. 359 o segment-routing-global-srgb-collision: Rasied when a control plan 360 advertised SRGB blocks have conflicts. 362 o segment-routing-global-sid-collision: Raised when a control plane 363 advertised index is already associated with another target (in 364 this version, the only defined targets are IPv4 and IPv6 365 prefixes). 367 o segment-routing-index-out-of-range: Raised when a control plane 368 advertised index fall outside the range of SRGBs configured for 369 the network device. 371 8. YANG Module 373 The following RFCs and drafts are not referenced in the document text 374 but are referenced in the ietf-segment-rouuting-common.yang and/or 375 ietf-segment-routing.yang module: [RFC6991], [RFC8294], and 376 [RFC8476]. 378 file "ietf-segment-routing-common@2019-02-15.yang" 379 module ietf-segment-routing-common { 380 namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-common"; 381 prefix sr-cmn; 383 import ietf-inet-types { 384 prefix inet; 385 } 387 organization 388 "IETF SPRING - SPRING Working Group"; 390 contact 391 "WG Web: 392 WG List: 394 Editor: Stephane Litkowski 395 396 Editor: Yingzhen Qu 397 399 Author: Acee Lindem 400 401 Author: Pushpasis Sarkar 402 403 Author: Jeff Tantsura 404 406 "; 407 description 408 "The YANG module defines a collection of types and groupings for 409 Segment routing. 411 Copyright (c) 2017 IETF Trust and the persons identified as 412 authors of the code. All rights reserved. 414 Redistribution and use in source and binary forms, with or 415 without modification, is permitted pursuant to, and subject 416 to the license terms contained in, the Simplified BSD License 417 set forth in Section 4.c of the IETF Trust's Legal Provisions 418 Relating to IETF Documents 419 (http://trustee.ietf.org/license-info). 421 This version of this YANG module is part of RFC XXXX; 422 see the RFC itself for full legal notices."; 424 reference "RFC XXXX"; 426 revision 2019-02-15 { 427 description 428 " 429 * Addressed YANG Doctor's review comments; 430 "; 431 reference "RFC XXXX: YANG Data Model for Segment Routing."; 432 } 434 revision 2018-06-25 { 435 description 436 " 437 * Renamed readable-label-stack-depth to 438 * entropy-readable-label-depth; 439 "; 440 reference "RFC XXXX: YANG Data Model for Segment Routing."; 441 } 442 revision 2017-07-01 { 443 description 444 " 445 *Conform to RFC6087BIS Appendix C 446 "; 447 reference "RFC XXXX: YANG Data Model for Segment Routing."; 448 } 449 revision 2017-03-10 { 450 description 451 " 452 * Add support of SRLB 453 "; 454 reference "RFC XXXX: YANG Data Model for Segment Routing."; 455 } 456 revision 2016-10-28 { 457 description 458 " 459 * Add support of MSD (Maximum SID Depth) 460 * Update contact info 461 "; 462 reference "RFC XXXX: YANG Data Model for Segment Routing."; 463 } 464 revision 2016-10-24 { 465 description 466 "Initial"; 467 reference "RFC XXXX: YANG Data Model for Segment Routing."; 468 } 470 feature sid-last-hop-behavior { 471 description 472 "Configurable last hop behavior."; 473 } 475 identity segment-routing-transport { 476 description 477 "Base identity for segment routing transport."; 478 } 480 identity segment-routing-transport-mpls { 481 base segment-routing-transport; 482 description 483 "This identity represents MPLS transport for segment 484 routing."; 485 } 487 identity segment-routing-transport-ipv6 { 488 base segment-routing-transport; 489 description 490 "This identity represents IPv6 transport for segment 491 routing."; 492 } 494 identity prefix-sid-algorithm { 495 description 496 "Base identity for prefix-sid algorithm."; 497 } 499 identity prefix-sid-algorithm-shortest-path { 500 base prefix-sid-algorithm; 501 description 502 "The default behavior of prefix-sid algorithm."; 503 } 505 identity prefix-sid-algorithm-strict-spf { 506 base prefix-sid-algorithm; 507 description 508 "This algorithm mandates that the packet is forwared 509 according to ECMP-aware SPF algorithm."; 510 } 512 grouping srlr { 513 description 514 "Grouping for SR Label Range configuration."; 515 leaf lower-bound { 516 type uint32; 517 description 518 "Lower value in the block."; 519 } 520 leaf upper-bound { 521 type uint32; 522 description 523 "Upper value in the block."; 525 } 526 } 528 grouping srgb { 529 description 530 "Grouping for SR Global Label range."; 531 list srgb { 532 key "lower-bound upper-bound"; 533 ordered-by user; 534 description 535 "List of global blocks to be 536 advertised."; 537 uses srlr; 538 } 539 } 541 grouping srlb { 542 description 543 "Grouping for SR Local Block range."; 544 list srlb { 545 key "lower-bound upper-bound"; 546 ordered-by user; 547 description 548 "List of SRLBs."; 549 uses srlr; 550 } 551 } 553 grouping sid-value-type { 554 description 555 "Defines how the SID value is expressed."; 556 leaf value-type { 557 type enumeration { 558 enum "index" { 559 description 560 "The value will be 561 interpreted as an index."; 562 } 563 enum "absolute" { 564 description 565 "The value will become 566 interpreted as an absolute 567 value."; 568 } 569 } 570 default "index"; 571 description 572 "This leaf defines how value 573 must be interpreted."; 574 } 575 } 577 grouping prefix-sid { 578 description 579 "This grouping defines cfg of prefix SID."; 580 leaf prefix { 581 type inet:ip-prefix; 582 description 583 "connected prefix sid."; 584 } 585 uses prefix-sid-attributes; 586 } 588 grouping ipv4-sid { 589 description 590 "This grouping defines ipv4 prefix SID."; 591 leaf prefix { 592 type inet:ipv4-prefix; 593 description 594 "connected prefix sid."; 595 } 596 uses prefix-sid-attributes; 597 } 598 grouping ipv6-sid { 599 description 600 "This grouping defines ipv6 prefix SID."; 601 leaf prefix { 602 type inet:ipv6-prefix; 603 description 604 "connected prefix sid."; 605 } 606 uses prefix-sid-attributes; 607 } 609 grouping last-hop-behavior { 610 description 611 "Defines last hop behavior"; 612 leaf last-hop-behavior { 613 if-feature "sid-last-hop-behavior"; 614 type enumeration { 615 enum "explicit-null" { 616 description 617 "Use explicit-null for the SID."; 618 } 619 enum "no-php" { 620 description 621 "Do no use PHP for the SID."; 622 } 623 enum "php" { 624 description 625 "Use PHP for the SID."; 626 } 627 } 628 description 629 "Configure last hop behavior."; 630 } 631 } 633 grouping node-capabilities { 634 description 635 "Containing SR node capabilities."; 636 container node-capabilities { 637 config false; 638 description 639 "Shows the SR capability of the node."; 640 list transport-planes { 641 key "transport-plane"; 642 description 643 "List of supported transport planes."; 644 leaf transport-plane { 645 type identityref { 646 base segment-routing-transport; 647 } 648 description 649 "Transport plane supported"; 650 } 651 } 652 leaf entropy-readable-label-depth { 653 type uint8; 654 description 655 "Maximum label statck depth that 656 the router can read. "; 657 } 658 } 659 } 661 grouping prefix-sid-attributes { 662 description 663 "Containing SR attributes for a prefix."; 664 uses sid-value-type; 665 leaf start-sid { 666 type uint32; 667 mandatory true; 668 description 669 "Value associated with 670 prefix. The value must 671 be interpreted in the 672 context of value-type."; 673 } 674 leaf range { 675 type uint32; 676 description 677 "Describes how many SIDs could be 678 allocated."; 679 } 680 leaf algorithm { 681 type identityref { 682 base prefix-sid-algorithm; 683 } 684 description 685 "Prefix-sid algorithm."; 686 } 687 } 688 } 689 690 file "ietf-segment-routing@2019-02-15.yang" 691 module ietf-segment-routing { 692 namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing"; 693 prefix sr; 695 import ietf-inet-types { 696 prefix inet; 697 } 698 import ietf-yang-types { 699 prefix yang; 700 } 701 import ietf-routing { 702 prefix rt; 703 } 704 import ietf-interfaces { 705 prefix if; 706 } 707 import ietf-routing-types { 708 prefix rt-types; 709 } 710 import ietf-segment-routing-common { 711 prefix sr-cmn; 712 } 714 organization 715 "IETF SPRING - SPRING Working Group"; 716 contact 717 "WG Web: 718 WG List: 720 Editor: Stephane Litkowski 721 722 Editor: Yingzhen Qu 723 725 Author: Acee Lindem 726 727 Author: Pushpasis Sarkar 728 729 Author: Jeff Tantsura 730 732 "; 733 description 734 "The YANG module defines a generic configuration model for 735 Segment routing common across all of the vendor 736 implementations. 738 Copyright (c) 2018 IETF Trust and the persons identified as 739 authors of the code. All rights reserved. 741 Redistribution and use in source and binary forms, with or 742 without modification, is permitted pursuant to, and subject 743 to the license terms contained in, the Simplified BSD License 744 set forth in Section 4.c of the IETF Trust's Legal Provisions 745 Relating to IETF Documents 746 (http://trustee.ietf.org/license-info). 748 This version of this YANG module is part of RFC XXXX; 749 see the RFC itself for full legal notices."; 751 reference "RFC XXXX"; 753 revision 2019-02-15 { 754 description 755 " 756 * Addressed YANG Doctor's review comments; 757 "; 758 reference "RFC XXXX: YANG Data Model for Segment Routing."; 759 } 761 revision 2018-06-25 { 762 description 763 ""; 764 reference "RFC XXXX: YANG Data Model for Segment Routing."; 766 } 767 revision 2017-07-01 { 768 description 769 " 770 * Implement NMDA model 771 *Conform to RFC6087BIS Appendix C 772 "; 773 reference "RFC XXXX: YANG Data Model for Segment Routing."; 774 } 776 revision 2017-03-10 { 777 description 778 " 779 * Change global-sid-list to sid-list and add a leaf scope 780 * Added support of SRLB 781 * Added support of local sids 782 * fixed indentations 783 "; 784 reference "RFC XXXX: YANG Data Model for Segment Routing."; 785 } 786 revision 2016-10-28 { 787 description 788 " 789 * Add support of MSD (Maximum SID Depth) 790 * Update contact info 791 "; 792 reference "RFC XXXX: YANG Data Model for Segment Routing."; 793 } 794 revision 2016-10-24 { 795 description 796 " 797 * Moved common SR types and groupings to a seperate module 798 "; 799 reference "RFC XXXX: YANG Data Model for Segment Routing."; 800 } 801 revision 2016-07-07 { 802 description 803 " 804 * Add support of prefix-sid algorithm configuration 805 * change routing-protocols to control-plane-protocols 806 "; 807 reference "RFC XXXX: YANG Data Model for Segment Routing."; 808 } 809 revision 2016-03-17 { 810 description 811 " 812 * Add notification segment-routing-global-srgb-collision 813 * Add router-id to segment-routing-global-sid-collision 814 * Remove routing-instance 815 * Add typedef router-id 816 "; 817 reference "RFC XXXX: YANG Data Model for Segment Routing."; 818 } 819 revision 2015-10-17 { 820 description 821 " 822 * Add per-protocol SRGB config feature 823 * Move SRBG config to a grouping 824 "; 825 reference "RFC XXXX: YANG Data Model for Segment Routing."; 826 } 827 revision 2015-06-22 { 828 description 829 " 830 * Prefix SID config moved to 831 connected-prefix-sid-map in global SR cfg 832 rather than IGP. 833 "; 834 reference "draft-litkowski-spring-sr-yang-01"; 835 } 836 revision 2015-04-23 { 837 description 838 " 839 * Node flag deprecated from prefixSID 840 * SR interface cfg moved to protocol 841 * Adding multiple binding policies for SRMS 842 "; 843 reference ""; 844 } 845 revision 2015-02-27 { 846 description 847 "Initial"; 848 reference "draft-litkowski-spring-sr-yang-00"; 849 } 851 feature mapping-server { 852 description 853 "Support of Segment Routing Mapping Server (SRMS)."; 854 } 856 feature protocol-srgb { 857 description 858 "Support per-protocol Segment Routing Global Block (SRGB) 859 configuration."; 860 } 861 feature max-sid-depth { 862 description 863 "Support of signaling MSD (Maximum SID Depth) in IGP."; 864 } 866 typedef system-id { 867 type string { 868 pattern "[0-9A-Fa-f]{4}\\.[0-9A-Fa-f]{4}\\.[0-9A-Fa-f]{4}\\.00"; 869 } 870 description 871 "This type defines ISIS system id using pattern, 872 system id looks like : 0143.0438.AeF0.00"; 873 } 875 typedef router-id { 876 type union { 877 type system-id; 878 type rt-types:router-id; 879 } 880 description 881 "OSPF/BGP router id or ISIS system ID."; 882 } 884 grouping sr-controlplane { 885 description 886 "Defines protocol configuration."; 887 container segment-routing { 888 description 889 "segment routing global config."; 890 leaf enabled { 891 type boolean; 892 default "false"; 893 description 894 "Enables segment-routing 895 protocol extensions."; 896 } 897 container bindings { 898 description 899 "Control of binding advertisement 900 and reception."; 901 container advertise { 902 description 903 "Authorize the advertise 904 of local mappings in binding TLV."; 905 leaf-list policies { 906 type string; 907 description 908 "List of policies to be advertised."; 910 } 911 } 912 leaf receive { 913 type boolean; 914 default "true"; 915 description 916 "Authorize the reception and usage 917 of binding TLV."; 918 } 919 } 920 } 921 } 923 grouping igp-interface { 924 description 925 "Grouping for IGP interface cfg."; 926 container segment-routing { 927 description 928 "container for SR interface cfg."; 929 container adjacency-sid { 930 description 931 "Defines the adjacency SID properties."; 932 list advertise-adj-group-sid { 933 key "group-id"; 934 description 935 "Control advertisement of S flag. 936 Enable to advertise a common Adj-SID 937 for parallel links."; 938 leaf group-id { 939 type uint32; 940 description 941 "The value is an internal value to identify 942 a group-ID. Interfaces with the same 943 group-ID will be bundled together."; 944 } 945 } 946 leaf advertise-protection { 947 type enumeration { 948 enum "single" { 949 description 950 "A single Adj-SID is associated 951 with the adjacency and reflects 952 the protection configuration."; 953 } 954 enum "dual" { 955 description 956 "Two Adj-SIDs will be associated 957 with the adjacency if interface 958 is protected. In this case 959 one will be enforced with 960 backup flag set, the other 961 will be enforced to backup flag unset. 962 In case, protection is not configured, 963 a single Adj-SID will be advertised 964 with backup flag unset."; 965 } 966 } 967 description 968 "If set, the Adj-SID refers to an 969 adjacency being protected."; 970 } 971 } 972 } 973 } 975 grouping max-sid-depth { 976 description 977 "MSD configuration grouping."; 978 leaf node-msd { 979 type uint8; 980 description 981 "Node MSD is the lowest MSD supported by the node."; 982 } 983 container link-msd { 984 description 985 "Link MSD is a number representing the particular link 986 MSD value."; 987 list link-msds { 988 key "interface"; 989 description 990 "List of link MSDs."; 991 leaf interface { 992 type if:interface-ref; 993 description 994 "Name of the interface."; 995 } 996 leaf msd { 997 type uint8; 998 description 999 "SID depth of the interface associated with the link."; 1000 } 1001 } 1002 } 1003 } 1005 augment "/rt:routing" { 1006 description 1007 "This augments routing data model (RFC 8349) 1008 with segment-routing."; 1009 container segment-routing { 1010 description 1011 "segment routing global config."; 1012 leaf transport-type { 1013 type identityref { 1014 base sr-cmn:segment-routing-transport; 1015 } 1016 default "sr-cmn:segment-routing-transport-mpls"; 1017 description 1018 "Dataplane to be used."; 1019 } 1020 uses sr-cmn:node-capabilities; 1021 container msd { 1022 if-feature "max-sid-depth"; 1023 description 1024 "MSD configuration."; 1025 uses max-sid-depth; 1026 } 1027 container bindings { 1028 description 1029 "List of bindings."; 1030 container mapping-server { 1031 if-feature "mapping-server"; 1032 description 1033 "Configuration of mapping-server 1034 local entries."; 1035 list policy { 1036 key "name"; 1037 description 1038 "Definition of mapping policy."; 1039 leaf name { 1040 type string; 1041 description 1042 "Name of the mapping policy."; 1043 } 1044 container entries { 1045 description 1046 "IPv4/IPv6 mapping entries."; 1047 list mapping-entry { 1048 key "prefix algorithm"; 1049 description 1050 "Mapping entries."; 1051 uses sr-cmn:prefix-sid; 1052 } 1053 } 1055 } 1056 } 1057 container connected-prefix-sid-map { 1058 description 1059 "Prefix SID configuration."; 1060 list connected-prefix-sid { 1061 key "prefix algorithm"; 1062 description 1063 "List of prefix SID mapped to 1064 ipv4/ipv6 local prefixes."; 1065 uses sr-cmn:prefix-sid; 1066 uses sr-cmn:last-hop-behavior; 1067 } 1068 } 1069 container local-prefix-sid { 1070 description 1071 "Local sid configuration."; 1072 list local-prefix-sid { 1073 key "prefix algorithm"; 1074 description 1075 "List of local ipv4/ipv6 prefix-sid."; 1076 uses sr-cmn:prefix-sid; 1077 } 1078 } 1079 } 1080 container global-srgb { 1081 description 1082 "Global SRGB configuration."; 1083 uses sr-cmn:srgb; 1084 } 1085 container srlb { 1086 description 1087 "SR Local Block configuration."; 1088 uses sr-cmn:srlb; 1089 } 1091 list label-blocks { 1092 config false; 1093 description 1094 "List of labels blocks currently 1095 in use."; 1096 leaf lower-bound { 1097 type uint32; 1098 description 1099 "Lower bound of the label block."; 1100 } 1101 leaf upper-bound { 1102 type uint32; 1103 description 1104 "Upper bound of the label block."; 1105 } 1106 leaf size { 1107 type uint32; 1108 description 1109 "Number of indexes in the block."; 1110 } 1111 leaf free { 1112 type uint32; 1113 description 1114 "Number of indexes free in the block."; 1115 } 1116 leaf used { 1117 type uint32; 1118 description 1119 "Number of indexes used in the block."; 1120 } 1121 leaf scope { 1122 type enumeration { 1123 enum "global" { 1124 description 1125 "Global sid."; 1126 } 1127 enum "local" { 1128 description 1129 "Local sid."; 1130 } 1131 } 1132 description 1133 "Scope of this label block."; 1134 } 1135 } 1136 container sid-list { 1137 config false; 1138 description 1139 "List of prefix and SID associations."; 1140 list sid { 1141 key "target sid source source-protocol binding-type"; 1142 ordered-by system; 1143 description 1144 "Binding."; 1145 leaf target { 1146 type string; 1147 description 1148 "Defines the target of the binding. 1149 It can be a prefix or something else."; 1150 } 1151 leaf sid { 1152 type uint32; 1153 description 1154 "Index associated with the prefix."; 1155 } 1156 leaf algorithm { 1157 type uint8; 1158 description 1159 "Algorithm to be used for the prefix 1160 SID."; 1161 } 1162 leaf source { 1163 type inet:ip-address; 1164 description 1165 "IP address of the router than own 1166 the binding."; 1167 } 1168 leaf used { 1169 type boolean; 1170 description 1171 "Defines if the binding is used 1172 in forwarding plane."; 1173 } 1174 leaf source-protocol { 1175 type leafref { 1176 path "/rt:routing/rt:control-plane-protocols/" 1177 + "rt:control-plane-protocol/rt:name"; 1178 } 1179 description 1180 "Rtg protocol that owns the binding"; 1181 } 1182 leaf binding-type { 1183 type enumeration { 1184 enum "prefix-sid" { 1185 description 1186 "Binding is learned from 1187 a prefix SID."; 1188 } 1189 enum "binding-tlv" { 1190 description 1191 "Binding is learned from 1192 a binding TLV."; 1193 } 1194 } 1195 description 1196 "Type of binding."; 1197 } 1198 leaf scope { 1199 type enumeration { 1200 enum "global" { 1201 description 1202 "Global sid."; 1203 } 1204 enum "local" { 1205 description 1206 "Local sid."; 1207 } 1208 } 1209 description 1210 "The sid is local or global."; 1211 } 1212 } 1213 } 1214 } 1215 } 1217 notification segment-routing-global-srgb-collision { 1218 description 1219 "This notification is sent when received SRGB blocks from 1220 a router conflict."; 1221 list srgb-collisions { 1222 description 1223 "List of SRGB blocks that conflict."; 1224 leaf lower-bound { 1225 type uint32; 1226 description 1227 "Lower value in the block."; 1228 } 1229 leaf upper-bound { 1230 type uint32; 1231 description 1232 "Upper value in the block."; 1233 } 1234 leaf routing-protocol { 1235 type leafref { 1236 path "/rt:routing/rt:control-plane-protocols/" 1237 + "rt:control-plane-protocol/rt:name"; 1238 } 1239 description 1240 "Routing protocol reference that received the event."; 1241 } 1242 leaf originating-rtr-id { 1243 type router-id; 1244 description 1245 "Originating router id of this SRGB block."; 1246 } 1248 } 1249 } 1250 notification segment-routing-global-sid-collision { 1251 description 1252 "This notification is sent when a new mapping is learned 1253 , containing mapping 1254 where the SID is already used. 1255 The notification generation must be throttled with at least 1256 a 5 second gap. "; 1257 leaf received-target { 1258 type string; 1259 description 1260 "Target received in the controlplane that 1261 caused SID collision."; 1262 } 1263 leaf new-sid-rtr-id { 1264 type router-id; 1265 description 1266 "Router Id that advertising the conflicting SID."; 1267 } 1268 leaf original-target { 1269 type string; 1270 description 1271 "Target already available in database that have the same SID 1272 as the received target."; 1273 } 1274 leaf original-sid-rtr-id { 1275 type router-id; 1276 description 1277 "Original router ID that advertised the conflicting SID."; 1278 } 1279 leaf index { 1280 type uint32; 1281 description 1282 "Value of the index used by two different prefixes."; 1283 } 1284 leaf routing-protocol { 1285 type leafref { 1286 path "/rt:routing/rt:control-plane-protocols/" 1287 + "rt:control-plane-protocol/rt:name"; 1288 } 1289 description 1290 "Routing protocol reference that received the event."; 1291 } 1292 } 1293 notification segment-routing-index-out-of-range { 1294 description 1295 "This notification is sent when a binding 1296 is received, containing a segment index 1297 which is out of the local configured ranges. 1298 The notification generation must be throttled with at least 1299 a 5 second gap. "; 1300 leaf received-target { 1301 type string; 1302 description 1303 "Target received in the controlplane 1304 that caused SID collision."; 1305 } 1306 leaf received-index { 1307 type uint32; 1308 description 1309 "Value of the index received."; 1310 } 1311 leaf routing-protocol { 1312 type leafref { 1313 path "/rt:routing/rt:control-plane-protocols/" 1314 + "rt:control-plane-protocol/rt:name"; 1315 } 1316 description 1317 "Routing protocol reference that received the event."; 1318 } 1319 } 1320 } 1321 1323 9. Security Considerations 1325 TBD. 1327 10. Acknowledgements 1329 Authors would like to thank Derek Yeung, Acee Lindem, Greg Hankins, 1330 Hannes Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge, Les 1331 Ginsberg for their contributions. 1333 11. IANA Considerations 1335 TBD. 1337 12. References 1339 12.1. Normative References 1341 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1342 Requirement Levels", BCP 14, RFC 2119, 1343 DOI 10.17487/RFC2119, March 1997, 1344 . 1346 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1347 the Network Configuration Protocol (NETCONF)", RFC 6020, 1348 DOI 10.17487/RFC6020, October 2010, 1349 . 1351 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1352 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1353 . 1355 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1356 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1357 . 1359 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 1360 "Common YANG Data Types for the Routing Area", RFC 8294, 1361 DOI 10.17487/RFC8294, December 2017, 1362 . 1364 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1365 and R. Wilton, "Network Management Datastore Architecture 1366 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1367 . 1369 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 1370 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 1371 . 1373 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1374 Routing Management (NMDA Version)", RFC 8349, 1375 DOI 10.17487/RFC8349, March 2018, 1376 . 1378 [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., 1379 Decraene, B., Litkowski, S., and R. Shakir, "Segment 1380 Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, 1381 July 2018, . 1383 [RFC8476] Tantsura, J., Chunduri, U., Aldrin, S., and P. Psenak, 1384 "Signaling Maximum SID Depth (MSD) Using OSPF", RFC 8476, 1385 DOI 10.17487/RFC8476, December 2018, 1386 . 1388 [RFC8491] Tantsura, J., Chunduri, U., Aldrin, S., and L. Ginsberg, 1389 "Signaling Maximum SID Depth (MSD) Using IS-IS", RFC 8491, 1390 DOI 10.17487/RFC8491, November 2018, 1391 . 1393 12.2. Informative References 1395 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1396 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1397 . 1399 Authors' Addresses 1401 Stephane Litkowski 1402 Orange Business Service 1404 Email: stephane.litkowski@orange.com 1406 Yingzhen Qu 1407 Huawei 1409 Email: yingzhen.qu@huawei.com 1411 Pushpasis Sarkar 1412 Individual 1414 Email: pushpasis.ietf@gmail.com 1416 Jeff Tantsura 1417 Apstra 1419 Email: jefftant.ietf@gmail.com 1421 Acee Lindem 1422 Cisco 1423 301 Mindenhall Way 1424 Cary, NC 27513 1425 US 1427 Email: acee@cisco.com