idnits 2.17.1 draft-ietf-ospf-sr-yang-11.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 122 has weird spacing: '...r-bound uin...' == Line 123 has weird spacing: '...r-bound uin...' == Line 134 has weird spacing: '...roup-id uin...' == Line 565 has weird spacing: '...dentity b-bit...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (February 5, 2020) is 1541 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: 'RFC2328' is defined on line 1076, but no explicit reference was found in the text == Unused Reference: 'RFC4750' is defined on line 1080, but no explicit reference was found in the text == Unused Reference: 'RFC5340' is defined on line 1090, but no explicit reference was found in the text == Unused Reference: 'RFC5643' is defined on line 1094, but no explicit reference was found in the text == Unused Reference: 'RFC5838' is defined on line 1098, but no explicit reference was found in the text == Unused Reference: 'RFC7223' is defined on line 1122, but no explicit reference was found in the text == Unused Reference: 'RFC8022' is defined on line 1142, but no explicit reference was found in the text == Outdated reference: A later version (-30) exists of draft-ietf-spring-sr-yang-15 ** Obsolete normative reference: RFC 5246 (Obsoleted by RFC 8446) ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) -- Obsolete informational reference (is this intentional?): RFC 8022 (Obsoleted by RFC 8349) Summary: 4 errors (**), 0 flaws (~~), 14 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: Standards Track Y. Qu 5 Expires: August 8, 2020 Futurewei 6 J. Zhang 7 Juniper Networks 8 I. Chen 9 The MITRE Corporation 10 A. Lindem 11 Cisco Systems 12 February 5, 2020 14 YANG Data Model for OSPF SR (Segment Routing) Protocol 15 draft-ietf-ospf-sr-yang-11 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 August 8, 2020. 41 Copyright Notice 43 Copyright (c) 2020 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 . . . . . . . . . . . . . . . . . . . 22 64 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 22 65 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 66 7.1. Normative References . . . . . . . . . . . . . . . . . . 23 67 7.2. Informative References . . . . . . . . . . . . . . . . . 24 68 Appendix A. Contributors' Addreses . . . . . . . . . . . . . . . 26 69 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 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 103 [RFC8665]. It is an augmentation of the OSPF base model. 105 The OSPF SR YANG module requires support for the base segment routing 106 module [I-D.ietf-spring-sr-yang], which defines the global segment 107 routing configuration independent of any specific routing protocol 108 configuration, and support of OSPF base model[I-D.ietf-ospf-yang] 109 which defines basic OSPF configuration and state. 111 module: ietf-ospf-sr 112 augment /rt:routing/rt:control-plane-protocols 113 /rt:control-plane-protocol/ospf:ospf: 114 +--rw segment-routing 115 | +--rw enabled? boolean 116 | +--rw bindings 117 | +--rw advertise 118 | | +--rw policies* string 119 | +--rw receive? boolean 120 +--rw protocol-srgb {sr-mpls:protocol-srgb}? 121 +--rw srgb* [lower-bound upper-bound] 122 +--rw lower-bound uint32 123 +--rw upper-bound uint32 124 augment /rt:routing/rt:control-plane-protocols 125 /rt:control-plane-protocol/ospf:ospf/ospf:areas 126 /ospf:area/ospf:interfaces/ospf:interface: 127 +--rw segment-routing 128 +--rw adjacency-sid 129 +--rw adj-sids* [value] 130 | +--rw value-type? enumeration 131 | +--rw value uint32 132 | +--rw protected? boolean 133 +--rw advertise-adj-group-sid* [group-id] 134 | +--rw group-id uint32 135 +--rw advertise-protection? enumeration 136 augment /rt:routing/rt:control-plane-protocols 137 /rt:control-plane-protocol/ospf:ospf/ospf:areas 138 /ospf:area/ospf:interfaces/ospf:interface/ospf:fast-reroute: 139 +--rw ti-lfa {ti-lfa}? 140 +--rw enable? boolean 141 augment /rt:routing/rt:control-plane-protocols 142 /rt:control-plane-protocol/ospf:ospf/ospf:areas 143 /ospf:area/ospf:interfaces/ospf:interface/ospf:database 144 /ospf:link-scope-lsa-type/ospf:link-scope-lsas 145 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 146 /ospf:body/ospf:opaque/ospf:extended-prefix-opaque 147 /ospf:extended-prefix-tlv: 148 +--ro perfix-sid-sub-tlvs 149 +--ro prefix-sid-sub-tlv* 150 +--ro prefix-sid-flags 151 | +--ro bits* identityref 152 +--ro mt-id? uint8 153 +--ro algorithm? uint8 154 +--ro sid? uint32 155 augment /rt:routing/rt:control-plane-protocols 156 /rt:control-plane-protocol/ospf:ospf/ospf:areas 157 /ospf:area/ospf:database/ospf:area-scope-lsa-type 158 /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version 159 /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 160 /ospf:extended-prefix-opaque/ospf:extended-prefix-tlv: 161 +--ro perfix-sid-sub-tlvs 162 +--ro prefix-sid-sub-tlv* 163 +--ro prefix-sid-flags 164 | +--ro bits* identityref 165 +--ro mt-id? uint8 166 +--ro algorithm? uint8 167 +--ro sid? uint32 168 augment /rt:routing/rt:control-plane-protocols 169 /rt:control-plane-protocol/ospf:ospf/ospf:database 170 /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa 171 /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 172 /ospf:extended-prefix-opaque/ospf:extended-prefix-tlv: 173 +--ro perfix-sid-sub-tlvs 174 +--ro prefix-sid-sub-tlv* 175 +--ro prefix-sid-flags 176 | +--ro bits* identityref 177 +--ro mt-id? uint8 178 +--ro algorithm? uint8 179 +--ro sid? uint32 180 augment /rt:routing/rt:control-plane-protocols 181 /rt:control-plane-protocol/ospf:ospf/ospf:areas 182 /ospf:area/ospf:database/ospf:area-scope-lsa-type 183 /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version 184 /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 185 /ospf:extended-link-opaque/ospf:extended-link-tlv: 186 +--ro adj-sid-sub-tlvs 187 | +--ro adj-sid-sub-tlv* 188 | +--ro adj-sid-flags 189 | | +--ro bits* identityref 190 | +--ro mt-id? uint8 191 | +--ro weight? uint8 192 | +--ro sid? uint32 193 +--ro lan-adj-sid-sub-tlvs 194 +--ro lan-adj-sid-sub-tlv* 195 +--ro lan-adj-sid-flags 196 | +--ro bits* identityref 197 +--ro mt-id? uint8 198 +--ro weight? uint8 199 +--ro neighbor-router-id? yang:dotted-quad 200 +--ro sid? uint32 201 augment /rt:routing/rt:control-plane-protocols 202 /rt:control-plane-protocol/ospf:ospf/ospf:areas 203 /ospf:area/ospf:interfaces/ospf:interface/ospf:database 204 /ospf:link-scope-lsa-type/ospf:link-scope-lsas 205 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 206 /ospf:body/ospf:opaque: 207 +--ro extended-prefix-range-tlvs 208 | +--ro extended-prefix-range-tlv* 209 | +--ro prefix-length? uint8 210 | +--ro af? uint8 211 | +--ro range-size? uint16 212 | +--ro extended-prefix-range-flags 213 | | +--ro bits* identityref 214 | +--ro prefix? inet:ip-prefix 215 | +--ro perfix-sid-sub-tlvs 216 | | +--ro prefix-sid-sub-tlv* 217 | | +--ro prefix-sid-flags 218 | | | +--ro bits* identityref 219 | | +--ro mt-id? uint8 220 | | +--ro algorithm? uint8 221 | | +--ro sid? uint32 222 | +--ro unknown-tlvs 223 | +--ro unknown-tlv* 224 | +--ro type? uint16 225 | +--ro length? uint16 226 | +--ro value? yang:hex-string 227 +--ro sr-algorithm-tlv 228 | +--ro sr-algorithm* uint8 229 +--ro sid-range-tlvs 230 | +--ro sid-range-tlv* 231 | +--ro range-size? uint24 232 | +--ro sid-sub-tlv 233 | +--ro sid? uint32 234 +--ro local-block-tlvs 235 | +--ro local-block-tlv* 236 | +--ro range-size? uint24 237 | +--ro sid-sub-tlv 238 | +--ro sid? uint32 239 +--ro srms-preference-tlv 240 +--ro preference? uint8 241 augment /rt:routing/rt:control-plane-protocols 242 /rt:control-plane-protocol/ospf:ospf/ospf:areas 243 /ospf:area/ospf:database/ospf:area-scope-lsa-type 244 /ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version 245 /ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: 246 +--ro extended-prefix-range-tlvs 247 | +--ro extended-prefix-range-tlv* 248 | +--ro prefix-length? uint8 249 | +--ro af? uint8 250 | +--ro range-size? uint16 251 | +--ro extended-prefix-range-flags 252 | | +--ro bits* identityref 253 | +--ro prefix? inet:ip-prefix 254 | +--ro perfix-sid-sub-tlvs 255 | | +--ro prefix-sid-sub-tlv* 256 | | +--ro prefix-sid-flags 257 | | | +--ro bits* identityref 258 | | +--ro mt-id? uint8 259 | | +--ro algorithm? uint8 260 | | +--ro sid? uint32 261 | +--ro unknown-tlvs 262 | +--ro unknown-tlv* 263 | +--ro type? uint16 264 | +--ro length? uint16 265 | +--ro value? yang:hex-string 266 +--ro sr-algorithm-tlv 267 | +--ro sr-algorithm* uint8 268 +--ro sid-range-tlvs 269 | +--ro sid-range-tlv* 270 | +--ro range-size? uint24 271 | +--ro sid-sub-tlv 272 | +--ro sid? uint32 273 +--ro local-block-tlvs 274 | +--ro local-block-tlv* 275 | +--ro range-size? uint24 276 | +--ro sid-sub-tlv 277 | +--ro sid? uint32 278 +--ro srms-preference-tlv 279 +--ro preference? uint8 280 augment /rt:routing/rt:control-plane-protocols 281 /rt:control-plane-protocol/ospf:ospf/ospf:database 282 /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa 283 /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque: 284 +--ro extended-prefix-range-tlvs 285 | +--ro extended-prefix-range-tlv* 286 | +--ro prefix-length? uint8 287 | +--ro af? uint8 288 | +--ro range-size? uint16 289 | +--ro extended-prefix-range-flags 290 | | +--ro bits* identityref 291 | +--ro prefix? inet:ip-prefix 292 | +--ro perfix-sid-sub-tlvs 293 | | +--ro prefix-sid-sub-tlv* 294 | | +--ro prefix-sid-flags 295 | | | +--ro bits* identityref 296 | | +--ro mt-id? uint8 297 | | +--ro algorithm? uint8 298 | | +--ro sid? uint32 299 | +--ro unknown-tlvs 300 | +--ro unknown-tlv* 301 | +--ro type? uint16 302 | +--ro length? uint16 303 | +--ro value? yang:hex-string 304 +--ro sr-algorithm-tlv 305 | +--ro sr-algorithm* uint8 306 +--ro sid-range-tlvs 307 | +--ro sid-range-tlv* 308 | +--ro range-size? uint24 309 | +--ro sid-sub-tlv 310 | +--ro sid? uint32 311 +--ro local-block-tlvs 312 | +--ro local-block-tlv* 313 | +--ro range-size? uint24 314 | +--ro sid-sub-tlv 315 | +--ro sid? uint32 316 +--ro srms-preference-tlv 317 +--ro preference? uint8 319 4. OSPF Segment Routing YANG Module 321 file "ietf-ospf-sr@2020-02-05.yang" 322 module ietf-ospf-sr { 323 namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr"; 325 prefix ospf-sr; 327 import ietf-inet-types { 328 prefix "inet"; 329 } 331 import ietf-yang-types { 332 prefix "yang"; 333 } 334 import ietf-routing { 335 prefix "rt"; 336 } 337 import ietf-segment-routing-common { 338 prefix "sr-cmn"; 339 } 340 import ietf-segment-routing-mpls { 341 prefix "sr-mpls"; 342 } 343 import ietf-ospf { 344 prefix "ospf"; 345 } 347 organization 348 "IETF LSR - Link State Routing Working Group"; 350 contact 351 "WG Web: 352 WG List: 354 Editor: Derek Yeung 355 356 Author: Derek Yeung 357 358 Author: Yingzhen Qu 359 360 Author: Acee Lindem 361 362 Author: Jeffrey Zhang 363 364 Author: Ing-Wher Chen 365 366 Author: Greg Hankins 367 "; 369 description 370 "This YANG module defines the generic configuration 371 and operational state for OSPF Segment Routing, which is 372 common across all of the vendor implementations. It is 373 intended that the module will be extended by vendors to 374 define vendor-specific OSPF Segment Routing configuration 375 and operational parameters and policies. 377 Copyright (c) 2020 IETF Trust and the persons identified as 378 authors of the code. All rights reserved. 380 Redistribution and use in source and binary forms, with or 381 without modification, is permitted pursuant to, and subject 382 to the license terms contained in, the Simplified BSD License 383 set forth in Section 4.c of the IETF Trust's Legal Provisions 384 Relating to IETF Documents 385 (http://trustee.ietf.org/license-info). 387 This version of this YANG module is part of RFC XXXX; 388 see the RFC itself for full legal notices."; 390 reference "RFC XXXX"; 392 revision 2020-02-05 { 393 description 394 ""; 395 reference 396 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 397 } 399 revision 2019-08-13 { 400 description 401 ""; 402 reference 403 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 404 } 406 revision 2019-08-07 { 407 description 408 ""; 409 reference 410 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 411 } 413 revision 2019-07-07 { 414 description 415 ""; 416 reference 417 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 418 } 420 revision 2019-03-05 { 421 description 422 ""; 423 reference 424 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 425 } 427 revision 2018-06-25 { 428 description 429 ""; 431 reference 432 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 433 } 435 revision 2018-03-03 { 436 description 437 "* Remove OSPF instance."; 438 reference 439 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 440 } 442 revision 2017-12-28 { 443 description 444 ""; 445 reference 446 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 447 } 449 revision 2017-07-02 { 450 description 451 "* Implement NMDA model. 452 * Add local-block-tlvs and srms-preference-tlv. 453 * Remove sid-binding-sub-tlvs."; 454 reference 455 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 456 } 458 revision 2017-03-12 { 459 description 460 "* Add p-flag in adj-sid sub-tlv."; 461 reference 462 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 463 } 464 revision 2016-10-31 { 465 description 466 "* Update authors information. 467 * Add import of ietf-segment-routing-common module."; 468 reference 469 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 470 } 472 revision 2016-07-07 { 473 description 474 "* Change routing-protocol to control-plane-protocol."; 475 reference 476 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 477 } 478 revision 2016-03-20 { 479 description 480 "* Remove routing-instance."; 481 reference 482 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 483 } 485 revision 2015-10-19 { 486 description 487 "* Add per-protocol SRGB support. 488 * Editorial changes."; 489 reference 490 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 491 } 493 revision 2015-09-02 { 494 description 495 "* Author list update. 496 * Editorial changes."; 497 reference 498 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 499 } 501 revision 2015-07-06 { 502 description 503 "Initial revision."; 504 reference 505 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 506 } 508 feature ti-lfa { 509 description 510 "Topology-Independent Loop-Free Alternate (TI-LFA) 511 computation using segment routing."; 512 } 514 identity prefix-sid-bit { 515 description 516 "Base identity for prefix sid sub-tlv bits."; 517 } 519 identity np-bit { 520 base prefix-sid-bit; 521 description 522 "No-PHP flag."; 523 } 525 identity m-bit { 526 base prefix-sid-bit; 527 description 528 "Mapping server flag."; 529 } 531 identity e-bit { 532 base prefix-sid-bit; 533 description 534 "Explicit-NULL flag."; 535 } 537 identity v-bit { 538 base prefix-sid-bit; 539 description 540 "Value/Index flag."; 541 } 543 identity l-bit { 544 base prefix-sid-bit; 545 description 546 "Local flag."; 547 } 549 identity extended-prefix-range-bit { 550 description 551 "Base identity for extended prefix range TLV bits."; 552 } 554 identity ia-bit { 555 base extended-prefix-range-bit; 556 description 557 "Inter-Area flag. If set, advertisement is of inter-area type."; 558 } 560 identity adj-sid-bit { 561 description 562 "Base identity for adj sid sub-tlv bits."; 563 } 565 identity b-bit { 566 base adj-sid-bit; 567 description 568 "Backup flag."; 569 } 571 identity vi-bit { 572 base adj-sid-bit; 573 description 574 "Value/Index flag."; 575 } 577 identity lo-bit { 578 base adj-sid-bit; 579 description 580 "Local/Global flag."; 581 } 583 identity g-bit { 584 base adj-sid-bit; 585 description 586 "Group flag."; 587 } 589 identity p-bit { 590 base adj-sid-bit; 591 description 592 "Persistent flag."; 593 } 595 typedef uint24 { 596 type uint32 { 597 range "0 .. 16777215"; 598 } 599 description 600 "24-bit unsigned integer."; 601 } 603 /* Groupings */ 604 grouping sid-sub-tlv { 605 description "SID/Label sub-TLV grouping."; 606 container sid-sub-tlv { 607 description 608 "Used to advertise the SID/Label associated with a 609 prefix or adjacency."; 610 leaf sid { 611 type uint32; 612 description 613 "Segment Identifier (SID) - A 20 bit label or 614 32 bit SID."; 615 } 616 } 617 } 619 grouping prefix-sid-sub-tlvs { 620 description "Prefix Segment ID (SID) sub-TLVs."; 621 container perfix-sid-sub-tlvs{ 622 description "Prefix SID sub-TLV."; 623 list prefix-sid-sub-tlv { 624 description "Prefix SID sub-TLV."; 625 container prefix-sid-flags { 626 leaf-list bits { 627 type identityref { 628 base prefix-sid-bit; 629 } 630 description 631 "Prefix SID Sub-TLV flag bits list."; 632 } 633 description "Segment Identifier (SID) Flags."; 634 } 635 leaf mt-id { 636 type uint8; 637 description "Multi-topology ID."; 638 } 639 leaf algorithm { 640 type uint8; 641 description 642 "The algorithm associated with the prefix-SID."; 643 } 644 leaf sid { 645 type uint32; 646 description "An index or label."; 647 } 648 } 649 } 650 } 652 grouping extended-prefix-range-tlvs { 653 description "Extended prefix range TLV grouping."; 655 container extended-prefix-range-tlvs { 656 description "The list of range of prefixes."; 657 list extended-prefix-range-tlv { //type=2? 658 description "The range of prefixes."; 659 leaf prefix-length { 660 type uint8; 661 description "Length of prefix in bits."; 662 } 663 leaf af { 664 type uint8; 665 description "Address family for the prefix."; 666 } 667 leaf range-size { 668 type uint16; 669 description "The number of prefixes covered by the 670 advertisement."; 671 } 672 container extended-prefix-range-flags { 673 leaf-list bits { 674 type identityref { 675 base extended-prefix-range-bit; 676 } 677 description "Extended prefix range TLV flags list."; 678 } 679 description "Extended Prefix Range TLV flags."; 680 } 681 leaf prefix { 682 type inet:ip-prefix; 683 description "Address prefix."; 684 } 685 uses prefix-sid-sub-tlvs; 686 uses ospf:unknown-tlvs; 687 } 688 } 689 } 691 grouping sr-algorithm-tlv { 692 description "SR algorithm TLV grouping."; 693 container sr-algorithm-tlv { 694 description "All SR algorithm TLVs."; 695 leaf-list sr-algorithm { 696 type uint8; 697 description 698 "The Segment Routing (SR) algorithms that the router is 699 currently using."; 700 } 701 } 702 } 704 grouping sid-range-tlvs { 705 description "SID Range TLV grouping."; 706 container sid-range-tlvs { 707 description "List of SID range TLVs."; 708 list sid-range-tlv { 709 description "SID range TLV."; 710 leaf range-size { 711 type uint24; 712 description "The SID range."; 713 } 714 uses sid-sub-tlv; 715 } 716 } 717 } 718 grouping local-block-tlvs { 719 description "The SR local block TLV contains the 720 range of labels reserved for local SIDs."; 721 container local-block-tlvs { 722 description "List of SRLB TLVs."; 723 list local-block-tlv { 724 description "SRLB TLV."; 725 leaf range-size { 726 type uint24; 727 description "The SID range."; 728 } 729 uses sid-sub-tlv; 730 } 731 } 732 } 734 grouping srms-preference-tlv { 735 description "The SRMS preference TLV is used to advertise 736 a preference associated with the node that acts 737 as an SR Mapping Server."; 738 container srms-preference-tlv { 739 description "SRMS Preference TLV."; 740 leaf preference { 741 type uint8 { 742 range "0 .. 255"; 743 } 744 description "SRMS preference TLV, vlaue from 0 to 255."; 745 } 746 } 747 } 749 /* Configuration */ 750 augment "/rt:routing/rt:control-plane-protocols" 751 + "/rt:control-plane-protocol/ospf:ospf" { 752 when "../rt:type = 'ospf:ospfv2' or " 753 + "../rt:type = 'ospf:ospfv3'" { 754 description 755 "This augments the OSPF routing protocol when used."; 756 } 757 description 758 "This augments the OSPF protocol configuration 759 with segment routing."; 760 uses sr-mpls:sr-controlplane; 761 container protocol-srgb { 762 if-feature sr-mpls:protocol-srgb; 763 uses sr-cmn:srgb; 764 description 765 "Per-protocol SRGB."; 767 } 768 } 770 augment "/rt:routing/rt:control-plane-protocols/" 771 + "rt:control-plane-protocol/ospf:ospf/" 772 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { 773 when "../../../../../rt:type = 'ospf:ospfv2' or " 774 + "../../../../../rt:type = 'ospf:ospfv3'" { 775 description 776 "This augments the OSPF interface configuration 777 when used."; 778 } 779 description 780 "This augments the OSPF protocol interface 781 configuration with segment routing."; 783 uses sr-mpls:igp-interface; 784 } 786 augment "/rt:routing/rt:control-plane-protocols/" 787 + "rt:control-plane-protocol/ospf:ospf/" 788 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" 789 + "ospf:fast-reroute" { 790 when "../../../../../../rt:type = 'ospf:ospfv2' or " 791 + "../../../../../../rt:type = 'ospf:ospfv3'" { 792 description 793 "This augments the OSPF routing protocol when used."; 794 } 795 description 796 "This augments the OSPF protocol IP-FRR with TI-LFA."; 798 container ti-lfa { 799 if-feature ti-lfa; 800 leaf enable { 801 type boolean; 802 description 803 "Enables TI-LFA computation."; 804 } 805 description 806 "Topology Independent Loop Free Alternate 807 (TI-LFA) support."; 808 } 809 } 811 /* Database */ 812 augment "/rt:routing/" 813 + "rt:control-plane-protocols/rt:control-plane-protocol/" 814 + "ospf:ospf/ospf:areas/ospf:area/" 815 + "ospf:interfaces/ospf:interface/ospf:database/" 816 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 817 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 818 + "ospf:ospfv2/ospf:body/ospf:opaque/" 819 + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { 820 when "../../../../../../../../../../../../../../" 821 + "rt:type = 'ospf:ospfv2'" { 822 description 823 "This augmentation is only valid for OSPFv2."; 824 } 825 description 826 "SR specific TLVs for OSPFv2 extended prefix TLV 827 in type 9 opaque LSA."; 828 uses prefix-sid-sub-tlvs; 829 } 831 augment "/rt:routing/" 832 + "rt:control-plane-protocols/rt:control-plane-protocol/" 833 + "ospf:ospf/ospf:areas/" 834 + "ospf:area/ospf:database/" 835 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 836 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 837 + "ospf:ospfv2/ospf:body/ospf:opaque/" 838 + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { 839 when "../../../../../../../../../../../../" 840 + "rt:type = 'ospf:ospfv2'" { 841 description 842 "This augmentation is only valid for OSPFv2."; 843 } 844 description 845 "SR specific TLVs for OSPFv2 extended prefix TLV 846 in type 10 opaque LSA."; 847 uses prefix-sid-sub-tlvs; 848 } 850 augment "/rt:routing/" 851 + "rt:control-plane-protocols/rt:control-plane-protocol/" 852 + "ospf:ospf/ospf:database/" 853 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 854 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 855 + "ospf:ospfv2/ospf:body/ospf:opaque/" 856 + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { 857 when "../../../../../../../../../../" 858 + "rt:type = 'ospf:ospfv2'" { 859 description 860 "This augmentation is only valid for OSPFv2."; 861 } 862 description 863 "SR specific TLVs for OSPFv2 extended prefix TLV 864 in type 11 opaque LSA."; 865 uses prefix-sid-sub-tlvs; 866 } 868 augment "/rt:routing/" 869 + "rt:control-plane-protocols/rt:control-plane-protocol/" 870 + "ospf:ospf/ospf:areas/" 871 + "ospf:area/ospf:database/" 872 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 873 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 874 + "ospf:ospfv2/ospf:body/ospf:opaque/" 875 + "ospf:extended-link-opaque/ospf:extended-link-tlv" { 876 when "../../../../../../../../../../../../" 877 + "rt:type = 'ospf:ospfv2'" { 878 description 879 "This augmentation is only valid for OSPFv2."; 880 } 881 description 882 "SR specific TLVs for OSPFv2 extended link TLV 883 in type 10 opaque LSA."; 885 container adj-sid-sub-tlvs { 886 description "Adjacency SID optional sub-TLVs."; 887 list adj-sid-sub-tlv { 888 description "List of Adjacency SID sub-TLVs."; 889 container adj-sid-flags { 890 leaf-list bits { 891 type identityref { 892 base adj-sid-bit; 893 } 894 description "Adj sid sub-tlv flags list."; 895 } 896 description "Adj-sid sub-tlv flags."; 897 } 898 leaf mt-id { 899 type uint8; 900 description "Multi-topology ID."; 901 } 902 leaf weight { 903 type uint8; 904 description "Weight used for load-balancing."; 905 } 906 leaf sid { 907 type uint32; 908 description "Segment Identifier (SID) index/label."; 909 } 910 } 912 } 914 container lan-adj-sid-sub-tlvs { 915 description "LAN Adjacency SID optional sub-TLVs."; 916 list lan-adj-sid-sub-tlv { 917 description "List of LAN adjacency SID sub-TLVs."; 918 container lan-adj-sid-flags { 919 leaf-list bits { 920 type identityref { 921 base adj-sid-bit; 922 } 923 description "LAN adj sid sub-tlv flags list."; 924 } 925 description "LAN adj-sid sub-tlv flags."; 926 } 927 leaf mt-id { 928 type uint8; 929 description "Multi-topology ID."; 930 } 931 leaf weight { 932 type uint8; 933 description "Weight used for load-balancing."; 934 } 935 leaf neighbor-router-id { 936 type yang:dotted-quad; 937 description "Neighbor router ID."; 938 } 939 leaf sid { 940 type uint32; 941 description "Segment Identifier (SID) index/label."; 942 } 943 } 944 } 945 } 947 augment "/rt:routing/" 948 + "rt:control-plane-protocols/rt:control-plane-protocol/" 949 + "ospf:ospf/ospf:areas/ospf:area/" 950 + "ospf:interfaces/ospf:interface/ospf:database/" 951 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 952 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 953 + "ospf:ospfv2/ospf:body/ospf:opaque" { 954 when "../../../../../../../../../../../../" 955 + "rt:type = 'ospf:ospfv2'" { 956 description 957 "This augmentation is only valid for OSPFv2."; 958 } 959 description 960 "SR specific TLVs for OSPFv2 type 9 opaque LSA."; 962 uses extended-prefix-range-tlvs; 963 uses sr-algorithm-tlv; 964 uses sid-range-tlvs; 965 uses local-block-tlvs; 966 uses srms-preference-tlv; 967 } 969 augment "/rt:routing/" 970 + "rt:control-plane-protocols/rt:control-plane-protocol/" 971 + "ospf:ospf/ospf:areas/" 972 + "ospf:area/ospf:database/" 973 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 974 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 975 + "ospf:ospfv2/ospf:body/ospf:opaque" { 976 when "../../../../../../../../../../" 977 + "rt:type = 'ospf:ospfv2'" { 978 description 979 "This augmentation is only valid for OSPFv2."; 980 } 982 description 983 "SR specific TLVs for OSPFv2 type 10 opaque LSA."; 985 uses extended-prefix-range-tlvs; 986 uses sr-algorithm-tlv; 987 uses sid-range-tlvs; 988 uses local-block-tlvs; 989 uses srms-preference-tlv; 990 } 992 augment "/rt:routing/" 993 + "rt:control-plane-protocols/rt:control-plane-protocol/" 994 + "ospf:ospf/ospf:database/" 995 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 996 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 997 + "ospf:ospfv2/ospf:body/ospf:opaque" { 998 when "../../../../../../../../" 999 + "rt:type = 'ospf:ospfv2'" { 1000 description 1001 "This augmentation is only valid for OSPFv2."; 1002 } 1003 description 1004 "SR specific TLVs for OSPFv2 type 11 opaque LSA."; 1006 uses extended-prefix-range-tlvs; 1007 uses sr-algorithm-tlv; 1008 uses sid-range-tlvs; 1009 uses local-block-tlvs; 1010 uses srms-preference-tlv; 1011 } 1012 } 1013 1015 5. Security Considerations 1017 The YANG modules specified in this document define a schema for data 1018 that is designed to be accessed via network management protocols such 1019 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 1020 is the secure transport layer, and the mandatory-to-implement secure 1021 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 1022 is HTTPS, and the mandatory-to-implement secure transport is TLS 1023 [RFC5246]. 1025 The NETCONF access control model [RFC6536] provides the means to 1026 restrict access for particular NETCONF or RESTCONF users to a pre- 1027 configured subset of all available NETCONF or RESTCONF protocol 1028 operations and content. 1030 There are a number of data nodes defined in the modules that are 1031 writable/creatable/deletable (i.e., config true, which is the 1032 default). These data nodes may be considered sensitive or vulnerable 1033 in some network environments. Write operations (e.g., edit-config) 1034 to these data nodes without proper protection can have a negative 1035 effect on network operations. 1037 Some of the readable data nodes in the modules may be considered 1038 sensitive or vulnerable in some network environments. It is thus 1039 important to control read access (e.g., via get, get-config, or 1040 notification) to these data nodes. 1042 6. Acknowledgements 1044 The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta, 1045 Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and 1046 Alan Davey for their thorough reviews and helpful comments. 1048 This document was produced using Marshall Rose's xml2rfc tool. 1050 Author affiliation with The MITRE Corporation is provided for 1051 identification purposes only, and is not intended to convey or imply 1052 MITRE's concurrence with, or support for, the positions, opinions or 1053 viewpoints expressed. MITRE has approved this document for Public 1054 Release, Distribution Unlimited, with Public Release Case Number 1055 18-3281. 1057 7. References 1059 7.1. Normative References 1061 [I-D.ietf-ospf-yang] 1062 Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, 1063 "YANG Data Model for OSPF Protocol", draft-ietf-ospf- 1064 yang-29 (work in progress), October 2019. 1066 [I-D.ietf-spring-sr-yang] 1067 Litkowski, S., Qu, Y., Lindem, A., Sarkar, P., and J. 1068 Tantsura, "YANG Data Model for Segment Routing", draft- 1069 ietf-spring-sr-yang-15 (work in progress), January 2020. 1071 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1072 Requirement Levels", BCP 14, RFC 2119, 1073 DOI 10.17487/RFC2119, March 1997, 1074 . 1076 [RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, 1077 DOI 10.17487/RFC2328, April 1998, 1078 . 1080 [RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed., 1081 Coltun, R., and F. Baker, "OSPF Version 2 Management 1082 Information Base", RFC 4750, DOI 10.17487/RFC4750, 1083 December 2006, . 1085 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 1086 (TLS) Protocol Version 1.2", RFC 5246, 1087 DOI 10.17487/RFC5246, August 2008, 1088 . 1090 [RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF 1091 for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008, 1092 . 1094 [RFC5643] Joyal, D., Ed. and V. Manral, Ed., "Management Information 1095 Base for OSPFv3", RFC 5643, DOI 10.17487/RFC5643, August 1096 2009, . 1098 [RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and 1099 R. Aggarwal, "Support of Address Families in OSPFv3", 1100 RFC 5838, DOI 10.17487/RFC5838, April 2010, 1101 . 1103 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1104 the Network Configuration Protocol (NETCONF)", RFC 6020, 1105 DOI 10.17487/RFC6020, October 2010, 1106 . 1108 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1109 and A. Bierman, Ed., "Network Configuration Protocol 1110 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1111 . 1113 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1114 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1115 . 1117 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1118 Protocol (NETCONF) Access Control Model", RFC 6536, 1119 DOI 10.17487/RFC6536, March 2012, 1120 . 1122 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 1123 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 1124 . 1126 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1127 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1128 . 1130 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1131 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 1132 . 1134 [RFC8665] Psenak, P., Ed., Previdi, S., Ed., Filsfils, C., Gredler, 1135 H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF 1136 Extensions for Segment Routing", RFC 8665, 1137 DOI 10.17487/RFC8665, December 2019, 1138 . 1140 7.2. Informative References 1142 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1143 Management", RFC 8022, DOI 10.17487/RFC8022, November 1144 2016, . 1146 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1147 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1148 . 1150 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1151 and R. Wilton, "Network Management Datastore Architecture 1152 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1153 . 1155 Appendix A. Contributors' Addreses 1157 Dean Bogdanovic 1158 Volta Networks, Inc. 1160 EMail: dean@voltanet.io 1162 Kiran Koushik Agrahara Sreenivasa 1163 Cisco Systems 1164 12515 Research Blvd, Bldg 4 1165 Austin, TX 78681 1166 USA 1168 EMail: kkoushik@cisco.com 1170 Authors' Addresses 1172 Derek Yeung 1173 Arrcus 1175 EMail: derek@arrcus.com 1177 Yingzhen Qu 1178 Futurewei 1179 2330 Central Expressway 1180 Santa Clara, CA 95050 1181 USA 1183 EMail: yingzhen.qu@futurewei.com 1185 Jeffrey Zhang 1186 Juniper Networks 1187 10 Technology Park Drive 1188 Westford, MA 01886 1189 USA 1191 EMail: zzhang@juniper.net 1193 Ing-Wher Chen 1194 The MITRE Corporation 1196 EMail: ingwherchen@mitre.org 1197 Acee Lindem 1198 Cisco Systems 1199 301 Midenhall Way 1200 Cary, NC 27513 1202 EMail: acee@cisco.com