Internet-Draft | MPLS Network Action Encodings | October 2022 |
Rajamanickam, et al. | Expires 13 April 2023 | [Page] |
This document defines the MPLS Network Action (MNA) Header encoding formats to carry Network Actions and optionally Ancillary Data in the label stack and post label stack. The MPLS Network Action can be used for example, to influence the forwarding decisions or to carry additional OAM information in the MPLS packet. This document addresses the MNA requirements specified in draft-ietf-mpls-mna-requirements. This document follows the MNA framework specified in draft-ietf-mpls-mna-fwk.¶
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 13 April 2023.¶
Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
[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 network action indicators and optional Ancillary Data (AD) that can be used for example, in MPLS packet forwarding decision or for OAM purpose. Ancillary Data can be used to carry additional information, for example, a network slice identifier, In-Situ OAM (IOAM) data, etc. Several MNA applications are described in [I-D.ietf-mpls-mna-usecases].¶
This document defines a solution to encode MPLS Network Actions (MNA) in an MPLS Label Stack those are efficient to process in hardware. The MPLS Network Actions are encoded in the form of flags and opcodes. These MPLS Network Actions can be encoded without Ancillary Data (AD) or with In-Stack Ancillary Data (ISD) or with Post-Stack Ancillary Data (PSD) (i.e., after the Bottom of the Stack (BOS)). A new base Special Purpose Label (bSPL) (value TBA1) is to be assigned to indicate the presence of MPLS Network Action Sub-Stack (MNAS) in the MPLS packet. This document addresses the MNA requirements specified in [I-D.ietf-mpls-mna-requirements]. This document follows the MNA framework specified in [I-D.ietf-mpls-mna-fwk].¶
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.¶
The MNA terminology defined in [I-D.ietf-mpls-mna-fwk] and [I-D.ietf-mpls-mna-requirements] are used in this document.¶
The solution for encoding MPLS Network Actions includes two high-level parts as shown in Figure 1.¶
Both parts of the encoding solution are described below.¶
Network Action Sub-Stack Header contains NASI Label and NASS encoding parameters as described below.¶
NASI Label:¶
A new bSPL value (value TBA1) is assigned to indicate the presence of the MPLS Network Action Sub-Stack (NASS).¶
Note: The TC and TTL fields of the new bSPL are not re-purposed for NASS encoding parameters, as the penultimate node on the MPLS packet path may propagate TTL and TC fields from the transport (or forwarding) LSE to the next LSE on the label stack, overwriting the TTL and TC fields of the next LSE, as specified in Section 3.5 of [RFC3443]. When the penultimate node is not aware of the NASI bSPL (value TBA1) e.g., in case of legacy network, this can cause NASS parameters in the TTL of the NASI label to be corrupted.¶
NASS Encoding Parameters:¶
The TTL field in the second LSE is used to encode NASS encoding parameters. The NASS encoding parameters contain scope and the length of NASS as well as presence flags for Post-Stack Network Action and Ancillary Data.¶
NASS Scope:¶
This indicates the scope (HBH / Select / I2E) of NASS for different nodes (e.g., midpoint nodes and egress node) where it needs to be processed.¶
Separate NASS Per Scope:¶
If a packet requires to carry both HBH and I2E scoped In-Stack NAs, then one NASS with scope of HBH and one NASS with scope I2E are added in the MPLS label stack. The I2E scoped NASS is added closer to the BOS whereas HBH and Select scoped NASS are added closer to the top of the label stack. This makes it easier for the midpoint nodes to process only the NASS with HBH scope in hardware.¶
Bits | Scope |
---|---|
00 | I2E |
01 | HBH |
10 | Select |
11 | Reserved |
NASL (Network Action Sub-Stack Length):¶
This is a 4-bit field in the TTL. This indicates the total length of the current NASS. This value does not include the first two LSEs in the NASS. This value is used by the ASICs to process the NASS.¶
NAL (Network Action Length):¶
The 2-bit field in TC is used to carry the number of additional LSEs used to carry the Ancillary Data for the Network Action. It does not include the 1st LSE that contains the NAI-Opcode.¶
In the case where the node does not support the NAI-Opcode value, the NA length is used to skip the NAI-Opcode and move to the next Opcode and continue processing.¶
R bit:¶
R bit in the TC field is Reserved for future use.¶
The MPLS Network Action encoding carried as part of the MPLS label stack uses Opcodes for indicating Network Actions (called NAI-Opcodes).¶
The encoding format defined is flexible (e.g., stackable opcodes in desired order), extensible (by defining new NAI-Opcodes) and ASIC friendly (by using Sub-Stack Length, Opcode and Data in the same LSE). This encoding format also allows to carry the Flag-Based NAIs that do not require AD and the Flag-Based NAIs that require AD in the same packet.¶
The opcode method of identifying a specific Network Actions are common in today's hardware ASICs (Similar to any IPv4/IPv6/VxLAN header processing), so this method is easy to be adopted by the existing hardware. This will allow the hardware ASICs to serially or in-parallel process the Network Actions.¶
In-Stack Network Actions are encoded in the TLV format. NAI-Opcode represents NA Indicator Type, NAL represents NA Length and Ancillary Data represents NA Value.¶
NAI-Opcode:¶
This is the first 8-bit value in the Label Field.¶
Ancillary Data:¶
This is the additional Data carried to process the Network Action specified by the NAI-Opcode.¶
NOTE: ECMP Hash Using Label Stack:¶
This opcode ranges from 1 to 255.¶
NAI-Opcode value of 0 is marked as invalid to avoid the label value from aliasing with the reserved bSPLs.¶
Some of the opcodes are reserved as described below for the basic functionality and the rest of the opcodes are assigned by IANA.¶
Based on the P and H flags, the Post-Stack Network Actions are processed. The details of the Post-Stack Network Action Extension Header encoding is specified in [I-D.song-mpls-extension-header].¶
Depending on the application, each NA will be processed at different stages of the ASICs pipeline. But in some cases, there may be contention between processing two NAs at the same stage of ASICs, in those cases the processing order should be maintained, so that the result of the packet forwarding and OAM data collection will be predictable.¶
This section talks about maintaining the ordering between the In-Stack NA processing.¶
The order of processing the NA should follow the order of NAs encoded in the NASS.¶
In the above example, a node will process the Flags-Based-NAIs first and then the NAI-Opcode "5".¶
In some cases, some Flag-Based NAIs may need to be processed before the NAI-Opcode "5" and some Flag-Based NAIs may need to be process after the NAI-Opcode "5".¶
In the above example, the Flag-Based NAI "0x1" is processed before the NAI-Opcode "5" and the Flags-Based NAI "0x2" is processed after the NAI-Opcode "5".¶
Post-Stack NAs follow ordering specified in [I-D.song-mpls-extension-header].¶
In some cases, Post-Stack NA needs to be processed before In-Stack NA. This section describes how to prioritize the Post-Stack NAs over the In-Stack NAs.¶
In the above example, the Flag-Based NAIs required to be processed first, followed by the Post-Stack NA "6" and then In-Stack NAI-Opcode "5". The NAI-Opcode "4" is a reserved opcode which can be used for ordering between the In-Stack and Post-Stack. In this example, the AD field of the NAI-Opcode "4" carries the Post-Stack NA that is processed before processing the NAI-Opcode "5".¶
When a node encounters an unsupported NAI-Opcode in the NASS it is processing, the node skips processing that NAI-Opcode using the NAL field and moves to processing the next NAI-Opcode.¶
When a node encounters a Flag-based NAI that it doesn't support, it stops further processing the Flag-Based NAIs in that NAI-Opcode. This is because the Flag-Based NAI may or may not have AD and a node will not be able to know the length for each Flag-Based-NAI.¶
The node MUST NOT drop the packet when it encounters any NA in the MNA NASS that it does not support.¶
For packets with Segment Routing [RFC8662] MPLS label stack, a copy of NASS with HBH and Select scope is placed at regular depth throughout the MPLS label stack, with the understanding that the current copy of the NASS will eventually rise to the top of the label stack.¶
For HBH scope, every node processes the current copy of the NASS and the node that pops the forwarding label that exposes the NASS will not remove it but forward it to the next node (i.e., segment endpoint node). The segment endpoint node that receives the NASS at the top of the label stack has to remove it.¶
For I2E scope, only one copy of NASS needs to be added and it is added near the bottom of the stack.¶
The node capability for the MPLS Network Action must be signaled before the MPLS Encapsulating node can add the necessary MPLS Network Action in the MPLS Label Stack. The capability signaling will be added in LDP, RSVP-TE, BGP, IS-IS, OSPF, BGP-LS, etc. This is outside the scope of this document.¶
The security considerations in [RFC3032] also apply to the procedures defined in this document. The NASI Label (bSPL TBA1) MUST NOT be exposed on the node which does not support it.¶
Encapsulating Node:¶
Midpoint Node:¶
Penultimate Node:¶
Decapsulating Node:¶
Below are the IANA actions which this document is requesting.¶
The registries created by this document will be collected in a new registry grouping called "MPLS Network Action," which will be located at https://www.iana.org/assignments/mpls-network-action.¶
IANA is requested to create a new registry with name "MNA NASS Encoding Parameters" to assign the bit position and the meaning to the Parameters that re-purpose TTL and TC fields in the Label Stack Entry (LSE).¶
Bit Position | Description | Reference |
---|---|---|
20-31 | IETF Review | This document |
Following NASS Encoding Parameter values are assigned from this registry.¶
Value | Description | Reference |
---|---|---|
28-31 | In-Stack Network Action Sub-Stack Length (NASL) | This document |
26-27 | In-Stack Scope value E2H/HBH/SEL(IHS) | This document |
25 | Post-Stack Hop-By-Hop Processing Indicator | This document |
24 | Post-Stack Network Action Presence Indicator | This document |
23 | End of Stack (S) | RFC 3032 |
21-22 | In-Stack Network Action Length (NAL) | This document |
20 | Reserved Bit (R) | This document |
IANA is requested to create a new registry with name "In-Stack MPLS Network Action Indicator Flags" to assign a bit position and the meaning to the Flag-Based Network Action upon the user request. Based on the need this registry can be extended beyond 12 bit positions.¶
Bit Position | Description | Reference |
---|---|---|
11-0 | Unassigned | This document |
IANA is requested to create a new registry with name "I2E In-Stack MPLS Network Action Indicator Opcodes" to assign IS-NAI-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 5:¶
Value | Description | Reference |
---|---|---|
0 - 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 I2E IS-NAI-Opcode Indicator values are assigned from this registry.¶
Value | Description | Reference |
---|---|---|
0 | Reserved | This document |
1 | Offset of start of Post-Stack Network Action Header | This document |
2 | Flag-Based Network Action Indicators with No AD | This document |
3 | Flag-Based Network Action Indicators with AD | This document |
4 | Post-Stack Network Action Indicator | This document |
255 | Opcode Range Extension Beyond 255 | This document |
IANA is requested to create a new registry with name "HBH and Select In-Stack MPLS Network Action Indicator Opcodes" to assign IS-NAI-Opcode values. This registry is also used for Select scope. 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 5:¶
Value | Description | Reference |
---|---|---|
0 - 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 HBH and Select IS-NAI-Opcode Indicator values are assigned from this registry.¶
Value | Description | Reference |
---|---|---|
0 | Reserved | This document |
1 | Offset of start of Post-Stack Network Action Header | This document |
2 | Flag-Based Network Action Indicators with No AD | This document |
3 | Flag-Based Network Action Indicators with AD | This document |
4 | Post-Stack Network Action Indicator | This document |
255 | Opcode Range Extension Beyond 255 | This document |
IANA is requested to allocate a value TBA1 for the NASI bSPL label from the "Base Special-Purpose MPLS Label Values" registry to indicate the presence of MNA Sub-Stack in MPLS header.¶
Second LSE:¶
Label Field:¶
TC Field:¶
TTL Field:¶
In this example, let us assume that an application-C has been allocated a Flag position of "21" by IANA, If the application-C needs to execute its Network Action on the MPLS packet then the 2nd bit in the third Label field will be set to indicate the Flags position "13".¶
NAL is set to "1" indicates the Flag-Based NAIs are also encoded in the next LSE.¶
NASL is set to "1" indicates the additional In-Stack LSE is encoded.¶
While encoding the Additional Ancillary Data in the 3rd LSE, the Most Significant bit MUST be set to "1" to prevent from aliasing with the reserved bSPLs.¶
In this example, the NASS is carrying only the In-Stack Network Action that requires 12-bit Ancillary Data.¶
The 8-bit value contains the NAI-Opcode.¶
Next 12 bits carries the AD for the NAI-Opcode "6".¶
No additional LSE is encoded so NAL value is set to "0".¶
In this example, the NASS is carrying only the indicator for the presence of Post-Stack NA and its Hop-By-Hop Option.¶
In this case only "P" and "H" bits are set to "1" as required.¶
An In-Stack Network Action may require more than 20 bits of Ancillary Data. In this example, the following Ancillary Data encoding is used.¶
In this example, the In-Stack NAI-Opcode "8" requires more than 20 bits of Ancillary Data to be encoded. The NA and AD are encoded in the 3rd and 4th LSEs.¶
Third LSE:¶
Label Field¶
TC Field¶
TTL Field¶
Fourth LSE:¶
Label Field¶
TC Field¶
TTL Field¶
In this example, one NASS is added for HBH scope with IHS field set to 01b and another NASS is added for I2E scope with IHS field set to 00b.¶
In this example, one NASS is added for HBH scope with IHS field set to 01b and another NASS is added for Select scope with IHS field set to 10b.¶
The authors of this document would like to thank the MPLS Working Group Design Team for the discussions and comments on this document. The authors would also like to thank Amanda Baber for reviewing the IANA Considerations and providing many useful suggestions.¶
The following people have substantially contributed to this document:¶