idnits 2.17.1 draft-filsfilscheng-spring-srv6-srh-comp-sl-enc-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: ---------------------------------------------------------------------------- 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 (May 19, 2020) is 1436 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-15 == Outdated reference: A later version (-02) exists of draft-cheng-spring-shorter-srv6-sid-requirement-01 == Outdated reference: A later version (-07) exists of draft-cl-spring-generalized-srv6-for-cmpr-00 == Outdated reference: A later version (-16) exists of draft-filsfils-spring-net-pgm-extension-srv6-usid-05 Summary: 1 error (**), 0 flaws (~~), 6 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: November 20, 2020 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 May 19, 2020 22 Compressed SRv6 Segment List Encoding in SRH 23 draft-filsfilscheng-spring-srv6-srh-comp-sl-enc-01 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 November 20, 2020. 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 56 (https://trustee.ietf.org/license-info) in effect on the date of 57 publication of this document. Please review these documents 58 carefully, as they describe your rights and restrictions with respect 59 to this document. Code Components extracted from this document must 60 include Simplified BSD License text as described in Section 4.e of 61 the Trust Legal Provisions and are provided without warranty as 62 described in the Simplified BSD License. 64 Table of Contents 66 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 67 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 68 3. Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . 3 69 4. SR Endpoint Flavors . . . . . . . . . . . . . . . . . . . . . 4 70 4.1. NEXT-C-SID Flavor . . . . . . . . . . . . . . . . . . . . 5 71 4.2. REPLACE-C-SID Flavor . . . . . . . . . . . . . . . . . . 6 72 4.3. Combined NEXT-and-REPLACE-C-SID Flavor . . . . . . . . . 6 73 5. GIB, LIB, global C-SID and local C-SID . . . . . . . . . . . 8 74 5.1. Global C-SID . . . . . . . . . . . . . . . . . . . . . . 8 75 5.2. Local C-SID . . . . . . . . . . . . . . . . . . . . . . . 8 76 6. C-SID and Block Length . . . . . . . . . . . . . . . . . . . 9 77 6.1. C-SID Length . . . . . . . . . . . . . . . . . . . . . . 9 78 6.2. Block Length . . . . . . . . . . . . . . . . . . . . . . 9 79 6.3. GIB/LIB Usage . . . . . . . . . . . . . . . . . . . . . . 9 80 7. Efficient SID-list Encoding . . . . . . . . . . . . . . . . . 10 81 8. Control Plane . . . . . . . . . . . . . . . . . . . . . . . . 10 82 9. Illustrations . . . . . . . . . . . . . . . . . . . . . . . . 10 83 10. Security Considerations . . . . . . . . . . . . . . . . . . . 10 84 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10 85 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 86 12.1. Normative References . . . . . . . . . . . . . . . . . . 10 87 12.2. Informative References . . . . . . . . . . . . . . . . . 10 88 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 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 o 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 o 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 o 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 o Uncompressed SID sequence: A group of one or more uncompressed 127 SIDs in a segment list. 129 o 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 o Variable B is the Locator Block length of the SID. 202 o 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 o 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)..(B+NF+A-1)] 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)..(B+NF+A-1)]" 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 o "DA.Argument" identifies the bits "[(B+NF)..(B+NF+A-1)]" in the 271 Destination Address of the IPv6 header. 273 o "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+F+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 o "DA.Arg.Next" identifies the bits "[(B+NF)..(B+NF+A_N-1)]" in the 339 Destination Address of the IPv6 header. 341 o "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 o "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 o 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 o 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. Security Considerations 444 TBD 446 11. Acknowledgements 448 TBD 450 12. References 452 12.1. Normative References 454 [I-D.ietf-spring-srv6-network-programming] 455 Filsfils, C., Camarillo, P., Leddy, J., Voyer, D., 456 Matsushima, S., and Z. Li, "SRv6 Network Programming", 457 draft-ietf-spring-srv6-network-programming-15 (work in 458 progress), March 2020. 460 [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., 461 Decraene, B., Litkowski, S., and R. Shakir, "Segment 462 Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, 463 July 2018, . 465 [RFC8754] Filsfils, C., Ed., Dukes, D., Ed., Previdi, S., Leddy, J., 466 Matsushima, S., and D. Voyer, "IPv6 Segment Routing Header 467 (SRH)", RFC 8754, DOI 10.17487/RFC8754, March 2020, 468 . 470 12.2. Informative References 472 [I-D.cheng-spring-shorter-srv6-sid-requirement] 473 Cheng, W., Xie, C., Pang, R., Li, Z., Chen, R., Lijun, L., 474 Duan, X., and G. Mirsky, "Shorter SRv6 SID Requirements", 475 draft-cheng-spring-shorter-srv6-sid-requirement-01 (work 476 in progress), March 2020. 478 [I-D.cl-spring-generalized-srv6-for-cmpr] 479 Cheng, W., Li, Z., Li, C., Clad, F., Aihua, L., Xie, C., 480 Liu, Y., and S. Shay, "Generalized SRv6 Network 481 Programming for SRv6 Compression", draft-cl-spring- 482 generalized-srv6-for-cmpr-00 (work in progress), May 2020. 484 [I-D.filsfils-spring-net-pgm-extension-srv6-usid] 485 Filsfils, C., Camarillo, P., Cai, D., Voyer, D., Meilik, 486 I., Patel, K., Henderickx, W., Jonnalagadda, P., Melman, 487 D., and Y. Liu, "Network Programming extension: SRv6 uSID 488 instruction", draft-filsfils-spring-net-pgm-extension- 489 srv6-usid-05 (work in progress), May 2020. 491 Authors' Addresses 493 Weiqiang Cheng (editor) 494 China Mobile 495 China 497 Email: chengweiqiang@chinamobile.com 499 Clarence Filsfils 500 Cisco Systems, Inc. 501 Belgium 503 Email: cf@cisco.com 505 Zhenbin Li 506 Huawei Technologies 507 China 509 Email: lizhenbin@huawei.com 511 Dennis Cai 512 Alibaba 513 USA 515 Email: d.cai@alibaba-inc.com 517 Daniel Voyer 518 Bell Canada 519 Canada 521 Email: daniel.voyer@bell.ca 522 Francois Clad (editor) 523 Cisco Systems, Inc. 524 France 526 Email: fclad@cisco.com 528 Shay Zadok 529 Broadcom 530 Israel 532 Email: shay.zadok@broadcom.com 534 James N Guichard 535 Futurewei Technologies Ltd. 536 USA 538 Email: james.n.guichard@futurewei.com 540 Liu Aihua 541 ZTE Corporation 542 China 544 Email: liu.aihua@zte.com.cn