idnits 2.17.1 draft-ietf-ospf-sr-yang-12.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 475 has weird spacing: '...dentity b-bit...' == The document seems to use 'NOT RECOMMENDED' as an RFC 2119 keyword, but does not include the phrase in its RFC 2119 key words list. == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (July 12, 2020) is 1374 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 994, but no explicit reference was found in the text == Unused Reference: 'RFC4750' is defined on line 998, but no explicit reference was found in the text == Unused Reference: 'RFC5340' is defined on line 1008, but no explicit reference was found in the text == Unused Reference: 'RFC5643' is defined on line 1012, but no explicit reference was found in the text == Unused Reference: 'RFC5838' is defined on line 1016, but no explicit reference was found in the text == Unused Reference: 'RFC7223' is defined on line 1040, but no explicit reference was found in the text == Unused Reference: 'RFC8022' is defined on line 1060, but no explicit reference was found in the text == Outdated reference: A later version (-30) exists of draft-ietf-spring-sr-yang-17 ** 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 (~~), 15 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: January 13, 2021 Futurewei 6 J. Zhang 7 Juniper Networks 8 I. Chen 9 The MITRE Corporation 10 A. Lindem 11 Cisco Systems 12 July 12, 2020 14 YANG Data Model for OSPF SR (Segment Routing) Protocol 15 draft-ietf-ospf-sr-yang-12 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 January 13, 2021. 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 . . . . . . . . . . . . . . . . . . . 20 64 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 20 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 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 yang-version 1.1; 324 namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr"; 326 prefix ospf-sr; 328 import ietf-inet-types { 329 prefix "inet"; 330 reference "RFC 6991 - Common YANG Data Types"; 331 } 333 import ietf-yang-types { 334 prefix "yang"; 335 reference "RFC 6991 - Common YANG Data Types"; 336 } 338 import ietf-routing { 339 prefix "rt"; 340 reference "RFC 8349 - A YANG Data Model for Routing 341 Management (NMDA Version)"; 342 } 343 import ietf-segment-routing-common { 344 prefix "sr-cmn"; 345 } 346 import ietf-segment-routing-mpls { 347 prefix "sr-mpls"; 348 } 349 import ietf-ospf { 350 prefix "ospf"; 351 } 353 organization 354 "IETF LSR - Link State Routing Working Group"; 356 contact 357 "WG Web: 358 WG List: 360 Editor: Derek Yeung 361 362 Author: Derek Yeung 363 364 Author: Yingzhen Qu 365 366 Author: Acee Lindem 367 368 Author: Jeffrey Zhang 369 370 Author: Ing-Wher Chen 371 372 Author: Greg Hankins 373 "; 375 description 376 "This YANG module defines the generic configuration 377 and operational state for OSPF Segment Routing, which is 378 common across all of the vendor implementations. It is 379 intended that the module will be extended by vendors to 380 define vendor-specific OSPF Segment Routing configuration 381 and operational parameters and policies. 383 This YANG model conforms to the Network Management 384 Datastore Architecture (NMDA) as described in RFC 8242. 386 Copyright (c) 2020 IETF Trust and the persons identified as 387 authors of the code. All rights reserved. 389 Redistribution and use in source and binary forms, with or 390 without modification, is permitted pursuant to, and subject to 391 the license terms contained in, the Simplified BSD License set 392 forth in Section 4.c of the IETF Trust's Legal Provisions 393 Relating to IETF Documents 394 (https://trustee.ietf.org/license-info). 396 This version of this YANG module is part of RFC XXXX 397 (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself 398 for full legal notices. 400 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 401 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 402 'MAY', and 'OPTIONAL' in this document are to be interpreted as 403 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 404 they appear in all capitals, as shown here. 406 This version of this YANG module is part of RFC XXXX; 407 see the RFC itself for full legal notices."; 409 reference "RFC XXXX"; 411 revision 2020-07-12 { 412 description 413 "Initial revision."; 414 reference 415 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 416 } 418 feature ti-lfa { 419 description 420 "Topology-Independent Loop-Free Alternate (TI-LFA) 421 computation using segment routing."; 422 } 424 identity prefix-sid-bit { 425 description 426 "Base identity for prefix sid sub-tlv bits."; 427 } 429 identity np-bit { 430 base prefix-sid-bit; 431 description 432 "No-PHP flag."; 433 } 435 identity m-bit { 436 base prefix-sid-bit; 437 description 438 "Mapping server flag."; 439 } 441 identity e-bit { 442 base prefix-sid-bit; 443 description 444 "Explicit-NULL flag."; 445 } 447 identity v-bit { 448 base prefix-sid-bit; 449 description 450 "Value/Index flag."; 451 } 453 identity l-bit { 454 base prefix-sid-bit; 455 description 456 "Local flag."; 457 } 459 identity extended-prefix-range-bit { 460 description 461 "Base identity for extended prefix range TLV bits."; 462 } 464 identity ia-bit { 465 base extended-prefix-range-bit; 466 description 467 "Inter-Area flag. If set, advertisement is of inter-area type."; 468 } 470 identity adj-sid-bit { 471 description 472 "Base identity for adj sid sub-tlv bits."; 473 } 475 identity b-bit { 476 base adj-sid-bit; 477 description 478 "Backup flag."; 480 } 482 identity vi-bit { 483 base adj-sid-bit; 484 description 485 "Value/Index flag."; 486 } 488 identity lo-bit { 489 base adj-sid-bit; 490 description 491 "Local/Global flag."; 492 } 494 identity g-bit { 495 base adj-sid-bit; 496 description 497 "Group flag."; 498 } 500 identity p-bit { 501 base adj-sid-bit; 502 description 503 "Persistent flag."; 504 } 506 typedef uint24 { 507 type uint32 { 508 range "0 .. 16777215"; 509 } 510 description 511 "24-bit unsigned integer."; 512 } 514 /* Groupings */ 515 grouping sid-sub-tlv { 516 description "SID/Label sub-TLV grouping."; 517 container sid-sub-tlv { 518 description 519 "Used to advertise the SID/Label associated with a 520 prefix or adjacency."; 521 leaf sid { 522 type uint32; 523 description 524 "Segment Identifier (SID) - A 20 bit label or 525 32 bit SID."; 526 } 527 } 529 } 531 grouping prefix-sid-sub-tlvs { 532 description "Prefix Segment ID (SID) sub-TLVs."; 533 container perfix-sid-sub-tlvs{ 534 description "Prefix SID sub-TLV."; 535 list prefix-sid-sub-tlv { 536 description "Prefix SID sub-TLV."; 537 container prefix-sid-flags { 538 leaf-list bits { 539 type identityref { 540 base prefix-sid-bit; 541 } 542 description 543 "Prefix SID Sub-TLV flag bits list."; 544 } 545 description "Segment Identifier (SID) Flags."; 546 } 547 leaf mt-id { 548 type uint8; 549 description "Multi-topology ID."; 550 } 551 leaf algorithm { 552 type uint8; 553 description 554 "The algorithm associated with the prefix-SID."; 555 } 556 leaf sid { 557 type uint32; 558 description "An index or label."; 559 } 560 } 561 } 562 } 564 grouping extended-prefix-range-tlvs { 565 description "Extended prefix range TLV grouping."; 567 container extended-prefix-range-tlvs { 568 description "The list of range of prefixes."; 569 list extended-prefix-range-tlv { //type=2? 570 description "The range of prefixes."; 571 leaf prefix-length { 572 type uint8; 573 description "Length of prefix in bits."; 574 } 575 leaf af { 576 type uint8; 577 description "Address family for the prefix."; 578 } 579 leaf range-size { 580 type uint16; 581 description "The number of prefixes covered by the 582 advertisement."; 583 } 584 container extended-prefix-range-flags { 585 leaf-list bits { 586 type identityref { 587 base extended-prefix-range-bit; 588 } 589 description "Extended prefix range TLV flags list."; 590 } 591 description "Extended Prefix Range TLV flags."; 592 } 593 leaf prefix { 594 type inet:ip-prefix; 595 description "Address prefix."; 596 } 597 uses prefix-sid-sub-tlvs; 598 uses ospf:unknown-tlvs; 599 } 600 } 601 } 603 grouping sr-algorithm-tlv { 604 description "SR algorithm TLV grouping."; 605 container sr-algorithm-tlv { 606 description "All SR algorithm TLVs."; 607 leaf-list sr-algorithm { 608 type uint8; 609 description 610 "The Segment Routing (SR) algorithms that the router is 611 currently using."; 612 } 613 } 614 } 616 grouping sid-range-tlvs { 617 description "SID Range TLV grouping."; 618 container sid-range-tlvs { 619 description "List of SID range TLVs."; 620 list sid-range-tlv { 621 description "SID range TLV."; 622 leaf range-size { 623 type uint24; 624 description "The SID range."; 626 } 627 uses sid-sub-tlv; 628 } 629 } 630 } 632 grouping local-block-tlvs { 633 description "The SR local block TLV contains the 634 range of labels reserved for local SIDs."; 635 container local-block-tlvs { 636 description "List of SRLB TLVs."; 637 list local-block-tlv { 638 description "SRLB TLV."; 639 leaf range-size { 640 type uint24; 641 description "The SID range."; 642 } 643 uses sid-sub-tlv; 644 } 645 } 646 } 648 grouping srms-preference-tlv { 649 description "The SRMS preference TLV is used to advertise 650 a preference associated with the node that acts 651 as an SR Mapping Server."; 652 container srms-preference-tlv { 653 description "SRMS Preference TLV."; 654 leaf preference { 655 type uint8 { 656 range "0 .. 255"; 657 } 658 description "SRMS preference TLV, vlaue from 0 to 255."; 659 } 660 } 661 } 663 /* Configuration */ 664 augment "/rt:routing/rt:control-plane-protocols" 665 + "/rt:control-plane-protocol/ospf:ospf" { 666 when "../rt:type = 'ospf:ospfv2' or " 667 + "../rt:type = 'ospf:ospfv3'" { 668 description 669 "This augments the OSPF routing protocol when used."; 670 } 671 description 672 "This augments the OSPF protocol configuration 673 with segment routing."; 675 uses sr-mpls:sr-controlplane; 676 container protocol-srgb { 677 if-feature sr-mpls:protocol-srgb; 678 uses sr-cmn:srgb; 679 description 680 "Per-protocol SRGB."; 681 } 682 } 684 augment "/rt:routing/rt:control-plane-protocols/" 685 + "rt:control-plane-protocol/ospf:ospf/" 686 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { 687 when "../../../../../rt:type = 'ospf:ospfv2' or " 688 + "../../../../../rt:type = 'ospf:ospfv3'" { 689 description 690 "This augments the OSPF interface configuration 691 when used."; 692 } 693 description 694 "This augments the OSPF protocol interface 695 configuration with segment routing."; 697 uses sr-mpls:igp-interface; 698 } 700 augment "/rt:routing/rt:control-plane-protocols/" 701 + "rt:control-plane-protocol/ospf:ospf/" 702 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" 703 + "ospf:fast-reroute" { 704 when "../../../../../../rt:type = 'ospf:ospfv2' or " 705 + "../../../../../../rt:type = 'ospf:ospfv3'" { 706 description 707 "This augments the OSPF routing protocol when used."; 708 } 709 description 710 "This augments the OSPF protocol IP-FRR with TI-LFA."; 712 container ti-lfa { 713 if-feature ti-lfa; 714 leaf enable { 715 type boolean; 716 description 717 "Enables TI-LFA computation."; 718 } 719 description 720 "Topology Independent Loop Free Alternate 721 (TI-LFA) support."; 722 } 724 } 726 /* Database */ 727 augment "/rt:routing/" 728 + "rt:control-plane-protocols/rt:control-plane-protocol/" 729 + "ospf:ospf/ospf:areas/ospf:area/" 730 + "ospf:interfaces/ospf:interface/ospf:database/" 731 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 732 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 733 + "ospf:ospfv2/ospf:body/ospf:opaque/" 734 + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { 735 when "../../../../../../../../../../../../../../" 736 + "rt:type = 'ospf:ospfv2'" { 737 description 738 "This augmentation is only valid for OSPFv2."; 739 } 740 description 741 "SR specific TLVs for OSPFv2 extended prefix TLV 742 in type 9 opaque LSA."; 743 uses prefix-sid-sub-tlvs; 744 } 746 augment "/rt:routing/" 747 + "rt:control-plane-protocols/rt:control-plane-protocol/" 748 + "ospf:ospf/ospf:areas/" 749 + "ospf:area/ospf:database/" 750 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 751 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 752 + "ospf:ospfv2/ospf:body/ospf:opaque/" 753 + "ospf:extended-prefix-opaque/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 10 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:database/" 768 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 769 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 770 + "ospf:ospfv2/ospf:body/ospf:opaque/" 771 + "ospf:extended-prefix-opaque/ospf:extended-prefix-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 prefix TLV 780 in type 11 opaque LSA."; 781 uses prefix-sid-sub-tlvs; 782 } 784 augment "/rt:routing/" 785 + "rt:control-plane-protocols/rt:control-plane-protocol/" 786 + "ospf:ospf/ospf:areas/" 787 + "ospf:area/ospf:database/" 788 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 789 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 790 + "ospf:ospfv2/ospf:body/ospf:opaque/" 791 + "ospf:extended-link-opaque/ospf:extended-link-tlv" { 792 when "../../../../../../../../../../../../" 793 + "rt:type = 'ospf:ospfv2'" { 794 description 795 "This augmentation is only valid for OSPFv2."; 796 } 797 description 798 "SR specific TLVs for OSPFv2 extended link TLV 799 in type 10 opaque LSA."; 801 container adj-sid-sub-tlvs { 802 description "Adjacency SID optional sub-TLVs."; 803 list adj-sid-sub-tlv { 804 description "List of Adjacency SID sub-TLVs."; 805 container adj-sid-flags { 806 leaf-list bits { 807 type identityref { 808 base adj-sid-bit; 809 } 810 description "Adj sid sub-tlv flags list."; 811 } 812 description "Adj-sid sub-tlv flags."; 813 } 814 leaf mt-id { 815 type uint8; 816 description "Multi-topology ID."; 817 } 818 leaf weight { 819 type uint8; 820 description "Weight used for load-balancing."; 822 } 823 leaf sid { 824 type uint32; 825 description "Segment Identifier (SID) index/label."; 826 } 827 } 828 } 830 container lan-adj-sid-sub-tlvs { 831 description "LAN Adjacency SID optional sub-TLVs."; 832 list lan-adj-sid-sub-tlv { 833 description "List of LAN adjacency SID sub-TLVs."; 834 container lan-adj-sid-flags { 835 leaf-list bits { 836 type identityref { 837 base adj-sid-bit; 838 } 839 description "LAN adj sid sub-tlv flags list."; 840 } 841 description "LAN adj-sid sub-tlv flags."; 842 } 843 leaf mt-id { 844 type uint8; 845 description "Multi-topology ID."; 846 } 847 leaf weight { 848 type uint8; 849 description "Weight used for load-balancing."; 850 } 851 leaf neighbor-router-id { 852 type yang:dotted-quad; 853 description "Neighbor router ID."; 854 } 855 leaf sid { 856 type uint32; 857 description "Segment Identifier (SID) index/label."; 858 } 859 } 860 } 861 } 863 augment "/rt:routing/" 864 + "rt:control-plane-protocols/rt:control-plane-protocol/" 865 + "ospf:ospf/ospf:areas/ospf:area/" 866 + "ospf:interfaces/ospf:interface/ospf:database/" 867 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 868 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 869 + "ospf:ospfv2/ospf:body/ospf:opaque" { 871 when "../../../../../../../../../../../../" 872 + "rt:type = 'ospf:ospfv2'" { 873 description 874 "This augmentation is only valid for OSPFv2."; 875 } 877 description 878 "SR specific TLVs for OSPFv2 type 9 opaque LSA."; 880 uses extended-prefix-range-tlvs; 881 uses sr-algorithm-tlv; 882 uses sid-range-tlvs; 883 uses local-block-tlvs; 884 uses srms-preference-tlv; 885 } 887 augment "/rt:routing/" 888 + "rt:control-plane-protocols/rt:control-plane-protocol/" 889 + "ospf:ospf/ospf:areas/" 890 + "ospf:area/ospf:database/" 891 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 892 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 893 + "ospf:ospfv2/ospf:body/ospf:opaque" { 894 when "../../../../../../../../../../" 895 + "rt:type = 'ospf:ospfv2'" { 896 description 897 "This augmentation is only valid for OSPFv2."; 898 } 900 description 901 "SR specific TLVs for OSPFv2 type 10 opaque LSA."; 903 uses extended-prefix-range-tlvs; 904 uses sr-algorithm-tlv; 905 uses sid-range-tlvs; 906 uses local-block-tlvs; 907 uses srms-preference-tlv; 908 } 910 augment "/rt:routing/" 911 + "rt:control-plane-protocols/rt:control-plane-protocol/" 912 + "ospf:ospf/ospf:database/" 913 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 914 + "ospf:as-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 } 921 description 922 "SR specific TLVs for OSPFv2 type 11 opaque LSA."; 924 uses extended-prefix-range-tlvs; 925 uses sr-algorithm-tlv; 926 uses sid-range-tlvs; 927 uses local-block-tlvs; 928 uses srms-preference-tlv; 929 } 930 } 931 933 5. Security Considerations 935 The YANG modules specified in this document define a schema for data 936 that is designed to be accessed via network management protocols such 937 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 938 is the secure transport layer, and the mandatory-to-implement secure 939 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 940 is HTTPS, and the mandatory-to-implement secure transport is TLS 941 [RFC5246]. 943 The NETCONF access control model [RFC6536] provides the means to 944 restrict access for particular NETCONF or RESTCONF users to a pre- 945 configured subset of all available NETCONF or RESTCONF protocol 946 operations and content. 948 There are a number of data nodes defined in the modules that are 949 writable/creatable/deletable (i.e., config true, which is the 950 default). These data nodes may be considered sensitive or vulnerable 951 in some network environments. Write operations (e.g., edit-config) 952 to these data nodes without proper protection can have a negative 953 effect on network operations. 955 Some of the readable data nodes in the modules may be considered 956 sensitive or vulnerable in some network environments. It is thus 957 important to control read access (e.g., via get, get-config, or 958 notification) to these data nodes. 960 6. Acknowledgements 962 The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta, 963 Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and 964 Alan Davey for their thorough reviews and helpful comments. 966 This document was produced using Marshall Rose's xml2rfc tool. 968 Author affiliation with The MITRE Corporation is provided for 969 identification purposes only, and is not intended to convey or imply 970 MITRE's concurrence with, or support for, the positions, opinions or 971 viewpoints expressed. MITRE has approved this document for Public 972 Release, Distribution Unlimited, with Public Release Case Number 973 18-3281. 975 7. References 977 7.1. Normative References 979 [I-D.ietf-ospf-yang] 980 Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, 981 "YANG Data Model for OSPF Protocol", draft-ietf-ospf- 982 yang-29 (work in progress), October 2019. 984 [I-D.ietf-spring-sr-yang] 985 Litkowski, S., Qu, Y., Lindem, A., Sarkar, P., and J. 986 Tantsura, "YANG Data Model for Segment Routing", draft- 987 ietf-spring-sr-yang-17 (work in progress), July 2020. 989 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 990 Requirement Levels", BCP 14, RFC 2119, 991 DOI 10.17487/RFC2119, March 1997, 992 . 994 [RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, 995 DOI 10.17487/RFC2328, April 1998, 996 . 998 [RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed., 999 Coltun, R., and F. Baker, "OSPF Version 2 Management 1000 Information Base", RFC 4750, DOI 10.17487/RFC4750, 1001 December 2006, . 1003 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 1004 (TLS) Protocol Version 1.2", RFC 5246, 1005 DOI 10.17487/RFC5246, August 2008, 1006 . 1008 [RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF 1009 for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008, 1010 . 1012 [RFC5643] Joyal, D., Ed. and V. Manral, Ed., "Management Information 1013 Base for OSPFv3", RFC 5643, DOI 10.17487/RFC5643, August 1014 2009, . 1016 [RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and 1017 R. Aggarwal, "Support of Address Families in OSPFv3", 1018 RFC 5838, DOI 10.17487/RFC5838, April 2010, 1019 . 1021 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1022 the Network Configuration Protocol (NETCONF)", RFC 6020, 1023 DOI 10.17487/RFC6020, October 2010, 1024 . 1026 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1027 and A. Bierman, Ed., "Network Configuration Protocol 1028 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1029 . 1031 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1032 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1033 . 1035 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1036 Protocol (NETCONF) Access Control Model", RFC 6536, 1037 DOI 10.17487/RFC6536, March 2012, 1038 . 1040 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 1041 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 1042 . 1044 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1045 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1046 . 1048 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1049 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 1050 . 1052 [RFC8665] Psenak, P., Ed., Previdi, S., Ed., Filsfils, C., Gredler, 1053 H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF 1054 Extensions for Segment Routing", RFC 8665, 1055 DOI 10.17487/RFC8665, December 2019, 1056 . 1058 7.2. Informative References 1060 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1061 Management", RFC 8022, DOI 10.17487/RFC8022, November 1062 2016, . 1064 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1065 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1066 . 1068 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1069 and R. Wilton, "Network Management Datastore Architecture 1070 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1071 . 1073 Appendix A. Contributors' Addreses 1075 Dean Bogdanovic 1076 Volta Networks, Inc. 1078 EMail: dean@voltanet.io 1080 Kiran Koushik Agrahara Sreenivasa 1081 Cisco Systems 1082 12515 Research Blvd, Bldg 4 1083 Austin, TX 78681 1084 USA 1086 EMail: kkoushik@cisco.com 1088 Authors' Addresses 1090 Derek Yeung 1091 Arrcus 1093 EMail: derek@arrcus.com 1095 Yingzhen Qu 1096 Futurewei 1097 2330 Central Expressway 1098 Santa Clara, CA 95050 1099 USA 1101 EMail: yingzhen.qu@futurewei.com 1103 Jeffrey Zhang 1104 Juniper Networks 1105 10 Technology Park Drive 1106 Westford, MA 01886 1107 USA 1109 EMail: zzhang@juniper.net 1111 Ing-Wher Chen 1112 The MITRE Corporation 1114 EMail: ingwherchen@mitre.org 1115 Acee Lindem 1116 Cisco Systems 1117 301 Midenhall Way 1118 Cary, NC 27513 1120 EMail: acee@cisco.com