Internet-Draft | MPLS Network Action Encodings | November 2022 |
Rajamanickam, et al. | Expires 9 May 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 9 May 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 TBA) 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.¶
MPLS Network Action (MNA) Header Encoding contains two main parts:¶
1. Network Action Sub-Stack Header:¶
2. In-Stack Network Action Encoding:¶
In-Stack Network Action is encoded in the TLV format as following:¶
The detailed description of the MNA encoding solution is described below sections.¶
Network Action Sub-Stack Header contains MNA Label and NASS encoding parameters as described below.¶
MNA Label:¶
A new bSPL value (value TBA) 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 MNA bSPL (value TBA) e.g., in case of non-MNA capable network, this can cause NASS parameters in the TTL of the MNA label to be corrupted.¶
NASS Encoding Parameters:¶
The TTL and TC field of the second LSE is used to encode NASS encoding parameters. The NASS encoding parameters contain the following.¶
Bits | Scope |
---|---|
00 | I2E |
01 | HBH |
10 | Select |
11 | Reserved |
The second LSEs First 20-Bit field could be used to encode In-Stack NA that requires maximum of 13 bits of Ancillary data.¶
The In-Stack MPLS Network Action are encoded in the TLV format.¶
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.¶
The Base In-Stack Network Action Encoding formats are described in detail below:¶
NAI-Opcode:¶
Ancillary Data:¶
This is the additional Ancillary Data carried to process the Network Action specified by the NAI-Opcode.¶
UOH (Unknown Opcode Handling):¶
Bits | Actions |
---|---|
00 | Skip and Process Next NA |
01 | Drop the packet |
10 | Stop processing MNA and forward the packet |
11 | Reserved |
NOTE: ECMP Hash Using Label Stack:¶
This section discusses about the procedures and requirement for an applications allocating a new In-Stack MPLS Network Opcode.¶
The application May request for a new Network Action Indicator with AD or without AD. More information about the NAI without AD is described in the next section.¶
The Network Action Opcode ranges from 0 till 127. There us an IANA registry maintained for allocating the In-Stack MPLS Network Action Opcodes.¶
Opcode "0" is considered as an invalid opcode and a Packet received with the Opcode "0" MUST be dropped.¶
Some of the opcodes are reserved for building the basic framework for MNA. Those reserved Network Action Opcodes are defined in the next section (This is described as part of the Reserved opcode).¶
When an application requires a new MPLS Network Action Opcode, then it MUST provide the following information:¶
NA Opcode Value:¶
NA Scope:¶
Unknown Opcode Handling:¶
Presence of Ancillary Data:¶
Ancillary Data Length:¶
Ancillary Data Format:¶
Network Action Processing Procedure:¶
Some of the opcodes are reserved as described below for the basic functionality and the rest of the opcodes are assigned by IANA.¶
Some of the opcodes are reserved as described below for the basic functionality and the rest of the opcodes are assigned by IANA.¶
NA Opcode Value: 1¶
NA Scope: Depending on the NASS scope. This could be any one of the three scopes (I2E, HBH and SEL)¶
Unknown Opcode Handling: MUST drop (Value = 1)¶
Ancillary Data Length: 13 bits¶
Ancillary Data Format: The 13-bit value provides the offset to the start of the Post-Stack from the MPLS BOS in octets.¶
This opcode is reserved to carry the Flag-Based NAIs those do not require Ancillary Data. These NAI flag bits are carried in the Ancillary Data field of the Opcode.¶
NA Opcode Value: 2¶
NA Scope: Scope depends on the scope of the Flag-Based NAI. This could be any one of the three scopes (I2E, HBH and SEL)¶
Unknown Opcode Handling: Depends on the Flag-Bases NAIs that are encoded. If one of the encoded NAIs handling is Drop (Value: 1), then this packet MUST be Dropped.¶
Ancillary Data Length: Max 110 bits. To extend this range, a new opcode could be allocated from IANA registry in the future.¶
Ancillary Data Format: Each bit position represents a single Flag-Based NAI, that does not require AD. The bit positions are read from left to right. These bit positions will be allocated and maintained by IANA.¶
This Opcode reserved to support a combination of multiple IS-Stack NAI with the Ancillary data. The combination of NAIs in this case, are represented as the offset bits in the first 20 bits, the Flag bit position for a specific application will be allocated and maintained by IANA. The next 3 LSE's are used to encode the AD for the specific Flag bits in the first 20 bits.¶
NA Opcode Value: 3¶
NA Scope: Scope depends on the Flag-Based NAI's scope. This could be any one of the three scopes (I2E, HBH and SEL)¶
Unknown Opcode Handling: Depends on the Flag-Bases NAIs that are encoded. If one of the encoded NAIs handling is Drop (Value: 1), then this MUST to Drop.¶
Ancillary Data Length: Max 110 bits¶
Ancillary Data Format: Each bit position represents a single Flag-Based NAI, that does not require AD. The bit positions are read from left to right. These bit positions will be allocated and maintained by IANA.¶
This Opcode is reserved to indicate the specific order of execution between Post-Stack and In-Stack NAIs.¶
NA Opcode Value: 4¶
NA Scope: Scope depends on the Scope of NASS that requires ordering. This could be any one of the three scopes (I2E, HBH and SEL)¶
Unknown Opcode Handling: MUST drop (Value = 1)¶
Ancillary Data Length: Max 20 bits¶
Ancillary Data Format: When this opcode is present in the NASS then the "O-Bit" in the NASS parameters MUST be set. If not the packet MUST be dropped. Ancillary Data is encoded with the Post-Stack NAIs (8-Bit value) that is required to be processed before processing the next In-Stack NAs encoded. This opcode could hold maximum of two Post-Stack NAIs that could be executed serially.¶
This opcode is reserved to fill-in unused 20 bits of 2nd LSE.¶
NA Opcode Value: 126¶
NA Scope: Follows the scope of NASS¶
Unknown Opcode Handling: MUST Skip and Proceed (Value = 0)¶
Ancillary Data Length: Max 13 bits¶
Ancillary Data Format: This could be any value as this opcode is a No-Operation Opcode. This value will be ignored.¶
This opcode is reserved to extend the current opcode range beyond 127. The Extended 7-bit opcode value will be encoded next to the base opcode value 127.¶
NA Opcode Value: 127¶
NA Scope: Scope depends on the Extended NAI opcode. This could be any one of the three scopes (I2E, HBH and SEL)¶
Unknown Opcode Handling: Depends on the Extended NAI opcode handling¶
Ancillary Data Length: Depends on the Length supported by the extended opcode. The Maximum length of this opcode is 103 bits¶
Ancillary Data Format: In the above example, the extended Opcode "9" is encoded in the packet. In this case only 13 bits of AD could be encoded in the same LSE, if the application requires to encode more than 13 bits then it had to use next LSE to encode the rest of the AD¶
The details of the Post-Stack Network Action Extension Header encodings are specified in [I-D.song-mpls-extension-header].¶
In some cases the MNA header may encode only the Post-Stack NAs. In this case, the P-Bit is set to indicate the presence of Post-Stack NAs. The IHS field indicates the scope of the Post-Stack NAs (I2E, HBH, SEL).¶
In some cases the MNA header may encode both In-Stack and Post-Stack NAs. In this case, P-Bit is set to indicate the presence of Post-Stack NAs. The NASL is set to "1", indicates the presence of an In-Stack NA LSE. The IHS field indicates the scope of both the In-Stack Post-Stack NAs (I2E, HBH, SEL).¶
In some cases the MNA may carry In-Stack NAs with Hop-By-Hop scope and Post-Stack NAs with I2E scope. In this case, there will be two NASS will be encoded. In this case, the First NASS will encode the In-Stack NA with the Hop-By-Hop scope and the second NASS will encode the presence of I2E scoped Post-Stack NAs.¶
The Post-Stack MPLS Network Action opcode specific informations are provided in the draft [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 "7".¶
In some cases, some Flag-Based NAIs may need to be processed before the NAI-Opcode "7" and some Flag-Based NAIs may need to be process after the NAI-Opcode "7".¶
In the above example, the Flag-Based NAI "0x1" is processed before the NAI-Opcode "7" and the Flags-Based NAI "0x2" is processed after the NAI-Opcode "7".¶
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 "7". 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 "7".¶
When adding a large size MPLS label stack, a copy of NASS with HBH and Select scope may be placed at regular stack 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 also remove the NASS after processing the NASS assuming it supports the MNA label, and it will not forward the NASS at the top to the next node.¶
For HBH scope, the node that receives the NASS at the top of the label stack MUST remove the NASS, assuming that it supports the MNA label.¶
For I2E scope, only one copy of NASS needs to be added and it is added just before the bottom of the stack.¶
The headend Node which is encapsulating the MNA header MUST make sure that the egress Nodes removes the MNA header. The headend Node May make sure that the MNA encoded in the packet could be able to process my midpoint and egress nodes.¶
The following are the Node capabilities that are required for the headend Node to decide the encoding patten:¶
The above 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 following are the security considerations that May inherit from this MNA architecture¶
Encapsulating Node:¶
Transit 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 |
---|---|---|
20 | Post-Stack Network Action Presence Indicator | This document |
21-22 | In-Stack Scope value E2H/HBH/SEL(IHS) | This document |
23 | End of Stack (S) | RFC 3032 |
24-27 | In-Stack Network Action Sub-Stack Length (NASL) | This document |
28-30 | Reserved Bit - May be used in future | This document |
31 | O-Bit - MUST process NAs in the Order of encoding, Else drop the packet | 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 application request. Based on the need this registry can be extended beyond 20 bit positions (MAX: 110 bits) using additional LSEs. The bit positions are read and processed from Left to Right. All code-points in the range 0 through 109 in this registry shall be allocated according to the "IETF Review" procedure as specified in [RFC8126].¶
Bit Position | Description | Reference |
---|---|---|
0-109 | Unassigned | This document |
IANA is requested to create a new registry with name "In-Stack MPLS Network Action Indicator Opcodes" to assign IS-NAI-Opcode values and the meaning to the Network Action upon the application request. All code-points in the range 1 through 110 in this registry shall be allocated according to the "IETF Review" procedure as specified in [RFC8126]. Code points in the range 111 through 125 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 6:¶
Value | Description | Reference |
---|---|---|
0 - 110 | IETF Review | This document |
111 - 125 | Experimental Use | This document |
Following IS-NAI-Opcode Indicator values are assigned from this registry.¶
Value | Description | Reference |
---|---|---|
0 | Invalid opcode, Packet MUST be dropped | 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 |
126 | No Operation | This document |
127 | Opcode Range Extension Beyond 255 | This document |
IANA is requested to allocate a value TBA for the MNA bSPL label from the "Base Special-Purpose MPLS Label Values" registry to indicate the presence of MNA Sub-Stack in MPLS header.¶
This is the example of MNA carrying Flag-Based NAIs that does not require Ancillary Data.¶
Third LSE:¶
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 MSB 2nd bit in the fourth LSE field will be set to indicate the Flags position "21".¶
NAL is set to "1" and indicates the Flag-Based NAIs are also encoded in the next LSE.¶
NASL is set to "2" and indicates the additional 2 In-Stack LSE are encoded.¶
While encoding the Additional Ancillary Data in the 4th LSEs 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 13-bit Ancillary Data. The Opcode that are encoded MUST be optional and the processing node could skip this opcode if it does not understand.¶
Second LSE:¶
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 "9" 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:¶
Fourth LSE:¶
The authors of this document would like to thank the MPLS Working Group Open 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 authors would like to thank Darren Dukes, Loa Andersson, Stewart Bryant and Greg Mirsky for reviewing our draft and providing many useful suggestions.¶
The following people have substantially contributed to this document:¶