<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" docName="draft-gandhi-mpls-ioam-04" category="std" updates="5586" ipr="trust200902" consensus="true" obsoletes="" xml:lang="en" sortRefs="true" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.0 -->
  <!-- Generated by id2xml 1.5.0 on 2020-03-09T17:12:10Z -->
    <front>
    <title abbrev="In-situ OAM for MPLS Data plane">MPLS Data Plane Encapsulation for In-situ OAM Data</title>
    <seriesInfo name="Internet-Draft" value="draft-gandhi-mpls-ioam-04"/>
    <author fullname="Rakesh Gandhi" initials="R." role="editor" surname="Gandhi">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Canada</street>
        </postal>
        <email>rgandhi@cisco.com</email>
      </address>
    </author>
    <author fullname="Zafar Ali" initials="Z." surname="Ali">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <email>zali@cisco.com</email>
      </address>
    </author>
    <author fullname="Frank Brockners" initials="F." surname="Brockners">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Hansaallee 249, 3rd Floor</street>
          <street>DUESSELDORF, NORDRHEIN-WESTFALEN  40549</street>
          <street>Germany</street>
        </postal>
        <email>fbrockne@cisco.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>
    <author fullname="Bruno Decraene" initials="B." surname="Decraene">
      <organization>Orange</organization>
      <address>
        <email>bruno.decraene@orange.com</email>
      </address>
    </author>
    <author fullname="Voitek Kozak" initials="V." surname="Kozak">
      <organization>Comcast</organization>
      <address>
        <email>Voitek_Kozak@comcast.com</email>
      </address>
    </author>
    <date day="02" month="March" year="2022"/>
    <workgroup>MPLS Working Group</workgroup>
    <abstract>
      <t>
   In-situ Operations, Administration, and Maintenance (IOAM) is used for recording and collecting 
   operational and telemetry information while the
   packet traverses a path between two points in the network.  This
   document defines how IOAM data fields are transported with 
   MPLS data plane encapsulation using new Generic Associated Channel (G-ACh) and updates the RFC 5586.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="sect-1" numbered="true" toc="default">
      <name>Introduction</name>
      <t>
   In-situ Operations, Administration, and Maintenance (IOAM) is used for recording and collecting 
   operational and telemetry information while the
   packet traverses a path between two points in the network. The term "in-situ"
   refers to the fact that the IOAM data fields are added to the data
   packets rather than being sent within the probe packets specifically
   dedicated to OAM. The IOAM data
   fields are defined in <xref target="I-D.ietf-ippm-ioam-data" format="default"/>.  The IOAM data fields are further
   updated in <xref target="I-D.ietf-ippm-ioam-direct-export" format="default"/> for direct export use-cases.</t>
      <t>
   This document defines how IOAM data fields are transported with 
   MPLS data plane encapsulations using new Generic Associated Channel (G-ACh)
   and updates the <xref target="RFC5586" format="default"/>.</t>
    </section>
    <section anchor="sect-2" numbered="true" toc="default">
      <name>Conventions</name>
      <section anchor="sect-2.1" numbered="true" toc="default">
        <name>Requirement Language</name>
        <t>
   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 <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 anchor="sect-2.2" numbered="true" toc="default">
        <name>Abbreviations</name>
        <t>
   Abbreviations used in this document:</t>
        <dl newline="false" spacing="normal" indent="2">
          <dt>IOI  </dt>
          <dd>
            <t>
    IOAM Indicator
            </t>
            <t/>
          </dd>
          <dt>ECMP </dt>
          <dd>
            <t>
    Equal Cost Multi-Path
            </t>
            <t/>
          </dd>
          <dt>E2E  </dt>
          <dd>
            <t>
    Edge-To-Edge
            </t>
            <t/>
          </dd>
          <dt>EL   </dt>
          <dd>
            <t>
    Entropy Label
            </t>
            <t/>
          </dd>
          <dt>ELI  </dt>
          <dd>
            <t>
    Entropy Label Indicator
            </t>
            <t/>
          </dd>
          <dt>ELC  </dt>
          <dd>
            <t>
    Entropy Label Control
            </t>
            <t/>
          </dd>
          <dt>G-ACh</dt>
          <dd>
            <t>
    Generic Associated Channel
            </t>
            <t/>
          </dd>
          <dt>HBH  </dt>
          <dd>
            <t>
    Hop-By-Hop
            </t>
            <t/>
          </dd>
          <dt>HBI  </dt>
          <dd>
            <t>
    Hop-By-Hop Indicator 
            </t>
            <t/>
          </dd>
          <dt>IOAM </dt>
          <dd>
            <t>
    In-situ Operations, Administration, and Maintenance
            </t>
            <t/>
          </dd>
          <dt>MPLS </dt>
          <dd>
            <t>
    Multiprotocol Label Switching
            </t>
            <t/>
          </dd>
          <dt>OAM  </dt>
          <dd>
            <t>
    Operations, Administration, and Maintenance
            </t>
            <t/>
          </dd>
          <dt>POT  </dt>
          <dd>
            <t>
    Proof-of-Transit
            </t>
            <t/>
          </dd>
          <dt>PW   </dt>
          <dd>
            <t>
    PseudoWire
            </t>
            <t/>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="sect-3" numbered="true" toc="default">
      <name>MPLS Extensions for IOAM Data Fields</name>
      <section anchor="sect-3.1" numbered="true" toc="default">
        <name>IOAM Generic Associated Channel</name>
        <t>
   The IOAM header is added containing different IOAM-Data-Fields in the MPLS header as shown in Figure 1.
   The IOAM-Data-Fields MUST follow the definitions corresponding to
   IOAM-Option-Types (e.g. see Section 5 of <xref target="I-D.ietf-ippm-ioam-data" format="default"/>
   and Section 3.2 of <xref target="I-D.ietf-ippm-ioam-direct-export" format="default"/>).
   More than one trace options can be present in the IOAM-Data-Fields.</t>

   <t> 
   G-ACh <xref target="RFC5586" format="default"/> provides a mechanism to transport OAM and other control
   messages over MPLS data plane.  The IOAM G-ACh header <xref target="RFC5586" format="default"/> 
   with new IOAM G-ACh type MUST be added immediately after the MPLS
   label stack in the MPLS header as shown in Figure 1, before the IOAM-Data-Fields. 
   The G-ACh label (GAL) <xref target="RFC5586" format="default"/> MUST NOT be added in
   the MPLS label stack.</t>
        <t>This document updates the following paragraph in Section 2.1 
   of <xref target="RFC5586" format="default"/>: "The G-ACh MUST NOT be used to transport 
   user traffic" to "The G-ACh MAY be used with user traffic to transport OAM information". 
        </t>
        <t>Note that the G-ACh is not really used to transport the user traffic 
   in this document but to transport the IOAM-Data-Fields with the user traffic.
        </t>
        <figure anchor="ure-ioam-extension-in-mpls-header">
          <name>IOAM Generic Associated Channel with IOAM Data Fields</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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
 |0 0 0 1|Version| Length        |          IOAM G-ACh           |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
 | IOAM-OPT-Type | IOAM HDR Len  | Block Number  | Reserved      |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  I
 |                                                               |  O
 |                                                               |  A
 ~                 IOAM Option and Data Space                    ~  M
 |                                                               |  |
 |                                                               |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
 |                                                               |
 |                                                               |
 |                 Optional Payload + Padding                    |
 |                                                               |
 |                                                               |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <t>The IOAM-Data-Fields are encapsulated using the following fields in the
   MPLS header:</t>
        <dl newline="false" spacing="normal" indent="2">
          <dt>IP Version Number 0001b:</dt>
          <dd>
       The first four octets are IP Version Field part of a G-ACh header, as defined in <xref target="RFC5586" format="default"/>.
    </dd>
          <dt>Version:</dt>
          <dd>
       The Version field is set to 0, as defined in <xref target="RFC4385" format="default"/>.
    </dd>
          <dt>Length:</dt>
          <dd>
       Length of IOAM G-ACh data in 4-octet units.
       Note that this field is marked as Reserved in <xref target="RFC5586" format="default"/> and is 
       updated for the new IOAM G-ACh type by this document.
    </dd>
          <dt>IOAM G-ACh:</dt>
          <dd>
       Generic Associated Channel (G-ACh) Type (value TBA1) for IOAM <xref target="RFC5586" format="default"/>.
    </dd>
          <dt>Reserved:</dt>
          <dd>
       Reserved Bits MUST be set to zero upon transmission and ignored upon receipt.
    </dd>
          <dt>Block Number:</dt>
          <dd>
       The Block Number can be used to aggregate the IOAM data collected
       in 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.
    </dd>
          <dt>IOAM-OPT-Type:</dt>
          <dd>
       8-bit field defining the IOAM Option type, as defined in
       the "IOAM Option-Type Registry" specified in <xref target="I-D.ietf-ippm-ioam-data" format="default"/>.
    </dd>
          <dt>IOAM HDR Length:</dt>
          <dd>
       8-bit unsigned integer.  Length of the IOAM Header in 4-octet units.
    </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 5 of
         <xref target="I-D.ietf-ippm-ioam-data" format="default"/> and Section 3.2 of
         <xref target="I-D.ietf-ippm-ioam-direct-export" format="default"/>.
    </dd>
        </dl>
      </section>
      <section anchor="sect-3.2" numbered="true" toc="default">
        <name>IOAM Indicators</name>
        <t>
    An IOAM Indicator MUST be used to indicate the presence of the
    IOAM-Data-Fields in the MPLS header.
    If both edge and intermediate nodes need to process IOAM data 
    then both IOAM Indicator and HBH Indicator MUST be used. 
    The HBH Indicator allows
    to optimize the IOAM processing on intermediate nodes 
    and avoids the need to check all IOAM-Data-Fields.</t>

    <t>A flag called IOI (IOAM Indicator) in the TTL of the X-Label is defined in this document to indicate the presence of IOAM.  
    A flag called HBI (Hop-By-Hop Indicator) in the TTL of the X-Label is defined to indicate that HBH processing is required. 
    The bit positions of these flags in the TTL field can be user-defined, consistently in the network.
    Alternatively, the bit positions of these flag can be allocated by IANA.</t>


    <t>The X-Label can be a Special Purpose Label (value TBA1) assigned by IANA or a Network Programming Label (NPL) provisioned by a user <xref target="I-D.jags-mpls-ext-hdr" format="default"/> or an Entropy Label <xref target="I-D.decraene-mpls-slid-encoded-entropy-label-id" format="default"/>.</t>


      </section>
    </section>
    <section anchor="sect-4" numbered="true" toc="default">
      <name>Edge-to-Edge IOAM</name>
      <section anchor="sect-4.1" numbered="true" toc="default">
        <name>IOAM Indicator</name>
        <t>
    The IOAM Indicator is used to indicate the presence of the
    IOAM-Data-Fields in the MPLS header as shown in Figure 2.
        </t>
        <figure anchor="ure-ioam-encapsulation-in-mpls-header-e2e">
          <name>Example MPLS Encapsulation for IOAM</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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Label                                | TC  |S|  TTL          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 .                                                               .
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  X-Label                              | TC  |1|  TTL(IOI)     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                Packet as shown in Figure 1                    |
 .                                                               .
 +---------------------------------------------------------------+
]]></artwork>
        </figure>
        <t>The E2E IOAM-Data-Fields carry the Option-Type(s) that
    require processing on the encapsulating and decapsulating nodes only.
    The IOAM Option-Type carried can be IOAM Edge-to-Edge
    Option-Type <xref target="I-D.ietf-ippm-ioam-data" format="default"/>.
    The E2E 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.</t>
      </section>
      <section anchor="sect-4.2" numbered="true" toc="default">
        <name>Procedure for Edge-to-Edge IOAM</name>
        <t>
    The E2E IOM procedure is summarized as following:</t>
        <ul spacing="normal">
          <li>
    The encapsulating node inserts the X-Label with the IOAM Indicator (Flag IOI)
    below the label whose FEC is the end (decapsulating) node and one or more IOAM-Data-Fields in the MPLS header.</li>
          <li>The intermediate nodes do not process IOAM-Data-Fields.</li>
          <li>The penultimate node MUST NOT remove the MPLS header. This is ensured by the encapsulating node by adding required MPLS header.</li>
          <li>The decapsulating node MAY punt a copy of the packet with the receive timestamp  
    to the slow path for IOAM-Data-Fields processing when the node recognizes the IOAM Indicator.  
    The receive timestamp is required by the various 
    E2E 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="I-D.ietf-ippm-ioam-data" format="default"/>.  An example of IOAM
    processing is to export the IOAM-Data-Fields, send IOAM-Data-Fields via streaming
    telemetry, etc.</li>
          <li>The decapsulating node MUST remove the IOAM-Data-Fields
    from the received packet. The decapsulated packet is forwarded 
    downstream or terminated locally similar to the regular IOAM-Data-Fields.</li>
        </ul>
      </section>
    </section>
    <section anchor="sect-5" numbered="true" toc="default">
      <name>Hop-By-Hop IOAM</name>
      <section anchor="sect-5.1" numbered="true" toc="default">
        <name>Hop-By-Hop Indicator</name>
        <t>
    The IOAM Indicator (Flag IOI) along with Hop-By-Hop Indicator (Flag HBI) are used to indicate the presence of the
    HBH IOAM-Data-Fields in the MPLS header as shown in Figure 3.</t>
        <figure anchor="ure-ioam-encapsulation-in-mpls-header-1">
          <name>Example MPLS Encapsulation for HBH IOAM</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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Label                                | TC  |S|  TTL          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 .                                                               .
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  X-Label                              | TC  |1| TTL(IOI, HBI) |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                Packet as shown in Figure 1                    |
 .                                                               .
 +---------------------------------------------------------------+
]]></artwork>
        </figure>
        <t>The HBH IOAM-Data-Fields carry the Option-Type(s) that require
    processing at the intermediate and/or encapsulating and decapsulating nodes.
    The IOAM Option-Type carried can be IOAM
    Pre-allocated Trace Option-Type, IOAM Incremental Trace Option-Type
    and IOAM Proof of Transit (POT) Option-Type, as well as Edge-to-Edge
    Option-Type <xref target="I-D.ietf-ippm-ioam-data" format="default"/>. </t>
      </section>
      <section anchor="sect-5.2" numbered="true" toc="default">
        <name>Procedure for Hop-By-Hop IOAM</name>
        <t>
    The HBH IOAM procedure is summarized as following:</t>
        <ul spacing="normal">
          <li>
    The encapsulating node inserts the X-Label with the IOAM Indicator (Flag IOI) and HBH Indicator (Flag HBI) 
    below the label whose FEC is the end (decapsulating) node and one or more IOAM-Data-Fields in the MPLS header.</li>
          <li>The intermediate node enabled with HBH IOAM function
    processes the data packet including the IOAM-Data-Fields as defined in 
    <xref target="I-D.ietf-ippm-ioam-data" format="default"/> when the node recognizes the HBH 
    Indicator in the MPLS header.</li>
          <li>The intermediate node MAY punt a copy of the packet with the receive timestamp  
    to the slow path for IOAM-Data-Fields processing when the node recognizes the HBH Indicator.  
    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 a copy of the processed data packet downstream.</li>
          <li>The penultimate node MUST NOT remove the MPLS header. This is ensured by the encapsulating node by adding required MPLS header.</li>
          <li>The processing on the decapsulating node is same as E2E case.</li>
        </ul>
      </section>
    </section>


    <section anchor="sect-7" numbered="true" toc="default">
      <name>Considerations for IOAM</name>
      <section anchor="sect-7.1" numbered="true" toc="default">
        <name>Considerations for ECMP</name>
        <t>
    The encapsulating node needs to make sure the IOAM-Data-Fields do
    not start with a well-known IP Version Number (e.g. 0x4 for IPv4 and
    0x6 for IPv6) as that can alter the hashing function for ECMP that uses
    the IP header.  This is achieved by using the IOAM 
    G-ACh with IP Version Number 0001b after the MPLS label stack <xref target="RFC5586" format="default"/>.</t>
        <t>When entropy label <xref target="RFC6790" format="default"/> is used for hashing function for ECMP,
    the procedure defined in this document does not alter the ECMP behaviour.</t>
      </section>
      <section anchor="sect-7.2" numbered="true" toc="default">
        <name>Node Capability</name>
        <t>
    The decapsulating node that has to remove the IOAM-Data-Fields
    and perform the IOAM function may not be capable of
    supporting it.  The encapsulating node needs to know if the
    decapsulating node can support the IOAM function.  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 functions
    defined in this document, can simply skip the IOAM processing.</t>
      </section>
      <section anchor="sect-7.3" numbered="true" toc="default">
        <name>Nested MPLS Encapsulation</name>
    <t>
   When a packet is received with IOAM, the nested MPLS
   encapsulating node that supports a different IOAM, the node MUST add
   a new X-Label with the supported IOAM as part of the new MPLS encapsulation.
   </t>

       </section>
    </section>
    <section anchor="sect-8" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
    The security considerations of IOAM in general are discussed in
    <xref target="I-D.ietf-ippm-ioam-data" format="default"/> and apply to the 
    procedure defined in this document.</t>
      <t>IOAM is considered a "per domain" feature, where one or several operators 
    decide on configuring IOAM according to their needs.  
    IOAM is intended for deployment in limited
    domains <xref target="RFC8799" format="default"/>.  As such, it assumes that a node involved in IOAM 
    operation has previously verified the integrity of the path.
    Still, operators need to properly secure the IOAM
    domain to avoid malicious configuration and use, which could include
    injecting malicious IOAM packets into the domain.</t>
      <t>Routers that support G-ACh are subject to the same security
    considerations as defined in <xref target="RFC4385" format="default"/> and <xref target="RFC5586" format="default"/>.</t>
    </section>
    <section anchor="sect-9" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>
    IANA maintains G-ACh Type Registry 
    (see <eref target="https://www.iana.org/assignments/g-ach-parameters/g-ach-parameters.xhtml"/>).  
    IANA is requested to allocate a value for IOAM G-ACh Type from "MPLS Generalized Associated Channel (G-ACh) 
    Types (including Pseudowire Associated Channel Types)" registry.</t>
      <table anchor="iana-gach-tbl" align="center">
        <name>IOAM G-ACh Type</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBA1</td>
            <td align="left">IOAM G-ACh Type</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sect-10" numbered="true" toc="default">
      <name>Appendix</name>
      <section anchor="sect-10.1" numbered="true" toc="default">
        <name>MPLS Encapsulation with Control Word and Another G-ACh for IOAM Data Fields</name>
        <t>
    The IOAM-Data-Fields, including IOAM G-ACh header are added in the MPLS encapsulation 
    immediately after the MPLS header. Any Control Word <xref target="RFC4385" format="default"/> 
    or another G-ACh <xref target="RFC5586" format="default"/> MUST be added 
    after the IOAM-Data-Fields in the packet as shown in the Figure 6 and Figure 7, respectively. 
    This allows the intermediate nodes to easily access the HBH IOAM-Data-Fields located 
    immediately after the MPLS header. The decapsulating node can remove
    the MPLS encapsulation including the IOAM-Data-Fields and then process 
    the Control Word or another G-ACh following it. The subsequent G-ACh and Control Word are located
    through the use of the "Length" field in the IOAM G-ACh.
        </t>
        <figure anchor="ure-data-packet-with-another-cw-header">
          <name>Example MPLS Encapsulation with Generic PW Control Word with HBH IOAM</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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  X-Label                              | TC  |1| TTL(IOI, HBI) |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |0 0 0 1|Version| Length        | IOAM G-ACh                    | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
 | IOAM-OPT-Type | IOAM HDR Len  | Block Number  | Reserved      |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  I
 |                                                               |  O
 |                                                               |  A
 ~                 IOAM Option and Data Space                    ~  M
 |                                                               |  |
 |                                                               |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
 |0 0 0 0| Specified by PW Encapsulation [RFC4385]               |   
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 |                                                               |
 ~                 Payload + Padding                             ~
 |                                                               |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <figure anchor="ure-data-packet-with-another-ach-header">
          <name>Example MPLS Encapsulation with Another G-ACh with HBH IOAM</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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  X-Label                              | TC  |1| TTL(IOI, HBI) |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |0 0 0 1|Version| Length        | IOAM G-ACh                    | 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
 | IOAM-OPT-Type | IOAM HDR Len  | Block Number  | Reserved      |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  I
 |                                                               |  O
 |                                                               |  A
 ~                 IOAM Option and Data Space                    ~  M
 |                                                               |  |
 |                                                               |  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
 |0 0 0 1|Version| Reserved      | Channel Type                  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 |                                                               |
 ~                 Payload + Padding                             ~
 |                                                               |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
           </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC5586" target="https://www.rfc-editor.org/info/rfc5586" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5586.xml">
          <front>
            <title>MPLS Generic Associated Channel</title>
            <author initials="M." surname="Bocci" fullname="M. Bocci" role="editor">
              <organization/>
            </author>
            <author initials="M." surname="Vigoureux" fullname="M. Vigoureux" role="editor">
              <organization/>
            </author>
            <author initials="S." surname="Bryant" fullname="S. Bryant" role="editor">
              <organization/>
            </author>
            <date year="2009" month="June"/>
          </front>
          <seriesInfo name="RFC" value="5586"/>
          <seriesInfo name="DOI" value="10.17487/RFC5586"/>
        </reference>
        <reference anchor="RFC6790" target="https://www.rfc-editor.org/info/rfc6790" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6790.xml">
          <front>
            <title>The Use of Entropy Labels in MPLS Forwarding</title>
            <author initials="K." surname="Kompella" fullname="K. Kompella">
              <organization/>
            </author>
            <author initials="J." surname="Drake" fullname="J. Drake">
              <organization/>
            </author>
            <author initials="S." surname="Amante" fullname="S. Amante">
              <organization/>
            </author>
            <author initials="W." surname="Henderickx" fullname="W. Henderickx">
              <organization/>
            </author>
            <author initials="L." surname="Yong" fullname="L. Yong">
              <organization/>
            </author>
            <date year="2012" month="November"/>
          </front>
          <seriesInfo name="RFC" value="6790"/>
          <seriesInfo name="DOI" value="10.17487/RFC6790"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="I-D.ietf-ippm-ioam-direct-export" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ippm-ioam-direct-export.xml" target="https://www.ietf.org/archive/id/draft-ietf-ippm-ioam-direct-export-07.txt">
          <front>
            <title>In-situ OAM Direct Exporting</title>
            <author fullname="Haoyu Song">
              <organization>Futurewei</organization>
            </author>
            <author fullname="Barak Gafni">
              <organization>Nvidia</organization>
            </author>
            <author fullname="Tianran Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Zhenbin Li">
              <organization>Huawei</organization>
            </author>
            <author fullname="Frank Brockners">
              <organization>Cisco</organization>
            </author>
            <author fullname="Shwetha Bhandari">
              <organization>Thoughtspot</organization>
            </author>
            <author fullname="Ramesh Sivakolundu">
              <organization>Cisco</organization>
            </author>
            <author fullname="Tal Mizrahi">
              <organization>Huawei</organization>
            </author>
            <date month="October" day="13" year="2021"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ippm-ioam-direct-export-07"/>
        </reference>
        <reference anchor="I-D.ietf-ippm-ioam-data" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ippm-ioam-data.xml" target="https://www.ietf.org/archive/id/draft-ietf-ippm-ioam-data-17.txt">
          <front>
            <title>Data Fields for In-situ OAM</title>
            <author fullname="Frank Brockners">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Shwetha Bhandari">
              <organization>Thoughtspot</organization>
            </author>
            <author fullname="Tal Mizrahi">
              <organization>Huawei</organization>
            </author>
            <date month="December" day="13" year="2021"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ippm-ioam-data-17"/>
        </reference>


      </references>

      <references>
        <name>Informative References</name>



	<reference anchor="I-D.decraene-mpls-slid-encoded-entropy-label-id" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.decraene-mpls-slid-encoded-entropy-label-id.xml" target="https://www.ietf.org/archive/id/draft-decraene-mpls-slid-encoded-entropy-label-id-03.txt">
          <front>
            <title>Using Entropy Label for Network Slice Identification in MPLS networks.</title>
            <author fullname="Bruno Decraene">
              <organization>Orange</organization>
            </author>
            <author fullname="Clarence Filsfils">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Wim Henderickx">
              <organization>Nokia</organization>
            </author>
            <author fullname="Tarek Saad">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Vishnu Pavan Beeram">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Luay Jalil">
              <organization>Verizon</organization>
            </author>
            <date month="February" day="11" year="2022"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-decraene-mpls-slid-encoded-entropy-label-id-03"/>
        </reference>

        <reference anchor="I-D.jags-mpls-ext-hdr" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.jags-mpls-ext-hdr.xml" target="https://www.ietf.org/archive/id/draft-jags-mpls-ext-hdr-00.txt">
          <front>
            <title>MPLS Extension Header Encodings Using Entropy Label</title>
            <author fullname="Jaganbabu Rajamanickam">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Rakesh Gandhi">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Jisu Bhattacharya">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Bruno Decraene">
              <organization>Orange</organization>
            </author>
            <author fullname="Royi Zigler">
              <organization>Broadcom</organization>
            </author>
            <author fullname="Weiqiang Cheng">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Luay Jalil">
              <organization>Verizon</organization>
            </author>
            <date month="March" day="02" year="2022"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jags-mpls-ext-hdr-00"/>
        </reference>



        <reference anchor="RFC4385" target="https://www.rfc-editor.org/info/rfc4385" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4385.xml">
          <front>
            <title>Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for Use over an MPLS PSN</title>
            <author initials="S." surname="Bryant" fullname="S. Bryant">
              <organization/>
            </author>
            <author initials="G." surname="Swallow" fullname="G. Swallow">
              <organization/>
            </author>
            <author initials="L." surname="Martini" fullname="L. Martini">
              <organization/>
            </author>
            <author initials="D." surname="McPherson" fullname="D. McPherson">
              <organization/>
            </author>
            <date year="2006" month="February"/>
          </front>
          <seriesInfo name="RFC" value="4385"/>
          <seriesInfo name="DOI" value="10.17487/RFC4385"/>
        </reference>

        <reference anchor="RFC8799" target="https://www.rfc-editor.org/info/rfc8799" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8799.xml">
          <front>
            <title>Limited Domains and Internet Protocols</title>
            <author initials="B." surname="Carpenter" fullname="B. Carpenter">
              <organization/>
            </author>
            <author initials="B." surname="Liu" fullname="B. Liu">
              <organization/>
            </author>
            <date year="2020" month="July"/>
          </front>
          <seriesInfo name="RFC" value="8799"/>
          <seriesInfo name="DOI" value="10.17487/RFC8799"/>
      </reference>
      </references>

    </references>
    <section numbered="false" toc="default">
      <name>Acknowledgements</name>
      <t>
    The authors would like to thank Patrick Khordoc, Sagar Soni, Shwetha Bhandari, Clarence Filsfils, and Vengada Prasad
    Govindan for the discussions on IOAM.  The authors would also like to
    thank Tarek Saad, Loa Andersson, Greg Mirsky, Stewart Bryant, Xiao Min, and Cheng Li for providing many
    useful comments. The authors would also like to thank Mach Chen, 
    Andrew Malis, Matthew Bocci, and Nick Delregno for the MPLS-RT reviews.</t>
    </section>
  </back>
</rfc>
