Internet-Draft MPLS Extensions Using Entropy Label January 2022
Rajamanickam, et al. Expires 30 July 2022 [Page]
Workgroup:
MPLS Working Group
Internet-Draft:
draft-jags-mpls-ext-hdr-entropy-lbl-00
Published:
Intended Status:
Standards Track
Expires:
Authors:
J. Rajamanickam, Ed.
Cisco Systems, Inc.
R. Gandhi, Ed.
Cisco Systems, Inc.
J. Bhattacharya
Cisco Systems, Inc.
B. Decraene
Orange
R. Zigler
Broadcom

MPLS Extension Header Encodings Using Entropy Label

Abstract

This document uses the Multiprotocol Label Switching (MPLS) Entropy Label (EL) extensions defined in draft-decraene-mpls-slid-encoded-entropy-label-id to indicate the presence of MPLS Extension Header (MEH) in an MPLS label stack. It defines different MPLS Extension Header encoding formats to carry additional data in the MPLS label stack that can influence forwarding decision and to carry additional data after the Bottom of the MPLS label stack.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 30 July 2022.

Table of Contents

1. Introduction

[RFC3032] defines MPLS Header for carrying a stack of MPLS labels which are used to forward packets in an MPLS network. Today's new applications require the MPLS packets to carry some additional indicators and associated ancillary data that would be used in MPLS packet forwarding decision or for OAM purpose.

Each application is requesting a separate Extended Special Purpose Label (eSPL) to address its problem that adds 2 extra labels (extension label 15 + eSPL) in the MPLS label stack. This approach does not scale, as it increases the label stack depth with multiple eSPLs that need to be imposed by the encapsulation node and scanned by the intermediate nodes. Also, currently there are no solutions defined to add ancillary data in a label stack or add multiple ancillary data after the Bottom of Stack (BOS) in an MPLS packet. Ancillary data can be used to carry additional information, for example, a network slice identifier, In-Situ OAM (IOAM) data presence indicator, etc.

This document defines a new MPLS data plane extension header format to efficiently encode forwarding and OAM instructions those are easy to process in hardware. The instructions are encoded in the form of flags and opcodes and can be carried without associated ancillary data or with short in-stack ancillary data or with one or more ancillary data after the BOS.

MPLS Entropy Label (EL) standard is defined in [RFC6790]. This document uses the Entropy Label extensions defined in [I-D.decraene-mpls-slid-encoded-entropy-label-id] to indicate the presence of MPLS Extension Header (MEH) in an MPLS label stack. It defines different MPLS Extension Header encoding formats to carry additional data in the MPLS label stack that can influence forwarding decision and to carry additional data after the Bottom of the MPLS label stack.

1.1. Requirements

This document defines different MPLS Extension Header encoding formats to support the following requirements:

1. MPLS packet to carry additional data in the MPLS stack to influence forwarding. This can be of two types:

  • 1a. Forwarding Instruction Flags (FIF) that does not use additional data.
  • 1b. Forwarding Instruction (FI) that needs additional data.

2. MPLS packet to carry additional data after the Bottom of the MPLS Label Stack.

3. Any combination of (1) and (2) in the same MPLS packet.

When MPLS Extension Header is added in an MPLS Label stack, the extension header MUST NOT contain the label field that can conflict with any previously allocated reserved label value.

2. Conventions Used in This Document

2.1. Requirements Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

2.2. Terminology

BOS (Bottom Of Stack): Bottom of the MPLS label stack.

BOS-FI (Bottom Of Stack Forwarding Instruction): This is the Forwarding Instruction that is encoded after Bottom of MPLS Stack.

BPI (Bottom of the Stack MPLS Extension Header Presence Indicator): This is the flag in the EL's ELC field to indicate the presence of MPLS Extension Header after the bottom of the MPLS stack.

EL (Entropy Label): Entropy Label defined as per [RFC6790].

ELC (Entropy Label Control): EL TTL field re-purposed to carry Entropy Label control bits defined in [I-D.decraene-mpls-slid-encoded-entropy-label-id].

