idnits 2.17.1 draft-ietf-spring-sr-yang-07.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 126 has weird spacing: '...t-plane ide...' == Line 132 has weird spacing: '...terface if:...' == Line 137 has weird spacing: '...rw name str...' == Line 186 has weird spacing: '...r-bound uin...' == Line 187 has weird spacing: '...r-bound uin...' == (2 more instances...) -- The document date (July 01, 2017) is 2490 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 1336, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-ospf-segment-routing-msd' is defined on line 1342, 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: January 2, 2018 Huawei 6 P. Sarkar 7 J. Tantsura 8 Individual 9 July 01, 2017 11 YANG Data Model for Segment Routing 12 draft-ietf-spring-sr-yang-07 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 http://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 January 2, 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 (http://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 . . . . . . . . . . . . . . . . . . . . . . . . 6 67 4. IGP Control plane configuration . . . . . . . . . . . . . . . 7 68 4.1. IGP interface configuration . . . . . . . . . . . . . . . 7 69 4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 7 70 4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 7 71 4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 8 72 5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 73 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8 74 7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 9 75 8. Security Considerations . . . . . . . . . . . . . . . . . . . 28 76 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 77 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 78 11. Normative References . . . . . . . . . . . . . . . . . . . . 29 79 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 81 1. Introduction 83 This document defines a YANG data model for segment routing 84 configuration and operation. This document does not define the IGP 85 extensions to support segment routing but defines generic groupings 86 that SHOULD be reused by IGP extension modules. The reason of this 87 design choice is to not require implementations to support all IGP 88 extensions. For example, an implementation may support IS-IS 89 extension but not OSPF. 91 1.1. Tree diagram 93 A simplified graphical representation of the data model is presented 94 in Section 2. 96 The meaning of the symbols in these diagrams is as follows: 98 o Brackets "[" and "]" enclose list keys. 100 o Curly braces "{" and "}" contain names of optional features that 101 make the corresponding node conditional. 103 o Abbreviations before data node names: "rw" means configuration 104 (read-write), and "ro" state data (read-only). 106 o Symbols after data node names: "?" means an optional node and "*" 107 denotes a "list" or "leaf-list". 109 o Parentheses enclose choice and case nodes, and case nodes are also 110 marked with a colon (":"). 112 o Ellipsis ("...") stands for contents of subtrees that are not 113 shown. 115 2. Design of the Data Model 117 As the module definition is just starting, it is expected that there 118 will be changes as the module matures. 120 module: ietf-segment-routing 121 augment /rt:routing: 122 +--rw segment-routing 123 +--rw transport-type? identityref 124 +--ro node-capabilities 125 | +--ro transport-planes* [transport-plane] 126 | | +--ro transport-plane identityref 127 | +--ro readable-label-stack-depth? uint8 128 +--rw msd {msd}? 129 | +--rw node-msd? uint8 130 | +--rw link-msd 131 | +--rw link-msds* [interface] 132 | +--rw interface if:interface-ref 133 | +--rw msd? uint8 134 +--rw bindings 135 | +--rw mapping-server {mapping-server}? 136 | | +--rw policy* [name] 137 | | +--rw name string 138 | | +--rw ipv4 139 | | | +--rw mapping-entry* [prefix algorithm] 140 | | | +--rw prefix inet:ipv4-prefix 141 | | | +--rw value-type? enumeration 142 | | | +--rw start-sid uint32 143 | | | +--rw range? uint32 144 | | | +--rw algorithm identityref 145 | | +--rw ipv6 146 | | +--rw mapping-entry* [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 connected-prefix-sid-map 153 | | +--rw ipv4 154 | | | +--rw ipv4-prefix-sid* [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 last-hop-behavior? enumeration {sid-last-hop-behavior}? 161 | | +--rw ipv6 162 | | +--rw ipv6-prefix-sid* [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 last-hop-behavior? enumeration {sid-last-hop-behavior}? 169 | +--rw local-prefix-sid 170 | +--rw ipv4 171 | | +--rw ipv4-prefix-sid-local* [prefix algorithm] 172 | | +--rw prefix inet:ipv4-prefix 173 | | +--rw value-type? enumeration 174 | | +--rw start-sid uint32 175 | | +--rw range? uint32 176 | | +--rw algorithm identityref 177 | +--rw ipv6 178 | +--rw ipv6-prefix-sid-local* [prefix algorithm] 179 | +--rw prefix inet:ipv6-prefix 180 | +--rw value-type? enumeration 181 | +--rw start-sid uint32 182 | +--rw range? uint32 183 | +--rw algorithm identityref 184 +--rw global-srgb 185 | +--rw srgb* [lower-bound upper-bound] 186 | +--rw lower-bound uint32 187 | +--rw upper-bound uint32 188 +--rw srlb 189 | +--rw srlb* [lower-bound upper-bound] 190 | +--rw lower-bound uint32 191 | +--rw upper-bound uint32 192 +--ro label-blocks* 193 | +--ro lower-bound? uint32 194 | +--ro upper-bound? uint32 195 | +--ro size? uint32 196 | +--ro free? uint32 197 | +--ro used? uint32 198 | +--ro scope? enumeration 199 +--ro sid-list 200 +--ro sid* [target sid source source-protocol binding-type] 201 +--ro target string 202 +--ro sid uint32 203 +--ro algorithm? uint8 204 +--ro source inet:ip-address 205 +--ro used? boolean 206 +--ro source-protocol -> /rt:routing/control-plane-protocols 207 + /control-plane-protocol/name 208 +--ro binding-type enumeration 209 +--ro scope? enumeration 211 notifications: 212 +---n segment-routing-global-srgb-collision 213 | +--ro srgb-collisions* 214 | +--ro lower-bound? uint32 215 | +--ro upper-bound? uint32 216 | +--ro routing-protocol? -> /rt:routing/control-plane-protocols 217 | /control-plane-protocol/name 218 | +--ro originating-rtr-id? router-id 219 +---n segment-routing-global-sid-collision 220 | +--ro received-target? string 221 | +--ro new-sid-rtr-id? router-id 222 | +--ro original-target? string 223 | +--ro original-sid-rtr-id? router-id 224 | +--ro index? uint32 225 | +--ro routing-protocol? -> /rt:routing/control-plane-protocols 226 | /control-plane-protocol/name 227 +---n segment-routing-index-out-of-range 228 +--ro received-target? string 229 +--ro received-index? uint32 230 +--ro routing-protocol? -> /rt:routing/control-plane-protocols 231 /control-plane-protocol/name 233 3. Configuration 235 This module augments the "/rt:routing:" with a segment-routing 236 container. This container defines all the configuration parameters 237 related to segment-routing. 239 The segment-routing configuration is split in global configuration 240 and interface configuration. 242 The global configuration includes : 244 o segment-routing transport type : The underlying transport type for 245 segment routing. The version of the model limits the transport 246 type to an MPLS dataplane. The transport-type is only defined 247 once for a particular routing-instance and is agnostic to the 248 control plane used. Only a single transport-type is supported in 249 this version of the model. 251 o bindings : Defines prefix to SID mappings. The operator can 252 control advertisement of Prefix-SID independently for IPv4 and 253 IPv6. Two types of mappings are available : 255 * Mapping-server : maps non local prefixes to a segment ID. 256 Configuration of bindings does not automatically allow 257 advertisement of those bindings. Advertisement must be 258 controlled by each routing-protocol instance (see Section 4). 259 Multiple mapping policies may be defined. 261 * Connected prefixes : maps connected prefixes to a segment ID. 262 Advertisement of the mapping will be done by IGP when enabled 263 for segment routing (see Section 4). The SID value can be 264 expressed as an index (default), or an absolute value. The 265 "last-hop-behavior" configuration dictates the PHP behavior: 266 "explicit-null", "php", or "non-php". 268 o SRGB (Segment Routing Global Block): Defines a list of label 269 blocks represented by a pair of lower-bound/upper-bound labels. 270 The SRGB is also agnostic to the control plane used. So all 271 routing-protocol instance will have to advertise the same SRGB. 273 o SRLB (Segment Routing Local Block): Defines a list of label blocks 274 represented by a pair of lower-bound/upper-bound labels, reserved 275 for lcoal SIDs. 277 4. IGP Control plane configuration 279 Support of segment-routing extensions for a particular IGP control 280 plane is done by augmenting routing-protocol configuration with 281 segment-routing extensions. This augmentation SHOULD be part of 282 separate YANG modules in order to not create any dependency for 283 implementations to support all protocol extensions. 285 This module defines groupings that SHOULD be used by IGP segment 286 routing modules. 288 The "controlplane-cfg" grouping defines the generic global 289 configuration for the IGP. 291 The "enabled" leaf enables segment-routing extensions for the 292 routing-protocol instance. 294 The "bindings" container controls the routing-protocol instance's 295 advertisement of local bindings and the processing of received 296 bindings. 298 4.1. IGP interface configuration 300 The interface configuration is part of the "igp-interface-cfg" 301 grouping and includes Adjacency SID properties. 303 4.1.1. Adjacency SID properties 305 4.1.1.1. Bundling 307 This section is a first proposal on how to use S-bit in Adj-SID to 308 create bundles. Authors would like to trigger discussion based on 309 this first proposal. 311 In case of parallel IP links between routers, an additional Adjacency 312 SID may be advertised representing more than one adjacency (i.e., a 313 bundle of adjacencies). The "advertise-adj-group-sid" configuration 314 controls whether or not an additional adjacency SID is advertised. 316 The "advertise-adj-group-sid" would be a list of "group-id". The 317 "group-id" will permit to identify interfaces that must be bundled 318 together. 320 +-------+ +------+ 321 | | ------- L1 ---- | | 322 | R1 | ------- L2 ---- | R2 | 323 | | ------- L3 ---- | | 324 | | ------- L4 ---- | | 325 +-------+ +------+ 327 In the figure above, R1 and R2 are interconnected by four links. A 328 routing protocol adjacency is established on each link. Operator 329 would like to create segment-routing Adj-SID that represent some 330 bundles of links. We can imagine two different bundles : L1/L2 and 331 L2/L3. To achieve this behavior, the service provider will configure 332 a "group-id" X for both interfaces L1 and L2 and a "group-id" Y for 333 both interfaces L3 and L3. This will result in R1 advertising an 334 additional Adj-SID for each adjacency, for example a Adj-SID with S 335 flag set and value of 400 will be added to L1 and L2. A Adj-SID with 336 S flag set and value of 500 will be added to L3 and L4. As L1/L2 and 337 L3/L4 does not share the same "group-id", a different SID value will 338 be allocated. 340 4.1.1.2. Protection 342 The "advertise-protection" defines how protection for an interface is 343 advertised. It does not control the activation or deactivation of 344 protection. If the "single" option is used, a single Adj-SID will be 345 advertised for the interface. If the interface is protected, the 346 B-Flag for the Adj-SID advertisement will be set. If the "dual" 347 option is used and if the interface is protected, two Adj-SIDs will 348 be advertised for the interface adjacencies. One Adj-SID will always 349 have the B-Flag set and the other will have the B-Flag clear. This 350 option is intended to be used in the case of traffic engineering 351 where a path must use either protected segments or non-protected 352 segments. 354 5. States 356 The operational states contains information reflecting the usage of 357 allocated SRGB labels. 359 It also includes a list of all global SIDs, their associated 360 bindings, and other information such as the source protocol and 361 algorithm. 363 6. Notifications 365 The model defines the following notifications for segment-routing. 367 o segment-routing-global-srgb-collision: Rasied when a control plan 368 advertised SRGB blocks have conflicts. 370 o segment-routing-global-sid-collision: Raised when a control plane 371 advertised index is already associated with another target (in 372 this version, the only defined targets are IPv4 and IPv6 373 prefixes). 375 o segment-routing-index-out-of-range: Raised when a control plane 376 advertised index fall outside the range of SRGBs configured for 377 the network device. 379 7. YANG Module 381 file "ietf-segment-routing-common@2017-07-01.yang" 382 module ietf-segment-routing-common { 383 namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-common"; 384 prefix sr-cmn; 386 import ietf-inet-types { 387 prefix inet; 388 } 390 organization 391 "IETF SPRING - SPRING Working Group"; 393 contact 394 "WG Web: 395 WG List: 397 Editor: Stephane Litkowski 398 399 Editor: Yingzhen Qu 400 402 Author: Acee Lindem 403 404 Author: Pushpasis Sarkar 405 406 Author: Jeff Tantsura 407 409 "; 410 description 411 "The YANG module defines a collection of types and groupings for 412 Segment routing. 414 Copyright (c) 2017 IETF Trust and the persons identified as 415 authors of the code. All rights reserved. 417 Redistribution and use in source and binary forms, with or 418 without modification, is permitted pursuant to, and subject 419 to the license terms contained in, the Simplified BSD License 420 set forth in Section 4.c of the IETF Trust's Legal Provisions 421 Relating to IETF Documents 422 (http://trustee.ietf.org/license-info). 424 This version of this YANG module is part of RFC XXXX; 425 see the RFC itself for full legal notices."; 427 reference "RFC XXXX"; 429 revision 2017-07-01 { 430 description 431 " 432 *Conform to RFC6087BIS Appendix C 433 "; 434 reference "RFC XXXX: YANG Data Model for Segment Routing."; 435 } 436 revision 2017-03-10 { 437 description 438 " 439 * Add support of SRLB 440 "; 441 reference "RFC XXXX: YANG Data Model for Segment Routing."; 442 } 443 revision 2016-10-28 { 444 description 445 " 446 * Add support of MSD (Maximum SID Depth) 447 * Update contact info 448 "; 449 reference "RFC XXXX: YANG Data Model for Segment Routing."; 450 } 451 revision 2016-10-24 { 452 description 453 "Initial"; 454 reference "RFC XXXX: YANG Data Model for Segment Routing."; 455 } 457 feature sid-last-hop-behavior { 458 description 459 "Configurable last hop behavior."; 460 } 462 identity segment-routing-transport { 463 description 464 "Base identity for segment routing transport."; 465 } 467 identity segment-routing-transport-mpls { 468 base segment-routing-transport; 469 description 470 "This identity represents MPLS transport for segment 471 routing."; 472 } 474 identity segment-routing-transport-ipv6 { 475 base segment-routing-transport; 476 description 477 "This identity represents IPv6 transport for segment 478 routing."; 479 } 481 identity prefix-sid-algorithm { 482 description 483 "Base identity for prefix-sid algorithm."; 484 } 486 identity prefix-sid-algorithm-shortest-path { 487 base prefix-sid-algorithm; 488 description 489 "The default behavior of prefix-sid algorithm."; 490 } 492 identity prefix-sid-algorithm-strict-spf { 493 base prefix-sid-algorithm; 494 description 495 "This algorithm mandates that the packet is forwared 496 according to ECMP-aware SPF algorithm."; 497 } 499 grouping srlr { 500 description 501 "Grouping for SR Label Range configuration."; 502 leaf lower-bound { 503 type uint32; 504 description 505 "Lower value in the block."; 506 } 507 leaf upper-bound { 508 type uint32; 509 description 510 "Upper value in the block."; 512 } 513 } 515 grouping srgb-cfg { 516 description 517 "Grouping for SR Label Range configuration."; 518 list srgb { 519 key "lower-bound upper-bound"; 520 ordered-by user; 521 description 522 "List of global blocks to be 523 advertised."; 524 uses srlr; 525 } 526 } 528 grouping srlb-cfg { 529 description 530 "Grouping for SR Local Block range configuration."; 531 list srlb { 532 key "lower-bound upper-bound"; 533 ordered-by user; 534 description 535 "List of SRLBs."; 536 uses srlr; 537 } 538 } 540 grouping sid-value-type { 541 description 542 "Defines how the SID value is expressed."; 543 leaf value-type { 544 type enumeration { 545 enum "index" { 546 description 547 "The value will be 548 interpreted as an index."; 549 } 550 enum "absolute" { 551 description 552 "The value will become 553 interpreted as an absolute 554 value."; 555 } 556 } 557 default "index"; 558 description 559 "This leaf defines how value 560 must be interpreted."; 561 } 562 } 564 grouping ipv4-sid-cfg { 565 description 566 "This grouping defines cfg of prefix SID."; 567 leaf prefix { 568 type inet:ipv4-prefix; 569 description 570 "connected prefix sid."; 571 } 572 uses prefix-sid-attributes; 573 } 574 grouping ipv6-sid-cfg { 575 description 576 "This grouping defines cfg of prefix SID."; 577 leaf prefix { 578 type inet:ipv6-prefix; 579 description 580 "connected prefix sid."; 581 } 582 uses prefix-sid-attributes; 583 } 585 grouping last-hop-behavior { 586 description 587 "Defines last hop behavior"; 588 leaf last-hop-behavior { 589 if-feature "sid-last-hop-behavior"; 590 type enumeration { 591 enum "explicit-null" { 592 description 593 "Use explicit-null for the SID."; 594 } 595 enum "no-php" { 596 description 597 "Do no use PHP for the SID."; 598 } 599 enum "php" { 600 description 601 "Use PHP for the SID."; 602 } 603 } 604 description 605 "Configure last hop behavior."; 606 } 607 } 608 grouping node-capabilities { 609 description 610 "Containing SR node capabilities."; 611 container node-capabilities { 612 config false; 613 description 614 "Shows the SR capability of the node."; 615 list transport-planes { 616 key "transport-plane"; 617 description 618 "List of supported transport planes."; 619 leaf transport-plane { 620 type identityref { 621 base segment-routing-transport; 622 } 623 description 624 "Transport plane supported"; 625 } 626 } 627 leaf readable-label-stack-depth { 628 type uint8; 629 description 630 "Number of MPLS labels that 631 can be read in the stack."; 632 } 633 } 634 } 636 grouping prefix-sid-attributes { 637 description 638 "Containing SR attributes for a prefix."; 639 uses sid-value-type; 640 leaf start-sid { 641 type uint32; 642 mandatory true; 643 description 644 "Value associated with 645 prefix. The value must 646 be interpreted in the 647 context of value-type."; 648 } 649 leaf range { 650 type uint32; 651 description 652 "Describes how many SIDs could be 653 allocated."; 654 } 655 leaf algorithm { 656 type identityref { 657 base prefix-sid-algorithm; 658 } 659 description 660 "Prefix-sid algorithm."; 661 } 662 } 663 } 664 665 file "ietf-segment-routing@2017-07-01.yang" 666 module ietf-segment-routing { 667 namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing"; 668 prefix sr; 670 import ietf-inet-types { 671 prefix inet; 672 } 673 import ietf-yang-types { 674 prefix yang; 675 } 676 import ietf-routing { 677 prefix rt; 678 } 679 import ietf-interfaces { 680 prefix if; 681 } 682 import ietf-segment-routing-common { 683 prefix sr-cmn; 684 } 686 organization 687 "IETF SPRING Working Group"; 688 contact 689 "WG Web: 690 WG List: 692 Editor: Stephane Litkowski 693 694 Editor: Yingzhen Qu 695 697 Author: Acee Lindem 698 699 Author: Pushpasis Sarkar 700 701 Author: Jeff Tantsura 702 704 "; 705 description 706 "The YANG module defines a generic configuration model for 707 Segment routing common across all of the vendor 708 implementations. 710 Copyright (c) 2017 IETF Trust and the persons identified as 711 authors of the code. All rights reserved. 713 Redistribution and use in source and binary forms, with or 714 without modification, is permitted pursuant to, and subject 715 to the license terms contained in, the Simplified BSD License 716 set forth in Section 4.c of the IETF Trust's Legal Provisions 717 Relating to IETF Documents 718 (http://trustee.ietf.org/license-info). 720 This version of this YANG module is part of RFC XXXX; 721 see the RFC itself for full legal notices."; 723 reference "RFC XXXX"; 725 revision 2017-07-01 { 726 description 727 " 728 * Implement NMDA model 729 *Conform to RFC6087BIS Appendix C 730 "; 731 reference "RFC XXXX: YANG Data Model for Segment Routing."; 732 } 734 revision 2017-03-10 { 735 description 736 " 737 * Change global-sid-list to sid-list and add a leaf scope 738 * Added support of SRLB 739 * Added support of local sids 740 * fixed indentations 741 "; 742 reference "RFC XXXX: YANG Data Model for Segment Routing."; 743 } 744 revision 2016-10-28 { 745 description 746 " 747 * Add support of MSD (Maximum SID Depth) 748 * Update contact info 749 "; 750 reference "RFC XXXX: YANG Data Model for Segment Routing."; 751 } 752 revision 2016-10-24 { 753 description 754 " 755 * Moved common SR types and groupings to a seperate module 756 "; 757 reference "RFC XXXX: YANG Data Model for Segment Routing."; 758 } 759 revision 2016-07-07 { 760 description 761 " 762 * Add support of prefix-sid algorithm configuration 763 * change routing-protocols to control-plane-protocols 764 "; 765 reference "RFC XXXX: YANG Data Model for Segment Routing."; 766 } 767 revision 2016-03-17 { 768 description 769 " 770 * Add notification segment-routing-global-srgb-collision 771 * Add router-id to segment-routing-global-sid-collision 772 * Remove routing-instance 773 * Add typedef router-id 774 "; 775 reference "RFC XXXX: YANG Data Model for Segment Routing."; 776 } 777 revision 2015-10-17 { 778 description 779 " 780 * Add per-protocol SRGB config feature 781 * Move SRBG config to a grouping 782 "; 783 reference "RFC XXXX: YANG Data Model for Segment Routing."; 784 } 785 revision 2015-06-22 { 786 description 787 " 788 * Prefix SID config moved to 789 connected-prefix-sid-map in global SR cfg 790 rather than IGP. 791 "; 792 reference "draft-litkowski-spring-sr-yang-01"; 793 } 794 revision 2015-04-23 { 795 description 796 " 797 * Node flag deprecated from prefixSID 798 * SR interface cfg moved to protocol 799 * 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 yang:dotted-quad; 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."; 850 leaf enabled { 851 type boolean; 852 default "false"; 853 description 854 "Enables segment-routing 855 protocol extensions."; 856 } 857 container bindings { 858 description 859 "Control of binding advertisement 860 and reception."; 861 container advertise { 862 description 863 "Authorize the advertise 864 of local mappings in binding TLV."; 865 leaf-list policies { 866 type string; 867 description 868 "List of policies to be advertised."; 869 } 870 } 871 leaf receive { 872 type boolean; 873 default "true"; 874 description 875 "Authorize the reception and usage 876 of binding TLV."; 877 } 878 } 879 } 880 } 882 grouping igp-interface-cfg { 883 description 884 "Grouping for IGP interface cfg."; 885 container segment-routing { 886 description 887 "container for SR interface cfg."; 888 container adjacency-sid { 889 description 890 "Defines the adjacency SID properties."; 891 list advertise-adj-group-sid { 892 key "group-id"; 893 description 894 "Control advertisement of S flag. 895 Enable to advertise a common Adj-SID 896 for parallel links."; 897 leaf group-id { 898 type uint32; 899 description 900 "The value is an internal value to identify 901 a group-ID. Interfaces with the same 902 group-ID will be bundled together."; 903 } 904 } 905 leaf advertise-protection { 906 type enumeration { 907 enum "single" { 908 description 909 "A single Adj-SID is associated 910 with the adjacency and reflects 911 the protection configuration."; 912 } 913 enum "dual" { 914 description 915 "Two Adj-SIDs will be associated 916 with the adjacency if interface 917 is protected. In this case 918 one will be enforced with 919 backup flag set, the other 920 will be enforced to backup flag unset. 921 In case, protection is not configured, 922 a single Adj-SID will be advertised 923 with backup flag unset."; 924 } 925 } 926 description 927 "If set, the Adj-SID refers to an 928 adjacency being protected."; 929 } 930 } 931 } 932 } 934 grouping msd-cfg { 935 description 936 "MSD configuration grouping."; 937 leaf node-msd { 938 type uint8; 939 description 940 "Node MSD is the lowest MSD supported by the node."; 941 } 942 container link-msd { 943 description 944 "Link MSD is a number represetns the particular link MSD value."; 945 list link-msds { 946 key "interface"; 947 description 948 "List of link MSDs."; 949 leaf interface { 950 type if:interface-ref; 951 description 952 "Name of the interface."; 953 } 954 leaf msd { 955 type uint8; 956 description 957 "SID depth of the interface associated with the link."; 958 } 959 } 960 } 961 } 963 augment "/rt:routing" { 964 description 965 "This augments routing-instance 966 configuration with segment-routing."; 967 container segment-routing { 968 description 969 "segment routing global config."; 970 leaf transport-type { 971 type identityref { 972 base sr-cmn:segment-routing-transport; 973 } 974 default "sr-cmn:segment-routing-transport-mpls"; 975 description 976 "Dataplane to be used."; 977 } 978 uses sr-cmn:node-capabilities; 979 container msd { 980 if-feature "msd"; 981 description 982 "MSD configuration."; 983 uses msd-cfg; 984 } 985 container bindings { 986 description 987 "List of bindings."; 988 container mapping-server { 989 if-feature "mapping-server"; 990 description 991 "Configuration of mapping-server 992 local entries."; 993 list policy { 994 key "name"; 995 description 996 "Definition of mapping policy."; 997 leaf name { 998 type string; 999 description 1000 "Name of the mapping policy."; 1001 } 1002 container ipv4 { 1003 description 1004 "IPv4 mapping entries."; 1005 list mapping-entry { 1006 key "prefix algorithm"; 1007 description 1008 "Mapping entries."; 1009 uses sr-cmn:ipv4-sid-cfg; 1010 } 1011 } 1012 container ipv6 { 1013 description 1014 "IPv6 mapping entries."; 1015 list mapping-entry { 1016 key "prefix algorithm"; 1017 description 1018 "Mapping entries."; 1019 uses sr-cmn:ipv6-sid-cfg; 1020 } 1021 } 1022 } 1023 } 1024 container connected-prefix-sid-map { 1025 description 1026 "Prefix SID configuration."; 1027 container ipv4 { 1028 description 1029 "Parameters associated with IPv4 prefix SID"; 1030 list ipv4-prefix-sid { 1031 key "prefix algorithm"; 1032 description 1033 "List of prefix SID 1034 mapped to IPv4 local prefixes."; 1035 uses sr-cmn:ipv4-sid-cfg; 1036 uses sr-cmn:last-hop-behavior; 1037 } 1038 } 1039 container ipv6 { 1040 description 1041 "Parameters associated with IPv6 prefix SID"; 1043 list ipv6-prefix-sid { 1044 key "prefix algorithm"; 1045 description 1046 "List of prefix SID 1047 mapped to IPv6 local prefixes."; 1048 uses sr-cmn:ipv6-sid-cfg; 1049 uses sr-cmn:last-hop-behavior; 1050 } 1051 } 1052 } 1053 container local-prefix-sid { 1054 description 1055 "Local sid configuration."; 1056 container ipv4 { 1057 description 1058 "List of local ipv4 sids."; 1059 list ipv4-prefix-sid-local { 1060 key "prefix algorithm"; 1061 description 1062 "List of local prefix-sid."; 1063 uses sr-cmn:ipv4-sid-cfg; 1064 } 1065 } 1066 container ipv6 { 1067 description 1068 "List of local ipv6 sids."; 1069 list ipv6-prefix-sid-local { 1070 key "prefix algorithm"; 1071 description 1072 "List of local prefix-sid."; 1073 uses sr-cmn:ipv6-sid-cfg; 1074 } 1075 } 1076 } 1077 } 1078 container global-srgb { 1079 description 1080 "Global SRGB configuration."; 1081 uses sr-cmn:srgb-cfg; 1082 } 1083 container srlb { 1084 description 1085 "SR Local Block configuration."; 1086 uses sr-cmn:srlb-cfg; 1087 } 1089 list label-blocks { 1090 config false; 1091 description 1092 "List of labels blocks currently 1093 in use."; 1094 leaf lower-bound { 1095 type uint32; 1096 description 1097 "Lower bound of the label block."; 1098 } 1099 leaf upper-bound { 1100 type uint32; 1101 description 1102 "Upper bound of the label block."; 1103 } 1104 leaf size { 1105 type uint32; 1106 description 1107 "Number of indexes in the block."; 1108 } 1109 leaf free { 1110 type uint32; 1111 description 1112 "Number of indexes free in the block."; 1113 } 1114 leaf used { 1115 type uint32; 1116 description 1117 "Number of indexes used in the block."; 1118 } 1119 leaf scope { 1120 type enumeration { 1121 enum "global" { 1122 description 1123 "Global sid."; 1124 } 1125 enum "local" { 1126 description 1127 "Local sid."; 1128 } 1129 } 1130 description 1131 "Scope of this label block."; 1132 } 1133 } 1134 container sid-list { 1135 config false; 1136 description 1137 "List of prefix and SID associations."; 1138 list sid { 1139 key "target sid source source-protocol binding-type"; 1140 ordered-by system; 1141 description 1142 "Binding."; 1143 leaf target { 1144 type string; 1145 description 1146 "Defines the target of the binding. 1147 It can be a prefix or something else."; 1148 } 1149 leaf sid { 1150 type uint32; 1151 description 1152 "Index associated with the prefix."; 1153 } 1154 leaf algorithm { 1155 type uint8; 1156 description 1157 "Algorithm to be used for the prefix 1158 SID."; 1159 } 1160 leaf source { 1161 type inet:ip-address; 1162 description 1163 "IP address of the router than own 1164 the binding."; 1165 } 1166 leaf used { 1167 type boolean; 1168 description 1169 "Defines if the binding is used 1170 in forwarding plane."; 1171 } 1172 leaf source-protocol { 1173 type leafref { 1174 path "/rt:routing/rt:control-plane-protocols/" 1175 + "rt:control-plane-protocol/rt:name"; 1176 } 1177 description 1178 "Rtg protocol that owns the binding"; 1179 } 1180 leaf binding-type { 1181 type enumeration { 1182 enum "prefix-sid" { 1183 description 1184 "Binding is learned from 1185 a prefix SID."; 1186 } 1187 enum "binding-tlv" { 1188 description 1189 "Binding is learned from 1190 a binding TLV."; 1191 } 1192 } 1193 description 1194 "Type of binding."; 1195 } 1196 leaf scope { 1197 type enumeration { 1198 enum "global" { 1199 description 1200 "Global sid."; 1201 } 1202 enum "local" { 1203 description 1204 "Local sid."; 1205 } 1206 } 1207 description 1208 "The sid is local or global."; 1209 } 1210 } 1211 } 1212 } 1213 } 1215 notification segment-routing-global-srgb-collision { 1216 description 1217 "This notification is sent when received SRGB blocks from 1218 a router conflict."; 1219 list srgb-collisions { 1220 description 1221 "List of SRGB blocks that conflict."; 1222 leaf lower-bound { 1223 type uint32; 1224 description 1225 "Lower value in the block."; 1226 } 1227 leaf upper-bound { 1228 type uint32; 1229 description 1230 "Upper value in the block."; 1231 } 1232 leaf routing-protocol { 1233 type leafref { 1234 path "/rt:routing/rt:control-plane-protocols/" 1235 + "rt:control-plane-protocol/rt:name"; 1236 } 1237 description 1238 "Routing protocol reference that received the event."; 1239 } 1240 leaf originating-rtr-id { 1241 type router-id; 1242 description 1243 "Originating router id of this SRGB block."; 1244 } 1245 } 1246 } 1247 notification segment-routing-global-sid-collision { 1248 description 1249 "This notification is sent when a new mapping is learned 1250 , containing mapping 1251 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. Normative References 1336 [I-D.ietf-isis-segment-routing-msd] 1337 Tantsura, J., Chunduri, U., Aldrin, S., and L. Ginsberg, 1338 "Signaling MSD (Maximum SID Depth) using IS-IS", draft- 1339 ietf-isis-segment-routing-msd-04 (work in progress), June 1340 2017. 1342 [I-D.ietf-ospf-segment-routing-msd] 1343 Tantsura, J., Chunduri, U., Aldrin, S., and P. Psenak, 1344 "Signaling MSD (Maximum SID Depth) using OSPF", draft- 1345 ietf-ospf-segment-routing-msd-05 (work in progress), June 1346 2017. 1348 [I-D.ietf-spring-segment-routing] 1349 Filsfils, C., Previdi, S., Decraene, B., Litkowski, S., 1350 and R. Shakir, "Segment Routing Architecture", draft-ietf- 1351 spring-segment-routing-12 (work in progress), June 2017. 1353 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1354 Requirement Levels", BCP 14, RFC 2119, March 1997. 1356 [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the 1357 Network Configuration Protocol (NETCONF)", RFC 6020, 1358 October 2010. 1360 [RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language", 1361 RFC 7950, August 2016. 1363 Authors' Addresses 1365 Stephane Litkowski 1366 Orange Business Service 1368 Email: stephane.litkowski@orange.com 1370 Yingzhen Qu 1371 Huawei 1373 Email: yingzhen.qu@huawei.com 1374 Pushpasis Sarkar 1375 Individual 1377 Email: pushpasis.ietf@gmail.com 1379 Jeff Tantsura 1380 Individual 1382 Email: jefftant.ietf@gmail.com