<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
<!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" docName="draft-ietf-mpls-mna-ioam-04" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3" consensus="true">
  <!-- xml2rfc v2v3 conversion 3.6.0 -->
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<front>
    <title abbrev="IOAM Using MNA">Supporting In Situ Operations, Administration and Maintenance Using MPLS Network Actions</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mpls-mna-ioam-04"/>
    
     <author fullname="Rakesh Gandhi" initials="R." surname="Gandhi" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Canada</street>
        </postal>
        <email>rgandhi@cisco.com</email>
      </address>
    </author>
  
    <author initials="G." surname="Mirsky" fullname="Greg Mirsky" role="editor">
      <organization>Ericsson</organization>
      <address>
        <email>gregimirsky@gmail.com</email>
      </address>
    </author>

    <author initials="T." surname="Li" fullname="Tony Li">
      <organization>Juniper Networks</organization>
      <address>
        <email>tony.li@tony.li</email>
      </address>
    </author>

   <author fullname="Haoyu Song" initials="H." surname="Song">
      <organization>Futurewei Technologies</organization>
      <address>
        <postal>
        <street> </street>
          <city/>
          <country>USA</country>
        </postal>
        <email>haoyu.song@futurewei.com</email>
      </address>
    </author>

    <author fullname="Bin Wen" initials="B." surname="Wen">
      <organization>Comcast</organization>
      <address>
        <email>Bin_Wen@cable.comcast.com</email>
      </address>
    </author>
  
    <date year="2025"/>
    
    <area>Routing</area>
    <workgroup>MPLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>IOAM</keyword>
    <keyword>MPLS Network Action</keyword>
    <abstract>
      <t>
    In situ Operations, Administration, and Maintenance  (IOAM), defined in RFC 9197,
    is an on-path telemetry method to collect and record the operational state
    and telemetry information using, for example, Pre-allocated, Proof-of-Transit, Edge-To-Edge or Incremental IOAM Options,
    that can be used to calculate various performance metrics.
    RFC 9326 defined the IOAM Direct Export (IOAM-DEX) Option 
    in which the operational state and telemetry information are collected according
    to the specified profile and exported in a manner and format defined by a local policy on each node along the path.
   </t>

   <t>
    MPLS Network Actions (MNA) techniques are meant to indicate actions to be performed on any combination of
    Label Switched Paths, MPLS packets, and the node itself, and to transfer data needed for these actions.
    This document explores the MNA mechanisms to collect and transport the on-path operational state, and telemetry information
    IOAM data fields, including IOAM-DEX Option.
    </t>

    </abstract>
  </front>
  <middle>

    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>
    In situ OAM (IOAM) <xref target="RFC9197"/> is an on-path telemetry method used to collect and record the operational state
    and telemetry information that can be used to calculate various performance metrics.
    Several IOAM Option types (e.g., Pre-allocated, Proof-of-Transit, Edge-To-Edge, and Incremental) use the user packet to collect the operational state
    and telemetry information. Such mechanisms transport the collected information to an IOAM decapsulating
    node (typically located at the edge of the IOAM domain within the data packet).
    IOAM Direct Export (IOAM-DEX) <xref target="RFC9326"/> is
    an IOAM Option type. In IOAM-DEX, the operational state and telemetry
    information are collected according to the specified profile and exported
    in a manner and format defined by a local policy on each node along the path.
    </t>

    <t>
    MPLS Network Actions (MNA) techniques <xref target="RFC9789"/>
    indicate actions to be performed on any combination of
    Label Switched Paths, MPLS packets, the node itself,
    and also allow for the transfer of data needed for these actions.
     <xref target="I-D.ietf-mpls-mna-hdr"/> defines mechanisms for carrying the Network Action Sub-Stack (NAS)
    as part of the MPLS label stack, i.e., the In-Stack MNA solution.
    <xref target="I-D.ietf-mpls-mna-ps-hdr"/> defines mechanisms for carrying MNA and Ancillary Data (AD) outside the MPLS label stack,
    i.e., as the Post-Stack MNA solution. <xref target="RFC9791"/> describes various use cases
    that can be realized using MNA techniques, including IOAM Pre-allocated, Proof-of-Transit, Edge-To-Edge, Incremental, and IOAM-DEX Option types.
    </t>

    <t>
    This document describes how MNA can be used for collecting and transporting on-path operational state
    and telemetry information using IOAM data fields for IOAM Option types, including IOAM-DEX.
    Specifying the mechanism for exporting the collected information in case of the IOAM-DEX Option is outside the scope of this document.
    </t>

      </section>
      
      <section numbered="true" toc="default">
        <name>Conventions Used in This Document</name>
    
         <section title="Acronyms">

          <t>OAM:               Operations, Administration, and Maintenance</t>
          <t>HBH:               Hop-By-Hop</t>
          <t>I2E:               Ingress-To-Egress</t>
          <t>IHS:               Ingress-To-Egress (I2E), Hop-By-Hop (HBH) or Select Scope</t>
          <t>IOAM:              In situ OAM</t>
          <t>IOAM-DEX:          IOAM Direct Export</t>
          <t>IOAM-DEX-ISD-MNA:  IOAM Direct Export as MPLS Network Action ISD</t>
          <t>ISD:               In-Stack Data</t>
          <t>PFN:               Post-Stack First Nibble</t>
          <t>PSD:               Post-Stack Data</t>
          <t>PSMH:              Post-Stack MPLS Header</t>
          <t>LSE:               Label Stack Entry</t>
          <t>MPLS:              Multiprotocol Label Switching</t>
          <t>MNA:               MPLS Network Action</t>
          <t>NAI:               Network Action Indicator</t>
          <t>NAS:               Network Action Sub-stack</t>
          <t>NASL:              Network Action Sub-stack Length</t>
         </section>    
         
        <section numbered="true" toc="default">
          <name>Requirements Language</name>
          <t>
   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
   NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
   "MAY", and "OPTIONAL" in this document are to be interpreted as
   described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> 
   when, and only when, they appear in all capitals, as shown here.
          </t>
      </section>
    </section>
    
    <section anchor="ioam-trace-option-application" numbered="true" toc="default">
      <name>Applicability of IOAM and IOAM-DEX in an MPLS Network</name>
      <t>
    Pre-allocated, Incremental, Proof-of-Transit, and Edge-to-Edge IOAM Option types <xref target="RFC9197"/> use user packets to collect and transport
    the operational state and telemetry information. In some environments, for example, data center networks, this technique
    is useful as the available bandwidth and the use of jumbo frames can accommodate the increase of the packet payload.
    This document defines the Post-Stack MNA (<xref target="I-D.ietf-mpls-mna-ps-hdr"/>) solution supporting
    Pre-allocated, Incremental, Proof-of-Transit, and Edge-to-Edge IOAM Option types (<xref target="ioam-mpls-sec"/>).
    </t>

    <t>
    However, for some use cases, e.g., mobile backhaul, in which network resources are closely controlled,
    collecting and transporting the telemetry information within a data packet
    may noticeably decrease the cost-efficiency of network operations. Although the operational state and
    telemetry information are essential for network automation (Section 4 of <xref target="RFC8969"/>),
    its delivery is not as critical as user packets. As such,
    collecting and transporting the operational state and telemetry information using the management plane
    is a viable option for some environments. IOAM-DEX <xref target="RFC9326"/> is capable of collecting the IOAM data fields
    defined in <xref target="RFC9197"/>. The processing and transport of the collected information are controlled by a local policy which
    is outside the scope of this specification. The performance considerations discussed in Section 5 of <xref target="RFC9326"/> are applicable here.
    In this document, the realizations of IOAM-DEX using the In-Stack MNA (<xref target="I-D.ietf-mpls-mna-hdr"/> and
    Post-Stack MNA (<xref target="I-D.ietf-mpls-mna-ps-hdr"/>) are defined in <xref target="ioam-dex-isd-mna-sec"/> and <xref target="ioam-mpls-sec"/>, respectively.
    </t>
</section>

<section anchor="ioam-mna-nas-sec" numbered="true" toc="default">
<name>Realization of IOAM and IOAM-DEX as MPLS Network Actions</name>

<section anchor="ioam-mpls-sec" numbered="true" toc="default">
<name>Realization of IOAM and IOAM-DEX as Post-Stack MNA</name>
    <t>
    The presence of Post-Stack MPLS Header is indicated in an In-Stack Network Action Sub-stack as defined in <xref target="I-D.ietf-mpls-mna-ps-hdr"/>
    and is shown in <xref target="ure-mna-encapsulation-in-mpls-header-e2e"/>.
    </t>
        <figure anchor="ure-mna-encapsulation-in-mpls-header-e2e">
          <name>An Example of In-Stack Network Action Sub-Stack with Post-Stack MPLS Header Carrying IOAM and IOAM-DEX</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               MNA Label               | TC  |S|  TTL          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Opcode     |  13-bit Data (Format B) |P|IHS|S|  NASL |U| NAL |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Opcode     |  16-bit Data (Format C)       |S|4b Data|U| NAL |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                Label                  | TC  |1|  TTL          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~        Post-Stack MPLS Header for IOAM as shown in Figure 2   ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
 ~                 Optional Payload + Padding                    ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

    <t>
    The MNA Label (value TBA4) is defined in <xref target="I-D.ietf-mpls-mna-hdr" format="default"/>.</t>

    <t>
    The IHS scope field defined in <xref target="I-D.ietf-mpls-mna-hdr" format="default"/> is used to indicate 
    that I2E or HBH or Select processing is required for the  Network Action and Ancillary Data.</t> 

    <t>
    If both edge and intermediate nodes need to process the IOAM data fields  
    then IHS scope MUST be set to "HBH, value 0x1". If only edge nodes need to process 
    the IOAM data fields then IHS scope MUST be set to "I2E, value 0x0".
    The HBH scope allows skipping the IOAM data processing on the intermediate nodes 
    i.e., avoids the need to parse all IOAM data fields to detect the HBH option type.</t>

    <t>
    The U Flag for Unknown Action Handling is specified in <xref target="I-D.ietf-mpls-mna-hdr" format="default"/>.</t>

    <t>
    S bit is the Bottom of Stack field <xref target="RFC3032"/>.
    </t>

    <t>
    IHS field is set as specified in <xref target="I-D.ietf-mpls-mna-hdr"/>.
    </t>

    <t>
    P flag is set as specified in <xref target="I-D.ietf-mpls-mna-ps-hdr"/>.
    </t>

    <t>
    The Network Action Sub-Stack Length (NASL) is set as specified in <xref target="I-D.ietf-mpls-mna-hdr" format="default"/>.</t>

    <t>
    Opcode (7 bits) value is set to TBA1 (for Network Action for IOAM and IOAM-DEX in PSD) 
    for carrying an IOAM Option-Type and the associated data fields defined in <xref target="RFC9197" format="default"/>  
    and the IOAM-DEX Option-Type and the associated data fields defined in <xref target="RFC9326" format="default"/> in PSMH. 
    This network action is optional and can be carried in Format B or Format C Label Stack Entry (LSE).
    </t>

    <t>
    Data (10 bits, next to the Opcode field) in LSE contains the offset for PSMH for this In-Stack Network Action 
    in 4-octets units after BOS LSE to the start of the corresponding Post-Stack Network Action Opcode.
    Due to the Post-Stack MPLS Header type top-header, the minimum value for the offset is 1 (i.e, 4-octets).
    </t>

    <t>
    Length of Network Action (NAL) <xref target="I-D.ietf-mpls-mna-hdr" format="default"/> is set to 0 for the In-Stack Network Action for IOAM and IOAM-DEX option type in Post-Stack ancillary data.
    </t>

    <t>
    A packet may carry more than one In-Stack Network Action in an MNA Sub-Stack for IOAM and IOAM-DEX in PSMH 
    (for example, for different IOAM Option-Types as identified in Post-Stack ancillary data). There may be
    a different In-Stack Network Action (other than for the IOAM and IOAM-DEX) in the In-Stack MNA Sub-Stack.
    </t>

<section anchor="ioam-mpls-sec-2" numbered="true" toc="default">
<name>MPLS Network Action Post-Stack MPLS Header for IOAM and IOAM-DEX</name>

     <t>An example encoding for IOAM and IOAM-DEX carried in Post-Stack MPLS Header is shown in <xref target="ioam-psd-encaps-fig"/>.
     </t>
   
        <figure anchor="ioam-psd-encaps-fig">
          <name>An Example of Post-Stack MPLS Header Carrying IOAM and IOAM-DEX</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  PFN  |Version| PS-HDR-LEN    | TYPE = MNA-POST-STACK-HDR = 1 |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
 |MNA-PS-OP    |R|R|   PS-NAL    |R|R| BLOCK-NUMBER|IOAM-OPT-TYPE|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~   IOAM Option and Data Space [RFC9197] [RFC9326]              ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
]]></artwork>
        </figure>
  
   <t>The Post-Stack MPLS Header (PSMH) type top-header is added with the following fields 
      as defined in <xref target="I-D.ietf-mpls-mna-ps-hdr" format="default"/>.</t>

    <dl newline="false" spacing="normal" indent="2">
         <dt>PFN:</dt>
         <dd>
          The Post-Stack first nibble (PFN) (value TBA3) as defined in <xref target="I-D.ietf-mpls-mna-ps-hdr" format="default"/>.
         </dd>
         <dt>PS-HDR-LEN (8 bits):</dt>
         <dd>
          PSMH total length in four-octet units. This excludes the PSMH type top-header.
         </dd>
         <dt>TYPE:</dt>
         <dd>
          TYPE is defined for MNA-POST-STACK-HDR (value 1) in <xref target="I-D.ietf-mpls-mna-ps-hdr" format="default"/>. 
         </dd>
    </dl>

    <t>
    The PSMH contains Post-Stack Network Action Opcode for IOAM and IOAM-DEX, 
    length in number of 4-octet units, and IOAM Option-Type with
    IOAM data fields in the Post-Stack ancillary data as shown in <xref target="ioam-psd-encaps-fig"/>.
    The IOAM data fields MUST follow the definitions corresponding to their  
    IOAM-Option-Types (e.g., see Section 4.4 of <xref target="RFC9197" format="default"/>
    and IOAM-DEX Option-Type in Section 3 of <xref target="RFC9326" format="default"/>).
    </t>

    <t>An IOAM option is added in the PSMH containing the following fields:</t>
        <dl newline="false" spacing="normal" indent="2">

          <dt>MNA-PS-OP:</dt>
          <dd>
   IANA allocated value TBA1 (Network Action Opcode for IOAM and IOAM-DEX in PSD) for IOAM Option-Type defined in <xref target="RFC9197" format="default"/>,
   and IOAM-DEX Option-Type defined <xref target="RFC9326" format="default"/>. 
    </dd>

          <dt>IOAM-OPT-TYPE:</dt>
          <dd>
       7-bit field defining the IOAM Option-Type, as defined in
       the "IOAM Option-Type Registry" specified in <xref target="RFC9197" format="default"/> 
       and <xref target="RFC9326" format="default"/>).
    </dd>

          <dt>PS-NAL:</dt>
          <dd>
       7-bit unsigned integer. Length of the IOAM data fields in 4-octet units for the MNA-PS-OP. This excludes the first 4-octet unit. 
         </dd>
          <dt>IOAM Option and Data Space:</dt>
          <dd>
       IOAM data fields as specified by the
       IOAM-OPT-Type field.  IOAM data fields are defined corresponding to
       the IOAM-Option-Type (e.g., see Section 4.4 of
       <xref target="RFC9197" format="default"/> and Section 3 of
       <xref target="RFC9326" format="default"/>.
    </dd>

          <dt>BLOCK-NUMBER:</dt>
          <dd>
       The block number for the alternate marking method can be used to aggregate the IOAM data collected
       in the data plane, e.g., to compute measurement metrics for each block of
       a data flow.  It is also used to correlate the IOAM data on different nodes along the packet path.
       The block number is incremented sequentially at every measurement interval provisioned on the encapsulating node.
    </dd>
        </dl>

<section anchor="ioam-mpls-sec-3" numbered="true" toc="default">
<name>Multiple IOAM and IOAM-DEX Option-Types in PSMH</name>

    <t>
    An example of multiple Post-Stack network actions with the same scope carrying different IOAM option types is shown in Figure 3. 
    </t>

     <figure anchor="ure-ioam-network-action-in-mpls-header">
          <name>Example of Multiple Post-Stack Network Actions with IOAM and IOAM-DEX with Same Scope</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  PFN  |Version| PS-HDR-LEN    | TYPE = MNA-POST-STACK-HDR = 1 |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
 |MNA-PS-OP    |R|R|   PS-NAL    |R|R| BLOCK-NUMBER|IOAM-OPT-TYPE|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~   IOAM Option and Data Space [RFC9197] [RFC9326]              ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 .                                                               .
 .                                                               .
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |MNA-PS-OP    |R|R|   PS-NAL    |R|R| BLOCK-NUMBER|IOAM-OPT-TYPE|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~   IOAM Option and Data Space [RFC9197] [RFC9326]              ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~                 Optional Payload + Padding                    ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ]]></artwork>
        </figure>

   </section>
   </section>

      </section>

