idnits 2.17.1 draft-ietf-ospf-sr-yang-17.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There is 1 instance of too long lines in the document, the longest one being 1 character in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 519 has weird spacing: '...r-bound uin...' == Line 520 has weird spacing: '...r-bound uin...' == Line 533 has weird spacing: '...roup-id uin...' == Line 896 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 (2 January 2022) is 839 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 1512, but no explicit reference was found in the text == Unused Reference: 'RFC4750' is defined on line 1520, but no explicit reference was found in the text == Unused Reference: 'RFC5340' is defined on line 1525, but no explicit reference was found in the text == Unused Reference: 'RFC5643' is defined on line 1529, but no explicit reference was found in the text == Unused Reference: 'RFC5838' is defined on line 1533, but no explicit reference was found in the text == Unused Reference: 'RFC7223' is defined on line 1552, but no explicit reference was found in the text == Unused Reference: 'RFC8022' is defined on line 1591, but no explicit reference was found in the text ** 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 (~~), 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: 6 July 2022 Futurewei 6 J. Zhang 7 Juniper Networks 8 I. Chen 9 The MITRE Corporation 10 A. Lindem 11 Cisco Systems 12 2 January 2022 14 YANG Data Model for OSPF Segment Routing 15 draft-ietf-ospf-sr-yang-17 17 Abstract 19 This document defines a YANG data module that can be used to 20 configure and manage OSPF Extensions for Segment Routing. It also 21 defines a module for management of Signaling Maximum SID Depth (MSD) 22 Using OSPF. 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 6 July 2022. 41 Copyright Notice 43 Copyright (c) 2022 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 (https://trustee.ietf.org/ 48 license-info) in effect on the date of publication of this document. 49 Please review these documents carefully, as they describe your rights 50 and restrictions with respect to this document. Code Components 51 extracted from this document must include Revised BSD License text as 52 described in Section 4.e of the Trust Legal Provisions and are 53 provided without warranty as described in the Revised BSD License. 55 Table of Contents 57 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 2 58 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 59 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 60 2. OSPF MSD . . . . . . . . . . . . . . . . . . . . . . . . . . 3 61 2.1. OSPF MSD YANG Module . . . . . . . . . . . . . . . . . . 4 62 3. OSPF Segment Routing . . . . . . . . . . . . . . . . . . . . 11 63 3.1. OSPF Segment Routing YANG Module . . . . . . . . . . . . 16 64 4. Security Considerations . . . . . . . . . . . . . . . . . . . 30 65 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 31 66 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 67 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 68 7.1. Normative References . . . . . . . . . . . . . . . . . . 32 69 7.2. Informative References . . . . . . . . . . . . . . . . . 34 70 Appendix A. Contributors' Addreses . . . . . . . . . . . . . . . 34 71 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 73 1. Overview 75 YANG [RFC7950] is a data definition language used to define the 76 contents of a conceptual data store that allows networked devices to 77 be managed using NETCONF [RFC6241]. YANG is proving relevant beyond 78 its initial confines, as bindings to other interfaces (e.g., ReST) 79 and encodings other than XML (e.g., JSON) are being defined. 80 Furthermore, YANG data models can be used as the basis for 81 implementation of other interfaces, such as CLI and programmatic 82 APIs. 84 This document defines a YANG data model that can be used to configure 85 and manage OSPFv2 extensions for Segment Routing [RFC8665] and it is 86 an augmentation to the OSPF YANG data model. 88 This document also defines a YANG data model for Signaling Maximum 89 SID Depth (MSD) Using OSPF [RFC8476], which augments the base OSPF 90 YANG data model. 92 The YANG module in this document conforms to the Network Management 93 Datastore Architecture (NMDA) [RFC8342]. 95 1.1. Requirements Language 97 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 98 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 99 document are to be interpreted as described in [RFC2119]. 101 1.2. Tree Diagrams 103 This document uses the graphical representation of data models 104 defined in [RFC8340]. 106 2. OSPF MSD 108 This document defines a model for Signaling Maximum SID Depth (MSD) 109 Using OSPF [RFC8476]. It is an augmentation of the OSPF base model. 111 module: ietf-ospf-msd 112 augment /rt:routing/rt:control-plane-protocols 113 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 114 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 115 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 116 /ospf:body/ospf:opaque/ospf:ri-opaque: 117 +--ro node-msd-tlv 118 +--ro node-msds* [msd-type] 119 +--ro msd-type identityref 120 +--ro msd-value? uint8 121 augment /rt:routing/rt:control-plane-protocols 122 /rt:control-plane-protocol/ospf:ospf/ospf:database 123 /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa 124 /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 125 /ospf:ri-opaque: 126 +--ro node-msd-tlv 127 +--ro node-msds* [msd-type] 128 +--ro msd-type identityref 129 +--ro msd-value? uint8 130 augment /rt:routing/rt:control-plane-protocols 131 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 132 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 133 /ospf:area-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3 134 /ospf:body/ospf:router-information: 135 +--ro node-msd-tlv 136 +--ro node-msds* [msd-type] 137 +--ro msd-type identityref 138 +--ro msd-value? uint8 139 augment /rt:routing/rt:control-plane-protocols 140 /rt:control-plane-protocol/ospf:ospf/ospf:database 141 /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa 142 /ospf:version/ospf:ospfv3/ospf:ospfv3/ospf:body 143 /ospf:router-information: 144 +--ro node-msd-tlv 145 +--ro node-msds* [msd-type] 146 +--ro msd-type identityref 147 +--ro msd-value? uint8 148 augment /rt:routing/rt:control-plane-protocols 149 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 150 /ospf:interfaces/ospf:interface/ospf:database 151 /ospf:link-scope-lsa-type/ospf:link-scope-lsas 152 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 153 /ospf:body/ospf:opaque/ospf:extended-link-opaque 154 /ospf:extended-link-tlv: 155 +--ro link-msd-sub-tlv 156 +--ro link-msds* [msd-type] 157 +--ro msd-type identityref 158 +--ro msd-value? uint8 159 augment /rt:routing/rt:control-plane-protocols 160 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 161 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 162 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 163 /ospf:body/ospf:opaque/ospf:extended-link-opaque 164 /ospf:extended-link-tlv: 165 +--ro link-msd-sub-tlv 166 +--ro link-msds* [msd-type] 167 +--ro msd-type identityref 168 +--ro msd-value? uint8 169 augment /rt:routing/rt:control-plane-protocols 170 /rt:control-plane-protocol/ospf:ospf/ospf:database 171 /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa 172 /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 173 /ospf:extended-link-opaque/ospf:extended-link-tlv: 174 +--ro link-msd-sub-tlv 175 +--ro link-msds* [msd-type] 176 +--ro msd-type identityref 177 +--ro msd-value? uint8 178 augment /rt:routing/rt:control-plane-protocols 179 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 180 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 181 /ospf:area-scope-lsa/ospf:version/ospf:ospfv3/ospf:ospfv3 182 /ospf:body/ospfv3-e-lsa:e-router/ospfv3-e-lsa:e-router-tlvs: 183 +--ro link-msd-sub-tlv 184 +--ro link-msds* [msd-type] 185 +--ro msd-type identityref 186 +--ro msd-value? uint8 188 2.1. OSPF MSD YANG Module 189 file "ietf-ospf-msd@2022-01-02.yang" 190 module ietf-ospf-msd { 191 yang-version 1.1; 192 namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-msd"; 193 prefix ospf-msd; 195 import ietf-routing { 196 prefix rt; 197 reference "RFC 8349: A YANG Data Model for Routing 198 Management (NMDA Version)"; 199 } 201 import ietf-ospf { 202 prefix ospf; 203 } 205 import ietf-ospfv3-extended-lsa { 206 prefix ospfv3-e-lsa; 207 } 209 organization 210 "IETF LSR - LSR Working Group"; 211 contact 212 "WG Web: 213 WG List: 215 Author: Yingzhen Qu 216 217 Author: Acee Lindem 218 219 Author: Stephane Litkowski 220 221 Author: Jeff Tantsura 222 224 "; 225 description 226 "The YANG module augments the base OSPF model to 227 manage different types of MSDs. 229 This YANG model conforms to the Network Management 230 Datastore Architecture (NMDA) as described in RFC 8342. 232 Copyright (c) 2022 IETF Trust and the persons identified as 233 authors of the code. All rights reserved. 235 Redistribution and use in source and binary forms, with or 236 without modification, is permitted pursuant to, and subject to 237 the license terms contained in, the Revised BSD License set 238 forth in Section 4.c of the IETF Trust's Legal Provisions 239 Relating to IETF Documents 240 (https://trustee.ietf.org/license-info). 242 This version of this YANG module is part of RFC XXXX; 243 see the RFC itself for full legal notices. 245 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 246 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 247 'MAY', and 'OPTIONAL' in this document are to be interpreted as 248 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 249 they appear in all capitals, as shown here."; 251 reference "RFC XXXX: YANG Data Model for OSPF MSD."; 253 revision 2022-01-02 { 254 description 255 "Initial Version"; 256 reference "RFC XXXX: YANG Data Model for OSPF MSD."; 257 } 259 identity msd-base-type { 260 description 261 "Base identity for MSD Type"; 262 } 264 identity base-mpls-msd { 265 base msd-base-type; 266 description 267 "Base MPLS Imposition MSD."; 268 reference 269 "RFC 8491: Singling MSD using IS-IS."; 270 } 272 identity erld-msd { 273 base msd-base-type; 274 description 275 "ERLD-MSD is defined to advertise the ERLD."; 276 reference 277 "RFC 8662: Entropy Label for Source Packet Routing in 278 Networking (SPRING) Tunnels"; 279 } 281 grouping node-msd-tlv { 282 description 283 "Grouping for node MSD."; 285 container node-msd-tlv { 286 list node-msds { 287 key "msd-type"; 288 leaf msd-type { 289 type identityref { 290 base msd-base-type; 291 } 292 description 293 "MSD-Types"; 294 } 295 leaf msd-value { 296 type uint8; 297 description 298 "MSD value, in the range of 0-255."; 299 } 300 description 301 "Node MSD is the smallest link MSD supported by 302 the node."; 303 } 304 description 305 "Node MSD is the number of SIDs supported by a node."; 306 reference 307 "RFC 8476: Signaling Maximum SID Depth (MSD) Using OSPF"; 308 } 309 } 311 grouping link-msd-sub-tlv { 312 description 313 "Link Maximum SID Depth (MSD) grouping for an interface."; 314 container link-msd-sub-tlv { 315 list link-msds { 316 key "msd-type"; 317 leaf msd-type { 318 type identityref { 319 base msd-base-type; 320 } 321 description 322 "MSD-Types"; 323 } 324 leaf msd-value { 325 type uint8; 326 description 327 "MSD value, in the range of 0-255."; 328 } 329 description 330 "List of link MSDs"; 331 } 332 description 333 "Link MSD sub-tlvs."; 334 } 335 } 337 /* Node MSD TLV */ 338 augment "/rt:routing/" 339 + "rt:control-plane-protocols/rt:control-plane-protocol/" 340 + "ospf:ospf/ospf:areas/" 341 + "ospf:area/ospf:database/" 342 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 343 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 344 + "ospf:ospfv2/ospf:body/ospf:opaque/" 345 + "ospf:ri-opaque" { 346 when "../../../../../../../../../../../" 347 + "rt:type = 'ospf:ospfv2'" { 348 description 349 "This augmentation is only valid for OSPFv2."; 350 } 351 description 352 "Node MSD TLV is an optional TLV of OSPFv2 RI Opaque 353 LSA (RFC7770) and has a type of 12."; 355 uses node-msd-tlv; 356 } 358 augment "/rt:routing/" 359 + "rt:control-plane-protocols/rt:control-plane-protocol/" 360 + "ospf:ospf/ospf:database/" 361 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 362 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 363 + "ospf:ospfv2/ospf:body/ospf:opaque/" 364 + "ospf:ri-opaque" { 365 when "../../../../../../../../../" 366 + "rt:type = 'ospf:ospfv2'" { 367 description 368 "This augmentation is only valid for OSPFv2."; 369 } 370 description 371 "Node MSD TLV is an optional TLV of OSPFv2 RI Opaque 372 LSA (RFC7770) and has a type of 12."; 374 uses node-msd-tlv; 375 } 377 augment "/rt:routing/" 378 + "rt:control-plane-protocols/rt:control-plane-protocol/" 379 + "ospf:ospf/ospf:areas/" 380 + "ospf:area/ospf:database/" 381 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 382 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" 383 + "ospf:ospfv3/ospf:body/ospf:router-information" { 384 when "../../../../../../../../../../" 385 + "rt:type = 'ospf:ospfv3'" { 386 description 387 "This augmentation is only valid for OSPFv3."; 388 } 389 description 390 "Node MSD TLV is an optional TLV of OSPFv3 RI Opaque 391 LSA (RFC7770) and has a type of 12."; 393 uses node-msd-tlv; 394 } 396 augment "/rt:routing/" 397 + "rt:control-plane-protocols/rt:control-plane-protocol/" 398 + "ospf:ospf/ospf:database/" 399 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 400 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv3/" 401 + "ospf:ospfv3/ospf:body/ospf:router-information" { 402 when "../../../../../../../../" 403 + "rt:type = 'ospf:ospfv3'" { 404 description 405 "This augmentation is only valid for OSPFv3."; 406 } 407 description 408 "Node MSD TLV is an optional TLV of OSPFv3 RI Opaque 409 LSA (RFC7770) and has a type of 12."; 411 uses node-msd-tlv; 412 } 414 /* link MSD sub-tlv */ 415 augment "/rt:routing/" 416 + "rt:control-plane-protocols/rt:control-plane-protocol/" 417 + "ospf:ospf/ospf:areas/ospf:area/" 418 + "ospf:interfaces/ospf:interface/ospf:database/" 419 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 420 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 421 + "ospf:ospfv2/ospf:body/ospf:opaque/" 422 + "ospf:extended-link-opaque/ospf:extended-link-tlv" { 423 when "../../../../../../../../../../../../../../" 424 + "rt:type = 'ospf:ospfv2'" { 425 description 426 "This augmentation is only valid for OSPFv2."; 427 } 428 description 429 "Link MSD sub-TLV is an optional sub-TLV of OSPFv2 extended 430 link TLV as defined in RFC 7684 and has a type of 6."; 432 uses link-msd-sub-tlv; 433 } 435 augment "/rt:routing/" 436 + "rt:control-plane-protocols/rt:control-plane-protocol/" 437 + "ospf:ospf/ospf:areas/" 438 + "ospf:area/ospf:database/" 439 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 440 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 441 + "ospf:ospfv2/ospf:body/ospf:opaque/" 442 + "ospf:extended-link-opaque/ospf:extended-link-tlv" { 443 when "../../../../../../../../../../../../" 444 + "rt:type = 'ospf:ospfv2'" { 445 description 446 "This augmentation is only valid for OSPFv2."; 447 } 448 description 449 "Link MSD sub-TLV is an optional sub-TLV of OSPFv2 extended 450 link TLV as defined in RFC 7684 and has a type of 6."; 452 uses link-msd-sub-tlv; 453 } 455 augment "/rt:routing/" 456 + "rt:control-plane-protocols/rt:control-plane-protocol/" 457 + "ospf:ospf/ospf:database/" 458 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 459 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 460 + "ospf:ospfv2/ospf:body/ospf:opaque/" 461 + "ospf:extended-link-opaque/ospf:extended-link-tlv" { 462 when "../../../../../../../../../../" 463 + "rt:type = 'ospf:ospfv2'" { 464 description 465 "This augmentation is only valid for OSPFv2."; 466 } 467 description 468 "Link MSD sub-TLV is an optional sub-TLV of OSPFv2 extended 469 link TLV as defined in RFC 7684 and has a type of 6."; 471 uses link-msd-sub-tlv; 472 } 474 augment "/rt:routing/" 475 + "rt:control-plane-protocols/rt:control-plane-protocol/" 476 + "ospf:ospf/ospf:areas/ospf:area/ospf:database/" 477 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 478 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv3/" 479 + "ospf:ospfv3/ospf:body/ospfv3-e-lsa:e-router" 480 + "/ospfv3-e-lsa:e-router-tlvs" { 481 when "'ospf:../../../../../../../../" 482 + "rt:type' = 'ospf:ospfv3'" { 483 description 484 "This augmentation is only valid for OSPFv3 485 E-Router LSAs"; 486 } 487 description 488 "Augment OSPFv3 Area scope router-link TLV."; 490 uses link-msd-sub-tlv; 491 } 492 } 493 495 3. OSPF Segment Routing 497 This document defines a model for OSPF Segment Routing feature 498 [RFC8665]. It is an augmentation of the OSPF base model. 500 The OSPF SR YANG module requires support for the base segment routing 501 module [RFC9020], which defines the global segment routing 502 configuration independent of any specific routing protocol 503 configuration, and support of OSPF base model[I-D.ietf-ospf-yang] 504 which defines basic OSPF configuration and state. 506 module: ietf-ospf-sr 507 augment /rt:routing/rt:control-plane-protocols 508 /rt:control-plane-protocol/ospf:ospf: 509 +--rw segment-routing 510 | +--rw enabled? boolean 511 | +--rw bindings {mapping-server}? 512 | +--rw advertise 513 | | +--rw policies* -> /rt:routing/sr:segment-routing 514 | | /sr-mpls:sr-mpls/bindings 515 | | /mapping-server/policy/name 516 | +--rw receive? boolean 517 +--rw protocol-srgb {sr-mpls:protocol-srgb}? 518 +--rw srgb* [lower-bound upper-bound] 519 +--rw lower-bound uint32 520 +--rw upper-bound uint32 521 augment /rt:routing/rt:control-plane-protocols 522 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 523 /ospf:interfaces/ospf:interface: 525 +--rw segment-routing 526 +--rw adjacency-sid 527 +--rw adj-sids* [value] 528 | +--rw value-type? enumeration 529 | +--rw value uint32 530 | +--rw protected? boolean 531 | +--rw weight? uint8 532 +--rw advertise-adj-group-sid* [group-id] 533 | +--rw group-id uint32 534 +--rw advertise-protection? enumeration 535 augment /rt:routing/rt:control-plane-protocols 536 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 537 /ospf:interfaces/ospf:interface/ospf:fast-reroute: 538 +--rw ti-lfa {ti-lfa}? 539 +--rw enable? boolean 540 augment /rt:routing/rt:control-plane-protocols 541 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 542 /ospf:interfaces/ospf:interface/ospf:database 543 /ospf:link-scope-lsa-type/ospf:link-scope-lsas 544 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 545 /ospf:body/ospf:opaque/ospf:extended-prefix-opaque: 546 +--ro extended-prefix-range-tlvs 547 +--ro extended-prefix-range-tlv* [] 548 +--ro prefix-length? uint8 549 +--ro af? uint8 550 +--ro range-size? uint16 551 +--ro extended-prefix-range-flags 552 | +--ro bits* identityref 553 +--ro prefix? inet:ip-prefix 554 +--ro prefix-sid-sub-tlvs 555 | +--ro prefix-sid-sub-tlv* [] 556 | +--ro prefix-sid-flags 557 | | +--ro bits* identityref 558 | +--ro mt-id? uint8 559 | +--ro algorithm? uint8 560 | +--ro sid? uint32 561 +--ro unknown-tlvs 562 +--ro unknown-tlv* [] 563 +--ro type? uint16 564 +--ro length? uint16 565 +--ro value? yang:hex-string 566 augment /rt:routing/rt:control-plane-protocols 567 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 568 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 569 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 570 /ospf:body/ospf:opaque/ospf:extended-prefix-opaque: 571 +--ro extended-prefix-range-tlvs 572 +--ro extended-prefix-range-tlv* [] 573 +--ro prefix-length? uint8 574 +--ro af? uint8 575 +--ro range-size? uint16 576 +--ro extended-prefix-range-flags 577 | +--ro bits* identityref 578 +--ro prefix? inet:ip-prefix 579 +--ro prefix-sid-sub-tlvs 580 | +--ro prefix-sid-sub-tlv* [] 581 | +--ro prefix-sid-flags 582 | | +--ro bits* identityref 583 | +--ro mt-id? uint8 584 | +--ro algorithm? uint8 585 | +--ro sid? uint32 586 +--ro unknown-tlvs 587 +--ro unknown-tlv* [] 588 +--ro type? uint16 589 +--ro length? uint16 590 +--ro value? yang:hex-string 591 augment /rt:routing/rt:control-plane-protocols 592 /rt:control-plane-protocol/ospf:ospf/ospf:database 593 /ospf:as-scope-lsa-type/ospf:as-scope-lsas 594 /ospf:as-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 595 /ospf:body/ospf:opaque/ospf:extended-prefix-opaque: 596 +--ro extended-prefix-range-tlvs 597 +--ro extended-prefix-range-tlv* [] 598 +--ro prefix-length? uint8 599 +--ro af? uint8 600 +--ro range-size? uint16 601 +--ro extended-prefix-range-flags 602 | +--ro bits* identityref 603 +--ro prefix? inet:ip-prefix 604 +--ro prefix-sid-sub-tlvs 605 | +--ro prefix-sid-sub-tlv* [] 606 | +--ro prefix-sid-flags 607 | | +--ro bits* identityref 608 | +--ro mt-id? uint8 609 | +--ro algorithm? uint8 610 | +--ro sid? uint32 611 +--ro unknown-tlvs 612 +--ro unknown-tlv* [] 613 +--ro type? uint16 614 +--ro length? uint16 615 +--ro value? yang:hex-string 616 augment /rt:routing/rt:control-plane-protocols 617 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 618 /ospf:interfaces/ospf:interface/ospf:database 619 /ospf:link-scope-lsa-type/ospf:link-scope-lsas 620 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 621 /ospf:body/ospf:opaque/ospf:extended-prefix-opaque 622 /ospf:extended-prefix-tlv: 623 +--ro prefix-sid-sub-tlvs 624 +--ro prefix-sid-sub-tlv* [] 625 +--ro prefix-sid-flags 626 | +--ro bits* identityref 627 +--ro mt-id? uint8 628 +--ro algorithm? uint8 629 +--ro sid? uint32 630 augment /rt:routing/rt:control-plane-protocols 631 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 632 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 633 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 634 /ospf:body/ospf:opaque/ospf:extended-prefix-opaque 635 /ospf:extended-prefix-tlv: 636 +--ro prefix-sid-sub-tlvs 637 +--ro prefix-sid-sub-tlv* [] 638 +--ro prefix-sid-flags 639 | +--ro bits* identityref 640 +--ro mt-id? uint8 641 +--ro algorithm? uint8 642 +--ro sid? uint32 643 augment /rt:routing/rt:control-plane-protocols 644 /rt:control-plane-protocol/ospf:ospf/ospf:database 645 /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa 646 /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 647 /ospf:extended-prefix-opaque/ospf:extended-prefix-tlv: 648 +--ro prefix-sid-sub-tlvs 649 +--ro prefix-sid-sub-tlv* [] 650 +--ro prefix-sid-flags 651 | +--ro bits* identityref 652 +--ro mt-id? uint8 653 +--ro algorithm? uint8 654 +--ro sid? uint32 655 augment /rt:routing/rt:control-plane-protocols 656 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 657 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 658 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 659 /ospf:body/ospf:opaque/ospf:extended-link-opaque 660 /ospf:extended-link-tlv: 661 +--ro adj-sid-sub-tlvs 662 | +--ro adj-sid-sub-tlv* [] 663 | +--ro adj-sid-flags 664 | | +--ro bits* identityref 665 | +--ro mt-id? uint8 666 | +--ro weight? uint8 667 | +--ro sid? uint32 668 +--ro lan-adj-sid-sub-tlvs 669 +--ro lan-adj-sid-sub-tlv* [] 670 +--ro lan-adj-sid-flags 671 | +--ro bits* identityref 672 +--ro mt-id? uint8 673 +--ro weight? uint8 674 +--ro neighbor-router-id? yang:dotted-quad 675 +--ro sid? uint32 676 augment /rt:routing/rt:control-plane-protocols 677 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 678 /ospf:interfaces/ospf:interface/ospf:database 679 /ospf:link-scope-lsa-type/ospf:link-scope-lsas 680 /ospf:link-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 681 /ospf:body/ospf:opaque/ospf:ri-opaque: 682 +--ro sr-algorithm-tlv 683 | +--ro sr-algorithm* uint8 684 +--ro sid-range-tlvs 685 | +--ro sid-range-tlv* [] 686 | +--ro range-size? uint24 687 | +--ro sid-sub-tlv 688 | +--ro sid? uint32 689 +--ro local-block-tlvs 690 | +--ro local-block-tlv* [] 691 | +--ro range-size? uint24 692 | +--ro sid-sub-tlv 693 | +--ro sid? uint32 694 +--ro srms-preference-tlv 695 +--ro preference? uint8 696 augment /rt:routing/rt:control-plane-protocols 697 /rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area 698 /ospf:database/ospf:area-scope-lsa-type/ospf:area-scope-lsas 699 /ospf:area-scope-lsa/ospf:version/ospf:ospfv2/ospf:ospfv2 700 /ospf:body/ospf:opaque/ospf:ri-opaque: 701 +--ro sr-algorithm-tlv 702 | +--ro sr-algorithm* uint8 703 +--ro sid-range-tlvs 704 | +--ro sid-range-tlv* [] 705 | +--ro range-size? uint24 706 | +--ro sid-sub-tlv 707 | +--ro sid? uint32 708 +--ro local-block-tlvs 709 | +--ro local-block-tlv* [] 710 | +--ro range-size? uint24 711 | +--ro sid-sub-tlv 712 | +--ro sid? uint32 713 +--ro srms-preference-tlv 714 +--ro preference? uint8 715 augment /rt:routing/rt:control-plane-protocols 716 /rt:control-plane-protocol/ospf:ospf/ospf:database 717 /ospf:as-scope-lsa-type/ospf:as-scope-lsas/ospf:as-scope-lsa 718 /ospf:version/ospf:ospfv2/ospf:ospfv2/ospf:body/ospf:opaque 719 /ospf:ri-opaque: 720 +--ro sr-algorithm-tlv 721 | +--ro sr-algorithm* uint8 722 +--ro sid-range-tlvs 723 | +--ro sid-range-tlv* [] 724 | +--ro range-size? uint24 725 | +--ro sid-sub-tlv 726 | +--ro sid? uint32 727 +--ro local-block-tlvs 728 | +--ro local-block-tlv* [] 729 | +--ro range-size? uint24 730 | +--ro sid-sub-tlv 731 | +--ro sid? uint32 732 +--ro srms-preference-tlv 733 +--ro preference? uint8 735 3.1. OSPF Segment Routing YANG Module 737 file "ietf-ospf-sr@2022-01-02.yang" 738 module ietf-ospf-sr { 739 yang-version 1.1; 740 namespace "urn:ietf:params:xml:ns:yang:ietf-ospf-sr"; 742 prefix ospf-sr; 744 import ietf-inet-types { 745 prefix "inet"; 746 reference "RFC 6991 - Common YANG Data Types"; 747 } 749 import ietf-yang-types { 750 prefix "yang"; 751 reference "RFC 6991 - Common YANG Data Types"; 752 } 754 import ietf-routing { 755 prefix "rt"; 756 reference "RFC 8349 - A YANG Data Model for Routing 757 Management (NMDA Version)"; 758 } 759 import ietf-segment-routing-common { 760 prefix "sr-cmn"; 761 reference "RFC 9020 - YANG Data Model for Segment 762 Routing"; 764 } 765 import ietf-segment-routing-mpls { 766 prefix "sr-mpls"; 767 reference "RFC 9020 - YANG Data Model for Segment 768 Routing"; 769 } 770 import ietf-ospf { 771 prefix "ospf"; 772 } 774 organization 775 "IETF LSR - Link State Routing Working Group"; 777 contact 778 "WG Web: 779 WG List: 781 Editor: Derek Yeung 782 783 Author: Derek Yeung 784 785 Author: Yingzhen Qu 786 787 Author: Acee Lindem 788 789 Author: Jeffrey Zhang 790 791 Author: Ing-Wher Chen 792 793 Author: Greg Hankins 794 "; 796 description 797 "This YANG module defines the generic configuration 798 and operational state for OSPF Segment Routing, which is 799 common across all of the vendor implementations. It is 800 intended that the module will be extended by vendors to 801 define vendor-specific OSPF Segment Routing configuration 802 and operational parameters and policies. 804 This YANG model conforms to the Network Management 805 Datastore Architecture (NMDA) as described in RFC 8342. 807 Copyright (c) 2022 IETF Trust and the persons identified as 808 authors of the code. All rights reserved. 810 Redistribution and use in source and binary forms, with or 811 without modification, is permitted pursuant to, and subject to 812 the license terms contained in, the Revised BSD License set 813 forth in Section 4.c of the IETF Trust's Legal Provisions 814 Relating to IETF Documents 815 (https://trustee.ietf.org/license-info). 817 This version of this YANG module is part of RFC XXXX 818 (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself 819 for full legal notices. 821 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 822 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 823 'MAY', and 'OPTIONAL' in this document are to be interpreted as 824 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 825 they appear in all capitals, as shown here. 827 This version of this YANG module is part of RFC XXXX; 828 see the RFC itself for full legal notices."; 830 reference "RFC XXXX"; 832 revision 2022-01-02 { 833 description 834 "Initial revision."; 835 reference 836 "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; 837 } 839 feature ti-lfa { 840 description 841 "Topology-Independent Loop-Free Alternate (TI-LFA) 842 computation using segment routing."; 843 } 845 identity prefix-sid-bit { 846 description 847 "Base identity for prefix sid sub-tlv bits."; 848 } 850 identity np-bit { 851 base prefix-sid-bit; 852 description 853 "No-PHP flag."; 854 } 856 identity m-bit { 857 base prefix-sid-bit; 858 description 859 "Mapping server flag."; 860 } 862 identity e-bit { 863 base prefix-sid-bit; 864 description 865 "Explicit-NULL flag."; 866 } 868 identity v-bit { 869 base prefix-sid-bit; 870 description 871 "Value/Index flag."; 872 } 874 identity l-bit { 875 base prefix-sid-bit; 876 description 877 "Local flag."; 878 } 880 identity extended-prefix-range-bit { 881 description 882 "Base identity for extended prefix range TLV bits."; 883 } 885 identity ia-bit { 886 base extended-prefix-range-bit; 887 description 888 "Inter-Area flag. If set, advertisement is of inter-area type."; 889 } 891 identity adj-sid-bit { 892 description 893 "Base identity for adj sid sub-tlv bits."; 894 } 896 identity b-bit { 897 base adj-sid-bit; 898 description 899 "Backup flag."; 900 } 902 identity vi-bit { 903 base adj-sid-bit; 904 description 905 "Value/Index flag."; 906 } 907 identity lo-bit { 908 base adj-sid-bit; 909 description 910 "Local/Global flag."; 911 } 913 identity g-bit { 914 base adj-sid-bit; 915 description 916 "Group flag."; 917 } 919 identity p-bit { 920 base adj-sid-bit; 921 description 922 "Persistent flag."; 923 } 925 typedef uint24 { 926 type uint32 { 927 range "0 .. 16777215"; 928 } 929 description 930 "24-bit unsigned integer."; 931 } 933 /* Groupings */ 934 grouping sid-sub-tlv { 935 description "SID/Label sub-TLV grouping."; 936 container sid-sub-tlv { 937 description 938 "Used to advertise the SID/Label associated with a 939 prefix or adjacency."; 940 leaf sid { 941 type uint32; 942 description 943 "Segment Identifier (SID) - A 20 bit label or 944 32 bit SID."; 945 } 946 } 947 } 949 grouping prefix-sid-sub-tlvs { 950 description "Prefix Segment ID (SID) sub-TLVs."; 951 container prefix-sid-sub-tlvs{ 952 description "Prefix SID sub-TLV."; 953 list prefix-sid-sub-tlv { 954 description "Prefix SID sub-TLV."; 955 container prefix-sid-flags { 956 leaf-list bits { 957 type identityref { 958 base prefix-sid-bit; 959 } 960 description 961 "Prefix SID Sub-TLV flag bits list."; 962 } 963 description "Segment Identifier (SID) Flags."; 964 } 965 leaf mt-id { 966 type uint8; 967 description "Multi-topology ID."; 968 } 969 leaf algorithm { 970 type uint8; 971 description 972 "The algorithm associated with the prefix-SID."; 973 } 974 leaf sid { 975 type uint32; 976 description "An index or label."; 977 } 978 } 979 } 980 } 982 grouping extended-prefix-range-tlvs { 983 description "Extended prefix range TLV grouping."; 985 container extended-prefix-range-tlvs { 986 description "The list of range of prefixes."; 987 list extended-prefix-range-tlv { 988 description "The range of prefixes."; 989 leaf prefix-length { 990 type uint8; 991 description "Length of prefix in bits."; 992 } 993 leaf af { 994 type uint8; 995 description "Address family for the prefix."; 996 } 997 leaf range-size { 998 type uint16; 999 description "The number of prefixes covered by the 1000 advertisement."; 1001 } 1002 container extended-prefix-range-flags { 1003 leaf-list bits { 1004 type identityref { 1005 base extended-prefix-range-bit; 1006 } 1007 description "Extended prefix range TLV flags list."; 1008 } 1009 description "Extended Prefix Range TLV flags."; 1010 } 1011 leaf prefix { 1012 type inet:ip-prefix; 1013 description "Address prefix."; 1014 } 1015 uses prefix-sid-sub-tlvs; 1016 uses ospf:unknown-tlvs; 1017 } 1018 } 1019 } 1021 grouping sr-algorithm-tlv { 1022 description "SR algorithm TLV grouping."; 1023 container sr-algorithm-tlv { 1024 description "All SR algorithm TLVs."; 1025 leaf-list sr-algorithm { 1026 type uint8; 1027 description 1028 "The Segment Routing (SR) algorithms that the router is 1029 currently using."; 1030 } 1031 } 1032 } 1034 grouping sid-range-tlvs { 1035 description "SID Range TLV grouping."; 1036 container sid-range-tlvs { 1037 description "List of SID range TLVs."; 1038 list sid-range-tlv { 1039 description "SID range TLV."; 1040 leaf range-size { 1041 type uint24; 1042 description "The SID range."; 1043 } 1044 uses sid-sub-tlv; 1045 } 1046 } 1047 } 1049 grouping local-block-tlvs { 1050 description "The SR local block TLV contains the 1051 range of labels reserved for local SIDs."; 1052 container local-block-tlvs { 1053 description "List of SRLB TLVs."; 1054 list local-block-tlv { 1055 description "SRLB TLV."; 1056 leaf range-size { 1057 type uint24; 1058 description "The SID range."; 1059 } 1060 uses sid-sub-tlv; 1061 } 1062 } 1063 } 1065 grouping srms-preference-tlv { 1066 description "The SRMS preference TLV is used to advertise 1067 a preference associated with the node that acts 1068 as an SR Mapping Server."; 1069 container srms-preference-tlv { 1070 description "SRMS Preference TLV."; 1071 leaf preference { 1072 type uint8 { 1073 range "0 .. 255"; 1074 } 1075 description "SRMS preference TLV, value from 0 to 255."; 1076 } 1077 } 1078 } 1080 /* Configuration */ 1081 augment "/rt:routing/rt:control-plane-protocols" 1082 + "/rt:control-plane-protocol/ospf:ospf" { 1083 when "../rt:type = 'ospf:ospfv2' or " 1084 + "../rt:type = 'ospf:ospfv3'" { 1085 description 1086 "This augments the OSPF routing protocol when used."; 1087 } 1088 description 1089 "This augments the OSPF protocol configuration 1090 with segment routing."; 1091 uses sr-mpls:sr-control-plane; 1092 container protocol-srgb { 1093 if-feature sr-mpls:protocol-srgb; 1094 uses sr-cmn:srgb; 1095 description 1096 "Per-protocol SRGB."; 1097 } 1098 } 1099 augment "/rt:routing/rt:control-plane-protocols/" 1100 + "rt:control-plane-protocol/ospf:ospf/" 1101 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { 1102 when "../../../../../rt:type = 'ospf:ospfv2' or " 1103 + "../../../../../rt:type = 'ospf:ospfv3'" { 1104 description 1105 "This augments the OSPF interface configuration 1106 when used."; 1107 } 1108 description 1109 "This augments the OSPF protocol interface 1110 configuration with segment routing."; 1112 uses sr-mpls:igp-interface; 1113 } 1115 augment "/rt:routing/rt:control-plane-protocols/" 1116 + "rt:control-plane-protocol/ospf:ospf/" 1117 + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" 1118 + "ospf:fast-reroute" { 1119 when "../../../../../../rt:type = 'ospf:ospfv2' or " 1120 + "../../../../../../rt:type = 'ospf:ospfv3'" { 1121 description 1122 "This augments the OSPF routing protocol when used."; 1123 } 1124 description 1125 "This augments the OSPF protocol IP-FRR with TI-LFA."; 1127 container ti-lfa { 1128 if-feature ti-lfa; 1129 leaf enable { 1130 type boolean; 1131 description 1132 "Enables TI-LFA computation."; 1133 } 1134 description 1135 "Topology Independent Loop Free Alternate 1136 (TI-LFA) support."; 1137 } 1138 } 1140 /* Database */ 1141 augment "/rt:routing/" 1142 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1143 + "ospf:ospf/ospf:areas/ospf:area/" 1144 + "ospf:interfaces/ospf:interface/ospf:database/" 1145 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 1146 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 1147 + "ospf:ospfv2/ospf:body/ospf:opaque/" 1148 + "ospf:extended-prefix-opaque" { 1149 when "../../../../../../../../../../../../../" 1150 + "rt:type = 'ospf:ospfv2'" { 1151 description 1152 "This augmentation is only valid for OSPFv2."; 1153 } 1154 description 1155 "SR specific TLVs for OSPFv2 extended prefix LSA 1156 in type 9 opaque LSA."; 1158 uses extended-prefix-range-tlvs; 1159 } 1161 augment "/rt:routing/" 1162 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1163 + "ospf:ospf/ospf:areas/" 1164 + "ospf:area/ospf:database/" 1165 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 1166 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 1167 + "ospf:ospfv2/ospf:body/ospf:opaque/" 1168 + "ospf:extended-prefix-opaque" { 1169 when "../../../../../../../../../../../" 1170 + "rt:type = 'ospf:ospfv2'" { 1171 description 1172 "This augmentation is only valid for OSPFv2."; 1173 } 1174 description 1175 "SR specific TLVs for OSPFv2 extended prefix LSA 1176 in type 10 opaque LSA."; 1178 uses extended-prefix-range-tlvs; 1179 } 1181 augment "/rt:routing/" 1182 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1183 + "ospf:ospf/ospf:database/" 1184 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 1185 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 1186 + "ospf:ospfv2/ospf:body/ospf:opaque/" 1187 + "ospf:extended-prefix-opaque" { 1188 when "../../../../../../../../../" 1189 + "rt:type = 'ospf:ospfv2'" { 1190 description 1191 "This augmentation is only valid for OSPFv2."; 1192 } 1193 description 1194 "SR specific TLVs for OSPFv2 extended prefix LSA 1195 in type 11 opaque LSA."; 1197 uses extended-prefix-range-tlvs; 1198 } 1200 augment "/rt:routing/" 1201 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1202 + "ospf:ospf/ospf:areas/ospf:area/" 1203 + "ospf:interfaces/ospf:interface/ospf:database/" 1204 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 1205 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 1206 + "ospf:ospfv2/ospf:body/ospf:opaque/" 1207 + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { 1208 when "../../../../../../../../../../../../../../" 1209 + "rt:type = 'ospf:ospfv2'" { 1210 description 1211 "This augmentation is only valid for OSPFv2."; 1212 } 1213 description 1214 "SR specific TLVs for OSPFv2 extended prefix TLV 1215 in type 9 opaque LSA."; 1216 uses prefix-sid-sub-tlvs; 1217 } 1219 augment "/rt:routing/" 1220 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1221 + "ospf:ospf/ospf:areas/" 1222 + "ospf:area/ospf:database/" 1223 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 1224 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 1225 + "ospf:ospfv2/ospf:body/ospf:opaque/" 1226 + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { 1227 when "../../../../../../../../../../../../" 1228 + "rt:type = 'ospf:ospfv2'" { 1229 description 1230 "This augmentation is only valid for OSPFv2."; 1231 } 1232 description 1233 "SR specific TLVs for OSPFv2 extended prefix TLV 1234 in type 10 opaque LSA."; 1235 uses prefix-sid-sub-tlvs; 1236 } 1238 augment "/rt:routing/" 1239 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1240 + "ospf:ospf/ospf:database/" 1241 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 1242 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 1243 + "ospf:ospfv2/ospf:body/ospf:opaque/" 1244 + "ospf:extended-prefix-opaque/ospf:extended-prefix-tlv" { 1245 when "../../../../../../../../../../" 1246 + "rt:type = 'ospf:ospfv2'" { 1247 description 1248 "This augmentation is only valid for OSPFv2."; 1249 } 1250 description 1251 "SR specific TLVs for OSPFv2 extended prefix TLV 1252 in type 11 opaque LSA."; 1253 uses prefix-sid-sub-tlvs; 1254 } 1256 augment "/rt:routing/" 1257 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1258 + "ospf:ospf/ospf:areas/" 1259 + "ospf:area/ospf:database/" 1260 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 1261 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 1262 + "ospf:ospfv2/ospf:body/ospf:opaque/" 1263 + "ospf:extended-link-opaque/ospf:extended-link-tlv" { 1264 when "../../../../../../../../../../../../" 1265 + "rt:type = 'ospf:ospfv2'" { 1266 description 1267 "This augmentation is only valid for OSPFv2."; 1268 } 1269 description 1270 "SR specific TLVs for OSPFv2 extended link TLV 1271 in type 10 opaque LSA."; 1273 container adj-sid-sub-tlvs { 1274 description "Adjacency SID optional sub-TLVs."; 1275 list adj-sid-sub-tlv { 1276 description "List of Adjacency SID sub-TLVs."; 1277 container adj-sid-flags { 1278 leaf-list bits { 1279 type identityref { 1280 base adj-sid-bit; 1281 } 1282 description "Adj sid sub-tlv flags list."; 1283 } 1284 description "Adj-sid sub-tlv flags."; 1285 } 1286 leaf mt-id { 1287 type uint8; 1288 description "Multi-topology ID."; 1289 } 1290 leaf weight { 1291 type uint8; 1292 description "Weight used for load-balancing."; 1293 } 1294 leaf sid { 1295 type uint32; 1296 description "Segment Identifier (SID) index/label."; 1297 } 1298 } 1299 } 1301 container lan-adj-sid-sub-tlvs { 1302 description "LAN Adjacency SID optional sub-TLVs."; 1303 list lan-adj-sid-sub-tlv { 1304 description "List of LAN adjacency SID sub-TLVs."; 1305 container lan-adj-sid-flags { 1306 leaf-list bits { 1307 type identityref { 1308 base adj-sid-bit; 1309 } 1310 description "LAN adj sid sub-tlv flags list."; 1311 } 1312 description "LAN adj-sid sub-tlv flags."; 1313 } 1314 leaf mt-id { 1315 type uint8; 1316 description "Multi-topology ID."; 1317 } 1318 leaf weight { 1319 type uint8; 1320 description "Weight used for load-balancing."; 1321 } 1322 leaf neighbor-router-id { 1323 type yang:dotted-quad; 1324 description "Neighbor router ID."; 1325 } 1326 leaf sid { 1327 type uint32; 1328 description "Segment Identifier (SID) index/label."; 1329 } 1330 } 1331 } 1332 } 1334 augment "/rt:routing/" 1335 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1336 + "ospf:ospf/ospf:areas/ospf:area/" 1337 + "ospf:interfaces/ospf:interface/ospf:database/" 1338 + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" 1339 + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" 1340 + "ospf:ospfv2/ospf:body/ospf:opaque/ospf:ri-opaque" { 1341 when "../../../../../../../../../../../../../" 1342 + "rt:type = 'ospf:ospfv2'" { 1343 description 1344 "This augmentation is only valid for OSPFv2."; 1345 } 1347 description 1348 "SR specific TLVs for OSPFv2 type 9 opaque LSA."; 1350 uses sr-algorithm-tlv; 1351 uses sid-range-tlvs; 1352 uses local-block-tlvs; 1353 uses srms-preference-tlv; 1354 } 1356 augment "/rt:routing/" 1357 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1358 + "ospf:ospf/ospf:areas/" 1359 + "ospf:area/ospf:database/" 1360 + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" 1361 + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" 1362 + "ospf:ospfv2/ospf:body/ospf:opaque/ospf:ri-opaque" { 1363 when "../../../../../../../../../../../" 1364 + "rt:type = 'ospf:ospfv2'" { 1365 description 1366 "This augmentation is only valid for OSPFv2."; 1367 } 1369 description 1370 "SR specific TLVs for OSPFv2 type 10 opaque LSA."; 1372 uses sr-algorithm-tlv; 1373 uses sid-range-tlvs; 1374 uses local-block-tlvs; 1375 uses srms-preference-tlv; 1376 } 1378 augment "/rt:routing/" 1379 + "rt:control-plane-protocols/rt:control-plane-protocol/" 1380 + "ospf:ospf/ospf:database/" 1381 + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" 1382 + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" 1383 + "ospf:ospfv2/ospf:body/ospf:opaque/ospf:ri-opaque" { 1384 when "../../../../../../../../../" 1385 + "rt:type = 'ospf:ospfv2'" { 1386 description 1387 "This augmentation is only valid for OSPFv2."; 1388 } 1389 description 1390 "SR specific TLVs for OSPFv2 type 11 opaque LSA."; 1392 uses sr-algorithm-tlv; 1393 uses sid-range-tlvs; 1394 uses local-block-tlvs; 1395 uses srms-preference-tlv; 1396 } 1397 } 1398 1400 4. Security Considerations 1402 The YANG modules specified in this document define a schema for data 1403 that is designed to be accessed via network management protocols such 1404 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 1405 is the secure transport layer, and the mandatory-to-implement secure 1406 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 1407 is HTTPS, and the mandatory-to-implement secure transport is TLS 1408 [RFC8446]. 1410 The NETCONF Configuration Access Control model (NACM) [RFC8341] 1411 provides the means to restrict access for particular NETCONF or 1412 RESTCONF users to a pre-configured subset of all available NETCONF or 1413 RESTCONF protocol operations and content. 1415 There are a number of data nodes defined in the modules that are 1416 writable/creatable/deletable (i.e., config true, which is the 1417 default). These data nodes may be considered sensitive or vulnerable 1418 in some network environments. Write operations (e.g., edit-config) 1419 to these data nodes without proper protection can have a negative 1420 effect on network operations. These are the subtrees and data nodes 1421 and their sensitivity/vulnerability: 1423 /ospf:ospf/segment-routing/enabled - Modification to the 1424 enablement for SR could result in a Denial-of-Service (Dos) 1425 attack. If an attacker disables SR, it will cause traffic 1426 disruption. 1428 /ospf:ospf/segment-routing/bindings - Modification to the local 1429 bindings could result in a Denial-of-Service (Dos) attack. 1431 /ospf:ospf/protocol-srgb - Modification of the protocol SRGB could 1432 be used to mount a DoS attack. For example, if the protocol SRBG 1433 size is reduced to a very small value, a lot of existing segments 1434 could no longer be installed leading to a traffic disruption. 1436 /ospf:interfaces/ospf:interface/segment-routing - Modification of 1437 the Adjacency Segment Identifier (Adj-SID) could be used to mount 1438 a DoS attack. Change of an Adj-SID could be used to redirect 1439 traffic. 1441 /ospf:interfaces/ospf:interface/ospf:fast-reroute/ti-lfa - 1442 Modification of the TI-LFA enablement could lead to traffic 1443 disruption. 1445 Some of the readable data nodes in the modules may be considered 1446 sensitive or vulnerable in some network environments. It is thus 1447 important to control read access (e.g., via get, get-config, or 1448 notification) to these data nodes. 1450 Both module ietf-ospf-sr and ietf-ospf-msd augment base OSPF module 1451 data base with various TLVs. Knowledge of these data nodes ca be 1452 used to attack other routers in the OSPF domain. 1454 5. Acknowledgements 1456 The authors wish to thank Yi Yang, Alexander Clemm, Gaurav Gupta, 1457 Ladislav Lhotka, Stephane Litkowski, Greg Hankins, Manish Gupta and 1458 Alan Davey for their thorough reviews and helpful comments. 1460 This document was produced using Marshall Rose's xml2rfc tool. 1462 Author affiliation with The MITRE Corporation is provided for 1463 identification purposes only, and is not intended to convey or imply 1464 MITRE's concurrence with, or support for, the positions, opinions or 1465 viewpoints expressed. MITRE has approved this document for Public 1466 Release, Distribution Unlimited, with Public Release Case Number 1467 18-3281. 1469 6. IANA Considerations 1471 This document registers a URI in the IETF XML registry [RFC3688]. 1472 Following the format in [RFC3688], the following registration is 1473 requested to be made: 1475 URI: urn:ietf:params:xml:ns:yang:ietf-ospf-sr 1476 Registrant Contact: The IESG. 1477 XML: N/A, the requested URI is an XML namespace. 1479 URI: urn:ietf:params:xml:ns:yang:ietf-ospf-msd 1480 Registrant Contact: The IESG. 1481 XML: N/A, the requested URI is an XML namespace. 1483 This document registers a YANG module in the YANG Module Names 1484 registry [RFC6020]. 1486 name: ietf-ospf-sr 1487 namespace: urn:ietf:params:xml:ns:yang:ietf-ospf-sr 1488 prefix: ospf-sr 1489 reference: RFC XXXX 1491 name: ietf-ospf-msd 1492 namespace: urn:ietf:params:xml:ns:yang:ietf-ospf-msd 1493 prefix: ospf-msd 1494 reference: RFC XXXX 1496 7. References 1498 7.1. Normative References 1500 [I-D.ietf-ospf-yang] 1501 Yeung, D., Qu, Y., Zhang, J., Chen, I., and A. Lindem, 1502 "YANG Data Model for OSPF Protocol", Work in Progress, 1503 Internet-Draft, draft-ietf-ospf-yang-29, 17 October 2019, 1504 . 1507 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1508 Requirement Levels", BCP 14, RFC 2119, 1509 DOI 10.17487/RFC2119, March 1997, 1510 . 1512 [RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, 1513 DOI 10.17487/RFC2328, April 1998, 1514 . 1516 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1517 DOI 10.17487/RFC3688, January 2004, 1518 . 1520 [RFC4750] Joyal, D., Ed., Galecki, P., Ed., Giacalone, S., Ed., 1521 Coltun, R., and F. Baker, "OSPF Version 2 Management 1522 Information Base", RFC 4750, DOI 10.17487/RFC4750, 1523 December 2006, . 1525 [RFC5340] Coltun, R., Ferguson, D., Moy, J., and A. Lindem, "OSPF 1526 for IPv6", RFC 5340, DOI 10.17487/RFC5340, July 2008, 1527 . 1529 [RFC5643] Joyal, D., Ed. and V. Manral, Ed., "Management Information 1530 Base for OSPFv3", RFC 5643, DOI 10.17487/RFC5643, August 1531 2009, . 1533 [RFC5838] Lindem, A., Ed., Mirtorabi, S., Roy, A., Barnes, M., and 1534 R. Aggarwal, "Support of Address Families in OSPFv3", 1535 RFC 5838, DOI 10.17487/RFC5838, April 2010, 1536 . 1538 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1539 the Network Configuration Protocol (NETCONF)", RFC 6020, 1540 DOI 10.17487/RFC6020, October 2010, 1541 . 1543 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1544 and A. Bierman, Ed., "Network Configuration Protocol 1545 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1546 . 1548 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1549 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1550 . 1552 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 1553 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 1554 . 1556 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1557 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1558 . 1560 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1561 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 1562 . 1564 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 1565 Access Control Model", STD 91, RFC 8341, 1566 DOI 10.17487/RFC8341, March 2018, 1567 . 1569 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 1570 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 1571 . 1573 [RFC8476] Tantsura, J., Chunduri, U., Aldrin, S., and P. Psenak, 1574 "Signaling Maximum SID Depth (MSD) Using OSPF", RFC 8476, 1575 DOI 10.17487/RFC8476, December 2018, 1576 . 1578 [RFC8665] Psenak, P., Ed., Previdi, S., Ed., Filsfils, C., Gredler, 1579 H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF 1580 Extensions for Segment Routing", RFC 8665, 1581 DOI 10.17487/RFC8665, December 2019, 1582 . 1584 [RFC9020] Litkowski, S., Qu, Y., Lindem, A., Sarkar, P., and J. 1585 Tantsura, "YANG Data Model for Segment Routing", RFC 9020, 1586 DOI 10.17487/RFC9020, May 2021, 1587 . 1589 7.2. Informative References 1591 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1592 Management", RFC 8022, DOI 10.17487/RFC8022, November 1593 2016, . 1595 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1596 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1597 . 1599 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1600 and R. Wilton, "Network Management Datastore Architecture 1601 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1602 . 1604 Appendix A. Contributors' Addreses 1606 Dean Bogdanovic 1607 Volta Networks, Inc. 1609 EMail: dean@voltanet.io 1611 Kiran Koushik Agrahara Sreenivasa 1612 Cisco Systems 1613 12515 Research Blvd, Bldg 4 1614 Austin, TX 78681 1615 USA 1617 EMail: kkoushik@cisco.com 1619 Authors' Addresses 1620 Derek Yeung 1621 Arrcus 1623 Email: derek@arrcus.com 1625 Yingzhen Qu 1626 Futurewei 1627 2330 Central Expressway 1628 Santa Clara, CA 95050 1629 United States of America 1631 Email: yingzhen.qu@futurewei.com 1633 Jeffrey Zhang 1634 Juniper Networks 1635 10 Technology Park Drive 1636 Westford, MA 01886 1637 United States of America 1639 Email: zzhang@juniper.net 1641 Ing-Wher Chen 1642 The MITRE Corporation 1644 Email: ingwherchen@mitre.org 1646 Acee Lindem 1647 Cisco Systems 1648 301 Midenhall Way 1649 Cary, NC 27513 1651 Email: acee@cisco.com