idnits 2.17.1 draft-ietf-ospf-sr-yang-06.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 : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 123 has weird spacing: '...r-bound uin...' == Line 124 has weird spacing: '...r-bound uin...' == Line 131 has weird spacing: '...roup-id uin...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (March 6, 2019) is 1876 days in the past. Is this intentional? Checking references for intended status: Informational ---------------------------------------------------------------------------- == Missing Reference: 'I-D.ietf-netmod-routing-cfg' is mentioned on line 960, but not defined == Unused Reference: 'I-D.ietf-ospf-ospfv3-segment-routing-extensions' is defined on line 981, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-ospf-segment-routing-extensions' is defined on line 986, but no explicit reference was found in the text == Unused Reference: 'RFC2328' is defined on line 1007, but no explicit reference was found in the text == Unused Reference: 'RFC4750' is defined on line 1011, but no explicit reference was found in the text == Unused Reference: 'RFC5340' is defined on line 1016, but no explicit reference was found in the text == Unused Reference: 'RFC5643' is defined on line 1020, but no explicit reference was found in the text == Unused Reference: 'RFC5838' is defined on line 1024, but no explicit reference was found in the text == Unused Reference: 'RFC7223' is defined on line 1039, but no explicit reference was found in the text == Unused Reference: 'RFC8022' is defined on line 1049, but no explicit reference was found in the text == Outdated reference: A later version (-29) exists of draft-ietf-ospf-yang-21 == Outdated reference: A later version (-30) exists of draft-ietf-spring-sr-yang-12 ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) -- Obsolete informational reference (is this intentional?): RFC 8022 (Obsoleted by RFC 8349) Summary: 2 errors (**), 0 flaws (~~), 17 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Internet D. Yeung 3 Internet-Draft Arrcus 4 Intended status: Informational Y. Qu 5 Expires: September 7, 2019 Huawei 6 J. Zhang 7 Juniper Networks 8 I. Chen 9 The MITRE Corporation 10 A. Lindem 11 Cisco Systems 12 March 6, 2019 14 YANG Data Model for OSPF SR (Segment Routing) Protocol 15 draft-ietf-ospf-sr-yang-06 17 Abstract 19 This document defines a YANG data model that can be used to configure 20 and manage OSPF Segment Routing. The model is based on YANG 1.1 as 21 defined in RFC 7950 and conforms to the Network Management Datastore 22 Architecture (NDMA) as described in RFC 8342. 24 Status of This Memo 26 This Internet-Draft is submitted in full conformance with the 27 provisions of BCP 78 and BCP 79. 29 Internet-Drafts are working documents of the Internet Engineering 30 Task Force (IETF). Note that other groups may also distribute 31 working documents as Internet-Drafts. The list of current Internet- 32 Drafts is at https://datatracker.ietf.org/drafts/current/. 34 Internet-Drafts are draft documents valid for a maximum of six months 35 and may be updated, replaced, or obsoleted by other documents at any 36 time. It is inappropriate to use Internet-Drafts as reference 37 material or to cite them other than as "work in progress." 39 This Internet-Draft will expire on September 7, 2019. 41 Copyright Notice 43 Copyright (c) 2019 IETF Trust and the persons identified as the 44 document authors. All rights reserved. 46 This document is subject to BCP 78 and the IETF Trust's Legal 47 Provisions Relating to IETF Documents 48 (https://trustee.ietf.org/license-info) in effect on the date of 49 publication of this document. Please review these documents 50 carefully, as they describe your rights and restrictions with respect 51 to this document. Code Components extracted from this document must 52 include Simplified BSD License text as described in Section 4.e of 53 the Trust Legal Provisions and are provided without warranty as 54 described in the Simplified BSD License. 56 Table of Contents 58 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 2 59 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 2 60 2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . . . 3 61 3. OSPF Segment Routing . . . . . . . . . . . . . . . . . . . . 3 62 4. OSPF Segment Routing YANG Module . . . . . . . . . . . . . . 7 63 5. Security Considerations . . . . . . . . . . . . . . . . . . . 20 64 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 21 65 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 21 66 7.1. Normative References . . . . . . . . . . . . . . . . . . 21 67 7.2. Informative References . . . . . . . . . . . . . . . . . 22 68 Appendix A. Contributors' Addreses . . . . . . . . . . . . . . . 24 69 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 71 1. Overview 73 YANG [RFC6020] [RFC7950] is a data definition language used to define 74 the contents of a conceptual data store that allows networked devices 75 to be managed using NETCONF [RFC6241]. YANG is proving relevant 76 beyond its initial confines, as bindings to other interfaces (e.g., 77 ReST) and encodings other than XML (e.g., JSON) are being defined. 78 Furthermore, YANG data models can be used as the basis for 79 implementation of other interfaces, such as CLI and programmatic 80 APIs. 82 This document defines a YANG data model that can be used to configure 83 and manage OSPF Segment Routing and it is an augmentation to the OSPF 84 YANG data model. 86 The YANG modules in this document conform to the Network Management 87 Datastore Architecture (NMDA) [RFC8342]. 89 1.1. Requirements Language 91 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 92 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 93 document are to be interpreted as described in [RFC2119]. 95 2. Tree Diagrams 97 This document uses the graphical representation of data models 98 defined in [RFC8340]. 100 3. OSPF Segment Routing 102 This document defines a model for OSPF Segment Routing feature [I-D.i 103 etf-ospf-segment-routing-extensions][I-D.ietf-ospf-ospfv3-segment-rou 104 ting-extensions]. It is an augmentation of the OSPF base model. 106 The OSPF SR YANG module requires support for the base segment routing 107 module [I-D.ietf-spring-sr-yang], which defines the global segment 108 routing configuration independent of any specific routing protocol 109 configuration, and support of OSPF base model[I-D.ietf-ospf-yang] 110 which defines basic OSPF configuration and state. 112 module: ietf-ospf-sr 113 augment /rt:routing/rt:control-plane-protocols 114 /rt:control-plane-protocol/ospf:ospf: 115 +--rw segment-routing 116 | +--rw enabled? boolean 117 | +--rw bindings 118 | +--rw advertise 119 | | +--rw policies* string 120 | +--rw receive? boolean 121 +--rw protocol-srgb {sr:protocol-srgb}? 122 +--rw srgb* [lower-bound upper-bound] 123 +--rw lower-bound uint32 124 +--rw upper-bound uint32 125 augment /rt:routing/rt:control-plane-protocols 126 /rt:control-plane-protocol/ospf:ospf 127 /ospf:areas/ospf:area/ospf:interface: 128 +--rw segment-routing 129 +--rw adjacency-sid 130 +--rw advertise-adj-group-sid* [group-id] 131 | +--rw group-id uint32 132 +--rw advertise-protection? enumeration 133 augment /rt:routing/rt:control-plane-protocols 134 /rt:control-plane-protocol/ospf:ospf 135 /ospf:areas/ospf:area/ospf:interfaces/ospf:interface 136 /ospf:fast-reroute: 137 +--rw ti-lfa {ti-lfa}? 138 +--rw enable? boolean 139 augment /rt:routing/rt:control-plane-protocols 140 /rt:control-plane-protocol/ospf:ospf 141 /ospf:areas/ospf:area/ospf:interfaces/ospf:interface 142 /ospf:database/ospf:link-scope-lsa-type/ospf:link-scope-lsas 143 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 144 /ospf:body/ospf:opaque/ospf:extended-prefix-tlvs 145 /ospf:extended-prefix-tlv: 146 +--ro perfix-sid-sub-tlvs 147 +--ro prefix-sid-sub-tlv* 148 +--ro flags? bits 149 +--ro mt-id? uint8 150 +--ro algorithm? uint8 151 +--ro sid? uint32 152 augment /rt:routing/rt:control-plane-protocols 153 /rt:control-plane-protocol/ospf:ospf 154 /ospf:areas/ospf:area/ospf:database/ospf:area-scope-lsa-type 155 /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version 156 /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 157 /ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv: 158 +--ro perfix-sid-sub-tlvs 159 +--ro prefix-sid-sub-tlv* 160 +--ro flags? bits 161 +--ro mt-id? uint8 162 +--ro algorithm? uint8 163 +--ro sid? uint32 164 augment /rt:routing/rt:control-plane-protocols 165 /rt:control-plane-protocol/ospf:ospf 166 /ospf:database/ospf:as-scope-lsa-type/ospf:as-scope-lsas 167 /ospf:as-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 168 /ospf:body/ospf:opaque/ospf:extended-prefix-tlvs 169 /ospf:extended-prefix-tlv: 170 +--ro perfix-sid-sub-tlvs 171 +--ro prefix-sid-sub-tlv* 172 +--ro flags? bits 173 +--ro mt-id? uint8 174 +--ro algorithm? uint8 175 +--ro sid? uint32 176 augment /rt:routing/rt:control-plane-protocols 177 /rt:control-plane-protocol/ospf:ospf 178 /ospf:areas/ospf:area/ospf:database/ospf:area-scope-lsa-type 179 /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version 180 /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 181 /ospf:extended-link-tlvs/ospf:extended-link-tlv: 182 +--ro adj-sid-sub-tlvs 183 | +--ro adj-sid-sub-tlv* 184 | +--ro flags? bits 185 | +--ro mt-id? uint8 186 | +--ro weight? uint8 187 | +--ro sid? uint32 188 +--ro lan-adj-sid-sub-tlvs 189 +--ro lan-adj-sid-sub-tlv* 190 +--ro flags? bits 191 +--ro mt-id? uint8 192 +--ro weight? uint8 193 +--ro neighbor-router-id? yang:dotted-quad 194 +--ro sid? uint32 195 augment /rt:routing/rt:control-plane-protocols 196 /rt:control-plane-protocol/ospf:ospf 197 /ospf:areas/ospf:area/ospf:interfaces/ospf:interface 198 /ospf:database/ospf:link-scope-lsa-type/ospf:link-scope-lsas 199 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 200 /ospf:body/ospf:opaque: 201 +--ro extended-prefix-range-tlvs 202 | +--ro extended-prefix-range-tlv* 203 | +--ro range-size? uint16 204 | +--ro flags? bits 205 | +--ro prefix? inet:ip-prefix 206 | +--ro perfix-sid-sub-tlvs 207 | | +--ro prefix-sid-sub-tlv* 208 | | +--ro flags? bits 209 | | +--ro mt-id? uint8 210 | | +--ro algorithm? uint8 211 | | +--ro sid? uint32 212 | +--ro unknown-tlvs 213 | +--ro unknown-tlv* 214 | +--ro type? uint16 215 | +--ro length? uint16 216 | +--ro value? yang:hex-string 217 +--ro sr-algorithm-tlv 218 | +--ro sr-algorithm* uint8 219 +--ro sid-range-tlvs 220 | +--ro sid-range-tlv* 221 | +--ro range-size? uint24 222 | +--ro sid-sub-tlv 223 | +--ro sid? uint32 224 +--ro local-block-tlvs 225 | +--ro local-block-tlv* 226 | +--ro range-size? uint24 227 | +--ro sid-sub-tlv 228 | +--ro sid? uint32 229 +--ro srms-preference-tlv 230 +--ro preference? uint8 231 augment /rt:routing/rt:control-plane-protocols 232 /rt:control-plane-protocol/ospf:ospf 233 /ospf:areas/ospf:area/ospf:database/ospf:area-scope-lsa-type 234 /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version 235 /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: 236 +--ro extended-prefix-range-tlvs 237 | +--ro extended-prefix-range-tlv* 238 | +--ro range-size? uint16 239 | +--ro flags? bits 240 | +--ro prefix? inet:ip-prefix 241 | +--ro perfix-sid-sub-tlvs 242 | | +--ro prefix-sid-sub-tlv* 243 | | +--ro flags? bits 244 | | +--ro mt-id? uint8 245 | | +--ro algorithm? uint8 246 | | +--ro sid? uint32 247 | +--ro unknown-tlvs 248 | +--ro unknown-tlv* 249 | +--ro type? uint16 250 | +--ro length? uint16 251 | +--ro value? yang:hex-string 252 +--ro sr-algorithm-tlv 253 | +--ro sr-algorithm* uint8 254 +--ro sid-range-tlvs 255 | +--ro sid-range-tlv* 256 | +--ro range-size? uint24 257 | +--ro sid-sub-tlv 258 | +--ro sid? uint32 259 +--ro local-block-tlvs 260 | +--ro local-block-tlv* 261 | +--ro range-size? uint24 262 | +--ro sid-sub-tlv 263 | +--ro sid? uint32 264 +--ro srms-preference-tlv 265 +--ro preference? uint8 266 augment /rt:routing/rt:control-plane-protocols 267 /rt:control-plane-protocol/ospf:ospf 268 /ospf:database/ospf:as-scope-lsa-type/ospf:as-scope-lsas 269 /ospf:as-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 270 /ospf:body/ospf:opaque: 271 +--ro extended-prefix-range-tlvs 272 | +--ro extended-prefix-range-tlv* 273 | +--ro range-size? uint16 274 | +--ro flags? bits 275 | +--ro prefix? inet:ip-prefix 276 | +--ro perfix-sid-sub-tlvs 277 | | +--ro prefix-sid-sub-tlv* 278 | | +--ro flags? bits 279 | | +--ro mt-id? uint8 280 | | +--ro algorithm? uint8 281 | | +--ro sid? uint32 282 | +--ro unknown-tlvs 283 | +--ro unknown-tlv* 284 | +--ro type? uint16 285 | +--ro length? uint16 286 | +--ro value? yang:hex-string 287 +--ro sr-algorithm-tlv 288 | +--ro sr-algorithm* uint8 289 +--ro sid-range-tlvs 290 | +--ro sid-range-tlv* 291 | +--ro range-size? uint24 292 | +--ro sid-sub-tlv 293 | +--ro sid? uint32 294 +--ro local-block-tlvs 295 | +--ro local-block-tlv* 296 | +--ro range-size? uint24 297 | +--ro sid-sub-tlv 298 | +--ro sid? uint32 299 +--ro srms-preference-tlv 300 +--ro preference? uint8 302 4. OSPF Segment Routing YANG Module 304 file "ietf-ospf-sr@2019-03-05.yang" 305 module ietf-ospf-sr { 306 namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr"; 308 prefix ospf-sr; 310 import ietf-inet-types { 311 prefix "inet"; 312 } 314 import ietf-yang-types { 315 prefix "yang"; 316 } 318 import ietf-routing { 319 prefix "rt"; 320 } 321 import ietf-segment-routing-common { 322 prefix "sr-cmn"; 323 } 324 import ietf-segment-routing { 325 prefix "sr"; 326 } 327 import ietf-ospf { 328 prefix "ospf"; 329 } 331 organization 332 "IETF OSPF - OSPF Working Group"; 334 contact 335 "WG Web: 336 WG List: 338 Editor: Derek Yeung 339 340 Author: Derek Yeung 341 342 Author: Yingzhen Qu 343 344 Author: Acee Lindem 345 346 Author: Jeffrey Zhang 347 348 Author: Ing-Wher Chen 349 350 Author: Greg Hankins 351 "; 353 description 354 "This YANG module defines the generic configuration 355 and operational state for OSPF Segment Routing, which is 356 common across all of the vendor implementations. It is 357 intended that the module will be extended by vendors to 358 define vendor-specific OSPF Segment Routing configuration 359 and operational parameters and policies. 361 Copyright (c) 2017 IETF Trust and the persons identified as 362 authors of the code. All rights reserved. 364 Redistribution and use in source and binary forms, with or 365 without modification, is permitted pursuant to, and subject 366 to the license terms contained in, the Simplified BSD License 367 set forth in Section 4.c of the IETF Trust's Legal Provisions 368 Relating to IETF Documents 369 (http://trustee.ietf.org/license-info). 371 This version of this YANG module is part of RFC XXXX; 372 see the RFC itself for full legal notices."; 374 reference "RFC XXXX"; 376 revision 2019-03-05 { 377 description 378 ""; 379 reference 380 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 381 } 382 revision 2018-06-25 { 383 description 384 ""; 385 reference 386 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 387 } 389 revision 2018-03-03 { 390 description 391 "* Remove OSPF instance."; 392 reference 393 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 394 } 396 revision 2017-12-28 { 397 description 398 ""; 399 reference 400 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 401 } 403 revision 2017-07-02 { 404 description 405 "* Implement NMDA model. 406 * Add local-block-tlvs and srms-preference-tlv. 407 * Remove sid-binding-sub-tlvs."; 408 reference 409 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 410 } 412 revision 2017-03-12 { 413 description 414 "* Add p-flag in adj-sid sub-tlv."; 415 reference 416 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 417 } 418 revision 2016-10-31 { 419 description 420 "* Update authors information. 421 * Add import of ietf-segment-routing-common module."; 422 reference 423 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 424 } 426 revision 2016-07-07 { 427 description 428 "* Change routing-protocol to control-plane-protocol."; 429 reference 430 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 431 } 433 revision 2016-03-20 { 434 description 435 "* Remove routing-instance."; 436 reference 437 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 438 } 440 revision 2015-10-19 { 441 description 442 "* Add per-protocol SRGB support. 443 * Editorial changes."; 444 reference 445 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 446 } 448 revision 2015-09-02 { 449 description 450 "* Author list update. 451 * Editorial changes."; 452 reference 453 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 454 } 456 revision 2015-07-06 { 457 description 458 "Initial revision."; 459 reference 460 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 461 } 463 feature ti-lfa { 464 description 465 "Topology-Independent Loop-Free Alternate (TI-LFA) 466 computation using segment routing."; 467 } 469 typedef uint24 { 470 type uint32 { 471 range "0 .. 16777215"; 472 } 473 description 474 "24-bit unsigned integer."; 475 } 477 /* Groupings */ 478 grouping sid-sub-tlv { 479 description "SID/Label sub-TLV grouping."; 480 container sid-sub-tlv { 481 description 482 "Used to advertise the SID/Label associated with a 483 prefix or adjacency."; 484 leaf sid { 485 type uint32; 486 description 487 "Segment Identifier (SID) - A 20 bit label or 488 32 bit SID."; 489 } 490 } 491 } 493 grouping prefix-sid-sub-tlvs { 494 description "Prefix Segment ID (SID) sub-TLVs."; 495 container perfix-sid-sub-tlvs{ 496 description "Prefix SID sub-TLV."; 497 list prefix-sid-sub-tlv { 498 description "Prefix SID sub-TLV."; 499 leaf flags { 500 type bits { 501 bit NP { 502 position 1; 503 description 504 "No-PHP flag."; 505 } 506 bit M { 507 position 2; 508 description 509 "Mapping server flag."; 510 } 511 bit E { 512 position 3; 513 description 514 "Explicit-NULL flag."; 515 } 516 bit V { 517 position 4; 518 description 519 "Value/Index flag."; 520 } 521 bit L { 522 position 5; 523 description 524 "Local flag."; 525 } 527 } 528 description "Segment Identifier (SID) Flags."; 529 } 530 leaf mt-id { 531 type uint8; 532 description "Multi-topology ID."; 533 } 534 leaf algorithm { 535 type uint8; 536 description 537 "The algorithm associated with the prefix-SID."; 538 } 539 leaf sid { 540 type uint32; 541 description "An index or label."; 542 } 543 } 544 } 545 } 547 grouping extended-prefix-range-tlvs { 548 description "Extended prefix range TLV grouping."; 550 container extended-prefix-range-tlvs { 551 description "The list of range of prefixes."; 552 list extended-prefix-range-tlv { //type=2? 553 description "The range of prefixes."; 554 leaf prefix-length { 555 type uint8; 556 description "Length of prefix in bits."; 557 } 558 leaf af { 559 type uint8; 560 description "Address family for the prefix."; 561 } 562 leaf range-size { 563 type uint16; 564 description "The number of prefixes covered by the 565 advertisement."; 566 } 567 leaf flags { 568 type bits { 569 bit IA { 570 position 0; 571 description 572 "Inter-Area flag."; 573 } 574 } 575 description "Flags."; 576 } 577 leaf prefix { 578 type inet:ip-prefix; 579 description "Address prefix."; 580 } 581 uses prefix-sid-sub-tlvs; 582 uses ospf:unknown-tlvs; 583 } 584 } 585 } 587 grouping sr-algorithm-tlv { 588 description "SR algorithm TLV grouping."; 589 container sr-algorithm-tlv { 590 description "All SR algorithm TLVs."; 591 leaf-list sr-algorithm { 592 type uint8; 593 description 594 "The Segment Routing (SR) algorithms that the router is 595 currently using."; 596 } 597 } 598 } 600 grouping sid-range-tlvs { 601 description "SID Range TLV grouping."; 602 container sid-range-tlvs { 603 description "List of SID range TLVs."; 604 list sid-range-tlv { 605 description "SID range TLV."; 606 leaf range-size { 607 type uint24; 608 description "The SID range."; 609 } 610 uses sid-sub-tlv; 611 } 612 } 613 } 615 grouping local-block-tlvs { 616 description "The SR local block TLV contains the 617 range of labels reserved for local SIDs."; 618 container local-block-tlvs { 619 description "List of SRLB TLVs."; 620 list local-block-tlv { 621 description "SRLB TLV."; 622 leaf range-size { 623 type uint24; 624 description "The SID range."; 625 } 626 uses sid-sub-tlv; 627 } 628 } 629 } 631 grouping srms-preference-tlv { 632 description "The SRMS preference TLV is used to advertise 633 a preference associated with the node that acts 634 as an SR Mapping Server."; 635 container srms-preference-tlv { 636 description "SRMS Preference TLV."; 637 leaf preference { 638 type uint8 { 639 range "0 .. 255"; 640 } 641 description "SRMS preference TLV, vlaue from 0 to 255."; 642 } 643 } 644 } 646 /* Configuration */ 647 augment "/rt:routing/rt:control-plane-protocols" 648 + "/rt:control-plane-protocol/ospf:ospf" { 649 when "../rt:type = 'ospf:ospfv2' or " 650 + "../rt:type = 'ospf:ospfv3'" { 651 description 652 "This augments the OSPF routing protocol when used."; 653 } 654 description 655 "This augments the OSPF protocol configuration 656 with segment routing."; 657 uses sr:sr-controlplane; 658 container protocol-srgb { 659 if-feature sr:protocol-srgb; 660 uses sr-cmn:srgb; 661 description 662 "Per-protocol SRGB."; 663 } 664 } 666 augment "/rt:routing/rt:control-plane-protocols/" 667 + "rt:control-plane-protocol/ospf:ospf/" 668 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { 669 when "../../../../../rt:type = 'ospf:ospfv2' or " 670 + "../../../../../rt:type = 'ospf:ospfv3'" { 672 description 673 "This augments the OSPF interface configuration 674 when used."; 675 } 676 description 677 "This augments the OSPF protocol interface 678 configuration with segment routing."; 680 uses sr:igp-interface; 681 } 683 augment "/rt:routing/rt:control-plane-protocols/" 684 + "rt:control-plane-protocol/ospf:ospf/" 685 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" 686 + "ospf:fast-reroute" { 687 when "../../../../../../rt:type = 'ospf:ospfv2' or " 688 + "../../../../../../rt:type = 'ospf:ospfv3'" { 689 description 690 "This augments the OSPF routing protocol when used."; 691 } 692 description 693 "This augments the OSPF protocol IP-FRR with TI-LFA."; 695 container ti-lfa { 696 if-feature ti-lfa; 697 leaf enable { 698 type boolean; 699 description 700 "Enables TI-LFA computation."; 701 } 702 description 703 "Topology Independent Loop Free Alternate 704 (TI-LFA) support."; 705 } 706 } 708 /* Database */ 709 augment "/rt:routing/" 710 + "rt:control-plane-protocols/rt:control-plane-protocol/" 711 + "ospf:ospf/ospf:areas/ospf:area/" 712 + "ospf:interfaces/ospf:interface/ospf:database/" 713 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 714 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 715 + "ospf:ospfv2/ospf:body/ospf:opaque/" 716 + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { 717 when "../../../../../../../../../../../../../../" 718 + "rt:type = 'ospf:ospfv2'" { 719 description 720 "This augmentation is only valid for OSPFv2."; 721 } 722 description 723 "SR specific TLVs for OSPFv2 extended prefix TLV 724 in type 9 opaque LSA."; 725 uses prefix-sid-sub-tlvs; 726 } 728 augment "/rt:routing/" 729 + "rt:control-plane-protocols/rt:control-plane-protocol/" 730 + "ospf:ospf/ospf:areas/" 731 + "ospf:area/ospf:database/" 732 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 733 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 734 + "ospf:ospfv2/ospf:body/ospf:opaque/" 735 + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { 736 when "../../../../../../../../../../../../" 737 + "rt:type = 'ospf:ospfv2'" { 738 description 739 "This augmentation is only valid for OSPFv2."; 740 } 741 description 742 "SR specific TLVs for OSPFv2 extended prefix TLV 743 in type 10 opaque LSA."; 744 uses prefix-sid-sub-tlvs; 745 } 747 augment "/rt:routing/" 748 + "rt:control-plane-protocols/rt:control-plane-protocol/" 749 + "ospf:ospf/ospf:database/" 750 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 751 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 752 + "ospf:ospfv2/ospf:body/ospf:opaque/" 753 + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { 754 when "../../../../../../../../../../" 755 + "rt:type = 'ospf:ospfv2'" { 756 description 757 "This augmentation is only valid for OSPFv2."; 758 } 759 description 760 "SR specific TLVs for OSPFv2 extended prefix TLV 761 in type 11 opaque LSA."; 762 uses prefix-sid-sub-tlvs; 763 } 765 augment "/rt:routing/" 766 + "rt:control-plane-protocols/rt:control-plane-protocol/" 767 + "ospf:ospf/ospf:areas/" 768 + "ospf:area/ospf:database/" 769 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 770 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 771 + "ospf:ospfv2/ospf:body/ospf:opaque/" 772 + "ospf:extended-link-tlvs/ospf:extended-link-tlv" { 773 when "../../../../../../../../../../../../" 774 + "rt:type = 'ospf:ospfv2'" { 775 description 776 "This augmentation is only valid for OSPFv2."; 777 } 778 description 779 "SR specific TLVs for OSPFv2 extended link TLV 780 in type 10 opaque LSA."; 782 container adj-sid-sub-tlvs { 783 description "Adjacency SID optional sub-TLVs."; 784 list adj-sid-sub-tlv { 785 description "List of Adjacency SID sub-TLVs."; 786 leaf flags { 787 type bits { 788 bit B { 789 position 0; 790 description 791 "Backup flag."; 792 } 793 bit V { 794 position 1; 795 description 796 "Value/Index flag."; 797 } 798 bit L { 799 position 2; 800 description 801 "Local/Global flag."; 802 } 803 bit G { 804 position 3; 805 description 806 "Group flag."; 807 } 808 bit P { 809 position 4; 810 description 811 "Persistent flag."; 812 } 813 } 814 description "Flags."; 815 } 816 leaf mt-id { 817 type uint8; 818 description "Multi-topology ID."; 819 } 820 leaf weight { 821 type uint8; 822 description "Weight used for load-balancing."; 823 } 824 leaf sid { 825 type uint32; 826 description "Segment Identifier (SID) index/label."; 827 } 828 } 829 } 831 container lan-adj-sid-sub-tlvs { 832 description "LAN Adjacency SID optional sub-TLVs."; 833 list lan-adj-sid-sub-tlv { 834 description "List of LAN adjacency SID sub-TLVs."; 835 leaf flags { 836 type bits { 837 bit B { 838 position 0; 839 description 840 "Backup flag."; 841 } 842 bit V { 843 position 1; 844 description 845 "Value/Index flag."; 846 } 847 bit L { 848 position 2; 849 description 850 "Local/Global flag."; 851 } 852 bit G { 853 position 3; 854 description 855 "Group flag."; 856 } 857 bit P { 858 position 4; 859 description 860 "Persistent flag."; 861 } 862 } 863 description "Flags."; 865 } 866 leaf mt-id { 867 type uint8; 868 description "Multi-topology ID."; 869 } 870 leaf weight { 871 type uint8; 872 description "Weight used for load-balancing."; 873 } 874 leaf neighbor-router-id { 875 type yang:dotted-quad; 876 description "Neighbor router ID."; 877 } 878 leaf sid { 879 type uint32; 880 description "Segment Identifier (SID) index/label."; 881 } 882 } 883 } 884 } 886 augment "/rt:routing/" 887 + "rt:control-plane-protocols/rt:control-plane-protocol/" 888 + "ospf:ospf/ospf:areas/ospf:area/" 889 + "ospf:interfaces/ospf:interface/ospf:database/" 890 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 891 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 892 + "ospf:ospfv2/ospf:body/ospf:opaque" { 893 when "../../../../../../../../../../../../" 894 + "rt:type = 'ospf:ospfv2'" { 895 description 896 "This augmentation is only valid for OSPFv2."; 897 } 899 description 900 "SR specific TLVs for OSPFv2 type 9 opaque LSA."; 902 uses extended-prefix-range-tlvs; 903 uses sr-algorithm-tlv; 904 uses sid-range-tlvs; 905 uses local-block-tlvs; 906 uses srms-preference-tlv; 907 } 909 augment "/rt:routing/" 910 + "rt:control-plane-protocols/rt:control-plane-protocol/" 911 + "ospf:ospf/ospf:areas/" 912 + "ospf:area/ospf:database/" 913 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 914 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 915 + "ospf:ospfv2/ospf:body/ospf:opaque" { 916 when "../../../../../../../../../../" 917 + "rt:type = 'ospf:ospfv2'" { 918 description 919 "This augmentation is only valid for OSPFv2."; 920 } 922 description 923 "SR specific TLVs for OSPFv2 type 10 opaque LSA."; 925 uses extended-prefix-range-tlvs; 926 uses sr-algorithm-tlv; 927 uses sid-range-tlvs; 928 uses local-block-tlvs; 929 uses srms-preference-tlv; 930 } 932 augment "/rt:routing/" 933 + "rt:control-plane-protocols/rt:control-plane-protocol/" 934 + "ospf:ospf/ospf:database/" 935 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 936 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 937 + "ospf:ospfv2/ospf:body/ospf:opaque" { 938 when "../../../../../../../../" 939 + "rt:type = 'ospf:ospfv2'" { 940 description 941 "This augmentation is only valid for OSPFv2."; 942 } 943 description 944 "SR specific TLVs for OSPFv2 type 11 opaque LSA."; 946 uses extended-prefix-range-tlvs; 947 uses sr-algorithm-tlv; 948 uses sid-range-tlvs; 949 uses local-block-tlvs; 950 uses srms-preference-tlv; 951 } 952 } 953 955 5. Security Considerations 957 The data model defined does not create any security implications. 959 This draft does not change any underlying security issues inherent in 960 [I-D.ietf-netmod-routing-cfg]. 962 6. Acknowledgements 964 The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta, 965 Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and 966 Alan Davey for their thorough reviews and helpful comments. 968 This document was produced using Marshall Rose's xml2rfc tool. 970 Author affiliation with The MITRE Corporation is provided for 971 identification purposes only, and is not intended to convey or imply 972 MITRE's concurrence with, or support for, the positions, opinions or 973 viewpoints expressed. MITRE has approved this document for Public 974 Release, Distribution Unlimited, with Public Release Case Number 975 18-3281. 977 7. References 979 7.1. Normative References 981 [I-D.ietf-ospf-ospfv3-segment-routing-extensions] 982 Psenak, P. and S. Previdi, "OSPFv3 Extensions for Segment 983 Routing", draft-ietf-ospf-ospfv3-segment-routing- 984 extensions-23 (work in progress), January 2019. 986 [I-D.ietf-ospf-segment-routing-extensions] 987 Psenak, P., Previdi, S., Filsfils, C., Gredler, H., 988 Shakir, R., Henderickx, W., and J. Tantsura, "OSPF 989 Extensions for Segment Routing", draft-ietf-ospf-segment- 990 routing-extensions-27 (work in progress), December 2018. 992 [I-D.ietf-ospf-yang] 993 Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, 994 "YANG Data Model for OSPF Protocol", draft-ietf-ospf- 995 yang-21 (work in progress), January 2019. 997 [I-D.ietf-spring-sr-yang] 998 Litkowski, S., Qu, Y., Lindem, A., Sarkar, P., and J. 999 Tantsura, "YANG Data Model for Segment Routing", draft- 1000 ietf-spring-sr-yang-12 (work in progress), February 2019. 1002 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1003 Requirement Levels", BCP 14, RFC 2119, 1004 DOI 10.17487/RFC2119, March 1997, 1005 . 1007 [RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, 1008 DOI 10.17487/RFC2328, April 1998, 1009 . 1011 [RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed., 1012 Coltun, R., and F. Baker, "OSPF Version 2 Management 1013 Information Base", RFC 4750, DOI 10.17487/RFC4750, 1014 December 2006, . 1016 [RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF 1017 for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008, 1018 . 1020 [RFC5643] Joyal, D., Ed. and V. Manral, Ed., "Management Information 1021 Base for OSPFv3", RFC 5643, DOI 10.17487/RFC5643, August 1022 2009, . 1024 [RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and 1025 R. Aggarwal, "Support of Address Families in OSPFv3", 1026 RFC 5838, DOI 10.17487/RFC5838, April 2010, 1027 . 1029 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1030 the Network Configuration Protocol (NETCONF)", RFC 6020, 1031 DOI 10.17487/RFC6020, October 2010, 1032 . 1034 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1035 and A. Bierman, Ed., "Network Configuration Protocol 1036 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1037 . 1039 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 1040 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 1041 . 1043 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1044 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1045 . 1047 7.2. Informative References 1049 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1050 Management", RFC 8022, DOI 10.17487/RFC8022, November 1051 2016, . 1053 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1054 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1055 . 1057 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1058 and R. Wilton, "Network Management Datastore Architecture 1059 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1060 . 1062 Appendix A. Contributors' Addreses 1064 Dean Bogdanovic 1065 Volta Networks, Inc. 1067 EMail: dean@voltanet.io 1069 Kiran Koushik Agrahara Sreenivasa 1070 Cisco Systems 1071 12515 Research Blvd, Bldg 4 1072 Austin, TX 78681 1073 USA 1075 EMail: kkoushik@cisco.com 1077 Authors' Addresses 1079 Derek Yeung 1080 Arrcus 1082 EMail: derek@arrcus.com 1084 Yingzhen Qu 1085 Huawei 1086 2330 Central Expressway 1087 Santa Clara, CA 95050 1088 USA 1090 EMail: yingzhen.qu@huawei.com 1092 Jeffrey Zhang 1093 Juniper Networks 1094 10 Technology Park Drive 1095 Westford, MA 01886 1096 USA 1098 EMail: zzhang@juniper.net 1100 Ing-Wher Chen 1101 The MITRE Corporation 1103 EMail: ingwherchen@mitre.org 1104 Acee Lindem 1105 Cisco Systems 1106 301 Midenhall Way 1107 Cary, NC 27513 1109 EMail: acee@cisco.com