idnits 2.17.1 draft-filsfilscheng-spring-srv6-srh-comp-sl-enc-02.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) == There are 3 instances of lines with non-RFC2606-compliant FQDNs in the document. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (17 November 2020) is 1249 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Looks like a reference, but probably isn't: '0' on line 329 == Outdated reference: A later version (-28) exists of draft-ietf-spring-srv6-network-programming-24 == Outdated reference: A later version (-07) exists of draft-cl-spring-generalized-srv6-for-cmpr-01 == Outdated reference: A later version (-16) exists of draft-filsfils-spring-net-pgm-extension-srv6-usid-08 Summary: 1 error (**), 0 flaws (~~), 5 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 SPRING W. Cheng, Ed. 3 Internet-Draft China Mobile 4 Intended status: Standards Track C. Filsfils 5 Expires: 21 May 2021 Cisco Systems, Inc. 6 Z. Li 7 Huawei Technologies 8 D. Cai 9 Alibaba 10 D. Voyer 11 Bell Canada 12 F. Clad, Ed. 13 Cisco Systems, Inc. 14 S. Zadok 15 Broadcom 16 J. Guichard 17 Futurewei Technologies Ltd. 18 L. Aihua 19 ZTE Corporation 20 17 November 2020 22 Compressed SRv6 Segment List Encoding in SRH 23 draft-filsfilscheng-spring-srv6-srh-comp-sl-enc-02 25 Abstract 27 This document defines a compressed SRv6 Segment List Encoding in the 28 SRH. This solution does not require any SRH data plane change nor 29 any SRv6 control plane change. This solution leverages the SRv6 30 Network Programming model. 32 Status of This Memo 34 This Internet-Draft is submitted in full conformance with the 35 provisions of BCP 78 and BCP 79. 37 Internet-Drafts are working documents of the Internet Engineering 38 Task Force (IETF). Note that other groups may also distribute 39 working documents as Internet-Drafts. The list of current Internet- 40 Drafts is at https://datatracker.ietf.org/drafts/current/. 42 Internet-Drafts are draft documents valid for a maximum of six months 43 and may be updated, replaced, or obsoleted by other documents at any 44 time. It is inappropriate to use Internet-Drafts as reference 45 material or to cite them other than as "work in progress." 47 This Internet-Draft will expire on 21 May 2021. 49 Copyright Notice 51 Copyright (c) 2020 IETF Trust and the persons identified as the 52 document authors. All rights reserved. 54 This document is subject to BCP 78 and the IETF Trust's Legal 55 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 56 license-info) in effect on the date of publication of this document. 57 Please review these documents carefully, as they describe your rights 58 and restrictions with respect to this document. Code Components 59 extracted from this document must include Simplified BSD License text 60 as described in Section 4.e of the Trust Legal Provisions and are 61 provided without warranty as described in the Simplified BSD License. 63 Table of Contents 65 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 66 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 67 3. Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . 3 68 4. SR Endpoint Flavors . . . . . . . . . . . . . . . . . . . . . 4 69 4.1. NEXT-C-SID Flavor . . . . . . . . . . . . . . . . . . . . 5 70 4.2. REPLACE-C-SID Flavor . . . . . . . . . . . . . . . . . . 6 71 4.3. Combined NEXT-and-REPLACE-C-SID Flavor . . . . . . . . . 6 72 5. GIB, LIB, global C-SID and local C-SID . . . . . . . . . . . 8 73 5.1. Global C-SID . . . . . . . . . . . . . . . . . . . . . . 8 74 5.2. Local C-SID . . . . . . . . . . . . . . . . . . . . . . . 8 75 6. C-SID and Block Length . . . . . . . . . . . . . . . . . . . 9 76 6.1. C-SID Length . . . . . . . . . . . . . . . . . . . . . . 9 77 6.2. Block Length . . . . . . . . . . . . . . . . . . . . . . 9 78 6.3. GIB/LIB Usage . . . . . . . . . . . . . . . . . . . . . . 9 79 7. Efficient SID-list Encoding . . . . . . . . . . . . . . . . . 10 80 8. Control Plane . . . . . . . . . . . . . . . . . . . . . . . . 10 81 9. Illustrations . . . . . . . . . . . . . . . . . . . . . . . . 10 82 10. Interoperability Status . . . . . . . . . . . . . . . . . . . 10 83 11. Security Considerations . . . . . . . . . . . . . . . . . . . 10 84 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10 85 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 86 13.1. Normative References . . . . . . . . . . . . . . . . . . 11 87 13.2. Informative References . . . . . . . . . . . . . . . . . 11 88 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 90 1. Introduction 92 The Segment Routing architecture is defined in [RFC8402]. 94 SRv6 Network Programming [I-D.ietf-spring-srv6-network-programming] 95 defines a framework to build a network program with topological and 96 service segments carried in a Segment Routing header (SRH) [RFC8754]. 98 This document adds new flavors to the SR endpoint behaviors defined 99 in [I-D.ietf-spring-srv6-network-programming]. These flavors enable 100 a compressed encoding of the SRv6 Segment-List in the SRH and 101 therefore address the requirements described in 102 [I-D.cheng-spring-shorter-srv6-sid-requirement]. 104 The flavors defined in this document leverage the SRH data plane 105 without any change and do not require any SRv6 control plane change. 107 2. Terminology 109 This document leverages the terms defined in [RFC8402], [RFC8754] and 110 [I-D.ietf-spring-srv6-network-programming]. The reader is assumed to 111 be familiar with this terminology. 113 This document introduces the following new terms: 115 * Compressed-SID (C-SID): A C-SID is a short encoding of a SID in 116 SRv6 packet that does not include the SID block bits (locator 117 block). 119 * Compressed-SID container (C-SID container): An entry of the SRH 120 Segment-List field (128 bits) that contains a sequence of C-SIDs. 122 * Compressed-SID sequence (C-SID sequence): A group of one or more 123 C-SID containers in a segment list that share the same SRv6 SID 124 block. 126 * Uncompressed SID sequence: A group of one or more uncompressed 127 SIDs in a segment list. 129 * Compressed Segment List encoding: A segment list encoding that 130 reduces the packet header length thanks to one or more C-SID 131 sequences. A compressed Segment List encoding may also contain 132 any number of uncompressed SID sequences. 134 3. Basic Concepts 136 In an SRv6 domain, the SIDs are allocated from a particular IPv6 137 prefix: the SRv6 SID block. Therefore, all SRv6 SIDs instantiated 138 from the same SRv6 SID block share the same most significant bits. 139 These common bits are named Locator-Block in 140 [I-D.ietf-spring-srv6-network-programming]. Furthermore, when the 141 combined length of the SRv6 SID Locator, Function and Argument is 142 smaller than 128 bits, the trailing bits are set to zero. 144 When a sequence of consecutive SIDs in a Segment List shares a common 145 Locator-Block, a compressed SRv6 Segment-List encoding can optimize 146 the packet header length by avoiding the repetition of the Locator- 147 Block and trailing bits with each individual SID. 149 The compressed Segment List encoding is fully compliant with the 150 specifications in [RFC8402], [RFC8754] and 151 [I-D.ietf-spring-srv6-network-programming]. Efficient encoding is 152 achieved by combining a compressed Segment List encoding logic on the 153 SR policy headend with new flavors of the base SRv6 endpoint 154 behaviors that decode this compressed encoding. No SRv6 SRH data 155 plane change nor control plane extension is required. 157 A Segment List can be encoded in the packet header using any 158 combination of compressed and uncompressed sequences. The C-SID 159 sequences leverage the flavors defined in this document, while the 160 uncompressed sequences use behaviors and flavors defined in other 161 documents, such as [I-D.ietf-spring-srv6-network-programming]. An SR 162 Policy headend constructs and compresses the SID-list depending on 163 the capabilities of each SR endpoint node that the packet should 164 traverse, as well as its own compression capabilities. 166 It is expected that compressed encoding flavors be available on 167 devices with limited packet manipulation capabilities, such as legacy 168 ASICs. 170 The compressed Segment List encoding supports any SRv6 SID Block 171 allocation. While other options are supported and may provide higher 172 efficiency, each routing domain can be allocated a /48 prefix from a 173 global IPv6 block (see Section 6.2). 175 4. SR Endpoint Flavors 177 This section defines several options to achieve compressed Segment 178 List encoding, in the form of two new flavors for the END, END.X and 179 END.T behaviors of [I-D.ietf-spring-srv6-network-programming]. These 180 flavors could also be combined with behaviors defined in other 181 documents. 183 The compressed encoding can be achieved by leveraging any of these SR 184 endpoint flavors. The NEXT-C-SID flavor and the REPLACE-C-SID flavor 185 expose the same high-level behavior in their use of the SID argument 186 to determine the next segment to be processed, but they have 187 different low-level characteristics that can make one more or less 188 efficient that the other for a particular SRv6 deployment. The NEXT- 189 and-REPLACE-C-SID flavor is the combination of the NEXT-C-SID flavor 190 and the REPLACE-C-SID flavor. It provides the best efficiency in 191 terms of encapsulation size at the cost of increased complexity. 193 It is recommended for ease of operation that a single compressed 194 encoding flavor be used in a given SRv6 domain. However, in a multi- 195 domain deployment, different flavors can be used in different 196 domains. 198 All three flavors leverage the following variables: 200 * Variable B is the Locator Block length of the SID. 202 * Variable NF is the sum of the Locator Node and the Function 203 lengths of the SID. It is also referred to as C-SID length. 205 * Variable A is the Argument length of the SID. 207 4.1. NEXT-C-SID Flavor 209 A SID instantiated with the NEXT-C-SID flavor takes an argument that 210 carries the remaining C-SIDs in the current C-SID container. 212 The length A of the argument is equal to 128-B-NF and should be a 213 multiple of NF. 215 +----------------------------------------------------+ 216 | Locator-Block | Locator-Node | Function | Argument | 217 +----------------------------------------------------+ 218 <----- B -----> <--------- NF ----------> <-- A ---> 220 Pseudo-code: 222 1. If (DA.Argument != 0) { 223 2. Copy DA.Argument into the bits [B..(B+A-1)] of the 224 Destination Address of the IPv6 header. 225 3. Set the bits [(B+A)..127] of the Destination Address 226 of the IPv6 header to zero. 227 4. } Else { 228 5. Decrement Segments Left by 1. 229 6. Copy Segment List[Segments Left] from the SRH to the 230 Destination Address of the IPv6 header. 231 7. } 233 Note: "DA.Argument" identifies the bits "[(B+NF)..127]" in the 234 Destination Address of the IPv6 header. 236 The NEXT-C-SID flavor has been previously documented in 237 [I-D.filsfils-spring-net-pgm-extension-srv6-usid] under the name 238 "SHIFT" flavor. In that context, a C-SID and a C-SID-sequence are 239 respectively named a Micro-Segment (uSID) and a Micro-Program. 241 4.2. REPLACE-C-SID Flavor 243 A SID instantiated with the REPLACE-C-SID flavor takes an argument, 244 which is used to determine the index of the next C-SID in the 245 appropriate container. 247 All SIDs that are part of a C-SID sequence using the REPLACE-C-SID 248 flavor have the same C-SID length NF. 250 The length A of the argument should be at least ceil(log_2(128/NF)). 252 +----------------------------------------------------+ 253 | Locator-Block | Locator-Node | Function | Argument | 254 +----------------------------------------------------+ 255 <----- B -----> <--------- NF ----------> <-- A ---> 257 Pseudo-code: 259 1. If (DA.Argument != 0) { 260 2. Decrement DA.Argument by 1. 261 3. } Else { 262 4. Decrement Segments Left by 1. 263 5. Set DA.Argument to (128/NF - 1). 264 6. } 265 7. Copy Segment List[Segments Left][DA.Argument] into the bits 266 [B..B+NF-1] of the Destination Address of the IPv6 header. 268 Notes: 270 * "DA.Argument" identifies the bits "[(B+NF)..(B+NF+A-1)]" in the 271 Destination Address of the IPv6 header. 273 * "Segment List[Segments Left][DA.Argument]" identifies the bits 274 "[DA.Argument*NF..(DA.Argument+1)*NF-1]" in the SRH Segment List 275 entry at index Segments Left. 277 The REPLACE-C-SID flavor has been previously documented in 278 [I-D.cl-spring-generalized-srv6-for-cmpr] under the name 279 "COC(Continue of Compression)" flavor. In that context, a C-SID and 280 a C-SID-sequence are respectively named a G-SID and G-SRv6 281 compression sub-path. 283 4.3. Combined NEXT-and-REPLACE-C-SID Flavor 285 A SID instantiated with the NEXT-and-REPLACE-C-SID flavor takes a 286 two-parts argument comprising, Arg.Next and Arg.Index, and encoded in 287 the SID in this order. 289 The length A_I of Arg.Index is equal to ceil(log_2(128/NF)). 291 The length A_N of Arg.Next is equal to 128-B-NF-A_I and must be a 292 multiple of NF. 294 The total SID argument length A is the sum of A_I and A_N. 296 The NEXT-and-REPLACE-C-SID flavor also leverages an additional 297 variable, C_DA, that is equal to (1 + (A_N/NF)) and represents the 298 number of C-SID's that can be encoded in the IPv6 Destination 299 Address. 301 All SIDs that are part of a C-SID sequence using the NEXT-and- 302 REPLACE-C-SID flavor must have the same C-SID length NF. 303 Furthermore, this NF must be a divisor of 128. 305 +----------------------------------------------------------------+ 306 | Locator-Block | Locator-Node | Function | Arg.Next | Arg.Index | 307 +----------------------------------------------------------------+ 308 <----- B -----> <--------- NF ----------> <- A_N --> <-- A_I --> 310 Pseudo-code: 312 1. If (DA.Arg.Next != 0) { 313 2. Copy DA.Arg.Next into the bits [B..(B+A_N-1)] of the 314 Destination Address of the IPv6 header. 315 3. Set the bits [(B+A_N)..(B+NF+A_N-1)] of the Destination Address 316 of the IPv6 header to zero. 317 4. } Else If (DA.Arg.Index >= C_DA) { 318 5. Decrement DA.Arg.Index by C_DA. 319 6. Copy C_DA*NF bits from Segment List[Segments Left][DA.Arg.Index] 320 into the bits [B..B+C_DA*NF-1] of the Destination Address of 321 the IPv6 header. 322 7. } Else If (Segments Left != 0) { 323 8. Decrement Segments Left by 1. 324 9. Set DA.Arg.Index to ((DA.Arg.Index - C_DA) % (128/NF)). 325 10. Copy C_DA*NF bits from Segment List[Segments Left][DA.Arg.Index] 326 into the bits [B..B+C_DA*NF-1] of the Destination Address of 327 the IPv6 header. 328 11. } Else { 329 12. Copy DA.Arg.Index*NF bits from Segment List[0][0] into the bits 330 [B..B+DA.Arg.Index*NF-1] of the Destination Address of the 331 IPv6 header. 332 13. Set the bits [B+DA.Arg.Index*NF..B+NF+A_N-1] of the Destination 333 Address of the IPv6 header to zero. 334 14. Set DA.Arg.Index to 0. 335 15. } 336 Notes: 338 * "DA.Arg.Next" identifies the bits "[(B+NF)..(B+NF+A_N-1)]" in the 339 Destination Address of the IPv6 header. 341 * "DA.Arg.Index" identifies the bits "[(B+NF+A_N)..(B+NF+A_N+A_I- 342 1)]" in the Destination Address of the IPv6 header. 344 * "Segment List[Segments Left][DA.Arg.Index]" identifies the bits 345 "[DA.Arg.Index*NF..(DA.Arg.Index+1)*NF-1]" in the SRH Segment List 346 entry at index Segments Left. 348 5. GIB, LIB, global C-SID and local C-SID 350 GIB: The set of IDs available for global C-SID allocation. 352 LIB: The set of IDs available for local C-SID allocation. 354 5.1. Global C-SID 356 A C-SID from the GIB. 358 A Global C-SID typically identifies a shortest-path to a node in the 359 SRv6 domain. An IP route is advertised by the parent node to each of 360 its global C-SID's, under the associated C-SID block. The parent 361 node executes a variant of the END behavior. 363 A node can have multiple global C-SID's under the same C-SID blocks 364 (e.g. one per IGP flexible algorithm). Multiple nodes may share the 365 same global C-SID (anycast). 367 5.2. Local C-SID 369 A C-SID from the LIB. 371 A local C-SID may identify a cross-connect to a direct neighbor over 372 a specific interface or a VPN context. 374 No IP route is advertised by a parent node for its local C-SID's. 376 If N1 and N2 are two different physical nodes of the SRv6 domain and 377 I is a local C-SID value, then N1 and N2 may bind two different 378 behaviors to I. 380 The concept of LIB is applicable to SRv6 and specifically to its 381 NEXT-C-SID and REPLACE-C-SID flavors. The shorter the SID/C-SID, the 382 more benefit the LIB brings. 384 The allocation of C-SID's from the GIB and LIB depends on the C-SID 385 length (see Section 6.3). 387 6. C-SID and Block Length 389 6.1. C-SID Length 391 The NEXT-C-SID flavor supports both 16- and 32-bit C-SID lengths. A 392 C-SID length of 16-bit is recommended. 394 The REPLACE-C-SID flavor supports both 16- and 32-bit C-SID lengths. 395 A C-SID length of 32-bit is recommended. 397 6.2. Block Length 399 The compressed Segment List encoding supports any SRv6 SID Block 400 allocation either from GUA or LUA space. 402 The recommended SRv6 SID block sizes for the NEXT-C-SID flavor are 403 16, 32 or 48 bits. The smaller the block, the higher the compression 404 efficiency. 406 The recommended SRv6 SID block size for the REPLACE-C-SID flavor can 407 be 48, 56, 64, 72 or 80 bits, depending on the needs of the operator. 409 6.3. GIB/LIB Usage 411 The previous block and C-SID length recommendations, call for the 412 following GIB/LIB usage: 414 * NEXT-C-SID: 416 - GIB: END.NEXT-C-SID 418 - LIB: END.X.NEXT-C-SID, END.DX.NEXT-C-SID, END.DT.NEXT-C-SID 420 - LIB: END.DX.NEXT-C-SID for large-scale PW support 422 * REPLACE-C-SID: 424 - GIB: END.REPLACE-C-SID, END.X.REPLACE-C-SID, END.DX.REPLACE- 425 C-SID, END.DT.REPLACE-C-SID 427 - LIB: END.DX.REPLACE-C-SID for large-scale PW support 429 7. Efficient SID-list Encoding 431 The compressed SID-list encoding logic is a local behavior of the SR 432 Policy headend node and hence out of the scope of this document. 434 8. Control Plane 436 This document does not require any control plane modification. 438 9. Illustrations 440 Illustrations will be provided in a separate document. 442 10. Interoperability Status 444 In November 2020, China Mobile successfully validated multiple 445 interoperable implementations of the NEXT-C-SID and REPLACE-C-SID 446 flavors defined in this document. 448 This testing covered two different implementations of the SRv6 449 endpoint flavors defined in this document: 451 * Hardware implementation in Cisco ASR 9000 running IOS XR 453 * Software implementation in Cisco IOS XRv9000 virtual appliance 455 * Hardware implementation in Huawei NE40E and NE5000E running VRP 457 The interoperability was validated for the following scenario: 459 * Packet forwarding through a traffic engineering segment list 460 combining, in the same SRH ([RFC8754]), SRv6 SIDs bound to an 461 endpoint behavior with the NEXT-C-SID flavor and SRv6 SIDs bound 462 to an endpoint behavior with the REPLACE-C-SID flavor. 464 Further interoperability testing is ongoing and will be reported in 465 this document as the work progresses. 467 11. Security Considerations 469 TBD 471 12. Acknowledgements 473 The authors would like to thank Bruno Decraene, Cheng Li, Kamran 474 Raza, Xing Jiang and YuanChao Su. 476 13. References 477 13.1. Normative References 479 [I-D.ietf-spring-srv6-network-programming] 480 Filsfils, C., Camarillo, P., Leddy, J., Voyer, D., 481 Matsushima, S., and Z. Li, "SRv6 Network Programming", 482 Work in Progress, Internet-Draft, draft-ietf-spring-srv6- 483 network-programming-24, 7 October 2020, 484 . 487 [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., 488 Decraene, B., Litkowski, S., and R. Shakir, "Segment 489 Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, 490 July 2018, . 492 [RFC8754] Filsfils, C., Ed., Dukes, D., Ed., Previdi, S., Leddy, J., 493 Matsushima, S., and D. Voyer, "IPv6 Segment Routing Header 494 (SRH)", RFC 8754, DOI 10.17487/RFC8754, March 2020, 495 . 497 13.2. Informative References 499 [I-D.cheng-spring-shorter-srv6-sid-requirement] 500 Cheng, W., Xie, C., Pang, R., Li, Z., Chen, R., Zu, L., 501 Duan, X., Mirsky, G., Dukes, D., and S. Zadok, "Shorter 502 SRv6 SID Requirements", Work in Progress, Internet-Draft, 503 draft-cheng-spring-shorter-srv6-sid-requirement-02, 13 504 July 2020, . 507 [I-D.cl-spring-generalized-srv6-for-cmpr] 508 Cheng, W., Li, Z., Li, C., Clad, F., Aihua, L., Xie, C., 509 Liu, Y., and S. Zadok, "Generalized SRv6 Network 510 Programming for SRv6 Compression", Work in Progress, 511 Internet-Draft, draft-cl-spring-generalized-srv6-for-cmpr- 512 01, 19 May 2020, . 515 [I-D.filsfils-spring-net-pgm-extension-srv6-usid] 516 Filsfils, C., Camarillo, P., Cai, D., Voyer, D., Meilik, 517 I., Patel, K., Henderickx, W., Jonnalagadda, P., Melman, 518 D., Liu, Y., and J. Guichard, "Network Programming 519 extension: SRv6 uSID instruction", Work in Progress, 520 Internet-Draft, draft-filsfils-spring-net-pgm-extension- 521 srv6-usid-08, 2 November 2020, . 525 Authors' Addresses 527 Weiqiang Cheng (editor) 528 China Mobile 529 China 531 Email: chengweiqiang@chinamobile.com 533 Clarence Filsfils 534 Cisco Systems, Inc. 535 Belgium 537 Email: cf@cisco.com 539 Zhenbin Li 540 Huawei Technologies 541 China 543 Email: lizhenbin@huawei.com 545 Dennis Cai 546 Alibaba 547 United States of America 549 Email: d.cai@alibaba-inc.com 551 Daniel Voyer 552 Bell Canada 553 Canada 555 Email: daniel.voyer@bell.ca 557 Francois Clad (editor) 558 Cisco Systems, Inc. 559 France 561 Email: fclad@cisco.com 563 Shay Zadok 564 Broadcom 565 Israel 566 Email: shay.zadok@broadcom.com 568 James N Guichard 569 Futurewei Technologies Ltd. 570 United States of America 572 Email: james.n.guichard@futurewei.com 574 Liu Aihua 575 ZTE Corporation 576 China 578 Email: liu.aihua@zte.com.cn