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