idnits 2.17.1 draft-ietf-spring-srv6-yang-01.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: ---------------------------------------------------------------------------- == The page length should not exceed 58 lines per page, but there was 1 longer page, the longest (page 1) being 61 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 9 instances of too long lines in the document, the longest one being 33 characters in excess of 72. ** There is 1 instance of lines with control characters in the document. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 253 has weird spacing: '...address ine...' == Line 304 has weird spacing: '...pported boo...' == Line 307 has weird spacing: '...pported boo...' == Line 315 has weird spacing: '...pported boo...' == Line 318 has weird spacing: '...pported boo...' == (22 more instances...) == The document doesn't use any RFC 2119 keywords, yet has text resembling RFC 2119 boilerplate text. -- Couldn't find a document date in the document -- date freshness check skipped. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'IGP' is mentioned on line 230, but not defined == Outdated reference: A later version (-24) exists of draft-ietf-dmm-srv6-mobile-uplane-17 == Outdated reference: A later version (-09) exists of draft-ietf-spring-sr-service-programming-05 Summary: 2 errors (**), 0 flaws (~~), 12 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 SPRING Working Group K. Raza 2 Internet-Draft S. Agarwal 3 Intended status: Standards Track Cisco Systems 4 Expires: March 13, 2021 5 X. Liu 6 Volta Networks 8 Z. Hu 9 Huawei Technologies 11 I. Hussain 12 Infinera Corporation 14 H. Shah 15 Ciena Corporation 17 D. Voyer 18 Bell Canada 20 S. Matsushima 21 K. Horiba 22 SoftBank 24 H. Elmalky 26 J. Rajamanickam 27 A. AbdelSalam 28 Cisco Systems 30 January 14, 2022 32 YANG Data Model for SRv6 Base and Static 33 draft-ietf-spring-srv6-yang-01 35 Abstract 37 This document describes a YANG data model for Segment Routing IPv6 38 (SRv6) base. The model serves as a base framework for configuring 39 and managing an SRv6 subsystem and expected to be augmented by other 40 SRv6 technology models accordingly. Additionally, this document also 41 specifies the model for the SRv6 Static application. 43 The YANG modules in this document conform to the Network Management 44 Datastore Architecture (NMDA). 46 Status of This Memo 48 This Internet-Draft is submitted in full conformance with the 49 provisions of BCP 78 and BCP 79. 51 Internet-Drafts are working documents of the Internet Engineering 52 Task Force (IETF). Note that other groups may also distribute 53 working documents as Internet-Drafts. The list of current Internet- 54 Drafts is at https://datatracker.ietf.org/drafts/current/. 56 Internet-Drafts are draft documents valid for a maximum of six months 57 and may be updated, replaced, or obsoleted by other documents at any 58 time. It is inappropriate to use Internet-Drafts as reference 59 material or to cite them other than as "work in progress." 61 This Internet-Draft will expire on July 18, 2022. 63 Copyright Notice 65 Copyright (c) 2022 IETF Trust and the persons identified as the 66 document authors. All rights reserved. 68 This document is subject to BCP 78 and the IETF Trust's Legal 69 Provisions Relating to IETF Documents 70 (https://trustee.ietf.org/license-info) in effect on the date of 71 publication of this document. Please review these documents 72 carefully, as they describe your rights and restrictions with respect 73 to this document. Code Components extracted from this document must 74 include Simplified BSD License text as described in Section 4.e of 75 the Trust Legal Provisions and are provided without warranty as 76 described in the Simplified BSD License. 78 Table of Contents 80 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 81 2. Specification of Requirements . . . . . . . . . . . . . . . . 3 82 3. YANG Model . . . . . . . . . . . . . . . . . . . . . . . . . 4 83 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 84 3.2. SRv6 Types . . . . . . . . . . . . . . . . . . . . . . . 4 85 3.3. SRv6 Base . . . . . . . . . . . . . . . . . . . . . . . . 5 86 3.3.1. Configuration . . . . . . . . . . . . . . . . . . . . 5 87 3.3.2. State . . . . . . . . . . . . . . . . . . . . . . . . 6 88 3.3.3. Notification . . . . . . . . . . . . . . . . . . . . 8 89 3.4. SRv6 Static . . . . . . . . . . . . . . . . . . . . . . . 9 90 3.4.1. Configuration . . . . . . . . . . . . . . . . . . . . 9 91 3.4.2. State . . . . . . . . . . . . . . . . . . . . . . . . 15 92 3.4.3. Notification . . . . . . . . . . . . . . . . . . . . 15 93 4. Pending Items . . . . . . . . . . . . . . . . . . . . . . . . 15 94 5. YANG Specification . . . . . . . . . . . . . . . . . . . . . 15 95 5.1. SRv6 Types . . . . . . . . . . . . . . . . . . . . . . . 15 96 5.2. SRv6 Base . . . . . . . . . . . . . . . . . . . . . . . . 31 97 5.3. SRv6 Static . . . . . . . . . . . . . . . . . . . . . . . 47 98 6. Security Considerations . . . . . . . . . . . . . . . . . . . 70 99 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 71 100 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 71 101 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 72 102 9.1. Normative References . . . . . . . . . . . . . . . . . . 72 103 9.2. Informative References . . . . . . . . . . . . . . . . . 74 105 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74 107 1. Introduction 109 The Network Configuration Protocol (NETCONF) [RFC6241] is one of the 110 network management protocols that defines mechanisms to manage 111 network devices. YANG [RFC6020] is a modular language that 112 represents data structures in an XML tree format, and is used as a 113 data modeling language for the NETCONF. 115 Segment Routing (SR), as defined in [RFC8402], leverages the source 116 routing paradigm where a node steers a packet through an ordered list 117 of instructions, called segments. SR, thus, allows enforcing a flow 118 through any topological path and/or service chain while maintaining 119 per-flow state only at the ingress nodes to the SR domain. When 120 applied to ipv6 data-plane (i.e. SRv6), SR requires a type of 121 routing header (SRH) in an IPv6 packet that is used to encode an 122 ordered list of IPv6 addresses (SIDs). The active segment is 123 indicated by the Destination Address of the packet, and the next 124 segment is indicated by a pointer in the SRH [RFC8754]. The various 125 functions and behaviors corresponding to network programming using 126 SRv6 are specified in [RFC8986]. 128 This document introduces a YANG data model for base SRv6 that would 129 serve as a base framework for configuring and managing an SRv6 130 subsystem. As needed, other SRv6 technology models (e.g. ISIS, 131 OSPFv3, BGP, EVPN, Service Chaining) may augment this model. 132 Furthermore, to illustrate basic behaviors as captured in [RFC8986], 133 this document also specifies a YANG model for the SRv6-Static 134 application. 136 The model currently defines the following constructs that are used 137 for managing SRv6: 139 o Configuration 141 o Operational State 143 o Notifications 145 2. Specification of Requirements 147 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 148 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 149 document are to be interpreted as described in BCP 14 [RFC2119] 150 [RFC8174] when, and only when, they appear in all capitals, as shown 151 here. 153 3. YANG Model 155 3.1. Overview 157 This document defines following three new YANG modules: 159 o ietf-srv6-types: defines common and basic types related to SRv6 161 o ietf-srv6-base: specifies management model for SRv6 base 162 constructs (locator, SIDs, etc.) 164 o ietf-srv6-static: specifies management model for SRv6-static 165 application 167 The modeling in this document complies with the Network Management 168 Datastore Architecture (NMDA) defined in [RFC8342]. The operational 169 state data is combined with the associated configuration data in the 170 same hierarchy [RFC8407]. When protocol states are retrieved from 171 the NMDA operational state datastore, the returned states cover all 172 "config true" (rw) and "config false" (ro) nodes defined in the 173 schema. 175 In this document, when a simplified graphical representation of YANG 176 model is presented in a tree diagram, the meaning of the symbols in 177 these tree diagrams is defined in [RFC8340]. 179 3.2. SRv6 Types 181 SRv6 common types and definitions are defined in the new module 182 "ietf-srv6-types". The main types defined in this module include: 184 o srv6-sid: SRv6 SID 186 o srv6-func-value: Typedef for FUNC value in an SRv6 SID 188 o srv6-func-value-reserved-type: Enum (list) of "reserved" FUNC 189 opcode 191 o srv6-endpoint-type: SRv6 Endpoint behaviors [RFC8986] identity 192 type 194 o srv6-headend-type: SRv6 Headend behaviors [RFC8986] identity 195 type 197 o srv6-security-type: SRv6 Security rules identity 198 type 200 o srv6-counter-type: SRv6 Counter type [RFC8986] identity type 201 The corresponding YANG specification for this module is captured in 202 Section 5.1. 204 3.3. SRv6 Base 206 The base SRv6 model is specified in ietf-srv6-base module. This 207 module augments "/rt:routing:/sr:segment-routing" [RFC9020] and 208 specifies the configuration, operational state, and notification 209 events that are required to manage the base SRv6. 211 The corresponding YANG specification for this module is captured in 212 Section 5.2. 214 3.3.1. Configuration 216 The module defines some fundamental items required to configure an 217 SRv6 network: 219 o SRv6 Enablement: Enable Segment-Routing SRv6 feature 221 o Encapsulation Parameters: Provide encapsulation related parameters 222 (such as source-address, hop-limit, and traffic-class) to be used 223 when performing T.Encap* operation. 225 o Locator(s) Specification: SRv6 locator is a fundamental construct 226 for an SRv6 network. This is the construct from which SID 227 (function values) are allocated that on the local box, and 228 advertised to and used by remote nodes for reachability. A 229 locator is identified by a name and has associated prefix and 230 [IGP] algorithm. It can be configured as an anycast locator. It 231 is possible to have more than one locator on a node (e.g. locator 232 per algorithm, anycast and non-anycast locators, etc.). 234 Following is a simplified graphical tree representation of the data 235 model for SRv6 base configuration 236 module: ietf-srv6-base 237 augment /rt:routing/sr:segment-routing: 238 +--rw srv6 239 +--rw enable? boolean 240 +--rw encapsulation 241 | +--rw source-address? inet:ipv6-address 242 | +--rw hop-limit 243 | | +--rw value? uint8 244 | | +--rw propagate? boolean 245 | +--rw traffic-class 246 | +--rw value? uint8 247 | +--rw propagate? boolean 248 +--rw locators 249 +--rw locator* [name] 250 +--rw name string 251 +--rw enable? boolean 252 +--rw prefix 253 | +--rw address inet:ipv6-address 254 | +--rw length srv6-types:srv6-locator-len 255 +--rw algorithm? uint32 256 +--rw anycast? boolean 258 Figure 1: SRv6 Base - Config Tree 260 3.3.2. State 262 As per NMDA model, the state related to configuration items specified 263 in above section Section 3.3.1 can be retrieved from the same tree. 264 This section defines other operational state items related to SRv6 265 base. 267 The operational state corresponding to the SRv6 base includes: 269 o node capabilities: provides information on the node (hardware) 270 capabilities and support regarding various SRv6 aspects and 271 features including endpoint behaviors, headend behaviors, security 272 rules, counter/stats support, and other SRv6 parameters that need 273 to be signaled in an SRv6 network by the protocols. 275 o locator: provides information related to a locator. The 276 information includes locator operational state, and state of 277 address conflict with any ipv6 address configured on local 278 interfaces etc. 280 o local-sid: provides information related to local-SIDs allocated 281 and/or installed on the node. This includes two types of 282 information: 284 1. aggregate across all local-SIDs such as aggregate counters 286 2. per local-SID information such as allocation type (dynamic or 287 explicit), SID owner protocol(s)/client(s), forwarding [paths] 288 information, and stats/counters. 290 Following is a simplified graphical tree representation of the data 291 model for the SRv6 operational state (for read-only items): 293 module: ietf-srv6-base 294 augment /rt:routing/sr:segment-routing: 295 +--rw srv6 296 +--rw locators 297 | +--rw locator* [name] 298 | +--rw name string 299 | +--ro operational-status? srv6-types:srv6-status-type 300 | +--ro is-in-address-conflict? boolean 301 +--ro node-capabilities 302 | +--ro end-behavior* [type] 303 | | +--ro type identityref 304 | | +--ro supported boolean 305 | +--ro headend-behavior* [type] 306 | | +--ro type identityref 307 | | +--ro supported boolean 308 | +--ro msd 309 | | +--ro max-sl? uint8 310 | | +--ro max-end-pop? uint8 311 | | +--ro max-h_encap? uint8 312 | | +--ro max-end_d? uint8 313 | +--ro security-rule* [type] 314 | | +--ro type identityref 315 | | +--ro supported boolean 316 | +--ro counters* [type] 317 | +--ro type identityref 318 | +--ro supported boolean 319 +--ro local-sids 320 +--ro counters 321 | +--ro cnt-3 322 | +--ro in-pkts? yang:counter64 323 | +--ro in-octets? yang:counter64 324 +--ro local-sid* [sid] 325 +--ro sid srv6-types:srv6-sid 326 +--ro locator? -> /rt:routing/sr:segment-routing/srv6:srv6/locators/locator/name 327 +--ro is-reserved? boolean 328 +--ro end-behavior-type? identityref 329 +--ro alloc-type? srv6-types:sid-alloc-type 330 +--ro owner* [type instance] 331 | +--ro type identityref 332 | +--ro instance string 333 | +--ro is-winner? boolean 334 +--ro forwarding 335 | +--ro is-installed? boolean 336 | +--ro next-hop-type? srv6-types:srv6-nexthop-type 337 | +--ro paths 338 | +--ro path* [path-index] 339 | +--ro path-index uint8 340 | +--ro l2 341 | | +--ro interface? if:interface-ref 342 | +--ro l3 343 | | +--ro interface? if:interface-ref 344 | | +--ro next-hop? inet:ip-address 345 | | +--ro weight? uint32 346 | | +--ro role? enumeration 347 | | +--ro backup-path-index? uint8 348 | +--ro (encap-type)? 349 | +--:(srv6) 350 | | +--ro out-sid* [sid] 351 | | +--ro sid srv6-types:srv6-sid 352 | +--:(mpls) 353 | +--ro out-label* [label] 354 | +--ro label rt-types:mpls-label 355 +--ro counters 356 +--ro cnt-1 357 +--ro in-pkts? yang:counter64 358 +--ro in-octets? yang:counter64 360 Figure 2: SRv6 Base - State Tree 362 3.3.3. Notification 364 This model defines a list of notifications to inform an operator of 365 important events detected during the SRv6 operation. These events 366 include events related to: 368 o locator operational state changes 370 o local-SID collision event 372 Following is a simplified graphical tree representation of the data 373 model for SRv6 notifications: 375 module: ietf-srv6-base 377 notifications: 378 +---n srv6-locator-status-event 379 | +--ro operational-status? srv6-types:srv6-status-type 380 | +--ro locator? -> /rt:routing/sr:segment-routing/srv6:srv6/locators/locator/name 381 +---n srv6-sid-collision-event 382 +--ro sid? srv6-types:srv6-sid 383 +--ro existing 384 | +--ro end-behavior-type? identityref 385 +--ro requested 386 +--ro end-behavior-type? identityref 388 Figure 3: SRv6 Base - Notification Tree 390 3.4. SRv6 Static 392 SRv6-Static application allows a user to specify SRv6 local SIDs and 393 program them in the forwarding plane. The SRv6-Static model is 394 captured in the ietf-srv6-static module. 396 The associated YANG specification for this module is captured in 397 Section 5.3. 399 3.4.1. Configuration 401 The SRv6-Static configuration augments the SRv6-base locator tree 402 "/rt:routing/sr:segment-routing/srv6:srv6/srv6:locators/srv6:locator" 404 Following are salient features of the SRv6-Static config model: 406 o Allows static (explicit) configuration for local-SIDs under a 407 given locator. 409 o Given that entry is scoped under a locator, the key for each entry 410 is "function" value. 412 o A user must also specify end-behavior type (End*) associated with 413 the entry. 415 o A user must also specify behavior-specific data with each entry. 416 For example, for any end behavior requiring a table lookup, a 417 lookup-table need be provided. Similarly, for any end behavior 418 with forwarding next-hops need to specify next-hop information. 419 The example of former include End, End.T, End.DT4, End.DT6, and 420 End.DT46, whereas example of later include End.X, End.DX4, 421 End.DX6, End.B6, End.BM etc. 423 o Each local-SID entry has zero or more forwarding paths specified. 425 o A forwarding path has next-hop type that depends on the end 426 behavior, and could be either ipv6, or ipv4, or mpls, or l2 type. 427 For example, End.X, End.DX4, End.DX6, End.B6, End.BM, and End.DX2 428 will have ipv6, ipv4, ipv6, ipv6, mpls, and l2 next-hop types 429 respectively 431 o For each forwarding next-hop type, the appropriate path attributes 432 are to be specified as well. For L2 type, the only other 433 information required is the L2 interface name. Whereas for L3 434 (ipv6, ipv4, mpls) types, the information includes L3 interface 435 name, next-hop IP address, weight, and protection information. 437 o Depending on the end behavior type, a forwarding path may have 438 either MPLS or SRv6 encapsulation -- i.e., Stack of out-labels or 439 Stack of SRv6 out-SIDs. The example of former is End.BM and 440 example of later include the rest (End.X, End.DX4, End.DX6, End.B6 441 etc.). 443 Following is a simplified graphical tree representation of the data 444 model for SRv6 Static configuration 446 module: ietf-srv6-static 447 augment /rt:routing/sr:segment-routing/srv6:srv6/srv6:locators/srv6:locator: 448 +--rw static 449 +--rw local-sids 450 +--rw sid* [function] 451 +--rw function srv6-types:srv6-func-value 452 +--rw end-behavior-type identityref 453 +--rw end 454 +--rw end_psp 455 +--rw end_usp 456 +--rw end_psp_usp 457 +--rw end_usd 458 +--rw end_psp_usd 459 +--rw end_usp_usd 460 +--rw end_psp_usp_usd 461 +--rw end-t 462 | +--rw lookup-table-ipv6 srv6-types:table-id 463 +--rw end-t_psp 464 | +--rw lookup-table-ipv6 srv6-types:table-id 465 +--rw end-t_usp 466 | +--rw lookup-table-ipv6 srv6-types:table-id 467 +--rw end-t_psp_usp 468 | +--rw lookup-table-ipv6 srv6-types:table-id 469 +--rw end-t_usd 470 | +--rw lookup-table-ipv6 srv6-types:table-id 471 +--rw end-t_psp_usd 472 | +--rw lookup-table-ipv6 srv6-types:table-id 473 +--rw end-t_usp_usd 474 | +--rw lookup-table-ipv6 srv6-types:table-id 475 +--rw end-t_psp_usp_usd 476 | +--rw lookup-table-ipv6 srv6-types:table-id 477 +--rw end-x 478 | +--rw protected? boolean 479 | +--rw paths 480 | +--rw path* [path-index] 481 | +--rw path-index uint8 482 | +--rw interface? if:interface-ref 483 | +--rw next-hop? inet:ipv6-address 484 | +--rw table? srv6-types:table-id 485 | +--rw weight? uint32 486 | +--rw role? enumeration 487 | +--rw backup-path-index? uint8 488 | +--rw sid-list 489 | +--rw out-sid* [sid] 490 | +--rw sid srv6-types:srv6-sid 491 +--rw end-x_psp 492 | +--rw protected? boolean 493 | +--rw paths 494 | +--rw path* [path-index] 495 | +--rw path-index uint8 496 | +--rw interface? if:interface-ref 497 | +--rw next-hop? inet:ipv6-address 498 | +--rw table? srv6-types:table-id 499 | +--rw weight? uint32 500 | +--rw role? enumeration 501 | +--rw backup-path-index? uint8 502 | +--rw sid-list 503 | +--rw out-sid* [sid] 504 | +--rw sid srv6-types:srv6-sid 505 +--rw end-x_usp 506 | +--rw protected? boolean 507 | +--rw paths 508 | +--rw path* [path-index] 509 | +--rw path-index uint8 510 | +--rw interface? if:interface-ref 511 | +--rw next-hop? inet:ipv6-address 512 | +--rw table? srv6-types:table-id 513 | +--rw weight? uint32 514 | +--rw role? enumeration 515 | +--rw backup-path-index? uint8 516 | +--rw sid-list 517 | +--rw out-sid* [sid] 518 | +--rw sid srv6-types:srv6-sid 519 +--rw end-x_psp_usp 520 | +--rw protected? boolean 521 | +--rw paths 522 | +--rw path* [path-index] 523 | +--rw path-index uint8 524 | +--rw interface? if:interface-ref 525 | +--rw next-hop? inet:ipv6-address 526 | +--rw table? srv6-types:table-id 527 | +--rw weight? uint32 528 | +--rw role? enumeration 529 | +--rw backup-path-index? uint8 530 | +--rw sid-list 531 | +--rw out-sid* [sid] 532 | +--rw sid srv6-types:srv6-sid 533 +--rw end-x_usd 534 | +--rw protected? boolean 535 | +--rw paths 536 | +--rw path* [path-index] 537 | +--rw path-index uint8 538 | +--rw interface? if:interface-ref 539 | +--rw next-hop? inet:ipv6-address 540 | +--rw table? srv6-types:table-id 541 | +--rw weight? uint32 542 | +--rw role? enumeration 543 | +--rw backup-path-index? uint8 544 | +--rw sid-list 545 | +--rw out-sid* [sid] 546 | +--rw sid srv6-types:srv6-sid 547 +--rw end-x_psp_usd 548 | +--rw protected? boolean 549 | +--rw paths 550 | +--rw path* [path-index] 551 | +--rw path-index uint8 552 | +--rw interface? if:interface-ref 553 | +--rw next-hop? inet:ipv6-address 554 | +--rw table? srv6-types:table-id 555 | +--rw weight? uint32 556 | +--rw role? enumeration 557 | +--rw backup-path-index? uint8 558 | +--rw sid-list 559 | +--rw out-sid* [sid] 560 | +--rw sid srv6-types:srv6-sid 561 +--rw end-x_usp_usd 562 | +--rw protected? boolean 563 | +--rw paths 564 | +--rw path* [path-index] 565 | +--rw path-index uint8 566 | +--rw interface? if:interface-ref 567 | +--rw next-hop? inet:ipv6-address 568 | +--rw table? srv6-types:table-id 569 | +--rw weight? uint32 570 | +--rw role? enumeration 571 | +--rw backup-path-index? uint8 572 | +--rw sid-list 573 | +--rw out-sid* [sid] 574 | +--rw sid srv6-types:srv6-sid 575 +--rw end-x_psp_usp_usd 576 | +--rw protected? boolean 577 | +--rw paths 578 | +--rw path* [path-index] 579 | +--rw path-index uint8 580 | +--rw interface? if:interface-ref 581 | +--rw next-hop? inet:ipv6-address 582 | +--rw table? srv6-types:table-id 583 | +--rw weight? uint32 584 | +--rw role? enumeration 585 | +--rw backup-path-index? uint8 586 | +--rw sid-list 587 | +--rw out-sid* [sid] 588 | +--rw sid srv6-types:srv6-sid 589 +--rw end-b6-encaps 590 | +--rw policy-name string 591 | +--rw source-address inet:ipv6-address 592 | +--rw paths 593 | +--rw path* [path-index] 594 | +--rw path-index uint8 595 | +--rw interface? if:interface-ref 596 | +--rw next-hop? inet:ipv6-address 597 | +--rw table? srv6-types:table-id 598 | +--rw weight? uint32 599 | +--rw role? enumeration 600 | +--rw backup-path-index? uint8 601 | +--rw sid-list 602 | +--rw out-sid* [sid] 603 | +--rw sid srv6-types:srv6-sid 604 +--rw end-bm 605 | +--rw policy-name string 606 | +--rw paths 607 | +--rw path* [path-index] 608 | +--rw path-index uint8 609 | +--rw interface? if:interface-ref 610 | +--rw next-hop? inet:ip-address 611 | +--rw weight? uint32 612 | +--rw role? enumeration 613 | +--rw backup-path-index? uint8 614 | +--rw sid-list 615 | +--rw out-sid* [sid] 616 | +--rw sid srv6-types:srv6-sid 617 +--rw end-dx6 618 | +--rw paths 619 | +--rw path* [path-index] 620 | +--rw path-index uint8 621 | +--rw interface? if:interface-ref 622 | +--rw next-hop? inet:ipv6-address 623 | +--rw table? srv6-types:table-id 624 | +--rw weight? uint32 625 | +--rw role? enumeration 626 | +--rw backup-path-index? uint8 627 | +--rw sid-list 628 | +--rw out-sid* [sid] 629 | +--rw sid srv6-types:srv6-sid 630 +--rw end-dx4 631 | +--rw paths 632 | +--rw path* [path-index] 633 | +--rw path-index uint8 634 | +--rw interface? if:interface-ref 635 | +--rw next-hop? inet:ipv4-address 636 | +--rw table? srv6-types:table-id 637 | +--rw weight? uint32 638 | +--rw role? enumeration 639 | +--rw backup-path-index? uint8 640 | +--rw sid-list 641 | +--rw out-sid* [sid] 642 | +--rw sid srv6-types:srv6-sid 643 +--rw end-dt6 644 | +--rw lookup-table-ipv6 srv6-types:table-id 645 +--rw end-dt4 646 | +--rw lookup-table-ipv4 srv6-types:table-id 647 +--rw end-dt46 648 | +--rw lookup-table-ipv4 srv6-types:table-id 649 | +--rw lookup-table-ipv6 srv6-types:table-id 650 +--rw end-dx2 651 | +--rw path 652 | +--rw l2-interface if:interface-ref 653 +--rw end-dx2v 654 | +--rw lookup-table-vlan srv6-types:table-id 655 +--rw end-dt2u 656 | +--rw lookup-table-mac srv6-types:table-id 657 +--rw end-dt2m 658 +--rw flooding-table srv6-types:table-id 659 +--rw paths 660 +--rw path* [path-index] 661 +--rw path-index uint8 662 +--rw l2-interface? if:interface-ref 664 Figure 4: SRv6 Static - Config Tree 666 3.4.2. State 668 As per NMDA model, the state related to configuration items specified 669 in above section Section 3.4.1 can be retrieved from the same tree. 670 The state regarding the local-SIDs created by SRv6-static model can 671 be obtained using the state model of SRv6-base. Hence, there is no 672 additional state identified at this time for SRv6-static. 674 3.4.3. Notification 676 None. 678 4. Pending Items 680 Following are the items that will be addressed in next revisions: 682 o Extend local-SID collision event/notification in SRv6-base model. 684 o Add RPC support in the SRv6-base model. 686 o Add ARGS support in the SRv6-Static model. 688 o QoS support 690 5. YANG Specification 692 Following are actual YANG definition for SRv6 modules defined earlier 693 in the document. 695 5.1. SRv6 Types 697 This YANG module imports types defined in [RFC6991]. 699 Moreover, the module models behaviors defined in [RFC8986], 700 [I-D.ietf-spring-sr-service-programming], and 701 [I-D.ietf-dmm-srv6-mobile-uplane]. 703 file "ietf-srv6-types@2022-01-14.yang" 705 // RFC Editor: replace the above date with the date of 706 // publication and remove this note. 708 module ietf-srv6-types { 709 yang-version 1.1; 711 namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-types"; 712 prefix srv6-types; 714 import ietf-inet-types { 715 prefix inet; 716 reference "RFC 6991: Common YANG Data Types"; 717 } 719 organization 720 "IETF SPRING Working Group"; 721 contact 722 "WG Web: 723 WG List: 725 Editor: Kamran Raza 726 728 Editor: Jaganbabu Rajamanickam 729 731 Editor: Xufeng Liu 732 734 Editor: Zhibo Hu 735 737 Editor: Iftekhar Hussain 738 740 Editor: Himanshu Shah 741 743 Editor: Daniel Voyer 744 746 Editor: Hani Elmalky 747 749 Editor: Satoru Matsushima 750 752 Editor: Katsuhiro Horiba 753 755 Editor: Ahmed AbdelSalam 756 758 "; 760 description 761 "This YANG module defines the essential types for the 762 management of Segment-Routing with IPv6 dataplane (SRv6). 764 Copyright (c) 2018 IETF Trust and the persons identified as 765 authors of the code. All rights reserved. 767 Redistribution and use in source and binary forms, with or 768 without modification, is permitted pursuant to, and subject 769 to the license terms contained in, the Simplified BSD License 770 set forth in Section 4.c of the IETF Trust's Legal Provisions 771 Relating to IETF Documents 772 (http://trustee.ietf.org/license-info)."; 774 reference "RFC XXXX"; 775 // RFC Editor: replace XXXX with actual RFC number and remove 776 // this note 778 revision 2022-01-14 { 779 description 780 "Alignment with SRv6 net-pgm rev16"; 781 reference 782 "RFC XXXX: YANG Data Model for SRv6"; 783 // RFC Editor: replace XXXX with actual RFC number and remove 784 // this note 785 } 787 revision 2019-10-30 { 788 description 789 "Renaming of some types"; 790 reference 791 "RFC XXXX: YANG Data Model for SRv6"; 792 // RFC Editor: replace XXXX with actual RFC number and remove 793 // this note 794 } 796 revision 2019-07-08 { 797 description 798 "Alignment with latest SRv6 network programming"; 799 reference 800 "RFC XXXX: YANG Data Model for SRv6"; 801 // RFC Editor: replace XXXX with actual RFC number and remove 802 // this note 804 } 806 revision 2018-10-22 { 807 description 808 "Initial revision."; 809 reference 810 "RFC XXXX: YANG Data Model for SRv6"; 811 // RFC Editor: replace XXXX with actual RFC number and remove 812 // this note 813 } 815 identity srv6-endpoint-type { 816 description 817 "Base identity from which specific SRv6 Endpoint types are 818 derived."; 819 } 821 /* Endpoints defined under draft-ietf-spring- 822 * srv6-network-programming */ 824 identity End { 825 base srv6-endpoint-type; 826 description 827 "End function (variant: no PSP, no USP)."; 828 reference 829 "RFC 8986"; 830 } 832 identity End_PSP { 833 base srv6-endpoint-type; 834 description 835 "End function (variant: PSP only)."; 836 reference 837 "RFC 8986"; 838 } 840 identity End_USP { 841 base srv6-endpoint-type; 842 description 843 "End function (variant: USP only)."; 844 reference 845 "RFC 8986"; 846 } 848 identity End_PSP_USP { 849 base srv6-endpoint-type; 850 description 851 "End function (variant: PSP and USP)."; 853 reference 854 "RFC 8986"; 855 } 857 identity End.X { 858 base srv6-endpoint-type; 859 description 860 "Endpoint with cross-connect to an array 861 of layer-3 adjacencies (variant: no PSP, no USP)."; 862 reference 863 "RFC 8986"; 864 } 866 identity End.X_PSP { 867 base srv6-endpoint-type; 868 description 869 "Endpoint with cross-connect to an array 870 of layer-3 adjacencies (variant: PSP only)."; 871 reference 872 "RFC 8986"; 873 } 875 identity End.X_USP { 876 base srv6-endpoint-type; 877 description 878 "Endpoint with cross-connect to an array 879 of layer-3 adjacencies (variant: USP only)."; 880 reference 881 "RFC 8986"; 882 } 884 identity End.X_PSP_USP { 885 base srv6-endpoint-type; 886 description 887 "Endpoint with cross-connect to an array 888 of layer-3 adjacencies (variant: PSP and USP)."; 889 reference 890 "RFC 8986"; 891 } 893 identity End.T { 894 base srv6-endpoint-type; 895 description 896 "Endpoint with specific IPv6 table lookup 897 (variant: no PSP, no USP)."; 898 reference 899 "RFC 8986"; 900 } 901 identity End.T_PSP { 902 base srv6-endpoint-type; 903 description 904 "Endpoint with specific IPv6 table lookup 905 (variant: PSP only)."; 906 reference 907 "RFC 8986"; 908 } 910 identity End.T_USP { 911 base srv6-endpoint-type; 912 description 913 "Endpoint with specific IPv6 table lookup 914 (variant: USP only)."; 915 reference 916 "RFC 8986"; 917 } 919 identity End.T_PSP_USP { 920 base srv6-endpoint-type; 921 description 922 "Endpoint with specific IPv6 table lookup 923 (variant: PSP and USP)."; 924 reference 925 "RFC 8986"; 926 } 928 identity End.B6.Encaps { 929 base srv6-endpoint-type; 930 description 931 "Endpoint bound to an SRv6 Policy 932 where the SRv6 Policy also includes an 933 IPv6 Source Address A."; 934 reference 935 "RFC 8986"; 936 } 938 identity End.BM { 939 base srv6-endpoint-type; 940 description 941 "Endpoint bound to an SR-MPLS Policy"; 942 reference 943 "RFC 8986"; 944 } 946 identity End.DX6 { 947 base srv6-endpoint-type; 948 description 949 "Endpoint with decapsulation and cross-connect 950 to an array of IPv6 adjacencies"; 951 reference 952 "RFC 8986"; 953 } 955 identity End.DX4 { 956 base srv6-endpoint-type; 957 description 958 "Endpoint with decapsulation and cross-connect 959 to an array of IPv4 adjacencies"; 960 reference 961 "RFC 8986"; 962 } 964 identity End.DT6 { 965 base srv6-endpoint-type; 966 description 967 "Endpoint with decapsulation and specific 968 IPv6 table lookup"; 969 reference 970 "RFC 8986"; 971 } 973 identity End.DT4 { 974 base srv6-endpoint-type; 975 description 976 "Endpoint with decapsulation and specific 977 IPv4 table lookup"; 978 reference 979 "RFC 8986"; 980 } 982 identity End.DT46 { 983 base srv6-endpoint-type; 984 description 985 "Endpoint with decapsulation and specific IP 986 (IPv4 or IPv6) table lookup"; 987 reference 988 "RFC 8986"; 989 } 991 identity End.DX2 { 992 base srv6-endpoint-type; 993 description 994 "Endpoint with decapsulation and Layer-2 995 cross-connect to an L2 interface"; 996 reference 997 "RFC 8986"; 998 } 1000 identity End.DX2V { 1001 base srv6-endpoint-type; 1002 description 1003 "Endpoint with decapsulation and specific 1004 VLAN L2 table lookup"; 1005 reference 1006 "RFC 8986"; 1007 } 1009 identity End.DT2U { 1010 base srv6-endpoint-type; 1011 description 1012 "Endpoint with decapsulation and specific 1013 unicast MAC L2 table lookup"; 1014 reference 1015 "RFC 8986"; 1016 } 1018 identity End.DT2M { 1019 base srv6-endpoint-type; 1020 description 1021 "Endpoint with decapsulation and specific L2 table 1022 flooding"; 1023 reference 1024 "RFC 8986"; 1025 } 1027 identity End.B6.Encaps.Red { 1028 base srv6-endpoint-type; 1029 description 1030 "This is a reduced encap variation of the End.B6.Encap 1031 behavior."; 1032 reference 1033 "RFC 8986"; 1034 } 1036 identity End_USD { 1037 base srv6-endpoint-type; 1038 description 1039 "End function (variant: USD)."; 1040 reference 1041 "RFC 8986"; 1042 } 1044 identity End.PSP_USD { 1045 base srv6-endpoint-type; 1046 description 1047 "End function (variant: PSP and USD)."; 1048 reference 1049 "RFC 8986"; 1050 } 1052 identity End.USP_USD { 1053 base srv6-endpoint-type; 1054 description 1055 "End function (variant: USP and USD)."; 1056 reference 1057 "RFC 8986"; 1058 } 1060 identity End.PSP_USP_USD { 1061 base srv6-endpoint-type; 1062 description 1063 "End function (variant: PSP and USP and USD)."; 1064 reference 1065 "RFC 8986"; 1066 } 1068 identity End.X_USD { 1069 base srv6-endpoint-type; 1070 description 1071 "Endpoint with cross-connect to an array 1072 of layer-3 adjacencies (variant: USD)."; 1073 reference 1074 "RFC 8986"; 1075 } 1077 identity End.X_PSP_USD { 1078 base srv6-endpoint-type; 1079 description 1080 "Endpoint with cross-connect to an array 1081 of layer-3 adjacencies (variant: PSP and USD)."; 1082 reference 1083 "RFC 8986"; 1084 } 1086 identity End.X_USP_USD { 1087 base srv6-endpoint-type; 1088 description 1089 "Endpoint with cross-connect to an array 1090 of layer-3 adjacencies (variant: USP and USD)."; 1091 reference 1092 "RFC 8986"; 1094 } 1096 identity End.X_PSP_USP_USD { 1097 base srv6-endpoint-type; 1098 description 1099 "Endpoint with cross-connect to an array 1100 of layer-3 adjacencies (variant: PSP and USP and USD)."; 1101 reference 1102 "RFC 8986"; 1103 } 1105 identity End.T_USD { 1106 base srv6-endpoint-type; 1107 description 1108 "Endpoint with decapsulation and Layer-2 1109 cross-connect to an L2 interface"; 1110 reference 1111 "RFC 8986"; 1112 } 1114 identity End.T_PSP_USD { 1115 base srv6-endpoint-type; 1116 description 1117 "Endpoint with specific IPv6 table lookup 1118 (variant: PSP and USD)."; 1119 reference 1120 "RFC 8986"; 1121 } 1123 identity End.T_USP_USD { 1124 base srv6-endpoint-type; 1125 description 1126 "Endpoint with specific IPv6 table lookup 1127 (variant: USP and USD)."; 1128 reference 1129 "RFC 8986"; 1130 } 1132 identity End.T_PSP_USP_USD { 1133 base srv6-endpoint-type; 1134 description 1135 "Endpoint with specific IPv6 table lookup 1136 (variant: PSP and USP and USD)."; 1137 reference 1138 "RFC 8986"; 1139 } 1141 /* Endpoints defined under draft-ietf-spring-sr-service-programming */ 1142 identity End.AN { 1143 base srv6-endpoint-type; 1144 description 1145 "Service-Chaining SR Aware function (native)"; 1146 reference 1147 "draft-ietf-spring-sr-service-programming-05"; 1148 // RFC Editor: replace with actual RFC number and remove this note 1149 } 1151 identity End.AS { 1152 base srv6-endpoint-type; 1153 description 1154 "Service-Chaining Static proxy"; 1155 reference 1156 "draft-ietf-spring-sr-service-programming-05"; 1157 // RFC Editor: replace with actual RFC number and remove this note 1158 } 1160 identity End.AD { 1161 base srv6-endpoint-type; 1162 description 1163 "Service-Chaining Dynamic proxy"; 1164 reference 1165 "draft-ietf-spring-sr-service-programming-05"; 1166 // RFC Editor: replace with actual RFC number and remove this note 1167 } 1169 identity End.AM { 1170 base srv6-endpoint-type; 1171 description 1172 "Service-Chaining Masquerading SR proxy"; 1173 reference 1174 "draft-ietf-spring-sr-service-programming-05"; 1175 // RFC Editor: replace with actual RFC number and remove this note 1176 } 1178 identity End.AM_NAT { 1179 base srv6-endpoint-type; 1180 description 1181 "Service-Chaining Masquerading SR proxy with NAT"; 1182 reference 1183 "draft-ietf-spring-sr-service-programming-05"; 1184 // RFC Editor: replace with actual RFC number and remove this note 1185 } 1187 identity End.AM_CACHE { 1188 base srv6-endpoint-type; 1189 description 1190 "Service-Chaining Masquerading SR proxy with Caching"; 1191 reference 1192 "draft-ietf-spring-sr-service-programming-05"; 1193 // RFC Editor: replace with actual RFC number and remove this note 1194 } 1196 identity End.AM_NAT_CACHE { 1197 base srv6-endpoint-type; 1198 description 1199 "Service-Chaining Masquerading SR proxy with NAT and Caching"; 1200 reference 1201 "draft-ietf-spring-sr-service-programming-05"; 1202 // RFC Editor: replace with actual RFC number and remove this note 1203 } 1205 /* Endpoints defined under draft-ietf-dmm-srv6-mobile-uplane */ 1207 identity End.MAP { 1208 base srv6-endpoint-type; 1209 description 1210 "DMM End.MAP"; 1211 reference 1212 "draft-ietf-dmm-srv6-mobile-uplane-17"; 1213 // RFC Editor: replace with actual RFC number and remove this note 1214 } 1216 identity End.Limit { 1217 base srv6-endpoint-type; 1218 description 1219 "DMM End.Limit"; 1220 reference 1221 "draft-ietf-dmm-srv6-mobile-uplane-17"; 1222 // RFC Editor: replace with actual RFC number and remove this note 1223 } 1225 identity End.M.GTP6.D { 1226 base srv6-endpoint-type; 1227 description 1228 "DMM End.M.GTP6.D"; 1229 reference 1230 "draft-ietf-dmm-srv6-mobile-uplane-17"; 1231 // RFC Editor: replace with actual RFC number and remove this note 1232 } 1234 identity End.M.GTP6.Di { 1235 base srv6-endpoint-type; 1236 description 1237 "DMM End.M.GTP6.Di"; 1239 reference 1240 "draft-ietf-dmm-srv6-mobile-uplane-17"; 1241 // RFC Editor: replace with actual RFC number and remove this note 1242 } 1244 identity End.M.GTP6.E { 1245 base srv6-endpoint-type; 1246 description 1247 "DMM End.M.GTP6.E"; 1248 reference 1249 "draft-ietf-dmm-srv6-mobile-uplane-05"; 1250 // RFC Editor: replace with actual RFC number and remove this note 1251 } 1253 identity End.M.GTP4.E { 1254 base srv6-endpoint-type; 1255 description 1256 "DMM End.M.GTP4.E"; 1257 reference 1258 "draft-ietf-dmm-srv6-mobile-uplane-05"; 1259 // RFC Editor: replace with actual RFC number and remove this note 1260 } 1261 /* DMM end */ 1263 identity srv6-headend-type { 1264 description 1265 "Base identity from which SRv6 headend rule types are derived."; 1266 } 1268 identity H.Encaps { 1269 base srv6-headend-type; 1270 description 1271 "Headend rule H.Encaps with encapsulated of an SRv6 policy"; 1272 reference 1273 "draft-ietf-spring-srv6-network-programming-16"; 1274 // RFC Editor: replace with actual RFC number and remove this note 1275 } 1277 identity H.Encaps.Red { 1278 base srv6-headend-type; 1279 description 1280 "Headend rule H.Encaps.Red with reduced encap of an 1281 SRv6 policy"; 1282 reference 1283 "draft-ietf-spring-srv6-network-programming-16"; 1284 // RFC Editor: replace with actual RFC number and remove this note 1285 } 1286 identity H.Encaps.L2 { 1287 base srv6-headend-type; 1288 description 1289 "Headend rule H.Encaps.l2 on the received L2 frame"; 1290 reference 1291 "draft-ietf-spring-srv6-network-programming-16"; 1292 // RFC Editor: replace with actual RFC number and remove this note 1293 } 1295 identity H.Encaps.L2.Red { 1296 base srv6-headend-type; 1297 description 1298 "Headend rule H.Encaps.L2.Red on the received L2 frame"; 1299 reference 1300 "draft-ietf-spring-srv6-network-programming-16"; 1301 // RFC Editor: replace with actual RFC number and remove this note 1302 } 1304 identity srv6-security-type { 1305 description 1306 "Base identity from which SRv6 Security rule types are 1307 derived."; 1308 } 1310 identity SEC-1 { 1311 base srv6-security-type; 1312 description 1313 "Support an ACL on the external interface that 1314 drops any traffic with SA or DA in the internal SID space. 1315 (aka Security rule SEC-1)"; 1316 } 1318 identity SEC-2 { 1319 base srv6-security-type; 1320 description 1321 "Support an ACL that drops any traffic on local SID as DA 1322 from a source SA that does not belong to internal address 1323 or SID space. (aka Security rule SEC-2)"; 1324 } 1326 identity srv6-counter-type { 1327 description 1328 "Base identity from which SRv6 counter types are derived."; 1329 } 1331 identity LocalSID { 1332 base srv6-counter-type; 1333 description 1334 "Count packets and bytes traffic that matched that SID and 1335 was processed successfully (aka Counter CNT-1)"; 1336 reference 1337 "RFC 8986"; 1338 // RFC Editor: replace with actual RFC number and remove this note 1339 } 1341 typedef srv6-sid { 1342 type inet:ipv6-prefix; 1343 description 1344 "This type defines a SID value in SRv6"; 1345 } 1347 typedef srv6-func-value { 1348 type uint32; 1349 description 1350 "This is a typedef for SID's FUNC value"; 1351 } 1353 typedef srv6-func-value-reserved-type { 1354 type enumeration { 1355 enum invalid { value 0; description "Invalid function value"; } 1356 } 1358 description "SRv6 SID's FUNC Reserved values"; 1359 } 1361 typedef srv6-locator-len { 1362 type uint8 { 1363 range "32 .. 96"; 1364 } 1365 description 1366 "This type defines an SRv6 locator len with range constraints"; 1367 } 1369 typedef srv6-sid-pfxlen { 1370 type uint8 { 1371 range "32 .. 128"; 1372 } 1373 default 128; 1374 description 1375 "This type defines a SID prefixlen with range constraints"; 1376 } 1378 typedef sid-alloc-type { 1379 type enumeration { 1380 enum Dynamic { 1381 description 1382 "SID allocated dynamically."; 1383 } 1384 enum Explicit { 1385 description 1386 "SID allocated with explicit (static) value"; 1387 } 1388 } 1389 description 1390 "Types of sid allocation used."; 1391 } 1393 identity srv6-sid-owner-type { 1394 description 1395 "Base identity from which SID owner types are derived."; 1396 } 1398 identity isis { 1399 base srv6-sid-owner-type; 1400 description "ISIS"; 1401 } 1403 identity ospfv3 { 1404 base srv6-sid-owner-type; 1405 description "OSPFv3"; 1406 } 1408 identity bgp { 1409 base srv6-sid-owner-type; 1410 description "BGP"; 1411 } 1413 identity evpn { 1414 base srv6-sid-owner-type; 1415 description "EVPN"; 1416 } 1418 identity sr-policy { 1419 base srv6-sid-owner-type; 1420 description "SR Policy"; 1421 } 1423 identity service-function { 1424 base srv6-sid-owner-type; 1425 description "SF"; 1426 } 1427 typedef table-id { 1428 type uint32; 1429 description 1430 "Routing/switching/bridging/VLAN Table Id"; 1431 } 1433 typedef srv6-status-type { 1434 type enumeration { 1435 enum up { value 1; description "State is Up"; } 1436 enum down { description "State is Down"; } 1437 } 1438 description 1439 "Status type"; 1440 } 1442 typedef srv6-nexthop-type { 1443 type enumeration { 1444 enum ipv4 { value 1; description "IPv4 next-hop"; } 1445 enum ipv6 { description "IPv6 next-hop"; } 1446 enum mpls { description "MPLS next-hop"; } 1447 enum l2 { description "L2 next-hop"; } 1448 } 1449 description 1450 "Forwarding Next-hop type"; 1451 } 1453 } // module 1455 1457 Figure 5: ietf-srv6-types.yang 1459 5.2. SRv6 Base 1461 This YANG module imports types defined in [RFC6991], [RFC8294], 1462 [RFC8343], and [RFC8349]. 1464 file "ietf-srv6-base@2022-01-14.yang" 1466 // RFC Editor: replace the above date with the date of 1467 // publication and remove this note. 1469 module ietf-srv6-base { 1470 yang-version 1.1; 1471 namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-base"; 1472 prefix srv6; 1474 import ietf-interfaces { 1475 prefix "if"; 1476 reference "RFC 8343: A YANG Data Model for Interface Management"; 1477 } 1479 import ietf-inet-types { 1480 prefix inet; 1481 reference "RFC 6991: Common YANG Data Types"; 1482 } 1484 import ietf-yang-types { 1485 prefix "yang"; 1486 reference "RFC 6991: Common YANG Data Types"; 1487 } 1489 import ietf-routing-types { 1490 prefix "rt-types"; 1491 reference "RFC 8294: Common YANG Data Types for the Routing Area"; 1492 } 1494 import ietf-routing { 1495 prefix "rt"; 1496 reference 1497 "RFC 8349: A YANG Data Model for Routing Management 1498 (NMDA version)"; 1499 } 1501 import ietf-segment-routing { 1502 prefix sr; 1503 reference "draft-ietf-spring-sr-yang"; 1504 } 1506 import ietf-srv6-types { 1507 prefix srv6-types; 1508 reference "RFC XXXX: YANG Data Model for SRv6"; 1509 // RFC Editor: replace XXXX with actual RFC number and remove 1510 // this note 1511 } 1513 organization 1514 "IETF SPRING Working Group"; 1515 contact 1516 "WG Web: 1517 WG List: 1518 Editor: Kamran Raza 1519 1521 Editor: Jaganbabu Rajamanickam 1522 1524 Editor: Xufeng Liu 1525 1527 Editor: Zhibo Hu 1528 1530 Editor: Iftekhar Hussain 1531 1533 Editor: Himanshu Shah 1534 1536 Editor: Daniel Voyer 1537 1539 Editor: Hani Elmalky 1540 1542 Editor: Satoru Matsushima 1543 1545 Editor: Katsuhiro Horiba 1546 1548 Editor: Ahmed AbdelSalam 1549 1551 "; 1553 description 1554 "This YANG module defines the essential elements for the 1555 management of Segment-Routing with IPv6 dataplane (SRv6). 1557 Copyright (c) 2017 IETF Trust and the persons identified as 1558 authors of the code. All rights reserved. 1560 Redistribution and use in source and binary forms, with or 1561 without modification, is permitted pursuant to, and subject 1562 to the license terms contained in, the Simplified BSD License 1563 set forth in Section 4.c of the IETF Trust's Legal Provisions 1564 Relating to IETF Documents 1565 (http://trustee.ietf.org/license-info)."; 1567 reference "RFC XXXX"; 1569 revision 2022-01-14 { 1570 description 1571 "Alignment with SRv6 network programming rev16"; 1572 reference 1573 "RFC XXXX: YANG Data Model for SRv6"; 1574 // RFC Editor: replace XXXX with actual RFC number and remove 1575 // this note 1576 } 1578 revision 2019-10-30 { 1579 description 1580 "Alignment with SRv6 network programming"; 1581 reference 1582 "RFC XXXX: YANG Data Model for SRv6"; 1583 // RFC Editor: replace XXXX with actual RFC number and remove 1584 // this note 1585 } 1587 revision 2019-07-08 { 1588 description 1589 "Alignment with SRv6 network programming"; 1590 reference 1591 "RFC XXXX: YANG Data Model for SRv6"; 1592 // RFC Editor: replace XXXX with actual RFC number and remove 1593 // this note 1594 } 1596 revision 2018-10-22 { 1597 description 1598 "Initial revision."; 1599 reference 1600 "RFC XXXX: YANG Data Model for SRv6"; 1601 // RFC Editor: replace XXXX with actual RFC number and remove 1602 // this note 1603 } 1605 /* 1606 * Common 1607 */ 1609 grouping path-attrs-cmn { 1610 description 1611 "Path properties -common for v4/v6"; 1613 leaf weight { 1614 type uint32; 1615 description 1616 "This value is used to compute a loadshare to perform un-equal 1617 load balancing when multiple outgoing path(s) are specified. A 1618 share is computed as a ratio of this number to the total under 1619 all configured path(s)."; 1620 } 1622 leaf role { 1623 type enumeration { 1624 enum PRIMARY { description "Path as primary traffic carrying"; } 1625 enum BACKUP { description "Path acts as a backup"; } 1626 enum PRIMARY_AND_BACKUP { 1627 description "Path acts as primary and backup simultaneously"; } 1628 } 1629 description "The path role"; 1630 } 1632 leaf backup-path-index { 1633 type uint8; 1634 description "Index of the protecting (backup) path"; 1635 } 1636 } 1638 grouping path-out-sids { 1639 description "Grouping for path's SID stack"; 1641 list out-sid { 1642 key "sid"; 1643 description "Out SID"; 1645 leaf sid { 1646 type srv6-types:srv6-sid; 1647 description "SID value"; 1648 } 1649 } 1650 } 1652 grouping path-out-labels { 1653 description "Grouping for path's label stack"; 1655 list out-label { 1656 key "label"; 1657 description "Out label"; 1659 leaf label { 1660 type rt-types:mpls-label; 1661 description "Label value"; 1662 } 1664 } 1666 } 1668 /* 1669 * Config and State 1670 */ 1672 grouping srv6-encap { 1673 description "Grouping for encap param config."; 1675 container encapsulation { 1676 description "Configure encapsulation related parameters"; 1677 leaf source-address { 1678 type inet:ipv6-address; 1679 description "Specify a source address (for T.Encap). 1680 The address must locally exists and be routable"; 1681 } 1682 container hop-limit { 1683 description "Configure IPv6 header's Hop-limit options"; 1684 leaf value { 1685 type uint8; 1686 default 64; 1687 description "Set encapsulating outer IPv6 header's Hoplimit 1688 field to specified value when doing 1689 encapsulation"; 1690 } 1692 leaf propagate { 1693 type boolean; 1694 default false; 1695 description "IP TTL/Hop-limit propagation from encapsulated 1696 packet to encapsulating outer IPv6 header's 1697 Hoplimit field. When configured on decapsulation 1698 side, this refers to propagating Hop-limit from 1699 outer IPv6 header to inner header after decap"; 1700 } 1701 } 1703 container traffic-class { 1704 description "Configure IPv6 header's Traffic-class options"; 1705 leaf value { 1706 type uint8; 1707 default 0; 1708 description "Set encapsulating outer IPv6 header's 1709 Traffic-class field to specified value when 1710 doing encapsulation"; 1711 } 1712 leaf propagate { 1713 type boolean; 1714 default false; 1715 description "Propagate (or map) Traffic-class/CoS/PCP from 1716 the incoming packet or L2 Ethernet frame being 1717 encapsulated to the encapsulating IPv6 header's 1718 Traffic-class field."; 1719 } 1720 } 1722 } 1723 } 1725 grouping srv6-locator-state { 1726 description "SRv6 grouping Locator state"; 1728 leaf operational-status { 1729 type srv6-types:srv6-status-type; 1730 config false; 1731 description "Indicates whether locator state is UP"; 1732 } 1734 leaf is-in-address-conflict { 1735 type boolean; 1736 config false; 1737 description "Indicates whether locator address conflicts with 1738 some other IPv6 address on the box"; 1739 } 1740 } 1742 grouping srv6-locators { 1743 description "SRv6 locator grouping"; 1745 container locators { 1746 description "SRv6 locators"; 1748 list locator { 1749 key "name"; 1750 description "Configure a SRv6 locator"; 1752 leaf name { 1753 type string; 1754 description "Locator name"; 1755 } 1757 leaf enable { 1758 type boolean; 1759 default false; 1760 description "Enable a SRv6 locator"; 1761 } 1763 container prefix { 1764 description "Specify locator prefix value"; 1765 leaf address { 1766 type inet:ipv6-address; 1767 mandatory true; 1768 description "IPv6 address"; 1769 } 1770 leaf length { 1771 type srv6-types:srv6-locator-len; 1772 mandatory true; 1773 description "Locator (prefix) length"; 1774 } 1775 } 1777 leaf algorithm { 1778 type uint32 { 1779 range "128..255"; 1780 } 1782 description "Algorithm Id (for Flex-Algo)"; 1783 } 1785 leaf anycast { 1786 type boolean; 1787 default false; 1788 description "Set to true if locator is an Anycast locator"; 1789 } 1791 uses srv6-locator-state; 1792 } 1793 } 1794 } 1796 grouping srv6-stats-in { 1797 description "Grouping for inbound stats"; 1799 leaf in-pkts { 1800 type yang:counter64; 1801 description 1802 "A cumulative counter of the total number of packets 1803 received"; 1804 } 1806 leaf in-octets { 1807 type yang:counter64; 1808 description 1809 "A cumulative counter of the total bytes received."; 1810 } 1811 } 1813 grouping srv6-stats-out { 1814 description "Grouping for inbound stats"; 1816 leaf out-pkts { 1817 type yang:counter64; 1818 description 1819 "A cumulative counter of the total number of packets 1820 transmitted"; 1821 } 1823 leaf out-octets { 1824 type yang:counter64; 1825 description 1826 "A cumulative counter of the total bytes transmitted."; 1827 } 1828 } 1830 grouping path-out-sids-choice { 1831 description "Grouping for Out-SID choices"; 1832 choice encap-type { 1833 description "Out-SID encap-based choice"; 1834 case srv6 { 1835 uses path-out-sids; 1836 } 1837 case mpls { 1838 uses path-out-labels; 1839 } 1840 } 1841 } 1843 grouping local-sid-fwd-state { 1844 description "SRv6 local-SID forwarding state grouping"; 1846 container forwarding { 1847 description "SRv6 local-SID forwarding state"; 1849 leaf is-installed { 1850 type boolean; 1851 description "Indicates whether SID is installed in forwarding"; 1852 } 1854 leaf next-hop-type { 1855 type srv6-types:srv6-nexthop-type; 1856 description "Forwarding next-hop types"; 1857 } 1859 container paths { 1860 when "../is-installed = 'true'" { 1861 description "This container is valid only when the 1862 local-SID is installed in forwarding"; 1863 } 1865 list path { 1866 key path-index; 1867 description "The list of paths associated with the SID"; 1869 leaf path-index { 1870 type uint8; 1871 description "Index of the path"; 1872 } 1874 container l2 { 1875 when "../../../next-hop-type = 'l2'" { 1876 description "This container is valid only for L2 type 1877 of NHs"; 1878 } 1880 leaf interface { 1881 type if:interface-ref; 1882 description "The outgoing Layer2 interface"; 1883 } 1885 description "L2 information"; 1886 } 1888 container l3 { 1889 when "../../../next-hop-type != 'l2'" { 1890 description "This container is valid only for L3 type 1891 of NHs"; 1892 } 1894 leaf interface { 1895 type if:interface-ref; 1896 description "The outgoing Layer3 interface"; 1897 } 1899 leaf next-hop { 1900 type inet:ip-address; 1901 description "The IP address of the next-hop"; 1902 } 1903 uses path-attrs-cmn; 1905 description "L3 information"; 1906 } 1907 uses path-out-sids-choice; 1908 } 1910 description "Forwarding paths"; 1911 } 1912 } 1913 } 1915 grouping srv6-state-sid { 1916 description "SRv6 SID state grouping"; 1918 container local-sids { 1919 config false; 1920 description "Local-SID state"; 1922 container counters { 1923 description "SRv6 counters"; 1924 container cnt-3 { 1925 description "Counts SRv6 traffic received/dropped on local 1926 prefix not instantiated as local-SID"; 1927 uses srv6-stats-in; 1928 } 1929 } 1931 list local-sid { 1932 key "sid"; 1933 description "Per-localSID Counters"; 1935 leaf sid { 1936 type srv6-types:srv6-sid; 1937 description "Local SID value"; 1938 } 1940 uses srv6-locator; 1942 leaf is-reserved { 1943 type boolean; 1944 description "Set to true if SID comes from reserved pool"; 1945 } 1947 leaf end-behavior-type { 1948 type identityref { 1949 base srv6-types:srv6-endpoint-type; 1950 } 1951 description "Type of SRv6 end behavior."; 1952 } 1954 leaf alloc-type { 1955 type srv6-types:sid-alloc-type; 1956 description 1957 "Type of sid allocation."; 1958 } 1960 list owner { 1961 key "type instance"; 1962 description "SID Owner clients"; 1963 leaf type { 1964 type identityref { 1965 base srv6-types:srv6-sid-owner-type; 1966 } 1967 description "SID owner/client type"; 1968 } 1969 leaf instance { 1970 type string; 1971 description "Client instance"; 1972 } 1973 leaf is-winner { 1974 type boolean; 1975 description "Is this client/owner the winning in terms of 1976 forwarding"; 1977 } 1978 } 1980 uses local-sid-fwd-state; 1982 container counters { 1983 description "SRv6 per local-SID counters"; 1985 container cnt-1 { 1986 description "Counts SRv6 traffic received on local-SID 1987 prefix and processed successfully"; 1988 uses srv6-stats-in; 1989 } 1990 } 1991 } 1992 } 1993 } 1995 grouping srv6-support-ends { 1996 description "SRv6 End behavior support grouping"; 1998 list end-behavior { 1999 key "type"; 2000 description "End behavior support"; 2002 leaf type { 2003 type identityref { 2004 base srv6-types:srv6-endpoint-type; 2005 } 2006 description "End behavior (End*) type"; 2007 } 2008 leaf supported { 2009 type boolean; 2010 mandatory true; 2011 description "True if supported"; 2012 } 2013 } 2014 } 2016 grouping srv6-support-headends { 2017 description "SRv6 Headend behavior support grouping"; 2019 list headend-behavior { 2020 key "type"; 2021 description "Headend behavior support"; 2022 leaf type { 2023 type identityref { 2024 base srv6-types:srv6-headend-type; 2025 } 2026 description "Headend behavior (H*) type"; 2027 } 2028 leaf supported { 2029 type boolean; 2030 mandatory true; 2031 description "True if supported"; 2032 } 2033 } 2034 } 2036 grouping srv6-msd-signaled { 2037 description "SRv6 MSD signaled parameter support grouping"; 2039 container msd { 2040 description "SRv6 signaled MSD parameter support"; 2042 leaf max-sl { 2043 type uint8; 2044 description "Maximum value of the SL field in the SRH of 2045 a received packet before applying the Endpoint behavior 2046 associated with a SID"; 2048 } 2049 leaf max-end-pop { 2050 type uint8; 2051 description "Maximum number of SIDs in the top SRH in an 2052 SRH stack to which the router can apply 2053 PSP or USP flavors"; 2054 } 2055 leaf max-h_encap { 2056 type uint8; 2057 description "Maximum number of SIDs that can be pushed as 2058 part of the H.Encaps* behavior"; 2059 } 2060 leaf max-end_d { 2061 type uint8; 2062 description "Maximum number of SIDs in an SRH when applying 2063 End.D* behaviors (e.g. End.X6 and End.DT6)"; 2064 } 2065 } 2066 } 2068 grouping srv6-support-security-rules { 2069 description "SRv6 Security rules grouping"; 2071 list security-rule { 2072 key "type"; 2073 description "Security rule support"; 2075 leaf type { 2076 type identityref { 2077 base srv6-types:srv6-security-type; 2078 } 2079 description "Security rule type"; 2080 } 2081 leaf supported { 2082 type boolean; 2083 mandatory true; 2084 description "True if supported"; 2085 } 2086 } 2087 } 2089 grouping srv6-support-counters { 2090 description "SRv6 Counters grouping"; 2092 list counters { 2093 key "type"; 2094 description "SRv6 counter support"; 2095 leaf type { 2096 type identityref { 2097 base srv6-types:srv6-counter-type; 2098 } 2099 description "Counter type"; 2100 } 2101 leaf supported { 2102 type boolean; 2103 mandatory true; 2104 description "True if supported"; 2105 } 2106 } 2107 } 2109 grouping srv6-state-capabilities { 2110 description "SRv6 node capabilities grouping"; 2111 container node-capabilities { 2112 config false; 2113 description "Node's SRv6 capabilities"; 2115 uses srv6-support-ends; 2116 uses srv6-support-headends; 2117 uses srv6-msd-signaled; 2118 uses srv6-support-security-rules; 2119 uses srv6-support-counters; 2120 } 2121 } 2123 augment "/rt:routing/sr:segment-routing" { 2124 description 2125 "This augments Segment Routing (SR) with SRv6."; 2127 container srv6 { 2128 description "Segment Routing with IPv6 dataplane"; 2130 /* config */ 2131 leaf enable { 2132 type boolean; 2133 default false; 2134 description "Enable SRv6"; 2135 } 2137 uses srv6-encap; 2138 uses srv6-locators; 2139 uses srv6-state-capabilities; 2140 uses srv6-state-sid; 2141 } 2142 } 2143 /* Notifications */ 2145 grouping srv6-locator { 2146 description 2147 "An absolute reference to an SRv6 locator"; 2148 leaf locator { 2149 type leafref { 2150 path "/rt:routing/sr:segment-routing/srv6:srv6/srv6:locators/srv6:locator/srv6:name"; 2151 } 2152 description 2153 "Reference to a SRv6 locator."; 2154 } 2155 } 2157 notification srv6-locator-status-event { 2158 description 2159 "Notification event for a change of SRv6 locator operational 2160 status."; 2161 leaf operational-status { 2162 type srv6-types:srv6-status-type; 2163 description "Operational status"; 2164 } 2165 uses srv6-locator; 2166 } 2168 notification srv6-sid-collision-event { 2169 description 2170 "Notification event for an SRv6 SID collision - i.e., attempt 2171 to bind an already bound SID to a new context"; 2172 leaf sid { 2173 type srv6-types:srv6-sid; 2174 description "SRv6 SID"; 2175 } 2176 container existing { 2177 description "Current assignment / bind"; 2178 leaf end-behavior-type { 2179 type identityref { 2180 base srv6-types:srv6-endpoint-type; 2181 } 2182 description "End type"; 2183 } 2184 // TODO: More 2185 } 2186 container requested { 2187 description "Requested assignment / bind"; 2189 leaf end-behavior-type { 2190 type identityref { 2191 base srv6-types:srv6-endpoint-type; 2192 } 2193 description "End type"; 2194 } 2195 } 2196 } 2197 } // module 2199 2201 Figure 6: ietf-srv6-base.yang 2203 5.3. SRv6 Static 2205 This YANG module imports types defined in [RFC6991], [RFC8343], and 2206 [RFC8349]. 2208 file "ietf-srv6-static@2022-01-14.yang" 2210 // RFC Editor: replace the above date with the date of 2211 // publication and remove this note. 2213 module ietf-srv6-static { 2214 yang-version 1.1; 2216 namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-static"; 2217 prefix srv6-static; 2219 import ietf-interfaces { 2220 prefix "if"; 2221 reference "RFC 8343: A YANG Data Model for Interface Management"; 2222 } 2224 import ietf-inet-types { 2225 prefix inet; 2226 reference "RFC 6991: Common YANG Data Types"; 2227 } 2229 import ietf-routing { 2230 prefix "rt"; 2231 reference 2232 "RFC 8349: A YANG Data Model for Routing Management (NMDA 2233 version)"; 2234 } 2235 import ietf-segment-routing { 2236 prefix sr; 2237 reference "draft-ietf-spring-sr-yang"; 2238 } 2240 import ietf-srv6-types { 2241 prefix srv6-types; 2242 reference "RFC XXXX: YANG Data Model for SRv6"; 2243 // RFC Editor: replace XXXX with actual RFC number and remove 2244 // this note 2245 } 2247 import ietf-srv6-base { 2248 prefix srv6; 2249 reference "RFC XXXX: YANG Data Model for SRv6"; 2250 // RFC Editor: replace XXXX with actual RFC number and remove 2251 // this note 2252 } 2254 organization 2255 "IETF SPRING Working Group"; 2256 contact 2257 "WG Web: 2258 WG List: 2260 Editor: Kamran Raza 2261 2263 Editor: Jaganbabu Rajamanickam 2264 2266 Editor: Xufeng Liu 2267 2269 Editor: Zhibo Hu 2270 2272 Editor: Iftekhar Hussain 2273 2275 Editor: Himanshu Shah 2276 2278 Editor: Daniel Voyer 2279 2281 Editor: Hani Elmalky 2282 2284 Editor: Satoru Matsushima 2285 2287 Editor: Katsuhiro Horiba 2288 2290 Editor: Ahmed AbdelSalam 2291 2292 "; 2294 description 2295 "This YANG module defines the essential elements for the 2296 management of Static application for Segment-Routing with 2297 IPv6 dataplane (SRv6). 2299 Copyright (c) 2018 IETF Trust and the persons identified as 2300 authors of the code. All rights reserved. 2302 Redistribution and use in source and binary forms, with or 2303 without modification, is permitted pursuant to, and subject 2304 to the license terms contained in, the Simplified BSD License 2305 set forth in Section 4.c of the IETF Trust's Legal Provisions 2306 Relating to IETF Documents 2307 (http://trustee.ietf.org/license-info)."; 2309 reference "RFC XXXX"; 2310 // RFC Editor: replace XXXX with actual RFC number and remove 2311 // this note 2313 revision 2022-01-14 { 2314 description 2315 "Alignment with SRv6 network programming rev16"; 2316 reference 2317 "RFC XXXX: YANG Data Model for SRv6"; 2318 // RFC Editor: replace XXXX with actual RFC number and remove 2319 // this note 2320 } 2322 revision 2019-10-30 { 2323 description 2324 "Extended model for EVPN behaviors"; 2325 reference 2326 "RFC XXXX: YANG Data Model for SRv6"; 2327 // RFC Editor: replace XXXX with actual RFC number and remove 2328 // this note 2329 } 2331 revision 2019-07-08 { 2332 description 2333 "Alignment with SRv6 network programming"; 2334 reference 2335 "RFC XXXX: YANG Data Model for SRv6"; 2336 // RFC Editor: replace XXXX with actual RFC number and remove 2337 // this note 2338 } 2340 revision 2018-10-22 { 2341 description 2342 "Initial revision."; 2343 reference 2344 "RFC XXXX: YANG Data Model for SRv6"; 2345 // RFC Editor: replace XXXX with actual RFC number and remove 2346 // this note 2347 } 2349 /* 2350 * Config and State 2351 */ 2353 grouping path-attrs-v6 { 2354 description 2355 "IPv6 Path properties"; 2357 leaf interface { 2358 type if:interface-ref; 2359 description "The outgoing interface"; 2360 } 2362 leaf next-hop { 2363 type inet:ipv6-address; 2364 description "The IP address of the next-hop"; 2365 } 2367 leaf table { 2368 type srv6-types:table-id; 2369 description "The routing table associated with the next-hop"; 2370 } 2372 uses srv6:path-attrs-cmn; 2373 } 2375 grouping path-attrs-v4 { 2376 description 2377 "IPv4 Path properties"; 2379 leaf interface { 2380 type if:interface-ref; 2381 description "The outgoing interface"; 2382 } 2384 leaf next-hop { 2385 type inet:ipv4-address; 2386 description "The IP address of the next-hop"; 2387 } 2389 leaf table { 2390 type srv6-types:table-id; 2391 description "The routing table associated with the next-hop"; 2392 } 2394 uses srv6:path-attrs-cmn; 2395 } 2397 grouping path-attrs-mpls { 2398 description 2399 "MPLS Path properties"; 2401 leaf interface { 2402 type if:interface-ref; 2403 description "The outgoing interface"; 2404 } 2406 leaf next-hop { 2407 type inet:ip-address; 2408 description "The IP address of the next-hop"; 2409 } 2411 uses srv6:path-attrs-cmn; 2412 } 2414 grouping multi-paths-v6 { 2415 description "Multipath grouping"; 2417 container paths { 2418 description "List of outgoing paths"; 2419 list path { 2420 key path-index; 2421 description "The list of paths associated with the SID"; 2423 leaf path-index { 2424 type uint8; 2425 description "Index of the path"; 2426 } 2427 uses path-attrs-v6; 2428 container sid-list { 2429 description "SID-list associated with the path"; 2430 uses srv6:path-out-sids; 2431 } 2432 } 2433 } 2434 } 2436 grouping multi-paths-v4 { 2437 description "Multipath grouping"; 2439 container paths { 2440 description "List of outgoing paths"; 2441 list path { 2442 key path-index; 2443 description "The list of paths associated with the SID"; 2445 leaf path-index { 2446 type uint8; 2447 description "Index of the path"; 2448 } 2450 uses path-attrs-v4; 2451 container sid-list { 2452 description "SID-list associated with the path"; 2453 uses srv6:path-out-sids; 2454 } 2455 } 2456 } 2457 } 2459 grouping multi-paths-mpls { 2460 description "Multipath grouping"; 2462 container paths { 2463 description "List of outgoing paths"; 2464 list path { 2465 key path-index; 2466 description "The list of paths associated with the SID"; 2468 leaf path-index { 2469 type uint8; 2470 description "Index of the path"; 2471 } 2473 uses path-attrs-mpls; 2474 container sid-list { 2475 description "SID-list associated with the path"; 2476 uses srv6:path-out-sids; 2477 } 2478 } 2479 } 2480 } 2482 grouping multi-paths-v6-BUM { 2483 description 2484 "Multipath grouping for EVPN bridging BUM use case"; 2486 container paths { 2487 description 2488 "List of outgoing paths for flooding"; 2489 list path { 2490 key path-index; 2491 description "The list of paths associated with the SID"; 2493 leaf path-index { 2494 type uint8; 2495 description "Index of the path"; 2496 } 2498 leaf l2-interface { 2499 type if:interface-ref; 2500 description "The outgoing L2 interface for flooding"; 2501 } 2502 } 2503 } 2504 } 2506 grouping srv6-sid-config { 2507 description 2508 "Configuration parameters relating to SRv6 sid."; 2510 leaf function { 2511 type srv6-types:srv6-func-value; 2512 description 2513 "SRv6 function value."; 2514 } 2515 leaf end-behavior-type { 2516 type identityref { 2517 base srv6-types:srv6-endpoint-type; 2518 } 2519 mandatory true; 2520 description 2521 "Type of SRv6 end behavior."; 2522 } 2523 container end { 2524 when "../end-behavior-type = 'End'" { 2525 description 2526 "This container is valid only when the user chooses End 2527 behavior (variant: no PSP, no USP)."; 2528 } 2529 description 2530 "The Endpoint function is the most basic function. 2531 FIB lookup on updated DA and forward accordingly 2532 to the matched entry. 2533 This is the SRv6 instantiation of a Prefix SID 2534 (variant: no PSP, no USP)"; 2536 } 2538 container end_psp { 2539 when "../end-behavior-type = 'End_PSP'" { 2540 description 2541 "This container is valid only when the user chooses End 2542 behavior (variant: PSP only)."; 2543 } 2544 description 2545 "The Endpoint function is the most basic function. 2546 FIB lookup on updated DA and forward accordingly 2547 to the matched entry. 2548 This is the SRv6 instantiation of a Prefix SID 2549 (variant: PSP only)"; 2551 } 2553 container end_usp { 2554 when "../end-behavior-type = 'End_USP'" { 2555 description 2556 "This container is valid only when the user chooses End 2557 behavior (variant: USP only)."; 2558 } 2559 description 2560 "The Endpoint function is the most basic function. 2561 FIB lookup on updated DA and forward accordingly 2562 to the matched entry. 2563 This is the SRv6 instantiation of a Prefix SID 2564 (variant: USP only)"; 2566 } 2568 container end_psp_usp { 2569 when "../end-behavior-type = 'End_PSP_USP'" { 2570 description 2571 "This container is valid only when the user chooses End 2572 behavior (variant: PSP/USP)."; 2573 } 2574 description 2575 "The Endpoint function is the most basic function. 2576 FIB lookup on updated DA and forward accordingly 2577 to the matched entry. 2578 This is the SRv6 instantiation of a Prefix SID 2579 (variant: PSP/USP)"; 2581 } 2583 container end_usd { 2584 when "../end-behavior-type = 'End_USD'" { 2585 description 2586 "This container is valid only when the user chooses End 2587 behavior (variant: USD only)."; 2588 } 2589 description 2590 "The Endpoint function is the most basic function. 2591 FIB lookup on updated DA and forward accordingly 2592 to the matched entry. 2593 This is the SRv6 instantiation of a Prefix SID 2594 (variant: USD)"; 2595 } 2597 container end_psp_usd { 2598 when "../end-behavior-type = 'End_PSP_USD'" { 2599 description 2600 "This container is valid only when the user chooses End 2601 behavior (variant: PSP/USD)."; 2602 } 2603 description 2604 "The Endpoint function is the most basic function. 2605 FIB lookup on updated DA and forward accordingly 2606 to the matched entry. 2607 This is the SRv6 instantiation of a Prefix SID 2608 (variant: PSP/USD)"; 2610 } 2612 container end_usp_usd { 2613 when "../end-behavior-type = 'End_USP_USD'" { 2614 description 2615 "This container is valid only when the user chooses End 2616 behavior (variant: USP/USD)."; 2617 } 2618 description 2619 "The Endpoint function is the most basic function. 2620 FIB lookup on updated DA and forward accordingly 2621 to the matched entry. 2622 This is the SRv6 instantiation of a Prefix SID 2623 (variant: USP/USD)"; 2625 } 2627 container end_psp_usp_usd { 2628 when "../end-behavior-type = 'End_PSP_USP_IUSD'" { 2629 description 2630 "This container is valid only when the user chooses End 2631 behavior (variant: PSP/USP/USD)."; 2632 } 2633 description 2634 "The Endpoint function is the most basic function. 2635 FIB lookup on updated DA and forward accordingly 2636 to the matched entry. 2637 This is the SRv6 instantiation of a Prefix SID 2638 (variant: PSP/USP/USD)"; 2640 } 2642 container end-t { 2643 when "../end-behavior-type = 'End.T'" { 2644 description 2645 "This container is valid only when the user chooses 2646 End.T behavior (variant: no PSP, no USP)."; 2647 } 2648 description 2649 "Endpoint with specific IPv6 table lookup (variant: no PSP, 2650 no USP). 2651 Lookup the next segment in IPv6 table T 2652 associated with the SID and forward via 2653 the matched table entry. 2654 The End.T is used for multi-table operation 2655 in the core."; 2657 // TODO presence "Mandatory child only if container is present"; 2658 leaf lookup-table-ipv6 { 2659 type srv6-types:table-id; 2660 mandatory true; 2661 description 2662 "Table Id for lookup on updated DA (next segment)"; 2663 } 2664 } 2666 container end-t_psp { 2667 when "../end-behavior-type = 'End.T_PSP'" { 2668 description 2669 "This container is valid only when the user chooses 2670 End.T behavior (variant: PSP only)."; 2671 } 2672 description 2673 "Endpoint with specific IPv6 table lookup (variant: PSP only). 2674 Lookup the next segment in IPv6 table T 2675 associated with the SID and forward via 2676 the matched table entry. 2678 The End.T is used for multi-table operation 2679 in the core."; 2681 // TODO presence "Mandatory child only if container is present"; 2683 leaf lookup-table-ipv6 { 2684 type srv6-types:table-id; 2685 mandatory true; 2686 description 2687 "Table Id for lookup on updated DA (next segment)"; 2688 } 2689 } 2691 container end-t_usp { 2692 when "../end-behavior-type = 'End.T_USP'" { 2693 description 2694 "This container is valid only when the user chooses 2695 End.T behavior (variant: USP only)."; 2696 } 2697 description 2698 "Endpoint with specific IPv6 table lookup (variant: USP only). 2699 Lookup the next segment in IPv6 table T 2700 associated with the SID and forward via 2701 the matched table entry. 2702 The End.T is used for multi-table operation 2703 in the core."; 2705 // TODO presence "Mandatory child only if container is present"; 2707 leaf lookup-table-ipv6 { 2708 type srv6-types:table-id; 2709 mandatory true; 2710 description 2711 "Table Id for lookup on updated DA (next segment)"; 2712 } 2713 } 2714 container end-t_psp_usp { 2715 when "../end-behavior-type = 'End.T_PSP_USP'" { 2716 description 2717 "This container is valid only when the user chooses 2718 End.T behavior (variant: USP/PSP)."; 2719 } 2720 description 2721 "Endpoint with specific IPv6 table lookup (variant: USP/PSP). 2722 Lookup the next segment in IPv6 table T 2723 associated with the SID and forward via 2724 the matched table entry. 2725 The End.T is used for multi-table operation 2726 in the core."; 2728 // TODO presence "Mandatory child only if container is present"; 2730 leaf lookup-table-ipv6 { 2731 type srv6-types:table-id; 2732 mandatory true; 2733 description 2734 "Table Id for lookup on updated DA (next segment)"; 2735 } 2736 } 2738 container end-t_usd { 2739 when "../end-behavior-type = 'End.T_USD'" { 2740 description 2741 "This container is valid only when the user chooses 2742 End.T behavior (variant: USD only)."; 2743 } 2744 description 2745 "Endpoint with specific IPv6 table lookup (variant: USD only). 2746 Lookup the next segment in IPv6 table T 2747 associated with the SID and forward via 2748 the matched table entry. 2749 The End.T is used for multi-table operation 2750 in the core."; 2752 // TODO presence "Mandatory child only if container is present"; 2754 leaf lookup-table-ipv6 { 2755 type srv6-types:table-id; 2756 mandatory true; 2757 description 2758 "Table Id for lookup on updated DA (next segment)"; 2759 } 2760 } 2761 container end-t_psp_usd { 2762 when "../end-behavior-type = 'End.T_PSP_USD'" { 2763 description 2764 "This container is valid only when the user chooses 2765 End.T behavior (variant: PSP/USD only)."; 2766 } 2767 description 2768 "Endpoint with specific IPv6 table lookup (variant: PSP/USD 2769 only). 2770 Lookup the next segment in IPv6 table T 2771 associated with the SID and forward via 2772 the matched table entry. 2773 The End.T is used for multi-table operation 2774 in the core."; 2776 // TODO presence "Mandatory child only if container is present"; 2778 leaf lookup-table-ipv6 { 2779 type srv6-types:table-id; 2780 mandatory true; 2781 description 2782 "Table Id for lookup on updated DA (next segment)"; 2783 } 2784 } 2786 container end-t_usp_usd { 2787 when "../end-behavior-type = 'End.T_USP_USD'" { 2788 description 2789 "This container is valid only when the user chooses 2790 End.T behavior (variant: USP/USD only)."; 2791 } 2792 description 2793 "Endpoint with specific IPv6 table lookup (variant: 2794 USP/USD only). 2795 Lookup the next segment in IPv6 table T 2796 associated with the SID and forward via 2797 the matched table entry. 2798 The End.T is used for multi-table operation 2799 in the core."; 2801 // TODO presence "Mandatory child only if container is present"; 2803 leaf lookup-table-ipv6 { 2804 type srv6-types:table-id; 2805 mandatory true; 2806 description 2807 "Table Id for lookup on updated DA (next segment)"; 2808 } 2810 } 2812 container end-t_psp_usp_usd { 2813 when "../end-behavior-type = 'End.T_PSP_USP_USD'" { 2814 description 2815 "This container is valid only when the user chooses 2816 End.T behavior (variant: USP only)."; 2817 } 2818 description 2819 "Endpoint with specific IPv6 table lookup (variant: 2820 PSP/USP/USD only). 2821 Lookup the next segment in IPv6 table T 2822 associated with the SID and forward via 2823 the matched table entry. 2824 The End.T is used for multi-table operation 2825 in the core."; 2827 // TODO presence "Mandatory child only if container is present"; 2829 leaf lookup-table-ipv6 { 2830 type srv6-types:table-id; 2831 mandatory true; 2832 description 2833 "Table Id for lookup on updated DA (next segment)"; 2834 } 2835 } 2837 container end-x { 2838 when "../end-behavior-type = 'End.X'" { 2839 description 2840 "This container is valid only when the user chooses 2841 End.X behavior (variant: no USP/PSP)"; 2842 } 2843 description 2844 "Endpoint with cross-connect to an array of 2845 layer-3 adjacencies (variant: no USP/PSP). 2846 Forward to layer-3 adjacency bound to the SID S. 2847 The End.X function is required to express any 2848 traffic-engineering policy."; 2850 leaf protected { 2851 type boolean; 2852 default false; 2853 description "Is Adj-SID protected?"; 2854 } 2856 uses multi-paths-v6; 2857 } 2859 container end-x_psp { 2860 when "../end-behavior-type = 'End.X_PSP'" { 2861 description 2862 "This container is valid only when the user chooses 2863 End.X behavior (variant: PSP only)"; 2864 } 2865 description 2866 "Endpoint with cross-connect to an array of 2867 layer-3 adjacencies (variant: PSP only). 2868 Forward to layer-3 adjacency bound to the SID S. 2869 The End.X function is required to express any 2870 traffic-engineering policy."; 2872 leaf protected { 2873 type boolean; 2874 default false; 2875 description "Is Adj-SID protected?"; 2876 } 2878 uses multi-paths-v6; 2879 } 2881 container end-x_usp { 2882 when "../end-behavior-type = 'End.X_USP'" { 2883 description 2884 "This container is valid only when the user chooses 2885 End.X behavior (variant: USP only)"; 2886 } 2887 description 2888 "Endpoint with cross-connect to an array of 2889 layer-3 adjacencies (variant: USP only). 2890 Forward to layer-3 adjacency bound to the SID S. 2891 The End.X function is required to express any 2892 traffic-engineering policy."; 2894 leaf protected { 2895 type boolean; 2896 default false; 2897 description "Is Adj-SID protected?"; 2898 } 2900 uses multi-paths-v6; 2901 } 2903 container end-x_psp_usp { 2904 when "../end-behavior-type = 'End.X_PSP_USP'" { 2905 description 2906 "This container is valid only when the user chooses 2907 End.X behavior (variant: PSP/USP)"; 2908 } 2909 description 2910 "Endpoint with cross-connect to an array of 2911 layer-3 adjacencies (variant: PSP/USP). 2912 Forward to layer-3 adjacency bound to the SID S. 2913 The End.X function is required to express any 2914 traffic-engineering policy."; 2916 leaf protected { 2917 type boolean; 2918 default false; 2919 description "Is Adj-SID protected?"; 2920 } 2922 uses multi-paths-v6; 2923 } 2925 container end-x_usd { 2926 when "../end-behavior-type = 'End.X_USD'" { 2927 description 2928 "This container is valid only when the user chooses 2929 End.X behavior (variant: USD only)"; 2930 } 2931 description 2932 "Endpoint with cross-connect to an array of 2933 layer-3 adjacencies (variant: PSP/USP). 2934 Forward to layer-3 adjacency bound to the SID S. 2935 The End.X function is required to express any 2936 traffic-engineering policy."; 2938 leaf protected { 2939 type boolean; 2940 default false; 2941 description "Is Adj-SID protected?"; 2942 } 2944 uses multi-paths-v6; 2945 } 2947 container end-x_psp_usd { 2948 when "../end-behavior-type = 'End.X_PSP_USD'" { 2949 description 2950 "This container is valid only when the user chooses 2951 End.X behavior (variant: PSP/USD only)"; 2952 } 2953 description 2954 "Endpoint with cross-connect to an array of 2955 layer-3 adjacencies (variant: PSP/USP). 2956 Forward to layer-3 adjacency bound to the SID S. 2957 The End.X function is required to express any 2958 traffic-engineering policy."; 2960 leaf protected { 2961 type boolean; 2962 default false; 2963 description "Is Adj-SID protected?"; 2964 } 2966 uses multi-paths-v6; 2967 } 2969 container end-x_usp_usd { 2970 when "../end-behavior-type = 'End.X_USP_USD'" { 2971 description 2972 "This container is valid only when the user chooses 2973 End.X behavior (variant: USP/USD only)"; 2974 } 2975 description 2976 "Endpoint with cross-connect to an array of 2977 layer-3 adjacencies (variant: PSP/USP). 2978 Forward to layer-3 adjacency bound to the SID S. 2979 The End.X function is required to express any 2980 traffic-engineering policy."; 2982 leaf protected { 2983 type boolean; 2984 default false; 2985 description "Is Adj-SID protected?"; 2986 } 2988 uses multi-paths-v6; 2989 } 2991 container end-x_psp_usp_usd { 2992 when "../end-behavior-type = 'End.X_PSP_USP_USD'" { 2993 description 2994 "This container is valid only when the user chooses 2995 End.X behavior (variant: PSP/USP/USD only)"; 2996 } 2997 description 2998 "Endpoint with cross-connect to an array of 2999 layer-3 adjacencies (variant: PSP/USP). 3000 Forward to layer-3 adjacency bound to the SID S. 3001 The End.X function is required to express any 3002 traffic-engineering policy."; 3004 leaf protected { 3005 type boolean; 3006 default false; 3007 description "Is Adj-SID protected?"; 3008 } 3010 uses multi-paths-v6; 3011 } 3013 container end-b6-encaps { 3014 when "../end-behavior-type = 'End.B6.Encaps' or 3015 ../end-behavior-type = 'End.B6.Encaps.Red'" { 3016 description 3017 "This container is valid only when the user chooses 3018 End.B6.Encaps or End.B6.Encaps.Red behavior."; 3019 } 3020 description 3021 "Endpoint bound to an SRv6 Policy. 3022 Insert SRH based on the policy and forward the 3023 packet toward the first hop configured in the policy. 3024 This is the SRv6 instantiation of a Binding SID. 3025 This behavior also adds an outer IPv6 header"; 3027 // TODO presence "Mandatory child only if container is present"; 3029 leaf policy-name { 3030 type string; 3031 mandatory true; 3032 description "SRv6 policy name."; 3033 } 3034 leaf source-address { 3035 type inet:ipv6-address; 3036 mandatory true; 3037 description 3038 "IPv6 source address for Encap."; 3039 } 3041 uses multi-paths-v6; 3042 } 3044 container end-bm { 3045 when "../end-behavior-type = 'End.BM'" { 3046 description 3047 "This container is valid only when the user chooses 3048 End.BM behavior."; 3049 } 3050 description 3051 "Endpoint bound to an SR-MPLS Policy. 3052 push an MPLS label stack on the 3053 received packet and forward the according to 3054 Lable L1. 3055 This is an SRv6 instantiation of an SR-MPLS Binding SID."; 3057 // TODO presence "Mandatory child only if container is present"; 3059 leaf policy-name { 3060 type string; 3061 mandatory true; 3062 description "SRv6 policy name"; 3063 } 3064 uses multi-paths-mpls; 3065 } 3067 container end-dx6 { 3068 when "../end-behavior-type = 'End.DX6'" { 3069 description 3070 "This container is valid only when the user chooses 3071 End.DX6 behavior."; 3072 } 3073 description 3074 "Endpoint with decapsulation and cross-connect to 3075 an array of IPv6 adjacencies. Pop the (outer) 3076 IPv6 header and its extension headers and forward 3077 to layer-3 adjacency bound to the SID S. 3078 The End.DX6 used in the L3VPN use-case."; 3080 uses multi-paths-v6; 3081 // TODO: Backup path of type "Lookup in table" 3082 } 3084 container end-dx4 { 3085 when "../end-behavior-type = 'End.DX4'" { 3086 description 3087 "This container is valid only when the user chooses 3088 End.DX4 behavior."; 3089 } 3090 description 3091 "Endpoint with decapsulation and cross-connect to 3092 an array of IPv4 adjacencies. 3093 Pop the (outer) IPv6 header and its extension 3094 header and forward to layer-3 adjacency bound 3095 to the SID S. 3096 This would be equivalent to the per-CE VPN 3097 label in MPLS."; 3099 uses multi-paths-v4; 3100 // TODO: Backup path of type "Lookup in table" 3101 } 3102 container end-dt6 { 3103 when "../end-behavior-type = 'End.DT6'" { 3104 description 3105 "This container is valid only when the user chooses 3106 End.DT6 behavior."; 3107 } 3108 description 3109 "Endpoint with decapsulation and specific IPv6 table 3110 lookup. 3111 Pop the (outer) IPv6 header and its extension 3112 headers. 3113 Lookup the exposed inner IPv6 DA in IPv6 3114 table T and forward via the matched table entry. 3115 End.DT6 function is used in L3VPN use-case."; 3117 // TODO presence "Mandatory child only if container is present"; 3119 leaf lookup-table-ipv6 { 3120 type srv6-types:table-id; 3121 mandatory true; 3122 description "IPv6 table"; 3123 } 3124 } 3125 container end-dt4 { 3126 when "../end-behavior-type = 'End.DT4'" { 3127 description 3128 "This container is valid only when the user chooses 3129 End.DT4 behavior."; 3130 } 3131 description 3132 "Endpoint with decapsulation and specific 3133 IPv4 table lookup. 3134 Pop the (outer) IPv6 header and its extension 3135 headers. 3136 Lookup the exposed inner IPv4 DA in IPv4 3137 table T and forward via the matched table entry. 3138 This would be equivalent to the per-VRF VPN label 3139 in MPLS."; 3141 // TODO presence "Mandatory child only if container is present"; 3143 leaf lookup-table-ipv4 { 3144 type srv6-types:table-id; 3145 mandatory true; 3146 description "IPv4 table"; 3148 } 3149 } 3150 container end-dt46 { 3151 when "../end-behavior-type = 'End.DT46'" { 3152 description 3153 "This container is valid only when the user chooses 3154 End.DT46 behavior."; 3155 } 3156 description 3157 "Endpoint with decapsulation and specific 3158 IP table lookup. 3159 Depending on the protocol type (IPv4 or IPv6) 3160 of the inner ip packet and the specific VRF name 3161 forward the packet. 3162 This would be equivalent to the per-VRF VPN 3163 label in MPLS."; 3165 // TODO presence "Mandatory child only if container is present"; 3167 leaf lookup-table-ipv4 { 3168 type srv6-types:table-id; 3169 mandatory true; 3170 description "IPv4 table"; 3171 } 3172 leaf lookup-table-ipv6 { 3173 type srv6-types:table-id; 3174 mandatory true; 3175 description "IPv6 table"; 3176 } 3177 } 3179 /* EVPN END behavior types */ 3180 container end-dx2 { 3181 when "../end-behavior-type = 'End.DX2'" { 3182 description 3183 "This container is valid only when the user chooses 3184 End.DX2 behavior."; 3185 } 3186 description 3187 "This is an Endpoint with decapsulation and Layer-2 3188 cross-connect to OIF. 3189 Pop the (outer) IPv6 header and its extension headers. 3190 Forward the resulting frame via OIF associated to the SID. 3191 The End.DX2 function is the L2VPN/EVPN VPWS use-case."; 3193 container path { 3194 description "Outgoing path"; 3195 leaf l2-interface { 3196 type if:interface-ref; 3197 mandatory true; 3198 description "Outgoing L2 interface"; 3199 } 3200 } 3201 } 3203 container end-dx2v { 3204 when "../end-behavior-type = 'End.DX2V'" { 3205 description 3206 "This container is valid only when the user chooses 3207 End.DX2V behavior."; 3208 } 3209 description 3210 "Endpoint with decapsulation and specific VLAN 3211 L2 table lookup. 3212 Pop the (outer) IPv6 header and its extension headers. 3213 Lookup the exposed inner VLANs in L2 table T. 3214 Forward via the matched table entry. 3215 The End.DX2V is used for EVPN Flexible cross-connect 3216 use-cases"; 3218 leaf lookup-table-vlan { 3219 type srv6-types:table-id; 3220 mandatory true; 3221 description 3222 "VLAN lookup table. There could be multiple 3223 vlan demux tables on the node, where a DX2V SID 3224 points to one vlan table"; 3225 } 3226 } 3228 container end-dt2u { 3229 when "../end-behavior-type = 'End.DT2U'" { 3230 description 3231 "This container is valid only when the user chooses 3232 End.DT2U behavior."; 3233 } 3234 description 3235 "Endpoint with decapsulation and specific 3236 unicast L2 MAC table lookup. 3237 Pop the (outer) IPv6 header and its extension headers. 3238 Learn the exposed inner MAC SA in L2 MAC table T. 3239 Lookup the exposed inner MAC DA in L2 MAC table T. 3240 Forward via the matched T entry else to all L2OIF in T. 3241 The End.DT2U is used for EVPN Bridging unicast use cases"; 3243 leaf lookup-table-mac { 3244 type srv6-types:table-id; 3245 mandatory true; 3246 description "MAC L2 lookup table"; 3247 } 3248 } 3250 container end-dt2m { 3251 when "../end-behavior-type = 'End.DT2M'" { 3252 description 3253 "This container is valid only when the user chooses 3254 End.DT2M behavior."; 3255 } 3256 description 3257 "Endpoint with decapsulation and specific flooding table. 3258 Pop the (outer) IPv6 header and its extension headers. 3259 Learn the exposed inner MAC SA in L2 MAC table T. 3260 Forward on all L2OIF (in the flooding table) excluding the one 3261 identfied by Arg.FE2. 3262 The End.DT2M is used for EVPN Bridging BUM use case with 3263 ESI (Split Horizon) filtering capability."; 3265 leaf flooding-table { 3266 type srv6-types:table-id; 3267 mandatory true; 3268 description "L2 Flooding table (list of OIFs)"; 3269 } 3271 uses multi-paths-v6-BUM; 3273 /* TODO - Support for argument Arg.FE2. It is an argument specific 3274 to EVPN ESI filtering and EVPN-ETREE used to exclude specific 3275 OIF (or set of OIFs) from flooding table. */ 3276 } 3278 /* End of EVPN END behavior types */ 3279 } 3281 grouping srv6-static-cfg { 3282 description 3283 "Grouping configuration and operation for SRv6 sid."; 3285 list sid { 3286 key "function"; 3287 description "List of locally instantiated SIDs"; 3289 uses srv6-sid-config; 3290 } 3291 } 3293 augment "/rt:routing/sr:segment-routing/srv6:srv6/srv6:locators/srv6:locator" { 3294 description 3295 "This augments locator leaf within SRv6."; 3297 container static { 3298 description "Static SRv6"; 3300 /* Local SIDs */ 3301 container local-sids { 3302 description 3303 "SRv6-static locally instantiated SIDs"; 3305 uses srv6-static-cfg; 3306 /* no state for now; SID state accessible through base model */ 3307 } 3309 } 3310 } 3311 } // module 3313 3315 Figure 7: ietf-srv6-static.yang 3317 6. Security Considerations 3319 The YANG module specified in this document defines a schema for data 3320 that is designed to be accessed via network management protocols such 3321 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 3322 is the secure transport layer, and the mandatory-to-implement secure 3323 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 3324 is HTTPS, and the mandatory-to-implement secure transport is TLS 3325 [RFC8446]. 3327 The Network Configuration Access Control Model (NACM) [RFC8341] 3328 provides the means to restrict access for particular NETCONF or 3329 RESTCONF users to a preconfigured subset of all available NETCONF or 3330 RESTCONF protocol operations and content. 3332 There are a number of data nodes defined in this YANG module that are 3333 writable/creatable/ deletable (i.e., config true, which is the 3334 default). These data nodes may be considered sensitive or vulnerable 3335 in some network environments. Write operations (e.g., edit-config) 3336 to these data nodes without proper protection can have a negative 3337 effect on network operations. 3339 Some of the readable data nodes in this YANG module may be considered 3340 sensitive or vulnerable in some network environments. It is thus 3341 important to control read access (e.g., via get, get-config, or 3342 notification) to these data nodes. 3344 It goes without saying that this specification also inherits the 3345 security considerations captured in the SRv6 specification document 3346 [RFC8986]. 3348 7. IANA Considerations 3350 This document requests the registration of the following URIs in the 3351 IETF "XML registry" [RFC3688]: 3353 +-----------------------------------------------+------------+------+ 3354 | URI | Registrant | XML | 3355 +-----------------------------------------------+------------+------+ 3356 | urn:ietf:params:xml:ns:yang:ietf-srv6-types | The IESG | N/A | 3357 | | | | 3358 | urn:ietf:params:xml:ns:yang:ietf-srv6-base | The IESG | N/A | 3359 | urn:ietf:params:xml:ns:yang:ietf-srv6-static | The IESG | N/A | 3360 +-----------------------------------------------+------------+------+ 3362 This document requests the registration of the following YANG modules 3363 in the "YANG Module Names" registry [RFC6020]: 3365 +-------------+--------------------------------+----------+---------+ 3366 | Name | Namespace | Prefix | Referen | 3367 | | | | ce | 3368 +-------------+--------------------------------+----------+---------+ 3369 | ietf- | urn:ietf:params:xml:ns:yang:ie | srv6-typ | This do | 3370 | srv6-types | tf-srv6-types | es | cument | 3371 | | | | | 3372 | ietf- | urn:ietf:params:xml:ns:yang:ie | srv6 | This do | 3373 | srv6-base | tf-srv6-base | | cument | 3374 | | | | | 3375 | ietf- | urn:ietf:params:xml:ns:yang:ie | srv6-sta | This do | 3376 | srv6-static | tf-srv6-static | tic | cument | 3377 +-------------+--------------------------------+----------+---------+ 3379 -- RFC Editor: Replace "This document" with the document RFC number 3380 at time of publication, and remove this note. 3382 8. Acknowledgments 3384 The authors would like to acknowledge Darren Dukes, Les Ginsberg, 3385 Ahmed Bashandy, Rajesh Venkateswaran, and Mike Mallin for their 3386 review of some of the contents in this draft. 3388 9. References 3390 9.1. Normative References 3392 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3393 Requirement Levels", BCP 14, RFC 2119, 3394 DOI 10.17487/RFC2119, March 1997, 3395 . 3397 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 3398 DOI 10.17487/RFC3688, January 2004, 3399 . 3401 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 3402 the Network Configuration Protocol (NETCONF)", RFC 6020, 3403 DOI 10.17487/RFC6020, October 2010, 3404 . 3406 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 3407 and A. Bierman, Ed., "Network Configuration Protocol 3408 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 3409 . 3411 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 3412 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 3413 . 3415 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 3416 RFC 6991, DOI 10.17487/RFC6991, July 2013, 3417 . 3419 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 3420 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 3421 . 3423 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 3424 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 3425 May 2017, . 3427 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 3428 "Common YANG Data Types for the Routing Area", RFC 8294, 3429 DOI 10.17487/RFC8294, December 2017, 3430 . 3432 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 3433 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 3434 . 3436 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 3437 Access Control Model", STD 91, RFC 8341, 3438 DOI 10.17487/RFC8341, March 2018, 3439 . 3441 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 3442 and R. Wilton, "Network Management Datastore Architecture 3443 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 3444 . 3446 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 3447 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 3448 . 3450 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 3451 Routing Management (NMDA Version)", RFC 8349, 3452 DOI 10.17487/RFC8349, March 2018, 3453 . 3455 [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., 3456 Decraene, B., Litkowski, S., and R. Shakir, "Segment 3457 Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, 3458 July 2018, . 3460 [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of 3461 Documents Containing YANG Data Models", BCP 216, RFC 8407, 3462 DOI 10.17487/RFC8407, October 2018, 3463 . 3465 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 3466 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 3467 . 3469 [RFC8986] Filsfils, C., Ed., Camarillo, P., Ed., Leddy, J., Voyer, 3470 D., Matsushima, S., and Z. Li, "Segment Routing over IPv6 3471 (SRv6) Network Programming", RFC 8986, 3472 DOI 10.17487/RFC8986, February 2021, 3473 . 3475 [RFC9020] Litkowski, S., Qu, Y., Lindem, A., Sarkar, P., and J. 3476 Tantsura, "YANG Data Model for Segment Routing", RFC 9020, 3477 DOI 10.17487/RFC9020, May 2021, 3478 . 3480 9.2. Informative References 3482 [I-D.ietf-dmm-srv6-mobile-uplane] 3483 Matsushima, S., Filsfils, C., Kohno, M., Garvia, P. C., 3484 Voyer, D., and C. E. Perkins, "Segment Routing IPv6 for 3485 Mobile User Plane", draft-ietf-dmm-srv6-mobile-uplane-17 3486 (work in progress), October 2021. 3488 [I-D.ietf-spring-sr-service-programming] 3489 Clad, F., Xu, X., Filsfils, C., Bernier, D., Li, C., 3490 Decraene, B., Ma, S., Yadlapalli, C., Henderickx, W., and 3491 S. Salsano, "Service Programming with Segment Routing", 3492 draft-ietf-spring-sr-service-programming-05 (work in 3493 progress), September 2021. 3495 [RFC8754] Filsfils, C., Ed., Dukes, D., Ed., Previdi, S., Leddy, J., 3496 Matsushima, S., and D. Voyer, "IPv6 Segment Routing Header 3497 (SRH)", RFC 8754, DOI 10.17487/RFC8754, March 2020, 3498 . 3500 Authors' Addresses 3502 Kamran Raza 3503 Cisco Systems 3504 Email: skraza@cisco.com 3506 Sonal Agarwal 3507 Cisco Systems 3508 Email: agarwaso@cisco.com 3510 Xufeng Liu 3511 Volta Networks 3512 Email: xufeng.liu.ietf@gmail.com 3514 Zhibo Hu 3515 Huawei Technologies 3516 Email: huzhibo@huawei.com 3517 Iftekhar Hussain 3518 Infinera Corporation 3519 Email: IHussain@infinera.com 3521 Himanshu Shah 3522 Ciena Corporation 3523 Email: hshah@ciena.com 3525 Daniel Voyer 3526 Bell Canada 3527 Email: daniel.voyer@bell.ca 3529 Hani Elmalky 3530 Individual 3531 Email: helmalky@google.com 3533 Satoru Matsushima 3534 SoftBank 3535 Email: satoru.matsushima@g.softbank.co.jp 3537 Katsuhiro Horiba 3538 SoftBank 3539 Email: katsuhiro.horiba@g.softbank.co.jp 3541 Jaganbabu Rajamanickam 3542 Cisco Systems 3543 Email: jrajaman@cisco.com 3545 Ahmed AbdelSalam 3546 Cisco Systems 3547 Email: ahabdels@cisco.com