FI (Forwarding Instruction): Forwarding Instruction is the instruction that expresses the forwarding behaviour. This can result in changing the forwarding decision or adding some information or important data to the packet.

FIF (Forwarding Instruction Flags): A bitwise flag that influences the forwarding behaviour. This flag does not need any additional data to execute its FI.

FIOC (Forwarding Instruction Opcode): A Opcode value that refers to a specific Forwarding Instruction.

HBI (Hop-By-Hop Bottom of the Stack MPLS Extension Header Presence Indicator): This is the flag in the EL's ELC field to indicate the presence of MPLS Extension Header after the bottom of the MPLS stack that require Hop-By-Hop processing.

IS-FI (In-Stack Forwarding Instruction): This is the Forwarding Instruction that is encoded in the MPLS stack.

IPI (In-Stack MPLS Extension Header Presence Indicator): This is the flag in the EL's ELC field to indicate the presence of MPLS Extension Header in the MPLS stack.

MEI (MPLS Extension Indicator): This is the Indicator MPLS Label which indicates the presence of MPLS Extension Header in MPLS Label stack.

MEH (MPLS Extension Header): MPLS Extension Header encoding carried in MPLS Label stack.

MPLS (Multiprotocol Label Switching): Multiprotocol Label Switching.

SPI (Slice ID Presence Indicator): Flag in ELC to indicate presence of Slice ID in the Entropy Label field.

SPL (Special Purpose Label): IANA Allocated Special Purpose Label in the range of 0-15. Extended Special Purpose Label (eSPL) uses label value 15.

TC (Traffic Class): Traffic Class.

TTL (Time-To-Live): Time To Live.

3. Overview


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Label                    | TC  |S|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: MPLS Label Format

New In-Stack MPLS Extension Header format is defined to carry the in-stack Forwarding Instruction and corresponding data in the MPLS stack.

A new BOS MPLS Extension Header is defined to carry the Forwarding Instruction and corresponding data after the MPLS Label stack.

This format helps to stack multiple In-Stack and BOS MPLS Extension Header in the same MPLS packet.

3.1. ELC as MPLS Extension Header Indicator

As described in [I-D.decraene-mpls-slid-encoded-entropy-label-id], the EL's 8-bit TTL field is re-purposed as Entropy Label Control (ELC) field. One bit from ELC is requested for the Slice ID Presence Indicator (SPI) and the 7 bits are available for use. From the ELC, 3 bits (for IPI, BPI and HBI) are allocated to indicate the presence of the MPLS Extension Header.


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |S|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Slice ID     |  Entropy Label        | IL  |S|  ELC (SPI=1)  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: ELI/EL Packet Format

ELC bit allocations are defined by user:

Table 1: ELC Bit Fields
Bit Position Description
TBD0 SPI - Slice ID Presence Indicator: Indicate the presence of Slice ID in the Entropy label as defined in [I-D.decraene-mpls-slid-encoded-entropy-label-id].
TBD1 IPI - In-Stack Extension Header Presence Indicator: Indicate the presence of In-Stack MPLS Extension Header after this label.
TBD2 BPI - Bottom of Stack Extension Header Presence Indicator: Indicates the presence of MPLS Extension Header after the Bottom of Stack (BOS).
TBD3 HBI - Hop-By-Hop Bottom of Stack Extension Header Indicator: Indicates the MPLS Extension Header after the Bottom of Stack requires Hop-By-Hop processing.
TBD4 - TBD7 Unassigned Bits.

IL - In-Stack Extension Header Length - The 3-bit TC field in the EL is used to indicate the length of the In-Stack MPLS Extension Header (excluding the ELI and EL labels) in terms of number of 32-bit labels. If more that 7 labels are needed in MPLS extension header, it can either use the BOS header to carry that data, or use additional EL/ELI pair. Use of additional EL/ELI pair is not in the scope of this document. For backwards compatibility, an intermediate and decapsulating nodes only read the length from the TC field when the IPI (In-Stack Extension Presence Indicator) is set to "1".

4. In-Stack MPLS Extension Header Encoding

