idnits 2.17.1 draft-jags-mpls-ext-hdr-00.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (2 March 2022) is 758 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) == Outdated reference: A later version (-05) exists of draft-decraene-mpls-slid-encoded-entropy-label-id-03 == Outdated reference: A later version (-02) exists of draft-saad-mpls-miad-usecases-00 == Outdated reference: A later version (-04) exists of draft-bocci-mpls-miad-adi-requirements-01 Summary: 0 errors (**), 0 flaws (~~), 4 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 MPLS Working Group J. Rajamanickam, Ed. 3 Internet-Draft R. Gandhi, Ed. 4 Intended status: Standards Track J. Bhattacharya 5 Expires: 3 September 2022 Cisco Systems, Inc. 6 B. Decraene 7 Orange 8 R. Zigler 9 Broadcom 10 W. Cheng 11 China Mobile 12 L. Jalil 13 Verizon 14 2 March 2022 16 MPLS Extension Header Encodings 17 draft-jags-mpls-ext-hdr-00 19 Abstract 21 This document uses the Multiprotocol Label Switching (MPLS) Entropy 22 Label (EL) extensions defined in draft-decraene-mpls-slid-encoded- 23 entropy-label-id or a new Special Purpose Label to indicate the 24 presence of MPLS Extension Header (MEH) in an MPLS label stack. It 25 defines different MPLS Extension Header encoding formats to carry 26 additional data in the MPLS label stack that can influence forwarding 27 decision and to carry additional data after the Bottom of the MPLS 28 label stack. 30 Status of This Memo 32 This Internet-Draft is submitted in full conformance with the 33 provisions of BCP 78 and BCP 79. 35 Internet-Drafts are working documents of the Internet Engineering 36 Task Force (IETF). Note that other groups may also distribute 37 working documents as Internet-Drafts. The list of current Internet- 38 Drafts is at https://datatracker.ietf.org/drafts/current/. 40 Internet-Drafts are draft documents valid for a maximum of six months 41 and may be updated, replaced, or obsoleted by other documents at any 42 time. It is inappropriate to use Internet-Drafts as reference 43 material or to cite them other than as "work in progress." 45 This Internet-Draft will expire on 3 September 2022. 47 Copyright Notice 49 Copyright (c) 2022 IETF Trust and the persons identified as the 50 document authors. All rights reserved. 52 This document is subject to BCP 78 and the IETF Trust's Legal 53 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 54 license-info) in effect on the date of publication of this document. 55 Please review these documents carefully, as they describe your rights 56 and restrictions with respect to this document. Code Components 57 extracted from this document must include Revised BSD License text as 58 described in Section 4.e of the Trust Legal Provisions and are 59 provided without warranty as described in the Revised BSD License. 61 Table of Contents 63 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 64 1.1. Requirements . . . . . . . . . . . . . . . . . . . . . . 4 65 2. Conventions Used in This Document . . . . . . . . . . . . . . 4 66 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 67 2.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 68 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 6 69 3.1. Option 1 - ELC as MPLS Extension Header Indicator . . . . 7 70 3.1.1. Advantages with ELC . . . . . . . . . . . . . . . . . 8 71 3.2. Option 2 - New SPL as MPLS Extension Header Indicator . . 9 72 3.3. Option 3 - NPL as MPLS Extension Header Indicator . . . . 9 73 4. In-Stack MPLS Extension Header Encoding . . . . . . . . . . . 10 74 5. Bottom Of Stack MPLS Extension Header Encoding . . . . . . . 12 75 6. MPLS Extension Header Encoding Example Use-case-1.a - Carrying 76 FI without data in the MPLS label stack . . . . . . . . . 14 77 7. MPLS Extension Header Encoding Example Use-case-1.b - Carrying 78 FI with data in the MPLS label stack . . . . . . . . . . 15 79 8. MPLS Extension Header Encoding Example Use-case-2 - Carrying FI 80 with data after the MPLS label stack . . . . . . . . . . 16 81 9. MPLS Extension Header Encoding Example Use-case-3 - Carrying 82 use-case 1.a, 1.b and 2 in MPLS packet . . . . . . . . . 17 83 10. Node Capability Signaling . . . . . . . . . . . . . . . . . . 18 84 11. Security Considerations . . . . . . . . . . . . . . . . . . . 18 85 12. Backward Compatibility . . . . . . . . . . . . . . . . . . . 18 86 12.1. Backward Compatibility With ELC as MEH Indicator . . . . 18 87 12.2. Backward Compatibility With SPL as MEH Indicator . . . . 19 88 13. Processing In-Stack MPLS Extension Header . . . . . . . . . . 19 89 14. Processing BOS MPLS Extension Header . . . . . . . . . . . . 20 90 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 91 15.1. IANA Considerations for Forwarding Instruction Flags . . 20 92 15.2. IANA Considerations for IS-FI Opcode . . . . . . . . . . 21 93 15.3. IANA Considerations for BOS-FI Opcode . . . . . . . . . 21 94 15.4. IANA Considerations for New Special Purpose Label . . . 22 96 16. Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . 22 97 16.1. Alternate approach for In-Stack Extension Header 98 Encoding . . . . . . . . . . . . . . . . . . . . . . . . 22 99 16.2. MPLS Extension Header Example for Entropy Label using New 100 SPL . . . . . . . . . . . . . . . . . . . . . . . . . . 23 101 16.3. MPLS BOS Extension Header Example with IOAM Data 102 Fields . . . . . . . . . . . . . . . . . . . . . . . . . 24 103 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 25 104 17.1. Normative References . . . . . . . . . . . . . . . . . . 25 105 17.2. Informative References . . . . . . . . . . . . . . . . . 25 106 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 26 107 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 26 108 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 110 1. Introduction 112 [RFC3032] defines MPLS Header for carrying a stack of MPLS labels 113 which are used to forward packets in an MPLS network. Today's new 114 applications require the MPLS packets to carry some additional 115 indicators and associated ancillary data that would be used in MPLS 116 packet forwarding decision or for OAM purpose. 118 Each application requires a separate Extended Special Purpose Label 119 (eSPL) to address its problem that adds 2 extra labels (extension 120 label 15 + eSPL) in the MPLS label stack. This approach does not 121 scale, as it increases the label stack depth with multiple eSPLs that 122 need to be imposed by the encapsulation node and scanned by the 123 intermediate nodes. Also, currently there are no solutions defined 124 to add ancillary data in a label stack or add multiple ancillary data 125 after the Bottom Of Stack (BOS) in an MPLS packet. Ancillary data 126 can be used to carry additional information, for example, a network 127 slice identifier, In-Situ OAM (IOAM) data presence indicator, etc. 128 Some of these use-cases are described in 129 [I-D.saad-mpls-miad-usecases]. 131 This document defines a new MPLS data plane extension header format 132 to efficiently encode forwarding and OAM instructions those are easy 133 to process in hardware. The instructions are encoded in the form of 134 flags and opcodes and can be carried without associated ancillary 135 data or with short in-stack ancillary data or with one or more 136 ancillary data after the BOS. 138 MPLS Entropy Label (EL) standard is defined in [RFC6790]. This 139 document uses the Entropy Label extensions defined in 140 [I-D.decraene-mpls-slid-encoded-entropy-label-id] or a new Special 141 Purpose Label (SPL) to indicate the presence of MPLS Extension Header 142 (MEH) in an MPLS label stack. It defines different MPLS Extension 143 Header encoding formats to carry additional data in the MPLS label 144 stack that can influence forwarding decision and to carry additional 145 data after the Bottom of the MPLS label stack. 147 1.1. Requirements 149 This document defines different MPLS Extension Header encoding 150 formats to support the following requirements: 152 1. MPLS packet to carry additional data in the MPLS label stack to 153 influence forwarding. This can be of two types: 155 1a. Forwarding Instruction Flags (FIF) that does not use 156 additional data. 158 1b. Forwarding Instruction (FI) that needs additional data. 160 2. MPLS packet to carry additional data after the Bottom of the MPLS 161 Label Stack. 163 3. Any combination of (1) and (2) in the same MPLS packet. 165 When MPLS Extension Header is added in an MPLS Label stack, the 166 extension header MUST NOT contain the label field that can conflict 167 with any previously allocated reserved label value. 168 [I-D.bocci-mpls-miad-adi-requirements] describes additional 169 requirements for MPLS Extension Header. 171 2. Conventions Used in This Document 173 2.1. Requirements Language 175 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 176 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 177 document are to be interpreted as described in [RFC2119] [RFC8174] 178 when, and only when, they appear in all capitals, as shown here. 180 2.2. Terminology 182 BOS (Bottom Of Stack): Bottom of the MPLS label stack. 184 BOS-FI (Bottom Of Stack Forwarding Instruction): This is the 185 Forwarding Instruction that is encoded after Bottom of MPLS Stack. 187 BPI (Bottom of the Stack MPLS Extension Header Presence Indicator): 188 This is the flag to indicate the presence of MPLS Extension Header 189 after the bottom of the MPLS label stack. 191 E2E (Edge-To-Edge): Edge to Edge. 193 EL (Entropy Label): Entropy Label defined as per [RFC6790]. 195 ELC (Entropy Label Control): EL TTL field re-purposed to carry 196 Entropy Label control bits defined in 197 [I-D.decraene-mpls-slid-encoded-entropy-label-id]. 199 FI (Forwarding Instruction): Forwarding Instruction is the 200 instruction that expresses the forwarding behaviour. This can result 201 in changing the forwarding decision or adding some information or 202 important data to the packet. 204 FIF (Forwarding Instruction Flags): A bitwise flag that influences 205 the forwarding behaviour. This flag does not need any additional 206 data to execute its FI. 208 FIOC (Forwarding Instruction Opcode): A Opcode value that refers to a 209 specific Forwarding Instruction. 211 HBI (Hop-By-Hop Bottom of the Stack MPLS Extension Header Presence 212 Indicator): This is the flag to indicate the presence of MPLS 213 Extension Header after the bottom of the MPLS label stack that 214 require Hop-By-Hop processing. 216 IS-FI (In-Stack Forwarding Instruction): This is the Forwarding 217 Instruction that is encoded in the MPLS label stack. 219 IPI (In-Stack MPLS Extension Header Presence Indicator): This is the 220 flag to indicate the presence of MPLS Extension Header in the MPLS 221 label stack. 223 MEI (MPLS Extension Indicator): This is the Indicator MPLS Label 224 which indicates the presence of MPLS Extension Header in the MPLS 225 Label stack. 227 MEH (MPLS Extension Header): MPLS Extension Header encoding carried 228 in the MPLS Label stack. 230 MPLS (Multiprotocol Label Switching): Multiprotocol Label Switching. 232 NPL (Network Programming Label): Network Programming Label 233 provisioned by user. 235 SPI (Slice ID Presence Indicator): This is the flag to indicate the 236 presence of Slice ID in the Entropy Label field. 238 SPL (Special Purpose Label): IANA Allocated Special Purpose Label in 239 the range of 0-15. Extended Special Purpose Label (eSPL) uses label 240 value 15. 242 TC (Traffic Class): Traffic Class. 244 TTL (Time-To-Live): Time To Live. 246 3. Overview 248 Extending existing MPLS Header needs two main parts. 250 * MPLS Extension Header Indicator (MEI) - This is a way to indicate 251 the presence of MPLS Extension Header in the packet. This could 252 be done using two different methods. Each method has its own 253 advantages and disadvantages. This document describes both 254 options of MEI. The encoding formats defined in this document are 255 compatible with both options of MEI. 257 Option 1. MEI by extending ELI/EL 259 Option 2. MEI by using a New Special Purpose Label (SPL) 260 allocated by IANA 262 Option 3. MEI by using New Network Programming Label (NPL) 263 provisioned by user 265 * MPLS Extension Header Format - The format in which the MPLS 266 Extension Header could be carried in the MPLS packet. This 267 includes both In-stack Extension Header and BOS Extension Header. 269 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 270 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 271 | Label | TC |S| TTL | 272 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 274 Figure 1: MPLS Label Format 276 New In-Stack (IS) MPLS Extension Header format is defined in this 277 document to carry the In-stack Forwarding Instruction and 278 corresponding data in the MPLS label stack. 280 * It uses MPLS Label field to carry the Forwarding Instruction 281 Opcode. 283 * It uses Traffic Class (TC) field to identify the Length of the 284 MPLS In-Stack Extension Header size. 286 * It uses MPLS Label and Time-To-Live (TTL) fields to carry the In- 287 Stack data (can be Flags or data). 289 A new Bottom Of Stack (BOS) MPLS Extension Header format is defined 290 in this document to carry the BOS Forwarding Instruction and 291 corresponding data after the MPLS Label stack. 293 The MPLS Extension Header encoding formats defined in this document 294 are flexible and allow to stack multiple In-Stack and BOS MPLS 295 Extension Headers in a desired order in the same MPLS packet. 297 3.1. Option 1 - ELC as MPLS Extension Header Indicator 299 As described in [I-D.decraene-mpls-slid-encoded-entropy-label-id], 300 the EL's 8-bit TTL field is re-purposed as Entropy Label Control 301 (ELC) field. One bit from ELC is requested for the Slice ID Presence 302 Indicator (SPI) and the 7 bits are available for use. From the ELC, 303 3 bits (for IPI, BPI and HBI) are allocated to indicate the presence 304 of MPLS Extension Header. 306 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 307 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 308 | Entropy Label Indicator (7) | TC |S| TTL | 309 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 310 | Slice ID | Entropy Label | IL |S| ELC (SPI=1) | 311 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 313 Figure 2: ELI/EL Packet Format 315 TTL (in ELC) bit allocations are defined by user as follows: 317 +==========+=======================================================+ 318 | Bit | Description | 319 | Position | | 320 +==========+=======================================================+ 321 | TBD0 | SPI - Slice ID Presence Indicator: Indicate the | 322 | | presence of Slice ID in the Entropy label as defined | 323 | | in [I-D.decraene-mpls-slid-encoded-entropy-label-id]. | 324 +----------+-------------------------------------------------------+ 325 | TBD1 | IPI - In-Stack Extension Header Presence Indicator: | 326 | | Indicate the presence of In-Stack MPLS Extension | 327 | | Header after this label. | 328 +----------+-------------------------------------------------------+ 329 | TBD2 | BPI - Bottom Of Stack Extension Header Presence | 330 | | Indicator: Indicates the presence of MPLS Extension | 331 | | Header after the Bottom Of Stack (BOS). | 332 +----------+-------------------------------------------------------+ 333 | TBD3 | HBI - Hop-By-Hop Bottom Of Stack Extension Header | 334 | | Indicator: Indicates the MPLS Extension Header after | 335 | | the Bottom Of Stack requires Hop-By-Hop processing. | 336 +----------+-------------------------------------------------------+ 337 | TBD4 - | Unassigned Bits. | 338 | TBD7 | | 339 +----------+-------------------------------------------------------+ 341 Table 1: Bit Fields 343 IL - In-Stack Extension Header Length - The 3-bit TC field in the EL 344 is used to indicate the length of the In-Stack MPLS Extension Header 345 (excluding the ELI and EL labels) in terms of number of 32-bit 346 labels. If more that 7 labels are needed in an MPLS extension 347 header, the node can either use a BOS extension header to carry the 348 data or use an additional In-stack MPLS Extension Header with MEI 349 Label. 351 For backwards compatibility, an intermediate and decapsulating nodes 352 MUST only read the length from the TC field when the IPI (In-Stack 353 Extension Presence Indicator) is set to "1". 355 3.1.1. Advantages with ELC 357 Faster deployment in an existing network that has EL already deployed 358 with an incremental benefit (e.g., incremental signaling extension 359 for ELI capability). 361 Single label for Entropy in the MPLS header which helps with keeping 362 label stack size smaller. 364 When EL is already enabled in the network, the proposed scheme does 365 not require hardware to support an additional SPL indicator. 367 Save a new Special Purpose Label and related protocol extensions to 368 signal its capability in LDP, RSVP-TE, BGP, IS-IS, OSPF, BGP-LS, etc. 370 An intermediate node can compute ECMP hash with the EL field and 371 avoid inconsistent load-balancing of traffic flow that can happen 372 when MPLS Extension Header alters the label stack. 374 Reduce MPLS Label stack size when EL is enabled for ECMP hashing when 375 MPLS Extension Header is also used. As there is only one field for 376 EL in the MPLS Header, it simplifies the MPLS header processing. 378 3.2. Option 2 - New SPL as MPLS Extension Header Indicator 380 The MPLS Extension Header encoding formats defined in this document 381 is equally applicable when using a new Special Purpose Label (SPL) 382 (value TBA1) allocated by IANA. 384 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 385 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 386 | MEI=SPL (TBA1) | IL |S| IPI,BPI,HBI | 387 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 389 Figure 3: New SPL as MPLS Extension Header Indicator 391 The TTL field in the SPL (value TBA1) is used to encode FI Flags 392 including IPI, HBI and BPI flags defined in this document. The 393 definition and meaning of these flags and IL field are exactly the 394 same as those in ELC field. 396 3.3. Option 3 - NPL as MPLS Extension Header Indicator 398 The MPLS Extension Header encoding formats defined in this document 399 is equally applicable when using a Network Programming Label (NPL) 400 configured by an operator. 402 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 403 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 404 | MEI=NPL | IL |S| IPI,BPI,HBI | 405 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 407 Figure 4: NPL as MPLS Extension Header Indicator 409 The TTL field in the NPL is used to encode FI Flags including IPI, 410 HBI and BPI flags defined in this document. The definition and 411 meaning of these flags and IL field are exactly the same as those in 412 ELC field. 414 4. In-Stack MPLS Extension Header Encoding 416 This section describes the encoding format of the MPLS Extension 417 Header carried as part of the MPLS label stack. The encoding format 418 defined is flexible (e.g., stackable opcodes in desired order), 419 extensible (by defining new Opcodes) and ASIC friendly (by using 420 Extension Header Length, Opcode+Data in the same field). 422 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 423 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 424 | Entropy Label or SPL or NPL | IL=1|S| IPI=1 | 425 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 426 | IS-FI Opcode | In-Stack Data |R|D|E|S| In-Stack Data | 427 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 429 Figure 5: In-Stack Extension Header Format 431 IPI flag is set to "1" to indicate the presence of In-Stack MPLS 432 Extension Header. 434 Since In-Stack MPLS Extension Header is present as part of the MPLS 435 Label stack, the 32-bit MPLS Label is redefined to encode the MPLS 436 Extension Header as follows: 438 Label Field: 440 The first 8 bits are used to define the In-Stack Forwarding 441 Instruction (IS-FI) Opcode. Next 12 bits in the Label field and the 442 8 bits from the TTL field are used to carry In-Stack data 443 corresponding to the IS-FI opcode. This opcode ranges from 1 to 255. 444 IS-FI Opcode value of 0 is marked as invalid to avoid the label value 445 aliasing with the reserved SPLs. 447 * IS-FI Opcode Value:1 - IANA Allocated to carry the Forwarding 448 Instruction Flags (FIF). 450 * IS-FI Opcode Value:2 - IANA Allocated to indicate the offset in 451 terms of number of bytes for the start of the BOS data after the 452 MPLS Label Bottom of the Stack. This can allow to carry Generic 453 Control Word (0000b) [RFC4385] and G-ACh (0001b) [RFC5586] fields 454 immediately after the BOS. Adding of this opcode is not required 455 when the BOS data starts immediately after the Bottom of the Label 456 Stack (i.e. when offset is 0). 458 * IS-FI Opcode Value:3-254 - MUST be assigned by IANA. 460 * IS-FI Opcode Value:255 - IANA Allocated for IS-FI Opcode range 461 extension. This gives the extensibility for opcode range beyond 462 255. 464 IS-FI Opcode MUST define the following procedure before it can be 465 used: 467 1. Define the Data format encoded in the MPLS extension header. 469 2. Define the Hop-By-Hop or Edge-To-Edge (only on the 470 decapsulation node) processing scope. 472 3. The Hop-By-Hop IS-FI opcodes MUST be placed before the Edge- 473 To-Edge IS-FI Opcodes in the MPLS Extension Header of the packet 474 to optimize the Hop-By-Hop processing in hardware. 476 TC Field: 478 This field is used to indicate the MPLS Extension Header stacking and 479 In-Stack Data stacking. 481 E (E2E-Bit): MPLS Extension Header In-Stack Data requires E2E 482 processing. If this is set to "1", then this 4-byte MPLS 483 Extension Header requires Edge-To-Edge processing. If this is set 484 to 0, then this 4-byte MPLS Extension Header requires Hop-By-Hop 485 processing. Note that E2E-Bit is not used with the Entropy Label 486 TC field. 488 D (DS-Bit): Data Stacking Bit. This is used to encode more than 20 489 bits of data for this IS-FI Opcode. If this is set to "1", then 490 this is the end of the data for the IS-FI Opcode. 492 R (Reserved Bit): MUST be set to "0" on transmit and ignored on 493 receive. 495 TTL Field: 497 This 8-bit field is used to carry In-Stack data apart from the 12 498 bits in the Label field. 500 NOTE: 502 An intermediate node may use the full MPLS label stack for ECMP 503 hash computation hence the In-Stack MPLS extension header MUST NOT 504 change the Label Field part of the IS-FI data within the same 505 traffic flow. But the TTL part of IS-FI data can change for the 506 same traffic flow without affecting the ECMP hash. The In-Stack 507 Extension Header encoding defined above ensures this. 509 5. Bottom Of Stack MPLS Extension Header Encoding 511 This section describes the encoding format of the MPLS Extension 512 Header which is present after the bottom of the MPLS label stack. 514 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 515 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 516 | Entropy Label or SPL or NPL | TC |1| BPI=1, HBI | 517 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 518 |0 0 1 0|Reserve| BOS-FI Opcode| Length=1(word)| BOS-Flags | 519 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 520 | BOS-Data | 521 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 522 | Payload | 523 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 525 Figure 6: BOS Extension Header Format 527 BPI flag is set to "1" to indicate the presence of MPLS Extension 528 Header after the bottom of MPLS label stack. 530 HBI flag is set to "1" to indicate the MPLS Extension Header after 531 the Bottom Of Stack that requires Hop-By-Hop processing. 533 A new generic 4-byte header is defined to carry the information about 534 the Forwarding Instruction and its corresponding data that is carried 535 after the bottom of label stack. This generic header is added to 536 each Forwarding Instruction that is encoded after the MPLS bottom of 537 the stack. This generic header gives the flexibility to add multiple 538 Forwarding Instruction after the BOS in any desired order. 540 The 4-byte BOS Extension Header is described below: 542 +==========+======================================================+ 543 | Bit | Description | 544 | Position | | 545 +==========+======================================================+ 546 | 0 - 3 | This 4-bit nibble MUST be set to "0010b". This is | 547 | | to avoid aliasing with an IPv4/IPv6 header. | 548 +----------+------------------------------------------------------+ 549 | 4 - 7 | This 4-bit nibble defines the version of the generic | 550 | | header format. The current version value is "0". | 551 +----------+------------------------------------------------------+ 552 | 8 - 15 | This 8-bit field indicates the BOS FI Opcode value. | 553 | | This opcode values will be allocated by IANA. | 554 +----------+------------------------------------------------------+ 555 | 16 - 23 | This 8-bit field indicates the length of the data | 556 | | encoded in units of 4 bytes excluding the current | 557 | | header. | 558 +----------+------------------------------------------------------+ 559 | 24 - 31 | This 8-bit field carries the BOS-Flags. 0 - NH bit | 560 | | (Next-Header Presence Bit): Indicates the presence | 561 | | of next BOS extension header. 1 - H bit (Hop-By-Hop | 562 | | Bit): Hop-By-Hop processing is required for this | 563 | | Bottom Of Stack data. 7 - 2 bits: Unassigned bits. | 564 +----------+------------------------------------------------------+ 566 Table 2: BOS MPLS Extension Header Format 568 BOS-FI Opcode value of 0 is marked as invalid. 570 BOS-FI Opcode Value:1-254 - MUST be assigned by IANA. 572 BOS-FI Opcode Value:255 - IANA Allocated for BOS-FI Opcode range 573 extension. This gives the extensibility for opcode range beyond 255. 575 If an application requires to add its own data TLV, then the TLV can 576 be added as part of BOS-Data. 578 BOS-FI Opcode MUST define the following procedure before it can be 579 used: 581 1. Define the Data format encoded in the MPLS extension header. 583 2. Define the Hop-By-Hop or Edge-To-Edge (only on the 584 decapsulation node) processing scope. 586 3. The Hop-By-Hop BOS-FI opcodes MUST be placed before the Edge- 587 To-Edge BOS-FI Opcodes in the MPLS Extension Header of the packet 588 to optimize the Hop-By-Hop processing in hardware. 590 6. MPLS Extension Header Encoding Example Use-case-1.a - Carrying FI 591 without data in the MPLS label stack 593 The TTL field can support only up to 8-bit flags. This is the use- 594 case to extend the TTL flags and carry additional Forwarding 595 Instruction Flags (FIF) in the MPLS label stack. These forwarding 596 instructions do not require any additional data to be carried with 597 this FI. 599 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 600 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 601 | Entropy Label or SPL or NPL | IL=1|0| IPI=1 | 602 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 603 |IS-FI Opcode=1 | Flags |R|1|E|1| Flags | 604 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 606 Figure 7: Example In-Stack Extension Header Carrying Forwarding 607 Instruction Flags 609 IPI flag is set to "1" to indicate the presence of In-Stack MPLS 610 Extension Header. 612 Label Field: 614 In this case the FI opcode value is set to "1". FI Opcode value 615 "1" is reserved for extending the TTL flags. This indicates the 616 presence of additional flags in the Label field and TTL fields 618 TC Field: 620 DS-Bit - This bit is set to "1" to indicate that the flags are not 621 extended further. 623 TTL Field: 625 8-bit field is used to encode the Forwarding Instruction Flags 626 apart from 12 bits Label field. 628 The FIF bit position and its meaning MUST be defined by IANA. 630 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 631 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 632 | Entropy Label or SPL or NPL | IL=2|0| IPI=1 | 633 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 634 |IS-FI Opcode=1 | Flags |R|1|E|1| Flags | 635 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 636 |1| Flags |R|1|E|1| Flags | 637 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 638 Figure 8: Example In-Stack Extension Header carrying more than 20 639 bits FI Flags 641 More than 20 bits of data can be encoded as part of IS-FI opcode. In 642 this specific case, the FI flags which are more than 20 bits are 643 encoded in next 4 bytes of the MPLS header. 645 While encoding the additional data, the Most Significant bit of the 646 Label Field MUST be set to "1" to prevent from aliasing with the 647 reserved SPLs in the case of legacy devices. 649 7. MPLS Extension Header Encoding Example Use-case-1.b - Carrying FI 650 with data in the MPLS label stack 652 This is the use-case where the MPLS Label stack to carry the 653 Forwarding Instruction with a corresponding data. 655 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 656 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 657 | Entropy Label or SPL or NPL | IL=1|0| IPI=1 | 658 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 659 | IS-FI Opcode | Data |R|1|E|1| Data | 660 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 662 Figure 9: Example In-Stack Extension Header Carrying FI with the data 664 IPI flag is set to "1" to indicate the presence of In-Stack MPLS 665 Extension Header. 667 Label Field: 669 First 8 bits encodes the In-Stack forwarding opcode. In this case 670 the FI opcode value ranges from 1 to 254. This value is assigned 671 by IANA. This opcode value defines data format carried in the 672 Label field and the TTL field. 674 TC Field: 676 DS-Bit - This bit is set to "1" to indicate that the data is 677 encoded in the 19-bit Label field and does not exceed 19 bits. 679 R-Bit - Reserved bit and MUST be set to "0" on transmit and 680 ignored when received. 682 TTL Field: 684 8-bit field is used to encode the In-Stack data apart from 12-bit 685 Label field. 687 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 688 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 689 | Entropy Label or SPL or NPL | IL=2|0| IPI=1 | 690 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 691 | IS-FI Opcode | Data |R|0|E|0| Data | 692 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 693 |1| Data |R|1|E|1| Data | 694 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 696 Figure 10: Example In-Stack Extension Header Carrying FI with the 697 data more than 20 bits 699 More than 20 bits of data can be encoded as part of IS-FI opcode. In 700 this specific case, the In-Stack data which are more than 20 bits are 701 encoded in next 4 bytes of the MPLS header. 703 While encoding the additional data, the Most Significant bit of the 704 Label Field MUST be set to "1" to prevent from aliasing with the 705 reserved SPLs in the case of legacy devices. 707 8. MPLS Extension Header Encoding Example Use-case-2 - Carrying FI with 708 data after the MPLS label stack 710 This is the use-case where the Forwarding Instruction with a 711 corresponding data is carried after the MPLS bottom of label stack. 713 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 714 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 715 | Entropy Label or SPL or NPL | TC |1| BPI=1,HBI=1 | 716 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 717 |0 0 1 0|Reserve|BOS-FI Opcode=1| Length=1(word)|Flags NH=1,H=1 | 718 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 719 | BOS-Data1 | 720 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 721 |0 0 1 0|Reserve|BOS-FI Opcode=2| Length=2(word)|Flags NH=0,H=0 | 722 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 723 | BOS-Data2 | 724 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 725 | BOS-Data2 | 726 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 727 | Payload | 728 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 730 Figure 11: Example BOS Extension Header Carrying FI with data 732 BPI flag is set to "1" to indicate the presence of BOS MPLS Extension 733 Header. Also, HBI flag is set to 1 to indicate the presece of BOS 734 MPLS Extension Header that requires Hop-By-Hop processing. 736 In this case, the MPLS packet is encoding two different types of BOS 737 FI (Opcode 1 and Opcode 2) after the bottom of MPLS label stack. 739 The first BOS MPLS Extension Header has the Length value as "1", this 740 indicates that the data corresponding to this FI opcode "Type1" is 4 741 bytes following this header. Also the Next-Header (NH) flag in BOS- 742 Flags is set to "0x1", this indicates the presence of next BOS MPLS 743 Extension Header. The H flag is set to "0x1" that indicates the Hop- 744 By-Hop processing is required. 746 The second BOS MPLS Extension Header has the Length value as "2", 747 this indicates that the data corresponding to the FI opcode "Type2" 748 is 8 bytes following this header. In this case the Next-Header flag 749 in BOS-Flags is set to "0x0", this indicates that this is the last 750 BOS MPLS Extension Header encoded. The H flag is set to "0x0" that 751 indicates the Hop-By-Hop processing is not required. 753 9. MPLS Extension Header Encoding Example Use-case-3 - Carrying use- 754 case 1.a, 1.b and 2 in MPLS packet 756 This is the use-case where the same MPLS packet carrie the use-cases 757 "1.a", "1.b" and "2". 759 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 760 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 761 | Entropy Label or SPL or NPL | IL=3|0| IPI=BPI=HBI=1 | 762 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 763 | IS-FI Opcode=1| Flags |R|0|E|0| Flags | 764 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 765 | IS-FI Opcode=2| 0 |R|1|E|0| Offset = 1 | 766 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 767 | IS-FI Opcode=3| Data |R|1|E|1| Data | 768 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 769 | | 770 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 771 |0 0 1 0|Reserve|BOS-FI Opcode=1| Length=1(word)|Flags NH=1,H=1 | 772 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 773 | BOS-Data1 | 774 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 775 |0 0 1 0|Reserve|BOS-FI Opcode=2| Length=2(word)|Flags NH=0,H=0 | 776 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 777 | BOS-Data2 | 778 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 779 | BOS-Data2 | 780 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 781 | Payload | 782 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 783 Figure 12: MPLS Packet Carrying 1.a, 1.b and 2 Use-cases 785 IPI and BPI flags are set to "1" to indicate the presence of both In- 786 Stack and BOS MPLS Extension Header as mentioned in the above use- 787 cases. IS-FI Opcode 2 is added to indicate the offset of 1 word 788 after the MPLS header BOS and start of the BOS Extension Header. 790 10. Node Capability Signaling 792 The node capability for the MPLS Extension Header must be signaled 793 before the MPLS Encapsulating node can add the necessary MPLS 794 Extension Header in the MPLS label stack. The capability signaling 795 will be added in LDP, RSVP-TE, BGP, IS-IS, OSPF, BGP-LS, etc. This 796 is outside the scope of this document. 798 11. Security Considerations 800 The security considerations in [RFC3032] also apply to the extensions 801 defined in this document. The MPLS Extension header MUST NOT be 802 exposed to the node which does not support the new MPLS Extension 803 Header. 805 12. Backward Compatibility 807 12.1. Backward Compatibility With ELC as MEH Indicator 809 As specified in [RFC6790], the TTL field of the EL MUST be "0". On 810 the Node which is capable of processing the MPLS Extension Header 811 when it finds that this TTL value is non-zero, then only it will 812 start processing the MPLS Extension header. 814 In addition, the TC field will be interpreted as the In-Stack MPLS 815 Header Extension Length only when the TTL field's IPI Flag is set to 816 "1". 818 For the legacy node that does not advertise the MPLS Extension Header 819 capability, the Encapsulating node MUST make sure that the MPLS 820 Extension header is not at the top of the MPLS label stack to avoid 821 misforwarding the packets by misinterpreting In-Stack Extension 822 Header as a label. 824 The MPLS Extension Header Encoding format is designed to make sure 825 that it does not alias with any reserved SPL. 827 The MPLS extension does not affect the existing GAL / G-ACh [RFC5586] 828 based encoding of data in the MPLS packet. This MPLS extension can 829 co-exist with the existing GAL / G-ACh based encoding of data. 831 12.2. Backward Compatibility With SPL as MEH Indicator 833 For the legacy node that does not advertise the MPLS Extension Header 834 capability, the Encapsulating node MUST make sure that the MPLS 835 Extension header is not at the top of the MPLS label stack to avoid 836 dropping the packets. 838 The MPLS Extension Header Encoding format is designed to make sure 839 that it does not alias with any reserved SPL. 841 The MPLS extension does not affect the existing GAL / G-ACh [RFC5586] 842 based encoding of data in the MPLS packet. This MPLS extension can 843 co-exist with the existing GAL / G-ACh based encoding of data. 845 13. Processing In-Stack MPLS Extension Header 847 Encapsulating Node: 849 * MUST NOT add In-Stack MPLS Extension header if the decapsulation 850 node is not capable of In-Stack MPLS Extension header. 852 * SHOULD NOT change the IS-FI Opcode and the first 12 bits of the 853 In-Stack Data for the same packet flow avoid ECMP path change. 855 * MAY change In-Stack data part present only in the TTL field for 856 the same packet flow. 858 * MUST ensure that the penultimate node does not remove the MPLS 859 extension header. 861 Intermediate Node: 863 * MUST ignore the IS-FI Opcode that are not supported. 865 * MUST NOT add In-Stack MPLS Extension header if the decapsulation 866 node is not capable of In-Stack MPLS Extension header. 868 * SHOULD NOT change the IS-FI Opcode and the first 12 bits of the 869 In-Stack Data for the same packet flow. 871 * MAY change In-Stack data part present only in the TTL field for 872 the same packet flow. 874 * MAY remove the IS-FI opcode and its corresponding data for all 875 matching packet flow. 877 Decapsulating Node: 879 * MUST remove the In-Stack MPLS Extension header. 881 14. Processing BOS MPLS Extension Header 883 Encapsulating Node: 885 * MUST NOT add BOS MPLS Extension header if the decapsulation node 886 is not capable of BOS MPLS Extension header. 888 * MUST ensure that the penultimate node does not remove the MPLS 889 extension header. 891 Intermediate Node: 893 * MAY add additional data to the existing BOS-FI encoded. 895 * MAY add a new BOS-FI and its corresponding data if the 896 decapsulation node supports BOS MPLS Extension header. 898 Decapsulating Node: 900 * MUST remove the BOS MPLS Extension header. 902 15. IANA Considerations 904 Below are the IANA actions which this document is requesting. 906 15.1. IANA Considerations for Forwarding Instruction Flags 908 IANA is requested to create a new registry to assign the bit position 909 and the meaning to the Forwarding Instruction Flags based on the user 910 request. 912 +==============+=============+===============+ 913 | Bit Position | Description | Reference | 914 +==============+=============+===============+ 915 | 19-0 | Unassigned | This document | 916 +--------------+-------------+---------------+ 918 Table 3: Forwarding Instruction Flags Registry 920 15.2. IANA Considerations for IS-FI Opcode 922 IANA is requested to create a new registry to assign IS-FIOC opcode 923 values. All code-points in the range 1 through 175 in this registry 924 shall be allocated according to the "IETF Review" procedure as 925 specified in [RFC8126]. Code points in the range 176 through 239 in 926 this registry shall be allocated according to the "First Come First 927 Served" procedure as specified in [RFC8126]. Remaining code-points 928 are allocated according to Table 4: 930 +===========+=========================+===============+ 931 | Value | Description | Reference | 932 +===========+=========================+===============+ 933 | 1 - 175 | IETF Review | This document | 934 +-----------+-------------------------+---------------+ 935 | 176 - 239 | First Come First Served | This document | 936 +-----------+-------------------------+---------------+ 937 | 240 - 251 | Experimental Use | This document | 938 +-----------+-------------------------+---------------+ 939 | 252 - 254 | Private Use | This document | 940 +-----------+-------------------------+---------------+ 942 Table 4: In-Stack Forwarding Instruction Opcode 943 Registry 945 Following IS-FIOC Opcode values are assigned from this registry. 947 +=======+==============================+===============+ 948 | Value | Description | Reference | 949 +=======+==============================+===============+ 950 | 0 | Invalid value | This document | 951 +-------+------------------------------+---------------+ 952 | 1 | Forwarding Instruction Flags | This document | 953 +-------+------------------------------+---------------+ 954 | 2 | Offset of start of Bottom Of | This document | 955 | | Stack Data after BOS Label | | 956 +-------+------------------------------+---------------+ 957 | 255 | Opcode Range Extension | This document | 958 | | Beyond 255 | | 959 +-------+------------------------------+---------------+ 961 Table 5: In-Stack Forwarding Instruction Opcode Values 963 15.3. IANA Considerations for BOS-FI Opcode 965 IANA is requested to create a new registry to assign BOS-FIOC opcode 966 values. 968 +===========+=========================+===============+ 969 | Value | Description | Reference | 970 +===========+=========================+===============+ 971 | 1 - 175 | IETF Review | This document | 972 +-----------+-------------------------+---------------+ 973 | 176 - 239 | First Come First Served | This document | 974 +-----------+-------------------------+---------------+ 975 | 240 - 251 | Experimental Use | This document | 976 +-----------+-------------------------+---------------+ 977 | 252 - 254 | Private Use | This document | 978 +-----------+-------------------------+---------------+ 980 Table 6: Bottom-Of-Stack Forwarding Instruction 981 Opcode Registry 983 Following BOS-FIOC Opcode values are assigned from this registry. 985 +=======+===================================+===============+ 986 | Value | Description | Reference | 987 +=======+===================================+===============+ 988 | 0 | Invalid value | This document | 989 +-------+-----------------------------------+---------------+ 990 | 255 | Opcode Range Extension Beyond 255 | This document | 991 +-------+-----------------------------------+---------------+ 993 Table 7: Bottom-Of-Stack Forwarding Instruction Opcode Values 995 The application that requires an Opcode for the Forwarding 996 Instruction (IS-FIOC or BOS-FIOC) or a Flag must request the code- 997 point and its meaning from IANA. 999 15.4. IANA Considerations for New Special Purpose Label 1001 IANA is requested to allocate a value TBA1 for the MEI SPL label from 1002 the "Base Special-Purpose MPLS Label Values" registry to indicate the 1003 presence of MPLS Header Extension. 1005 16. Appendix 1007 16.1. Alternate approach for In-Stack Extension Header Encoding 1009 In the above In-Stack Extension Header Encoding the Label field is 1010 used to encode the FI Opcode. So just for completeness, here is the 1011 alternate way of In-Stack Extension Header Encoding is provided. 1013 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 1014 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1015 | Entropy Label or SPL or NPL | IL=1|S| IPI=1 | 1016 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1017 |1| Data |R|D|E|S| FI Opcode | 1018 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1020 Figure 13: Alternate In-Stack Extension Header Format 1022 IPI flag is set to "1" to indicate the presence of In-Stack MPLS 1023 Extension Header. 1025 Since In-Stack MPLS Extension Header is present as part of the MPLS 1026 Header, the MPLS Header is redefined to encode the MPLS Extension 1027 Header. 1029 Label Field: 1031 Most significant bit is always set to "1" to avoid aliasing with 1032 the reserved SPLs. 1034 Rest of the 19 bits and the "R" bit from the TC bit can be used by 1035 the application. So total of 20 bits can be used to carry the 1036 data corresponding to IS-FI opcode. 1038 TC Field: 1040 This carries data stacking bits. They are as follows: 1042 D (DS-Bit): Data Stacking Bit. This is used to encode more than 19 1043 bits of extended data in the MPLS Label stack. If this is set to 1044 "1", then this is the end of extended data. 1046 R (Reserved Bit): This is used to encode the IS-FI data. 1048 TTL Field: 1050 This carries In-Stack Forwarding Instruction opcode. 1052 16.2. MPLS Extension Header Example for Entropy Label using New SPL 1054 The MPLS Extension Header encoding formats defined in this document 1055 is applicable when using a new Special Purpose Label (SPL) or using a 1056 Network Programming Label (NPL) configured by an operator. 1058 The TTL field in the SPL (value TBA1) is used to encode FI Flags 1059 including IPI, HBI and BPI flags defined in this document. 1061 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 1062 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1063 | MEI=SPL (value TBA1) | IL=1|S| IPI=1 | 1064 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1065 | IS-FI Opcode=3| Entropy Label |R|D|E|S| SLID | 1066 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1068 Figure 14: MPLS Extension Header Encoding Example for Entropy 1069 Label using New SPL 1071 The FI Opcode value 3 as an example indicates encoding of Entropy 1072 Label and Slice ID as shown in the above Figure. 1074 16.3. MPLS BOS Extension Header Example with IOAM Data Fields 1076 The Bottom Of Stack (BOS) Extension Header is used with BOS Opcode 1077 for IOAM. 1079 Bottom Of Stack Presence Indicator (BPI) flag in TTL is set to "1" to 1080 indicate the presence of BOS Extension Header. HBI flag in TTL is 1081 set to "1" to indicate the BOS Extenion Header requires Hop-By-Hop 1082 processing. 1084 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 1085 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1086 | Entropy Label or SPL or NPL | TC |1| BPI=1, HBI | 1087 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ 1088 |0 0 1 0|Reserve|BOS Opcode=IOAM|Length (words) | Flags (NH, H) | | 1089 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 1090 | IOAM-OPT-Type | IOAM HDR Len | Block Number | Reserved | | 1091 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ I 1092 | | O 1093 | | A 1094 ~ IOAM Option and Data Space ~ M 1095 | | | 1096 | | | 1097 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ 1098 | | 1099 | | 1100 | Optional Payload + Padding | 1101 | | 1102 | | 1103 | | 1104 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1106 Figure 15: Example MPLS Encapsulation for IOAM using BOS 1107 Extension Header 1109 17. References 1111 17.1. Normative References 1113 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1114 Requirement Levels", BCP 14, RFC 2119, 1115 DOI 10.17487/RFC2119, March 1997, 1116 . 1118 [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., 1119 Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack 1120 Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, 1121 . 1123 [RFC6790] Kompella, K., Drake, J., Amante, S., Henderickx, W., and 1124 L. Yong, "The Use of Entropy Labels in MPLS Forwarding", 1125 RFC 6790, DOI 10.17487/RFC6790, November 2012, 1126 . 1128 [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 1129 Writing an IANA Considerations Section in RFCs", BCP 26, 1130 RFC 8126, DOI 10.17487/RFC8126, June 2017, 1131 . 1133 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 1134 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 1135 May 2017, . 1137 17.2. Informative References 1139 [I-D.decraene-mpls-slid-encoded-entropy-label-id] 1140 Decraene, B., Filsfils, C., Henderickx, W., Saad, T., 1141 Beeram, V. P., and L. Jalil, "Using Entropy Label for 1142 Network Slice Identification in MPLS networks.", Work in 1143 Progress, Internet-Draft, draft-decraene-mpls-slid- 1144 encoded-entropy-label-id-03, 11 February 2022, 1145 . 1148 [I-D.saad-mpls-miad-usecases] 1149 Saad, T., Makhijani, K., and H. Song, "Usecases for MPLS 1150 Indicators and Ancillary Data", Work in Progress, 1151 Internet-Draft, draft-saad-mpls-miad-usecases-00, 7 1152 January 2022, . 1155 [I-D.bocci-mpls-miad-adi-requirements] 1156 Bocci, M. and S. Bryant, "Requirements for MPLS Label 1157 Stack Indicators and Ancillary Data", Work in Progress, 1158 Internet-Draft, draft-bocci-mpls-miad-adi-requirements-01, 1159 24 January 2022, . 1162 [RFC5586] Bocci, M., Ed., Vigoureux, M., Ed., and S. Bryant, Ed., 1163 "MPLS Generic Associated Channel", RFC 5586, 1164 DOI 10.17487/RFC5586, June 2009, 1165 . 1167 [RFC4385] Bryant, S., Swallow, G., Martini, L., and D. McPherson, 1168 "Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for 1169 Use over an MPLS PSN", RFC 4385, DOI 10.17487/RFC4385, 1170 February 2006, . 1172 Acknowledgments 1174 The auhors of this document would like to thank the MPLS Working 1175 Group Design Team for the discussions and comments on this document. 1177 Contributors 1179 TBD 1181 Authors' Addresses 1183 Jaganbabu Rajamanickam (editor) 1184 Cisco Systems, Inc. 1185 Canada 1186 Email: jrajaman@cisco.com 1188 Rakesh Gandhi (editor) 1189 Cisco Systems, Inc. 1190 Canada 1191 Email: rgandhi@cisco.com 1193 Jisu Bhattacharya 1194 Cisco Systems, Inc. 1195 Email: jisu@cisco.com 1197 Bruno Decraene 1198 Orange 1199 Email: bruno.decraene@orange.com 1200 Royi Zigler 1201 Broadcom 1202 Email: royi.zigler@broadcom.com 1204 Weiqiang Cheng 1205 China Mobile 1206 Email: chengweiqiang@chinamobile.com 1208 Luay Jalil 1209 Verizon 1210 Email: luay.jalil@verizon.com