<section anchor="ioam-dex-isd-mna-sec" numbered="true" toc="default">
<name>Realization of IOAM-DEX as In-Stack MNA</name>
    <t>
    This document uses all the elements of the IOAM-DEX Option-Type format
    defined in <xref target="RFC9326"/> to support IOAM-DEX in an MPLS network using
    MNA ISD <xref target="I-D.ietf-mpls-mna-hdr"/>. 
    </t>

    <t>
    To support the direct export of the operational state and telemetry information,
    the IOAM-DEX-ISD-MNA blob (binary large object) 
    is placed as part of the ISD block in an MPLS label stack according to the MNA encoding principles
    defined in <xref target="I-D.ietf-mpls-mna-hdr"/>. 
    </t>

    <t>
    Using the IHS field, the IOAM-DEX-ISD-MNA can be performed in Hop-by-Hop,
    Ingress-to-Egress, or Select modes <xref target="RFC9789"/> of collecting
    the operational state and telemetry information, using an MNA Opcode (<xref target="ioam-dex-mna-option-fig"/>).
    </t>

   <figure anchor="ioam-dex-mna-option-fig">
   <name>An Example of IOAM-DEX Encapsulation as an MNA Opcode</name>
  <artwork name="" type="" align="left" alt=""><![CDATA[    
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               MNA Label               | TC  |S|    TTL        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |Opcode = TBA2|  13-bit Data (Format B) |P|IHS|S|  NASL |U| NAL |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 ~1|              IOAM-DEX-ISD-MNA             |S|               ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

    <t>Here, the enclosed elements are defined as follows:</t>
    <ul spacing="normal">
    <li>The MNA Label (value TBA4) is defined in <xref target="I-D.ietf-mpls-mna-hdr" format="default"/>.</li>
    <li>S - the Bottom of Stack field <xref target="RFC3032"/>.</li>
    <li>P flag is set as specified in <xref target="I-D.ietf-mpls-mna-ps-hdr"/>.</li>
    <li>IHS, U, and NASL fields are set as specified in <xref target="I-D.ietf-mpls-mna-hdr"/>.</li>
    <li>NASL - number of LSEs that compose the IOAM-DEX-ISD-MNA blob.</li>
    <li>Opcode is MNA-IOAM-DEX opcode (value TBA2) assigned by IANA.</li>
    <li>IOAM-DEX-ISD-MNA - IOAM-DEX in MPLS Network Action ISD encoding.</li>
      </ul>

    <t>
    Policies controlling the processing of the collected operational state and telemetry information,
    and its transport are outside the scope of this document.
    </t>
      
<section anchor="ioam-dex-isd-mna-enc-sec" numbered="true" toc="default">
<name>IOAM-DEX Option-Type Encoding as MNA ISD</name>

    <t>
    The IOAM-DEX in MNA header uses the LSE Format D, as defined in Section 4.4 <xref target="I-D.ietf-mpls-mna-hdr"/>,
    that maps IOAM-DEX Option Type format <xref target="RFC9326"/>. In addition to the requirement to preserve the Bottom of Stack field, the most significant bit
    in LSE Format D is always set to 1 avoiding a possible mix-up of the LSE with one of the Base Special Purpose Labels.
    The format of IOAM-DEX-MNA blob in MNA ISD header is shown in <xref target="ioam-dex-fig"/>. 
    </t>

 <figure anchor="ioam-dex-fig">
   <name>IOAM-DEX Option Type Format for MPLS Network Action ISD</name>
  <artwork name="" type="" align="left" alt=""><![CDATA[    
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |1|         Namespace-ID          |    Resv   |S|     Flags     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |1|         IOAM-Trace-Type-MNA               |S|O|R| Ext-Flags |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |1|         Flow ID MNA (Optional)            |S|  Flow ID MNA  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |1|         Sequence Number MNA (Optional)    |S|  Seq Num MNA  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>
    <t>
    Where fields are defined as follows:
    </t>
    <ul spacing="normal">
    <li>Namespace-ID is a 16-bit identifier of the IOAM Namespace, as defined in <xref target="RFC9197"/>.</li>
    
    <li>Resv field is Reserved, it MUST be set to 0 on transmit and ignored on receipt.</li>
    
    <li>S is a one-bit the Bottom of Stack <xref target="RFC3032"/>.</li>
    
    <li>Flags is an eight-bit field comprised of eight one-bit subfields. The subfields in the Flags field are
    allocated by IANA in IOAM-DEX Flags registry, as defined in Section 4.2 of <xref target="RFC9326"/>.</li>
    
    <li>
    IOAM-Trace-Type-MNA is a 22-bit field.  The interpretation of bit
    positions in the IOAM-Trace-Type-MNA are as specified in <xref target="RFC9197"/>,
    from Bit 0 through Bit 21. Note that bits as specified
    in <xref target="RFC9197"/> are right-shifted one bit, so for example, bit 0 in
    <xref target="RFC9197"/> (left most bit for hop_Lim and node_id in short format)
    is mapped to Bit 1 (second left most bit) in the MNA encoding.
    The registry that contains the assigned codepoints is found 
    in the IANA's IOAM Trace-Type registry <xref target="IANA-IOAM-Trace-Type"/>.
    </li>
    
    <li>O is a one-bit flag identical to the interpretation of Bit 22 marked as "variable-length Opaque State Snapshot" 
    as defined in <xref target="RFC9197"/> and assigned codepoints found in the IANA's IOAM Trace-Type registry <xref target="IANA-IOAM-Trace-Type"/>.</li>
    
    <li>R (Reserved) is a one-bit flag identical to the interpretation of Bit 23 marked as "reserved" as defined in <xref target="RFC9197"/> 
    and assigned codepoints found in IANA's IOAM Trace-Type registry <xref target="IANA-IOAM-Trace-Type"/>. 
    Similarly to <xref target="RFC9197"/>, the R bit is reserved to allow for future extensions of the IOAM-Trace-Type-MNA bit field,
    i.e., it indicates the presence of the extended
    IOAM-Trace-Type-MNA field in the next LSE in Format D.
    </li>

    <li>The concatenation of the 22-bit IOAM-Trace-Type-MNA, O, and R fields, explained above, is identical to IOAM-Trace-Type in the interpretation of its bits,
    as defined in <xref target="RFC9197"/> and assigned codepoints found in IANA's IOAM Trace-Type registry <xref target="IANA-IOAM-Trace-Type"/>.</li>
    
    <li>Ext-Flags is a six-bit field comprised of six one-bit subfields. The allocation of
    the subfields in the Ext-Flags field is according to Section 4.3 of <xref target="RFC9326"/>. The allocated flags indicate the presence of
    the optional Flow ID MNA and/or Sequence Number MNA fields in the IOAM-DEX-ISD-MNA header. The length of the Ext-Flags field in IOAM-DEX Option-Type in MNA
    is shorter by two one-bit fields compared to the length of the Extension Flags field defined in Section 3.2 of <xref target="RFC9326"/>. 
    Mapping of these two bit positions are for further study.
    
    <xref target="ext-flag-fig"/> displays the detailed format of the Ext-Flags field.</li>
    
    <li>Optional fields, i.e., Flow ID MNA and Sequence Number MNA, according to <xref target="RFC9326"/>, immediately follow the Reserved field used
    to align optional fields at the four-octet word boundary. In the case of IOAM-DEX in MNA, such alignment can be achieved without using padding.</li>
    
    <li>Flow ID MNA is an optional four-octet field and carries a 30-bit Flow ID (after removing leading 1 and S bits). The semantics of the Flow ID MNA field is
    as of the Flow ID field defined in Section 3.2 of <xref target="RFC9326"/>. The most significant bit MUST be set to 1.
    Bit 23 MUST be set according to the definition of Bottom of Stack field in <xref target="RFC3032"/>.</li>
    
    <li>Sequence Number MNA is an optional four-octet field and carries a 30-bit sequence number (after removing leading 1 and S bits). 
    The semantics of the Sequence Number MNA field is
    as of the Sequence Number field defined in Section 3.2 of <xref target="RFC9326"/>. The most significant bit MUST be set to 1.
    Bit 23 MUST be set according to the definition of Bottom of Stack field in <xref target="RFC3032"/>. In MPLS network
    environments where a label stack information is used for load-balancing flows, the 19-bit-long part of the
    Sequence Number MNA, starting from the Bit 1 position of the LSE,
    MUST remain immutable for a particular packet flow that the value of the Flow ID MNA field identifies.
    In MPLS networks, where other load-balancing techniques are used, all bits of the Sequence Number MNA field can be varied.
    </li>

</ul>

<figure anchor="ext-flag-fig">
   <name>Ext-Flags Field Format</name>
  <artwork name="" type="" align="left" alt=""><![CDATA[    
                          0 1 2 3 4 5
                         +-+-+-+-+-+-+
                         |F|N|U|U|U|U|
                         +-+-+-+-+-+-+
   ]]></artwork>
</figure>

    <t>Where fields are defined as follows:</t>
    <ul spacing="normal">
    <li>F - one-bit flag. When the flag is set to 1, it indicates the presence of the Flow ID field in the IOAM-DEX-ISD-MNA header.</li>
    <li>N - one-bit flag. When the flag is set to 1, it indicates the presence of the Sequence Number field in the IOAM-DEX-ISD-MNA header.</li>
    <li>U - unassigned one-bit flag. It MUST be zeroed on transmission and the value MUST be ignored upon receipt.</li>
    </ul>


</section>

</section>
</section>

    <section anchor="sect-7" numbered="true" toc="default">
      <name>Considerations for IOAM and IOAM-DEX in MPLS Networks</name>
      
    <section anchor="sect-4" numbered="true" toc="default">
      <name>Ingress-To-Egress Scope IOAM and IOAM-DEX Network Actions </name>

    <t>The I2E IOAM data fields carry the IOAM Option-Type(s) that
    require processing on the encapsulating and decapsulating nodes only.
    </t>
 
    <t>
    The IOAM Option-Type carried can be IOAM Edge-To-Edge 
    Option-Type (value 3) defined in <xref target="RFC9197" format="default"/>
    as well as IOAM-DEX Option-Type (value 4) defined 
    in <xref target="RFC9326" format="default"/>.
    The I2E IOAM data fields SHOULD NOT carry any IOAM Option-Type that
    require IOAM processing on the intermediate nodes as it will
    not be processed by them when IHS scope is set to "I2E, value 0x0".</t>
   
        <t>
    The I2E IOAM and IOAM-DEX Network Action procedure is summarized as follows:</t>
         <ul spacing="normal">
          <li>
    The encapsulating node inserts an MNA Sub-Stack with the MNA Label with 
    IHS scope set to "I2E, value 0x0", one or more In-Stack Network Actions and one 
    or more IOAM data fields in the MPLS packet.</li>
       <li>The intermediate nodes do not process the HBH IOAM data fields.</li>
          <li>The decapsulating node MAY punt the IOAM data fields from the packet with the receive timestamp  
    to the slow path for processing.  
    The receive timestamp is required by the various 
    I2E OAM use-cases, including streaming telemetry. 
    Note that the packet is not necessarily punted to the control-plane.</li>
           <li>The decapsulating node processes the IOAM data fields using the
    procedures defined in <xref target="RFC9197" format="default"/> and <xref target="RFC9326" format="default"/>.  An example of IOAM
    processing is to export the IOAM data fields for streaming telemetry.</li>
          <li>The decapsulating node MUST remove the Network Actions and IOAM data fields
    from the received packet. The decapsulated packet is forwarded 
    downstream or terminated locally similar to the regular data packets.</li>
        </ul>
      </section>
      
    <section anchor="sect-5" numbered="true" toc="default">
      <name>Hop-By-Hop Scope IOAM and IOAM-DEX Network Actions</name>

    <t>The HBH IOAM data fields carry the Option-Type(s) that require
    processing at the intermediate and/or encapsulating and decapsulating nodes.
    </t>

    <t>
    The IOAM Option-Type carried can be IOAM
    Pre-allocated Trace Option-Type (value 0), IOAM Incremental Trace Option-Type (value 1) 
    and IOAM Proof of Transit (POT) Option-Type (value 2), and Edge-To-Edge 
    Option-Type (value 3) defined in <xref target="RFC9197" format="default"/> as well as 
    IOAM-DEX Option-Type (value 4) defined 
    in <xref target="RFC9326" format="default"/>.</t> 

    <t>
    Editor's note: IPv6 option is not supported for HBH IOAM Incremental Trace Option-Type (value 1).
    Similarly, MPLS network action is also not supported for HBH IOAM Incremental Trace Option-Type (value 1) and will be removed.
    </t>

    <t>
    The Hop-By-Hop IOAM and IOAM-DEX Network Action procedure is summarized as follows:</t>

        <ul spacing="normal">
          <li>
    The encapsulating node inserts an MNA Sub-Stack containing MNA Label, 
    with IHS scope set to "HBH, value 0x1", one or more In-Stack Network Actions for IOAM, 
    and one or more IOAM data fields in the MPLS packet.</li>
          <li>The intermediate node enabled with HBH IOAM function
    processes the data packet including the IOAM data fields as defined in 
    <xref target="RFC9197" format="default"/> and <xref target="RFC9326" format="default"/>
    when the node recognizes the HBH scope in the MNA Sub-Stack.</li>
          <li>The intermediate node MAY punt the IOAM data fields from the packet with the receive timestamp  
    to the slow path for processing when the node recognizes the HBH scope.  
    The receive timestamp is required by the various 
    HBH OAM use-cases, including streaming telemetry. 
    Note that the packet is not necessarily punted to the control-plane.</li>
          <li>The intermediate node forwards the data packet downstream.</li>
          <li>The processing on the decapsulating node is the same as the I2E case.</li>
        </ul>

    <t>Both HBH and I2E Scope IOAM may be carried in the Post-Stack MNA in an MPLS packet. 
    In this case, the PSMH with HBH IOAM data fields MUST be added after the BOS 
    and before the PSMH with I2E IOAM data fields.
    This way, the RLD required to process them on the intermediate nodes is minimized.
    </t>
    </section>
      
       <section anchor="sect-7.2" numbered="true" toc="default">
        <name>Node Capability</name>
        <t>
    The decapsulating node that needs to remove the IOAM and IOAM-DEX data fields
    and perform the IOAM and IOAM-DEX functions may not be capable of
    supporting it.  The encapsulating node needs to know if the
    decapsulating node can support the IOAM and IOAM-DEX functions.  The signaling
    extension for this capability exchange is outside the scope of this
    document.</t>

        <t>The intermediate node that is not capable of supporting the IOAM and IOAM-DEX functions
    defined in this document, can simply skip the IOAM and IOAM-DEX processing.</t>
      </section>
      
        <section anchor="sect-7.3" numbered="true" toc="default">
        <name>Nested MPLS Encapsulation</name>
    <t>
    When a packet is received with MPLS Encapsulated Network Action for IOAM and IOAM-DEX, the nested MPLS
    encapsulating node that needs to add different Network Action for IOAM and IOAM-DEX, the node MUST add
    a new MNA Sub-Stack with the Network Action for IOAM and IOAM-DEX as part of the new MPLS encapsulation.
    </t>
       </section>

     <section anchor="sect-7.4" numbered="true" toc="default">
        <name>Readable Label Depth Consideration</name>
    <t>
    The encapsulating node needs to make sure that the IOAM and IOAM-DEX data fields in MNA are added within the Readable Label 
    Depth (RLD) of the downstream MNA capable nodes in order for them to be able to process the IOAM and IOAM-DEX.
    </t>
       </section>
       </section>
      
    <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
Security considerations discussed in <xref target="RFC9197"/>, <xref target="RFC9326"/>, <xref target="I-D.ietf-mpls-mna-hdr"/>, <xref target="I-D.ietf-mpls-mna-ps-hdr"/>  and <xref target="RFC9789"/> apply to this document. 
      </t>

      <t>
    The usage of MPLS network actions defined in this document for IOAM and IOAM-DEX is intended for 
    deployment in a single network administrative domain.
    As such, it assumes that the operator enabling the IOAM and IOAM-DEX  
    operations has previously verified the integrity of the path.
    Still, operators need to properly secure the IOAM and IOAM-DEX 
    in the domain to avoid malicious configuration and use, which could include
    injecting malicious IOAM and IOAM-DEX packets into the domain.
    </t>
    </section>


    <section anchor="iana-consider" numbered="true" toc="default">
    <name>IANA Considerations</name>
      <section anchor="iana-option-consider" numbered="true" toc="default">
      <name>MPLS Network Action Opcodes</name>
      <t>IANA is requested to assign codepoints from its Network Action Opcodes registry
      (creation requested in <xref target="I-D.ietf-mpls-mna-hdr"/> and update requested in <xref target="I-D.ietf-mpls-mna-ps-hdr"/>)
      as specified in <xref target="iana-ioam-dex-mna-option-tbl"/>.</t>
      
          <table anchor="iana-ioam-dex-mna-option-tbl" align="center">
          <name>MPLS Network Action Opcodes</name>
          <thead>
            <tr>
              <th align="left">Opcode</th>
              <th align="left">Description</th>
              <th align="left">In-Stack Only, Post-Stack Only, In-Stack and Post-Stack</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>

          <tr>
            <td align="left">TBA1 </td>
            <td align="left">Network Action for IOAM and IOAM-DEX in PSD</td>
            <td align="left">In-Stack and Post-Stack</td>
            <td align="left">This document</td>
          </tr>

           <tr>
             <td align="left">TBA2</td>
             <td align="left">Network Action for IOAM-DEX in ISD</td>
             <td align="left">In-Stack Only</td>
             <td align="left">This document</td>
           </tr>

         </tbody>
        </table>
        
      </section>
      
    </section>


   <section anchor="sect-J6.a" numbered="true" toc="default">
    <name>Appendix A: Examples</name>

     <section anchor="sect-J6.b" numbered="true" toc="default">
    <name>In-Stack and Post-Stack Network Action Processing Order</name>

      <t>
    The In-Stack Network Action with Post-Stack Data can be added to interleave Post-Stack 
    network actions with In-Stack network actions.  The following example shows how to process the
    Post-Stack NA before some of the In-Stack NAs.
      </t>

      <figure anchor="In-Stack-NA-Ordering-3">
        <name>Post-Stack and In-Stack NA Processing Order</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |           MNA Label                   | TC  |0|    TTL        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Opcode=8    |      Ancillary Data     |1|IHS|0| NASL=3|U|NAL=0|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Opcode=1    |      Flag-Based NAIs          |0| NAIs  |U|NAL=0|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Opcode=TBA1 |      Post-Stack Offset=1      |0|PS-NAI |U|NAL=0|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Opcode=7    |      Ancillary Data           |1|  AD   |U|NAL=0|
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | PFN   |Version| PS-HDR-LEN=1  | TYPE = MNA-POST-STACK-HDR = 1 |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | PS-OP=TBA1  |R|R|  PS-NAL=0   |       POST-STACK DATA         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
      </figure>

      <t>
In this example, opcode 8 is processed first, followed by the opcode 1 for Flag-Based NAIs, 
then the Opcode TBA1 (which has corresponding Network Action opcode TBA1 in Post-Stack at an offset of 1 word, i.e., 4 bytes from the BOS), and finally opcode 7.
      </t>

  </section>
  </section>

      
      </middle>
  
  <back>
  <references>
  <name>References</name>
  <references>
        <name>Normative References</name>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3032.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9197.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9326.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9789.xml"/>
      <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-mpls-mna-hdr.xml"/>
      <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-mpls-mna-ps-hdr.xml"/>

    </references>
    
    <references>
    <name>Informational References</name>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8969.xml"/>
      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9791.xml"/>
      <reference anchor="IANA-IOAM-Trace-Type" target="https://www.iana.org/assignments/ioam/ioam.xhtml#trace-type">
        <front>
            <title>IOAM Trace-Type</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        
          </references>
    
    </references>

        <section numbered="false" toc="default">
      <name>Acknowledgments</name>
<t>
The authors would like to thank Adrian Farrel for reviewing this document and providing review comments.
The authors would also like to thank Patrick Khordoc, Sagar Soni, Shwetha Bhandari, Vengada Prasad Govindan, Tarek Saad, Stewart Bryant, Xiao Min, Jaganbabu Rajamanickam, and Cheng Li for reviewing the early version of this document. The authors would also like to thank Mach Chen, Andrew Malis, Matthew Bocci, and Nick Delregno for the MPLS-RT expert review of the early version of this document.
</t>
    </section>
    
   <section numbered="false" anchor="contributors" toc="default">
      <name>Contributors</name>
      <t>The following people have substantially contributed to this document:</t>
     <artwork name="" type="" align="left" alt=""><![CDATA[

Zafar Ali
Cisco Systems, Inc.
Email: zali@cisco.com

Loa Andersson
Huawei Technologies
Email: loa@pi.nu

Frank Brockners
Cisco Systems, Inc.
Hansaallee 249, 3rd Floor
DUESSELDORF, NORDRHEIN-WESTFALEN  40549
Germany
Email: fbrockne@cisco.com

Voitek Kozak
Comcast
Email: Voitek_Kozak@comcast.com

   ]]></artwork>

    </section>

  </back>
</rfc>
