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