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