This section describes the encoding format of the MPLS Extension Header in the MPLS stack.


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |S|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | IL=1|S|   ELC (IPI=1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  IS-FI Opcode |    In-Stack Data      |R|D|E|S| In-Stack Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: In-Stack Extension Header Format

ELC's IPI flag is set to "1" to indicate the presence of In-Stack MPLS Extension Header.

Since In-Stack MPLS Extension Header is present as part of the MPLS Header, the MPLS Header is redefined to encode the MPLS Extension Header.

Label Field:

The first 8 bits are used to define the In-Stack Forwarding Instruction (IS-FI) Opcode. Next 12 bits in the Label field and the 8 bits from the TTL field are used to carry In-Stack data corresponding to the IS-FI opcode. This opcode ranges from 1 to 255. IS-FI Opcode value of 0 is marked as invalid to avoid the label value aliasing with the reserved SPLs.

IS-FI Opcode MUST define the following procedure before it can be used:

TC Field:

This field is used to indicate the MPLS Extension Header stacking and In-Stack Data stacking.

TTL Field:

This 8-bit field is used to carry In-Stack data apart from the 12 bits in the Label field.

NOTE:

5. BOS MPLS Extension Header Encoding

This section describes the encoding format of the MPLS Extension Header which is present after the bottom of the MPLS label stack.


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |0|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | TC  |1|ELC (BPI, HBI) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 0|Reserve|  BOS-FI Opcode| Length=1(word)|   BOS-Flags   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        BOS-Data                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Payload                                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: BOS Extension Header Format

BPI flag in ELC is set to "1" to indicate the presence of MPLS Extension Header after the bottom of MPLS stack.

HBI flag in ELC is set to "1" to indicate the MPLS Extension Header after the Bottom of Stack that requires Hop-By-Hop processing.

A new generic 4-byte header is defined to carry the information about the Forwarding Instruction and its corresponding data that is carried after the bottom of stack. This generic header is added to each Forwarding Instruction that is encoded after the MPLS bottom of the stack. This generic header gives the flexibility to add multiple Forwarding Instruction after the BOS.

The 4-byte BOS Extension Header is described below:

Table 2: BOS MPLS Extension Header Format
Bit Position Description
0 - 3 This 4-bit nibble MUST be set to "0010b". This is to avoid aliasing with an IPv4/IPv6 header.
4 - 7 This 4-bit nibble defines the version of the generic header format. The current version value is "0".
8 - 15 This 8-bit field indicates the BOS FI Opcode value. This opcode values will be allocated by IANA.
16 - 23 This 8-bit field indicates the length of the data encoded in units of 4 bytes excluding the current header.
24 - 31 This 8-bit field carries the BOS-Flags. 0 - NH bit (Next-Header Presence Bit): Indicates the presence of next BOS extension header. 1 - H bit (Hop-By-Hop Bit): Hop-By-Hop processing is required for this Bottom of Stack data. 7 - 2 bits: Unassigned bits.

BOS-FI Opcode value of 0 is marked as invalid.

BOS-FI Opcode Value:1-254 - MUST be assigned by IANA.

BOS-FI Opcode Value:255 - IANA Allocated for BOS-FI Opcode range extension. This gives the flexibility to extend the opcode range beyond 255.

If an application requires to add its own data TLV, then the TLV can be added as part of BOS-Data.

BOS-FI Opcode MUST define the following procedure before it can be used:

6. MPLS Extension Header Encoding Example Use-case-1.a (Carrying FI without data in the MPLS stack)

The ELC can support only up to 8-bit flags. This is the use-case to extend the ELC flags and carry additional Forwarding Instruction Flags (FIF) in the MPLS stack. These forwarding instructions do not require any additional data to be carried with this FI.



 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |0|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | IL=1|0|   ELC (IPI=1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|IS-FI Opcode=1 |  Flags                |R|1|E|1|   Flags       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 5: Example In-Stack Extension Header Carrying Forwarding Instruction Flags

ELC's IPI flag is set to "1" to indicate the presence of In-Stack MPLS Extension Header.

Label Field:

TC Field:

TTL Field:

The FIF bit position and its meaning MUST be defined by IANA.



 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |0|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | IL=2|0|   ELC (IPI=1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|IS-FI Opcode=1 |  Flags                |R|1|E|1|   Flags       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1|    Flags                            |0|1|E|1|   Flags       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 6: Example In-Stack Extension Header carrying more than 20 bits FI Flags

More than 20 bits of data can be encoded as part of IS-FI opcode. In this specific case, the FI flags which are more than 20 bits are encoded in next 4 bytes of the MPLS header.

While encoding the additional data, the Most Significant bit of the Label Field MUST be set to "1" to prevent from aliasing with the reserved SPLs in the case of legacy devices.

7. MPLS Extension Header Encoding Example Use-case-1.b (Carrying FI with data in the MPLS stack)

This is the use-case where the MPLS Label stack to carry the Forwarding Instruction with a corresponding data.



 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |0|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | IL=1|0|   ELC (IPI=1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IS-FI Opcode  |        Data           |0|1|E|1|      Data     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 7: Example In-Stack Extension Header Carrying FI with the data

ELC's IPI flag is set to "1" to indicate the presence of In-Stack MPLS Extension Header.

Label Field:

TC Field:

TTL Field:



 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |0|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | IL=2|0|   ELC (IPI=1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IS-FI Opcode  |        Data           |0|0|E|0|      Data     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1|                    Data             |0|1|E|1|      Data     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 8: Example In-Stack Extension Header Carrying FI with the data more than 20 bits

More than 20 bits of data can be encoded as part of IS-FI opcode. In this specific case, the In-Stack data which are more than 20 bits are encoded in next 4 bytes of the MPLS header.

While encoding the additional data, the Most Significant bit of the Label Field MUST be set to "1" to prevent from aliasing with the reserved SPLs in the case of legacy devices.

8. MPLS Extension Header Encoding Example Use-case-2 (Carrying FI with data after the MPLS stack)

This is the use-case where the Forwarding Instruction with a corresponding data is carried after the MPLS bottom of stack.


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |0|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | TC  |1|ELC(BPI=1,HBI=1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 0|Reserve|BOS-FI Opcode=1| Length=1(word)|Flags NH=1,H=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        BOS-Data1                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 0|Reserve|BOS-FI Opcode=2| Length=2(word)|Flags NH=0,H=0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        BOS-Data2                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        BOS-Data2                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Payload                                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 9: Example BOS Extension Header Carrying FI with data

ELC's BPI flag is set to "1" to indicate the presence of BOS MPLS Extension Header. Also, HBI flag is set to 1 to indicate the presece of BOS MPLS Extension Header that requires Hop-By-Hop processing.

In this case, the MPLS packet is encoding two different types of BOS FI (Opcode 1 and Opcode 2) after the bottom of MPLS stack.

The first BOS MPLS Extension Header has the Length value as "1", this indicates that the data corresponding to this FI opcode "Type1" is 4 bytes following this header. Also the Next-Header (NH) flag in BOS-Flags is set to "0x1", this indicates the presence of next BOS MPLS Extension Header. The H flag is set to "0x1" that indicates the Hop-By-Hop processing is required.

The second BOS MPLS Extension Header has the Length value as "2", this indicates that the data corresponding to the FI opcode "Type2" is 8 bytes following this header. In this case the Next-Header flag in BOS-Flags is set to "0x0", this indicates that this is the last BOS MPLS Extension Header encoded. The H flag is set to "0x0" that indicates the Hop-By-Hop processing is not required.

9. MPLS Extension Header Encoding Example Use-case-3 (Carrying use-case 1.a, 1.b and 2 in the MPLS packet)

This is the use-case where the same MPLS packet handles the use-cases "1.a", "1.b" and "2".


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |0|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | IL=2|0|ELC IPI,BPI,HBI|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IS-FI Opcode=1|  Flags                |0|0|E|0| Flags         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IS-FI Opcode=2|        0              |0|1|E|0| Offset = 1    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IS-FI Opcode=3|        Data           |0|1|E|1|      Data     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 0|Reserve|BOS-FI Opcode=1| Length=1(word)|Flags NH=1,H=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        BOS-Data1                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 0|Reserve|BOS-FI Opcode=2| Length=2(word)|Flags NH=0,H=0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        BOS-Data2                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        BOS-Data2                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Payload                                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 10: MPLS Packet Carrying 1.a, 1.b and 2 Use-cases

ELC's IPI and BPI flags are set to "1" to indicate the presence of both In-Stack and BOS MPLS Extension Header as mentioned in the above use-cases. IS-FI Opcode 2 is added to indicate the offset of 1 word after the MPLS header BOS and start of the BOS Extension Header.

10. Node Capability Signaling

The node capability for the MPLS Extension Header must be signaled before the Encapsulating node can add the MPLS Extension Header in the MPLs label stack. The capability signaling will be added in LDP, RSVP-TE and IGP/SR as an extension of the Entropy Label capability signaling.

11. Security Considerations

The security considerations in [RFC3032] also apply to the extensions defined in this document. The MPLS Extension header MUST not be exposed to the node which does not support the new MPLS Extension Header.

12. Backward Compatibility

This MPLS extension does not affect the existing GAL / G-ACh [RFC5586] based encoding of data in the MPLS packet. This MPLS extension can co-exist with the existing GAL / G-ACh based encoding of data.

This design considers the legacy devices misinterpreting the existing SPL labels with the data encoded in the MPLS Label stack.

13. Processing In-Stack MPLS Extension Header

Encapsulating Node:

Intermediate Node:

Decapsulating Node:

14. Processing BOS MPLS Extension Header

Encapsulating Node:

Intermediate Node:

Decapsulating Node:

15. IANA Considerations

Below are the IANA actions which this document is requesting.

15.1. IANA Considerations for Forwarding Instruction Flags

IANA is requested to create a new registry to assign the bit position and the meaning to the Forwarding Instruction Flags based on the user request.

Table 3: Forwarding Instruction Flags Registry
Bit Position Description Reference
19-0 Unassigned This document

15.2. IANA Considerations for IS-FI Opcode

IANA is requested to create a new registry to assign IS-FIOC opcode values. All code-points in the range 1 through 175 in this registry shall be allocated according to the "IETF Review" procedure as specified in [RFC8126]. Code points in the range 176 through 239 in this registry shall be allocated according to the "First Come First Served" procedure as specified in [RFC8126]. Remaining code-points are allocated according to Table 4:

Table 4: In-Stack Forwarding Instruction Opcode Registry
Value Description Reference
1 - 175 IETF Review This document
176 - 239 First Come First Served This document
240 - 251 Experimental Use This document
252 - 254 Private Use This document

Following IS-FIOC Opcode values are assigned from this registry.

Table 5: In-Stack Forwarding Instruction Opcode Values
Value Description Reference
0 Invalid value This document
1 Forwarding Instruction Flags This document
2 Offset of start of Bottom of Stack Data after BOS Label This document
255 Opcode Range Extension Beyond 255 This document

15.3. IANA Considerations for BOS-FI Opcode

IANA is requested to create a new registry to assign BOS-FIOC opcode values.

Table 6: Bottom-of-Stack Forwarding Instruction Opcode Registry
Value Description Reference
1 - 175 IETF Review This document
176 - 239 First Come First Served This document
240 - 251 Experimental Use This document
252 - 254 Private Use This document

Following BOS-FIOC Opcode values are assigned from this registry.

Table 7: Bottom-of-Stack Forwarding Instruction Opcode Values
Value Description Reference
0 Invalid value This document
255 Opcode Range Extension Beyond 255 This document

The application that requires an Opcode for the Forwarding Instruction (IS-FIOC or BOS-FIOC) or a Flag must request the code-point and its meaning from IANA.

16. Appendix

16.1. Alternate approach for In-Stack Extension Header Encoding

In the above In-Stack Extension Header Encoding the Label field is used to encode the FI Opcode. So just for completeness, here is the alternate way of In-Stack Extension Header Encoding is provided.


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Entropy Label Indicator (7)       | TC  |S|      TTL      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Entropy Label        | IL=1|S|   ELC (IPI=1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1|                      Data           |R|D|E|S|  FI Opcode    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 11: Alternate In-Stack Extension Header Format

ELC's IPI flag is set to "1" to indicate the presence of In-Stack MPLS Extension Header.

Since In-Stack MPLS Extension Header is present as part of the MPLS Header, the MPLS Header is redefined to encode the MPLS Extension Header.

Label Field:

  • Most significant bit is always set to "1" to avoid aliasing with the reserved SPLs.
  • Rest of the 19 bits and the "R" bit from the TC bit can be used by the application. So total of 20 bits can be used to carry the data corresponding to IS-FI opcode.

TC Field:

This carries data stacking bits. They are as follows:

  • D (DS-Bit): Data Stacking Bit. This is used to encode more than 19 bits of extended data in the MPLS Label stack. If this is set to "1", then this is the end of extended data.
  • R (Reserved Bit): This is used to encode the IS-FI data.

TTL Field:

This carries In-Stack Forwarding Instruction opcode.

16.2. Using New SPL for MPLS Extension Header Encoding

The MPLS Extension Header encoding formats defined in this document can use any new Special Purpose Label (SPL) or extended Special Purpose Label (eSPL) using Label value 15 + new label value or using a Network Programming Label (NPL) configured by an operator.


 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     MEI=SPL/eSPL or NPL               | IL=2|S|FlagIPI,BPI,HBI|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IS-FI Opcode=3|  Entropy Label        |R|D|E|S|   SLID        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IS-FI Opcode=4|        Data           |R|1|E|1|   Data        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 12: Example Using New SPL/eSPL or NPL for In-Stack Extension Header Format

SPL's TTL field is used to encode FI Flags including IPI, HBI and BPI flags defined in this document as an example. The FI Opcode value 3 as an example indicates encoding of Entropy Label and Slice ID as shown in the above Figure. The FI Opcode value 4 as an example indicates another In-Stack Data encoded in the MPLS Extension Header.

The Bottom of the Stack extension can be encoded the same way as defined in this document using the HBI and BPI flag in the TTL field of the MEI label as an example.

17. References

17.1. Normative References

[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC3032]
Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack Encoding", RFC 3032, DOI 10.17487/RFC3032, , <https://www.rfc-editor.org/info/rfc3032>.
[RFC6790]
Kompella, K., Drake, J., Amante, S., Henderickx, W., and L. Yong, "The Use of Entropy Labels in MPLS Forwarding", RFC 6790, DOI 10.17487/RFC6790, , <https://www.rfc-editor.org/info/rfc6790>.
[RFC8126]
Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, , <https://www.rfc-editor.org/info/rfc8126>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[I-D.decraene-mpls-slid-encoded-entropy-label-id]
Decraene, B., Filsfils, C., Henderickx, W., Saad, T., Beeram, V. P., and L. Jalil, "Using Entropy Label for Network Slice Identification in MPLS networks.", Work in Progress, Internet-Draft, draft-decraene-mpls-slid-encoded-entropy-label-id-02, , <https://www.ietf.org/archive/id/draft-decraene-mpls-slid-encoded-entropy-label-id-02.txt>.

17.2. Informative References

[RFC5586]
Bocci, M., Ed., Vigoureux, M., Ed., and S. Bryant, Ed., "MPLS Generic Associated Channel", RFC 5586, DOI 10.17487/RFC5586, , <https://www.rfc-editor.org/info/rfc5586>.

Acknowledgments

TBD

Contributors

TBD

Authors' Addresses

Jaganbabu Rajamanickam (editor)
Cisco Systems, Inc.
Canada
Rakesh Gandhi (editor)
Cisco Systems, Inc.
Canada
Jisu Bhattacharya
Cisco Systems, Inc.
Bruno Decraene
Orange
Royi Zigler
Broadcom