idnits 2.17.1 draft-ietf-spring-sr-yang-04.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 9 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 128 has weird spacing: '...rw name str...' == Line 162 has weird spacing: '...r-bound uin...' == Line 163 has weird spacing: '...r-bound uin...' == Line 168 has weird spacing: '...t-plane ide...' -- The document date (October 24, 2016) is 2741 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) == Outdated reference: A later version (-15) exists of draft-ietf-spring-segment-routing-09 Summary: 2 errors (**), 0 flaws (~~), 6 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: April 27, 2017 Cisco Systems 6 P. Sarkar 7 Juniper Networks 8 J. Tantsura 9 Individual 10 October 24, 2016 12 YANG Data Model for Segment Routing 13 draft-ietf-spring-sr-yang-04 15 Abstract 17 This document defines a YANG data model ([RFC6020], [RFC7950]) for 18 segment routing ([I-D.ietf-spring-segment-routing]) configuration and 19 operation. This YANG model is intended to be used on network 20 elements to configure or operate segment routing. This document 21 defines also generic containers that SHOULD be reused by IGP protocol 22 modules to support segment routing. 24 Requirements Language 26 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 27 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 28 document are to be interpreted as described in [RFC2119]. 30 Status of This Memo 32 This Internet-Draft is submitted in full conformance with the 33 provisions of BCP 78 and BCP 79. 35 Internet-Drafts are working documents of the Internet Engineering 36 Task Force (IETF). Note that other groups may also distribute 37 working documents as Internet-Drafts. The list of current Internet- 38 Drafts is at http://datatracker.ietf.org/drafts/current/. 40 Internet-Drafts are draft documents valid for a maximum of six months 41 and may be updated, replaced, or obsoleted by other documents at any 42 time. It is inappropriate to use Internet-Drafts as reference 43 material or to cite them other than as "work in progress." 45 This Internet-Draft will expire on April 27, 2017. 47 Copyright Notice 49 Copyright (c) 2016 IETF Trust and the persons identified as the 50 document authors. All rights reserved. 52 This document is subject to BCP 78 and the IETF Trust's Legal 53 Provisions Relating to IETF Documents 54 (http://trustee.ietf.org/license-info) in effect on the date of 55 publication of this document. Please review these documents 56 carefully, as they describe your rights and restrictions with respect 57 to this document. Code Components extracted from this document must 58 include Simplified BSD License text as described in Section 4.e of 59 the Trust Legal Provisions and are provided without warranty as 60 described in the Simplified BSD License. 62 Table of Contents 64 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 65 1.1. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 3 66 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 67 3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5 68 4. IGP Control plane configuration . . . . . . . . . . . . . . . 6 69 4.1. IGP interface configuration . . . . . . . . . . . . . . . 6 70 4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 6 71 4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 6 72 4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 7 73 5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 74 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8 75 7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 76 8. Security Considerations . . . . . . . . . . . . . . . . . . . 24 77 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 24 78 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 79 11. Normative References . . . . . . . . . . . . . . . . . . . . 25 80 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 82 1. Introduction 84 This document defines a YANG data model for segment routing 85 configuration and operation. This document does not define the IGP 86 extensions to support segment routing but defines generic groupings 87 that SHOULD be reused by IGP extension modules. The reason of this 88 design choice is to not require implementations to support all IGP 89 extensions. For example, an implementation may support IS-IS 90 extension but not OSPF. 92 1.1. Tree diagram 94 A simplified graphical representation of the data model is presented 95 in Section 2. 97 The meaning of the symbols in these diagrams is as follows: 99 o Brackets "[" and "]" enclose list keys. 101 o Curly braces "{" and "}" contain names of optional features that 102 make the corresponding node conditional. 104 o Abbreviations before data node names: "rw" means configuration 105 (read-write), and "ro" state data (read-only). 107 o Symbols after data node names: "?" means an optional node and "*" 108 denotes a "list" or "leaf-list". 110 o Parentheses enclose choice and case nodes, and case nodes are also 111 marked with a colon (":"). 113 o Ellipsis ("...") stands for contents of subtrees that are not 114 shown. 116 2. Design of the Data Model 118 As the module definition is just starting, it is expected that there 119 will be changes as the module matures. 121 module: ietf-segment-routing 122 augment /rt:routing: 123 +--rw segment-routing 124 +--rw transport-type? identityref 125 +--rw bindings 126 | +--rw mapping-server {mapping-server}? 127 | | +--rw policy* [name] 128 | | +--rw name string 129 | | +--rw ipv4 130 | | | +--rw mapping-entry* [prefix algorithm] 131 | | | +--rw prefix inet:ipv4-prefix 132 | | | +--rw value-type? enumeration 133 | | | +--rw start-sid uint32 134 | | | +--rw range? uint32 135 | | | +--rw algorithm identityref 136 | | +--rw ipv6 137 | | +--rw mapping-entry* [prefix algorithm] 138 | | +--rw prefix inet:ipv6-prefix 139 | | +--rw value-type? enumeration 140 | | +--rw start-sid uint32 141 | | +--rw range? uint32 142 | | +--rw algorithm identityref 143 | +--rw connected-prefix-sid-map 144 | +--rw ipv4 145 | | +--rw ipv4-prefix-sid* [prefix algorithm] 146 | | +--rw prefix inet:ipv4-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 ipv6 153 | +--rw ipv6-prefix-sid* [prefix algorithm] 154 | +--rw prefix inet:ipv6-prefix 155 | +--rw value-type? enumeration 156 | +--rw start-sid uint32 157 | +--rw range? uint32 158 | +--rw algorithm identityref 159 | +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}? 160 +--rw global-srgb 161 +--rw srgb* [lower-bound upper-bound] 162 +--rw lower-bound uint32 163 +--rw upper-bound uint32 164 augment /rt:routing-state: 165 +--ro segment-routing 166 +--ro node-capabilities 167 | +--ro transport-planes* [transport-plane] 168 | | +--ro transport-plane identityref 169 | +--ro segment-stack-push-limit? uint8 170 | +--ro readable-label-stack-depth? uint8 171 +--ro label-blocks* 172 | +--ro lower-bound? uint32 173 | +--ro upper-bound? uint32 174 | +--ro size? uint32 175 | +--ro free? uint32 176 | +--ro used? uint32 177 +--ro global-sid-list 178 +--ro sid* [target sid source source-protocol binding-type] 179 +--ro target string 180 +--ro sid uint32 181 +--ro algorithm? uint8 182 +--ro source inet:ip-address 183 +--ro used? boolean 184 +--ro source-protocol -> /rt:routing-state/control-plane-protocols 185 /control-plane-protocol/name 186 +--ro binding-type enumeration 187 notifications: 189 +---n segment-routing-global-srgb-collision 190 | +--ro srgb-collisions* 191 | +--ro lower-bound? uint32 192 | +--ro upper-bound? uint32 193 | +--ro routing-protocol? -> /rt:routing-state/control-plane-protocols 194 | /control-plane-protocol/name 195 | +--ro originating-rtr-id? router-id 196 +---n segment-routing-global-sid-collision 197 | +--ro received-target? string 198 | +--ro new-sid-rtr-id? router-id 199 | +--ro original-target? string 200 | +--ro original-sid-rtr-id? router-id 201 | +--ro index? uint32 202 | +--ro routing-protocol? -> /rt:routing-state/control-plane-protocols 203 | /control-plane-protocol/name 204 +---n segment-routing-index-out-of-range 205 +--ro received-target? string 206 +--ro received-index? uint32 207 +--ro routing-protocol? -> /rt:routing-state/control-plane-protocols 208 /control-plane-protocol/name 210 3. Configuration 212 This module augments the "/rt:routing:" with a segment-routing 213 container. This container defines all the configuration parameters 214 related to segment-routing. 216 The segment-routing configuration is split in global configuration 217 and interface configuration. 219 The global configuration includes : 221 o segment-routing transport type : The underlying transport type for 222 segment routing. The version of the model limits the transport 223 type to an MPLS dataplane. The transport-type is only defined 224 once for a particular routing-instance and is agnostic to the 225 control plane used. Only a single transport-type is supported in 226 this version of the model. 228 o bindings : Defines prefix to SID mappings. The operator can 229 control advertisement of Prefix-SID independently for IPv4 and 230 IPv6. Two types of mappings are available : 232 * Mapping-server : maps non local prefixes to a segment ID. 233 Configuration of bindings does not automatically allow 234 advertisement of those bindings. Advertisement must be 235 controlled by each routing-protocol instance (see Section 4). 236 Multiple mapping policies may be defined. 238 * Connected prefixes : maps connected prefixes to a segment ID. 239 Advertisement of the mapping will be done by IGP when enabled 240 for segment routing (see Section 4). The SID value can be 241 expressed as an index (default), or an absolute value. The 242 "last-hop-behavior" configuration dictates the PHP behavior: 243 "explicit-null", "php", or "non-php". 245 o SRGB (Segment Routing Global Block): Defines a list of label 246 blocks represented by a pair of lower-bound/upper-bound labels. 247 The SRGB is also agnostic to the control plane used. So all 248 routing-protocol instance will have to advertise the same SRGB. 250 4. IGP Control plane configuration 252 Support of segment-routing extensions for a particular IGP control 253 plane is done by augmenting routing-protocol configuration with 254 segment-routing extensions. This augmentation SHOULD be part of 255 separate YANG modules in order to not create any dependency for 256 implementations to support all protocol extensions. 258 This module defines groupings that SHOULD be used by IGP segment 259 routing modules. 261 The "controlplane-cfg" grouping defines the generic global 262 configuration for the IGP. 264 The "enabled" leaf enables segment-routing extensions for the 265 routing-protocol instance. 267 The "bindings" container controls the routing-protocol instance's 268 advertisement of local bindings and the processing of received 269 bindings. 271 4.1. IGP interface configuration 273 The interface configuration is part of the "igp-interface-cfg" 274 grouping and includes Adjacency SID properties. 276 4.1.1. Adjacency SID properties 278 4.1.1.1. Bundling 280 This section is a first proposal on how to use S-bit in Adj-SID to 281 create bundles. Authors would like to trigger discussion based on 282 this first proposal. 284 In case of parallel IP links between routers, an additional Adjacency 285 SID may be advertised representing more than one adjacency (i.e., a 286 bundle of adjacencies). The "advertise-adj-group-sid" configuration 287 controls whether or not an additional adjacency SID is advertised. 289 The "advertise-adj-group-sid" would be a list of "group-id". The 290 "group-id" will permit to identify interfaces that must be bundled 291 together. 293 +-------+ +------+ 294 | | ------- L1 ---- | | 295 | R1 | ------- L2 ---- | R2 | 296 | | ------- L3 ---- | | 297 | | ------- L4 ---- | | 298 +-------+ +------+ 300 In the figure above, R1 and R2 are interconnected by four links. A 301 routing protocol adjacency is established on each link. Operator 302 would like to create segment-routing Adj-SID that represent some 303 bundles of links. We can imagine two different bundles : L1/L2 and 304 L2/L3. To achieve this behavior, the service provider will configure 305 a "group-id" X for both interfaces L1 and L2 and a "group-id" Y for 306 both interfaces L3 and L3. This will result in R1 advertising an 307 additional Adj-SID for each adjacency, for example a Adj-SID with S 308 flag set and value of 400 will be added to L1 and L2. A Adj-SID with 309 S flag set and value of 500 will be added to L3 and L4. As L1/L2 and 310 L3/L4 does not share the same "group-id", a different SID value will 311 be allocated. 313 4.1.1.2. Protection 315 The "advertise-protection" defines how protection for an interface is 316 advertised. It does not control the activation or deactivation of 317 protection. If the "single" option is used, a single Adj-SID will be 318 advertised for the interface. If the interface is protected, the 319 B-Flag for the Adj-SID advertisement will be set. If the "dual" 320 option is used and if the interface is protected, two Adj-SIDs will 321 be advertised for the interface adjacencies. One Adj-SID will always 322 have the B-Flag set and the other will have the B-Flag clear. This 323 option is intended to be used in the case of traffic engineering 324 where a path must use either protected segments or non-protected 325 segments. 327 5. States 329 The operational states contains information reflecting the usage of 330 allocated SRGB labels. 332 It also includes a list of all global SIDs, their associated 333 bindings, and other information such as the source protocol and 334 algorithm. 336 6. Notifications 338 The model defines the following notifications for segment-routing. 340 o segment-routing-global-srgb-collision: Rasied when a control plan 341 advertised SRGB blocks have conflicts. 343 o segment-routing-global-sid-collision: Raised when a control plane 344 advertised index is already associated with another target (in 345 this version, the only defined targets are IPv4 and IPv6 346 prefixes). 348 o segment-routing-index-out-of-range: Raised when a control plane 349 advertised index fall outside the range of SRGBs configured for 350 the network device. 352 7. YANG Module 354 file "ietf-segment-routing-common@2016-10-24.yang" 355 module ietf-segment-routing-common { 356 namespace "urn:ietf:params:xml:ns:" 357 + "yang:ietf-segment-routing-common"; 358 prefix sr-cmn; 360 import ietf-inet-types { 361 prefix "inet"; 362 } 364 organization 365 "IETF SPRING Working Group"; 367 contact 368 "WG List: 370 Editor: Stephane Litkowski 371 373 Author: Acee Lindem 374 375 Author: Yingzhen Qu 376 377 Author: Pushpasis Sarkar 378 379 Author: Ing-Wher Chen 380 381 Author: Jeff Tantsura 382 384 "; 386 description 387 "The YANG module defines a collection of types and groupings for 388 Segment routing."; 390 revision 2016-10-24 { 391 description "Initial"; 392 reference 393 "RFC XXXX: YANG Data Model for Segment Routing."; 394 } 396 /* Identities */ 397 identity segment-routing-transport { 398 description 399 "Base identity for segment routing transport."; 400 } 401 identity segment-routing-transport-mpls { 402 base segment-routing-transport; 403 description 404 "This identity represents MPLS transport for segment 405 routing."; 406 } 408 identity prefix-sid-algorithm { 409 description 410 "Base identity for prefix-sid algorithm."; 411 } 413 identity prefix-sid-algorithm-shortest-path { 414 base prefix-sid-algorithm; 415 description 416 "The default behavior of prefix-sid algorithm."; 417 } 419 identity prefix-sid-algorithm-strict-spf { 420 base prefix-sid-algorithm; 421 description 422 "This algorithm mandates that the packet is forwared 423 according to ECMP-aware SPF algorithm."; 424 } 426 /* Features */ 427 feature sid-last-hop-behavior { 428 description 429 "Configurable last hop behavior."; 430 } 432 /* Groupings */ 434 grouping srgb-cfg { 435 list srgb { 436 key "lower-bound upper-bound"; 437 ordered-by user; 438 leaf lower-bound { 439 type uint32; 440 description 441 "Lower value in the block."; 442 } 443 leaf upper-bound { 444 type uint32; 445 description 446 "Upper value in the block."; 447 } 448 description 449 "List of global blocks to be 450 advertised."; 451 } 452 description 453 "Grouping for SRGB configuration."; 454 } 456 grouping sid-value-type { 457 leaf value-type { 458 type enumeration { 459 enum index { 460 description 461 "The value will be 462 interpreted as an index."; 463 } 464 enum absolute { 465 description 466 "The value will become 467 interpreted as an absolute 468 value."; 469 } 470 } 471 default index; 472 description 473 "This leaf defines how value 474 must be interpreted."; 476 } 477 description 478 "Defines how the SID value is expressed."; 479 } 481 grouping ipv4-sid-cfg { 483 leaf prefix { 484 type inet:ipv4-prefix; 485 description 486 "connected prefix sid."; 487 } 489 uses prefix-sid-attributes; 491 description 492 "This grouping defines cfg of prefix SID."; 493 } 495 grouping ipv6-sid-cfg { 496 leaf prefix { 497 type inet:ipv6-prefix; 498 description 499 "connected prefix sid."; 500 } 502 uses prefix-sid-attributes; 504 description 505 "This grouping defines cfg of prefix SID."; 506 } 508 grouping last-hop-behavior { 509 leaf last-hop-behavior { 510 if-feature sid-last-hop-behavior; 511 type enumeration { 512 enum explicit-null { 513 description 514 "Use explicit-null for the SID."; 515 } 516 enum no-php { 517 description 518 "Do no use PHP for the SID."; 519 } 520 enum php { 521 description 522 "Use PHP for the SID."; 523 } 525 } 526 description 527 "Configure last hop behavior."; 528 } 529 description 530 "Defines last hop behavior"; 531 } 533 grouping node-capabilities { 534 description "Containing SR node capabilities."; 535 container node-capabilities { 536 list transport-planes { 537 key transport-plane; 538 leaf transport-plane { 539 type identityref { 540 base segment-routing-transport; 541 } 542 description 543 "Transport plane supported"; 544 } 545 description 546 "List of supported transport planes."; 547 } 548 leaf segment-stack-push-limit { 549 type uint8; 550 description 551 "Describes the number of segments 552 that can be pushed by the node."; 553 } 554 leaf readable-label-stack-depth { 555 type uint8; 556 description 557 "Number of MPLS labels that 558 can be read in the stack."; 559 } 560 description 561 "Shows the SR capability of the node."; 562 } // node-capabilities 563 } // sr-node-capabilities 565 grouping prefix-sid-attributes { 566 description "Containing SR attributes for a prefix."; 568 uses sid-value-type; 569 leaf start-sid { 570 type uint32; 571 mandatory true; 572 description 573 "Value associated with 574 prefix. The value must 575 be interpreted in the 576 context of value-type."; 577 } 579 leaf range { 580 type uint32; 581 description 582 "Describes how many SIDs could be 583 allocated."; 584 } 586 leaf algorithm { 587 type identityref { 588 base prefix-sid-algorithm; 589 } 590 description "Prefix-sid algorithm."; 591 } 592 } //prefix-sid-attributes 593 } 594 595 file "ietf-segment-routing@2016-10-24.yang" 596 module ietf-segment-routing { 597 namespace "urn:ietf:params:xml:ns:" 598 + "yang:ietf-segment-routing"; 599 prefix sr; 601 import ietf-inet-types { 602 prefix "inet"; 603 } 605 import ietf-yang-types { 606 prefix "yang"; 607 } 609 import ietf-routing { 610 prefix "rt"; 611 } 613 import ietf-segment-routing-common { 614 prefix "sr-cmn"; 615 } 617 organization 618 "IETF SPRING Working Group"; 620 contact 621 "WG List: 623 Editor: Stephane Litkowski 624 626 Author: Acee Lindem 627 628 Author: Yingzhen Qu 629 630 Author: Pushpasis Sarkar 631 632 Author: Ing-Wher Chen 633 634 Author: Jeff Tantsura 635 637 "; 639 description 640 "The YANG module defines a generic configuration model for 641 Segment routing common across all of the vendor 642 implementations."; 644 revision 2016-10-24 { 645 description " 646 * Moved common SR types and groupings to a seperate module 647 "; 648 reference 649 "RFC XXXX: YANG Data Model for Segment Routing."; 650 } 651 revision 2016-07-07 { 652 description " 653 * Add support of prefix-sid algorithm configuration 654 * change routing-protocols to control-plane-protocols 655 "; 656 reference 657 "RFC XXXX: YANG Data Model for Segment Routing."; 658 } 659 revision 2016-03-17 { 660 description " 661 * Add notification segment-routing-global-srgb-collision 662 * Add router-id to segment-routing-global-sid-collision 663 * Remove routing-instance 664 * Add typedef router-id 665 "; 666 reference 667 "RFC XXXX: YANG Data Model for Segment Routing."; 668 } 669 revision 2015-10-17 { 670 description " 671 * Add per-protocol SRGB config feature 672 * Move SRBG config to a grouping 673 "; 674 reference 675 "RFC XXXX: YANG Data Model for Segment Routing."; 676 } 677 revision 2015-06-22 { 678 description " 679 * Prefix SID config moved to 680 connected-prefix-sid-map in global SR cfg 681 rather than IGP. 682 "; 683 reference "draft-litkowski-spring-sr-yang-01"; 684 } 685 revision 2015-04-23 { 686 description " 687 * Node flag deprecated from prefixSID 688 * SR interface cfg moved to protocol 689 * Adding multiple binding policies for SRMS 690 "; 691 reference ""; 692 } 693 revision 2015-02-27 { 694 description "Initial"; 695 reference "draft-litkowski-spring-sr-yang-00"; 696 } 698 /* Features */ 700 feature mapping-server { 701 description 702 "Support of SRMS."; 703 } 705 feature protocol-srgb { 706 description 707 "Support per-protocol srgb configuration."; 708 } 710 /* Type Definitions */ 712 typedef system-id { 713 type string { 714 pattern 715 '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.00'; 716 } 717 description 718 "This type defines ISIS system id using pattern, 719 system id looks like : 0143.0438.AeF0.00"; 720 } 722 typedef router-id { 723 type union { 724 type system-id; 725 type yang:dotted-quad; 726 } 727 description 728 "OSPF/BGP router id or ISIS system ID."; 729 } 731 /* Groupings */ 733 grouping controlplane-cfg { 734 container segment-routing { 735 leaf enabled { 736 type boolean; 737 default false; 738 description 739 "Enables segment-routing 740 protocol extensions."; 741 } 742 container bindings { 743 container advertise { 744 leaf-list policies { 745 type string; 746 description 747 "List of policies to be advertised."; 748 } 749 description 750 "Authorize the advertise 751 of local mappings in binding TLV."; 752 } 753 leaf receive { 754 type boolean; 755 default true; 756 description 757 "Authorize the reception and usage 758 of binding TLV."; 759 } 760 description 761 "Control of binding advertisement 762 and reception."; 763 } 764 description 765 "segment routing global config."; 766 } 767 description 768 "Defines protocol configuration."; 769 } 771 grouping igp-interface-cfg { 772 container segment-routing { 774 container adjacency-sid { 775 list advertise-adj-group-sid { 776 key group-id; 778 leaf group-id { 779 type uint32; 780 description 781 "The value is an internal value to identify 782 a group-ID. Interfaces with the same 783 group-ID will be bundled together."; 784 } 785 description 786 "Control advertisement of S flag. 787 Enable to advertise a common Adj-SID 788 for parallel links."; 789 } 790 leaf advertise-protection { 791 type enumeration { 792 enum "single" { 793 description 794 "A single Adj-SID is associated 795 with the adjacency and reflects 796 the protection configuration."; 797 } 798 enum "dual" { 799 description 800 "Two Adj-SIDs will be associated 801 with the adjacency if interface 802 is protected. In this case 803 one will be enforced with 804 backup flag set, the other 805 will be enforced to backup flag unset. 806 In case, protection is not configured, 807 a single Adj-SID will be advertised 808 with backup flag unset."; 809 } 810 } 811 description 812 "If set, the Adj-SID refers to an 813 adjacency being protected."; 814 } 815 description 816 "Defines the adjacency SID properties."; 817 } 818 description 819 "container for SR interface cfg."; 820 } 821 description 822 "Grouping for IGP interface cfg."; 823 } 825 /* Cfg */ 827 augment "/rt:routing" { 828 description 829 "This augments routing-instance 830 configuration with segment-routing."; 831 container segment-routing { 832 leaf transport-type { 833 type identityref { 834 base sr-cmn:segment-routing-transport; 835 } 836 default "sr-cmn:segment-routing-transport-mpls"; 837 description "Dataplane to be used."; 838 } 839 container bindings { 840 container mapping-server { 841 if-feature mapping-server; 842 list policy { 843 key name; 844 leaf name { 845 type string; 846 description 847 "Name of the mapping policy."; 848 } 849 container ipv4 { 850 list mapping-entry { 851 key "prefix algorithm"; 852 uses sr-cmn:ipv4-sid-cfg; 854 description 855 "Mapping entries."; 856 } 857 description 858 "IPv4 mapping entries."; 859 } 860 container ipv6 { 861 list mapping-entry { 862 key "prefix algorithm"; 863 uses sr-cmn:ipv6-sid-cfg; 864 description 865 "Mapping entries."; 866 } 867 description 868 "IPv6 mapping entries."; 869 } 870 description 871 "Definition of mapping policy."; 872 } 873 description 874 "Configuration of mapping-server 875 local entries."; 876 } 877 container connected-prefix-sid-map { 878 container ipv4 { 879 list ipv4-prefix-sid { 880 key "prefix algorithm"; 881 uses sr-cmn:ipv4-sid-cfg; 882 uses sr-cmn:last-hop-behavior; 883 description 884 "List of prefix SID 885 mapped to IPv4 local prefixes."; 886 } 887 description 888 "Parameters associated with IPv4 prefix SID"; 889 } 890 container ipv6 { 891 list ipv6-prefix-sid { 892 key "prefix algorithm"; 893 uses sr-cmn:ipv6-sid-cfg; 894 uses sr-cmn:last-hop-behavior; 895 description 896 "List of prefix SID 897 mapped to IPv6 local prefixes."; 898 } 899 description 900 "Parameters associated with IPv6 prefix SID"; 901 } 902 description 903 "Prefix SID configuration."; 904 } 905 description 906 "List of bindings."; 907 } 908 container global-srgb { 909 uses sr-cmn:srgb-cfg; 910 description 911 "Global SRGB configuration."; 912 } 913 description 914 "segment routing global config."; 915 } 916 } 918 /* Operational states */ 920 augment "/rt:routing-state" { 921 description 922 "This augments the operational states 923 with segment-routing."; 924 container segment-routing { 925 uses sr-cmn:node-capabilities; 926 list label-blocks { 927 leaf lower-bound { 928 type uint32; 929 description 930 "Lower bound of the label block."; 931 } 932 leaf upper-bound { 933 type uint32; 934 description 935 "Upper bound of the label block."; 936 } 937 leaf size { 938 type uint32; 939 description 940 "Number of indexes in the block."; 941 } 942 leaf free { 943 type uint32; 944 description 945 "Number of indexes free in the block."; 946 } 947 leaf used { 948 type uint32; 949 description 950 "Number of indexes used in the block."; 951 } 952 description 953 "List of labels blocks currently 954 in use."; 956 } 958 container global-sid-list { 959 list sid { 960 key "target sid source source-protocol binding-type"; 961 ordered-by system; 962 leaf target { 963 type string; 964 description 965 "Defines the target of the binding. 966 It can be a prefix or something else."; 967 } 968 leaf sid { 969 type uint32; 970 description 971 "Index associated with the prefix."; 972 } 973 leaf algorithm { 974 type uint8; 975 description 976 "Algorithm to be used for the prefix 977 SID."; 978 } 979 leaf source { 980 type inet:ip-address; 981 description 982 "IP address of the router than own 983 the binding."; 984 } 985 leaf used { 986 type boolean; 987 description 988 "Defines if the binding is used 989 in forwarding plane."; 990 } 991 leaf source-protocol { 992 type leafref { 993 path "/rt:routing-state/rt:control-plane-protocols/" 994 + "rt:control-plane-protocol/rt:name"; 995 } 996 description 997 "Rtg protocol that owns the binding"; 998 } 999 leaf binding-type { 1000 type enumeration { 1001 enum prefix-sid { 1002 description 1003 "Binding is learned from 1004 a prefix SID."; 1005 } 1006 enum binding-tlv { 1007 description 1008 "Binding is learned from 1009 a binding TLV."; 1010 } 1011 } 1012 description 1013 "Type of binding."; 1014 } 1015 description 1016 "Binding."; 1018 } 1019 description 1020 "List of prefix and SID associations."; 1021 } 1022 description 1023 "Segment routing operational states."; 1024 } 1025 } 1027 /* Notifications */ 1029 notification segment-routing-global-srgb-collision { 1030 list srgb-collisions { 1031 leaf lower-bound { 1032 type uint32; 1033 description 1034 "Lower value in the block."; 1035 } 1036 leaf upper-bound { 1037 type uint32; 1038 description 1039 "Upper value in the block."; 1040 } 1041 leaf routing-protocol { 1042 type leafref { 1043 path "/rt:routing-state/rt:control-plane-protocols/" 1044 + "rt:control-plane-protocol/rt:name"; 1045 } 1046 description 1047 "Routing protocol reference that received the event."; 1048 } 1049 leaf originating-rtr-id { 1050 type router-id; 1051 description 1052 "Originating router id of this SRGB block."; 1053 } 1054 description 1055 "List of SRGB blocks that conflict."; 1056 } 1057 description 1058 "This notification is sent when received SRGB blocks from 1059 a router conflict."; 1060 } 1061 notification segment-routing-global-sid-collision { 1062 leaf received-target { 1063 type string; 1064 description 1065 "Target received in the controlplane that 1066 caused SID collision."; 1067 } 1068 leaf new-sid-rtr-id { 1069 type router-id; 1070 description 1071 "Router Id that advertising the conflicting SID."; 1072 } 1073 leaf original-target { 1074 type string; 1075 description 1076 "Target already available in database that have the same SID 1077 as the received target."; 1078 } 1079 leaf original-sid-rtr-id { 1080 type router-id; 1081 description 1082 "Original router ID that advertised the conflicting SID."; 1083 } 1084 leaf index { 1085 type uint32; 1086 description 1087 "Value of the index used by two different prefixes."; 1088 } 1089 leaf routing-protocol { 1090 type leafref { 1091 path "/rt:routing-state/rt:control-plane-protocols/" 1092 + "rt:control-plane-protocol/rt:name"; 1093 } 1094 description 1095 "Routing protocol reference that received the event."; 1096 } 1097 description 1098 "This notification is sent when a new mapping is learned 1099 , containing mapping 1100 where the SID is already used. 1101 The notification generation must be throttled with at least 1102 a 5 second gap. "; 1103 } 1104 notification segment-routing-index-out-of-range { 1105 leaf received-target { 1106 type string; 1107 description 1108 "Target received in the controlplane 1109 that caused SID collision."; 1110 } 1111 leaf received-index { 1112 type uint32; 1113 description 1114 "Value of the index received."; 1115 } 1116 leaf routing-protocol { 1117 type leafref { 1118 path "/rt:routing-state/rt:control-plane-protocols/" + 1119 "rt:control-plane-protocol/rt:name"; 1120 } 1121 description 1122 "Routing protocol reference that received the event."; 1123 } 1124 description 1125 "This notification is sent when a binding 1126 is received, containing a segment index 1127 which is out of the local configured ranges. 1128 The notification generation must be throttled with at least 1129 a 5 second gap. "; 1130 } 1132 } 1133 1135 8. Security Considerations 1137 TBD. 1139 9. Acknowledgements 1141 Authors would like to thank Derek Yeung, Acee Lindem, Greg Hankins, 1142 Hannes Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge for their 1143 contributions. 1145 10. IANA Considerations 1147 TBD. 1149 11. Normative References 1151 [I-D.ietf-spring-segment-routing] 1152 Filsfils, C., Previdi, S., Decraene, B., Litkowski, S., 1153 and R. Shakir, "Segment Routing Architecture", draft-ietf- 1154 spring-segment-routing-09 (work in progress), July 2016. 1156 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1157 Requirement Levels", BCP 14, RFC 2119, March 1997. 1159 [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the 1160 Network Configuration Protocol (NETCONF)", RFC 6020, 1161 October 2010. 1163 [RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language", 1164 RFC 7950, August 2016. 1166 Authors' Addresses 1168 Stephane Litkowski 1169 Orange Business Service 1171 Email: stephane.litkowski@orange.com 1173 Yingzhen Qu 1174 Cisco Systems 1176 Email: yiqu@cisco.com 1178 Pushpasis Sarkar 1179 Juniper Networks 1181 Email: psarkar@juniper.net 1183 Jeff Tantsura 1184 Individual 1186 Email: jefftant.ietf@gmail.com