<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" submissionType="IETF" category="std" consensus="true" docName="draft-ietf-sfc-ioam-nsh-13" number="9452" ipr="trust200902" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" prepTime="2023-08-23T19:01:36" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-sfc-ioam-nsh-13" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9452" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="NSH Encapsulation for IOAM">Network Service Header (NSH) Encapsulation for In Situ OAM (IOAM) Data</title>
    <seriesInfo name="RFC" value="9452" stream="IETF"/>
    <author fullname="Frank Brockners" initials="F." role="editor" surname="Brockners">
      <organization abbrev="Cisco" showOnFrontPage="true">Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <extaddr>3rd Floor</extaddr>
          <street>Hansaallee 249</street>
          <city>Duesseldorf</city>
          <code>40549</code>
          <country>Germany</country>
        </postal>
        <email>fbrockne@cisco.com</email>
      </address>
    </author>
    <author fullname="Shwetha Bhandari" initials="S." role="editor" surname="Bhandari">
      <organization abbrev="Thoughtspot" showOnFrontPage="true">Thoughtspot</organization>
      <address>
        <postal>
          <extaddr>3rd Floor, Indiqube Orion</extaddr>
          <street>24th Main Rd, Garden Layout, HSR Layout</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560 102</code>
          <country>India</country>
        </postal>
        <email>shwetha.bhandari@thoughtspot.com</email>
      </address>
    </author>
    <date month="08" year="2023"/>
    <area>rtg</area>
    <workgroup>sfc</workgroup>
    <keyword>inband</keyword>
    <keyword>In situ</keyword>
    <keyword>Telemetry</keyword>
    <keyword>Tracing</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">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 outlines how IOAM-Data-Fields are encapsulated with the Network
      Service Header (NSH).</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9452" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2023 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) 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.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-conventions">Conventions</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-encapsulation-with-nsh">IOAM Encapsulation with NSH</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-discussion-of-the-ioam-enca">Discussion of the IOAM-Encapsulation Approach</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section toc="include" numbered="true" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">IOAM, as defined in
      <xref target="RFC9197" format="default" sectionFormat="of" derivedContent="RFC9197"/>, is used to record and collect OAM
      information while the packet traverses a particular network domain. The
      term "in situ" refers to the fact that the OAM data is added to the data
      packets rather than what is being sent within packets specifically dedicated
      to OAM. This document defines how IOAM-Data-Fields are transported as
      part of the Network Service Header (NSH) encapsulation <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/>
      for the Service Function Chaining (SFC) Architecture <xref target="RFC7665" format="default" sectionFormat="of" derivedContent="RFC7665"/>. The IOAM-Data-Fields are defined in
      <xref target="RFC9197" format="default" sectionFormat="of" derivedContent="RFC9197"/>.</t>
    </section>
    <section anchor="Conventions" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-conventions">Conventions</name>
      <t indent="0" pn="section-2-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
      <t indent="0" pn="section-2-2">Abbreviations used in this document:</t>
      <dl newline="false" spacing="normal" indent="3" pn="section-2-3">
        <dt pn="section-2-3.1">IOAM:</dt>
        <dd pn="section-2-3.2">In situ Operations, Administration, and
          Maintenance</dd>
        <dt pn="section-2-3.3">MD:</dt>
        <dd pn="section-2-3.4">NSH Metadata, see <xref target="RFC7665" format="default" sectionFormat="of" derivedContent="RFC7665"/></dd>
        <dt pn="section-2-3.5">NSH:</dt>
        <dd pn="section-2-3.6">Network Service Header</dd>
        <dt pn="section-2-3.7">OAM:</dt>
        <dd pn="section-2-3.8">Operations, Administration, and Maintenance</dd>
        <dt pn="section-2-3.9">SFC:</dt>
        <dd pn="section-2-3.10">Service Function Chaining</dd>
        <dt pn="section-2-3.11">TLV:</dt>
        <dd pn="section-2-3.12">Type, Length, Value</dd>
      </dl>
    </section>
    <section numbered="true" anchor="sec3" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-ioam-encapsulation-with-nsh">IOAM Encapsulation with NSH</name>
      <t indent="0" pn="section-3-1">The NSH is defined in <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/>. IOAM-Data-Fields are carried as NSH payload using a
      Next Protocol header that follows the NSH headers. An IOAM header
      containing the IOAM-Data-Fields is added. The IOAM-Data-Fields
      <bcp14>MUST</bcp14> follow the definitions corresponding to
      IOAM Option-Types (e.g., see <xref target="RFC9197" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9197#section-4" derivedContent="RFC9197"/> and <xref target="RFC9326" sectionFormat="of" section="3.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9326#section-3.2" derivedContent="RFC9326"/>). In an administrative domain where IOAM is used,
      insertion of the IOAM header in NSH is enabled at the NSH tunnel
      endpoints, which are also configured to serve as encapsulating and
      decapsulating nodes for IOAM. The operator <bcp14>MUST</bcp14> ensure
      that SFC-aware nodes along the Service Function Path support IOAM;
      otherwise, packets might be dropped (see the last paragraph of this
      section as well as <xref target="RFC8300" sectionFormat="of" section="2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8300#section-2.2" derivedContent="RFC8300"/>). The IOAM transit nodes (e.g., a Service Function
      Forwarder (SFF)) <bcp14>MUST</bcp14> process all the IOAM headers that
      are relevant based on its configuration.  See <xref target="RFC9378" format="default" sectionFormat="of" derivedContent="RFC9378"/> for a discussion of deployment-related aspects of
      IOAM-Data-Fields.</t>
      <figure align="left" suppress-title="false" pn="figure-1">
        <artwork name="" type="" align="left" alt="" pn="section-3-2.1"> 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;-+
|Ver|O|U|    TTL    |   Length  |U|U|U|U|MD Type| NP = 0x06  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  N
|          Service Path Identifier              | Service Index |  S
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  H
|                            ...                                |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;-+
|  IOAM-Type    | IOAM HDR Len  |    Reserved   | Next Protocol |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  I
!                                                               |  O
!                                                               |  A
~                 IOAM Option and Optional Data Space           ~  M
|                                                               |  |
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;-+
|                                                               |
|                                                               |
|                 Payload + Padding (L2/L3/...)                 |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
      </figure>
      <t indent="0" pn="section-3-3">The NSH header and fields are defined in <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/>.
      The O bit <bcp14>MUST</bcp14> be handled following the rules 
      in <xref target="RFC9451" format="default" sectionFormat="of" derivedContent="RFC9451"/>.
      The "NSH Next Protocol" value (referred to as "NP" in the diagram above)
      is 0x06.</t>
      <t indent="0" pn="section-3-4">The IOAM-related fields in NSH are defined as follows:</t>
      <dl spacing="normal" newline="true" indent="3" pn="section-3-5">
        <dt pn="section-3-5.1">IOAM-Type:</dt>
        <dd pn="section-3-5.2">8-bit field defining the IOAM Option-Type, as defined in the
            "IOAM Option-Type" registry specified in <xref target="RFC9197" format="default" sectionFormat="of" derivedContent="RFC9197"/>.</dd>
        <dt pn="section-3-5.3">IOAM HDR Len:</dt>
        <dd pn="section-3-5.4">8-bit field that contains the length of the IOAM header in
            multiples of 4-octets, including the "IOAM-Type" and "IOAM HDR
            Len" fields.</dd>
        <dt pn="section-3-5.5">Reserved bits:</dt>
        <dd pn="section-3-5.6">Reserved bits are present for future use. The reserved bits
            <bcp14>MUST</bcp14> be set to 0x0 upon transmission and ignored
            upon receipt.</dd>
        <dt pn="section-3-5.7">Next Protocol:</dt>
        <dd pn="section-3-5.8">8-bit unsigned integer that determines the type of header
            following IOAM. The semantics of this field are identical to the
            Next Protocol field in <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/>.</dd>
        <dt pn="section-3-5.9">IOAM Option and Optional Data Space:</dt>
        <dd pn="section-3-5.10">IOAM-Data-Fields as specified by the IOAM-Type
            field. IOAM-Data-Fields are defined corresponding to the
            IOAM Option-Type (e.g., see <xref target="RFC9197" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9197#section-4" derivedContent="RFC9197"/> and <xref target="RFC9326" sectionFormat="of" section="3.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9326#section-3.2" derivedContent="RFC9326"/>) and are always aligned by 4
            octets. Thus, there is no padding field.</dd>
      </dl>
      <t indent="0" pn="section-3-6">Multiple IOAM Option-Types <bcp14>MAY</bcp14> be included within the
      NSH encapsulation. For example, if an NSH encapsulation contains two
      IOAM Option-Types before a data payload, the Next Protocol field of the
      first IOAM option will contain the value 0x06, while the Next
      Protocol field of the second IOAM Option-Type will contain the "NSH Next
      Protocol" number indicating the type of the data payload. The
      applicability of the IOAM Active and Loopback flags <xref target="RFC9322" format="default" sectionFormat="of" derivedContent="RFC9322"/> is outside the scope of this
      document and may be specified in the future.</t>
      <t indent="0" pn="section-3-7">In case the IOAM Incremental Trace Option-Type is used, an SFC-aware
      node that serves as an IOAM transit node needs to adjust the "IOAM HDR
      Len" field accordingly. See <xref target="RFC9197" sectionFormat="of" section="4.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9197#section-4.4" derivedContent="RFC9197"/>.</t>
      <t indent="0" pn="section-3-8">Per <xref target="RFC8300" sectionFormat="of" section="2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8300#section-2.2" derivedContent="RFC8300"/>,
      packets with unsupported Next Protocol values <bcp14>SHOULD</bcp14> be
      silently dropped by default.  Thus, when a packet with IOAM is received
      at an NSH-based forwarding node (such as an SFF) that does not support
      the IOAM header, it <bcp14>SHOULD</bcp14> drop the packet. The
      mechanisms to maintain and notify of such events are outside the scope
      of this document.</t>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-4-1">IANA has allocated the following code point for IOAM in the 
      <eref target="https://www.iana.org/assignments/nsh" brackets="none">
      "NSH Next Protocol" registry</eref>: 
      </t>
      <table align="center" pn="table-1">
        <name/>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Next Protocol</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x06</td>
            <td align="left" colspan="1" rowspan="1">IOAM (Next Protocol is an IOAM header)</td>
            <td align="left" colspan="1" rowspan="1">RFC 9452</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">IOAM is considered a "per domain" feature, where the operator decides
      how to leverage and configure IOAM according to the operator's needs.
      The operator needs to properly secure the IOAM domain to avoid malicious
      configuration and use, which could include injecting malicious IOAM
      packets into a domain. For additional IOAM-related security
      considerations, see <xref target="RFC9197" sectionFormat="of" section="9" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9197#section-9" derivedContent="RFC9197"/>.  For additional OAM- and NSH-related security
      considerations, see <xref target="RFC9451" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9451#section-5" derivedContent="RFC9451"/>.</t>
    </section>
  </middle>
  <back>
    <references pn="section-6">
      <name slugifiedName="name-references">References</name>
      <references pn="section-6.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t indent="0">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="RFC8300" target="https://www.rfc-editor.org/info/rfc8300" quoteTitle="true" derivedAnchor="RFC8300">
          <front>
            <title>Network Service Header (NSH)</title>
            <author fullname="P. Quinn" initials="P." role="editor" surname="Quinn"/>
            <author fullname="U. Elzur" initials="U." role="editor" surname="Elzur"/>
            <author fullname="C. Pignataro" initials="C." role="editor" surname="Pignataro"/>
            <date month="January" year="2018"/>
            <abstract>
              <t indent="0">This document describes a Network Service Header (NSH) imposed on packets or frames to realize Service Function Paths (SFPs). The NSH also provides a mechanism for metadata exchange along the instantiated service paths. The NSH is the Service Function Chaining (SFC) encapsulation required to support the SFC architecture (defined in RFC 7665).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8300"/>
          <seriesInfo name="DOI" value="10.17487/RFC8300"/>
        </reference>
        <reference anchor="RFC9197" target="https://www.rfc-editor.org/info/rfc9197" quoteTitle="true" derivedAnchor="RFC9197">
          <front>
            <title>Data Fields for In Situ Operations, Administration, and Maintenance (IOAM)</title>
            <author fullname="F. Brockners" initials="F." role="editor" surname="Brockners"/>
            <author fullname="S. Bhandari" initials="S." role="editor" surname="Bhandari"/>
            <author fullname="T. Mizrahi" initials="T." role="editor" surname="Mizrahi"/>
            <date month="May" year="2022"/>
            <abstract>
              <t indent="0">In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in the packet while the packet traverses a path between two points in the network. This document discusses the data fields and associated data types for IOAM. IOAM-Data-Fields can be encapsulated into a variety of protocols, such as Network Service Header (NSH), Segment Routing, Generic Network Virtualization Encapsulation (Geneve), or IPv6. IOAM can be used to complement OAM mechanisms based on, e.g., ICMP or other types of probe packets.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9197"/>
          <seriesInfo name="DOI" value="10.17487/RFC9197"/>
        </reference>
        <reference anchor="RFC9451" target="https://www.rfc-editor.org/info/rfc9451" quoteTitle="true" derivedAnchor="RFC9451">
          <front>
            <title>Operations, Administration, and Maintenance (OAM) Packet and Behavior in the Network Service Header (NSH)</title>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <date month="August" year="2023"/>
            <abstract>
              <t indent="0">This document clarifies an ambiguity in the Network Service Header (NSH) specification related to the handling of O bit. In particular, this document clarifies the meaning of "OAM packet".</t>
              <t indent="0">This document updates RFC 8300.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9451"/>
          <seriesInfo name="DOI" value="10.17487/RFC9451"/>
        </reference>
      </references>
      <references pn="section-6.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC7665" target="https://www.rfc-editor.org/info/rfc7665" quoteTitle="true" derivedAnchor="RFC7665">
          <front>
            <title>Service Function Chaining (SFC) Architecture</title>
            <author fullname="J. Halpern" initials="J." role="editor" surname="Halpern"/>
            <author fullname="C. Pignataro" initials="C." role="editor" surname="Pignataro"/>
            <date month="October" year="2015"/>
            <abstract>
              <t indent="0">This document describes an architecture for the specification, creation, and ongoing maintenance of Service Function Chains (SFCs) in a network. It includes architectural concepts, principles, and components used in the construction of composite services through deployment of SFCs, with a focus on those to be standardized in the IETF. This document does not propose solutions, protocols, or extensions to existing protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7665"/>
          <seriesInfo name="DOI" value="10.17487/RFC7665"/>
        </reference>
        <reference anchor="RFC9322" target="https://www.rfc-editor.org/info/rfc9322" quoteTitle="true" derivedAnchor="RFC9322">
          <front>
            <title>In Situ Operations, Administration, and Maintenance (IOAM) Loopback and Active Flags</title>
            <author fullname="T. Mizrahi" initials="T." surname="Mizrahi"/>
            <author fullname="F. Brockners" initials="F." surname="Brockners"/>
            <author fullname="S. Bhandari" initials="S." surname="Bhandari"/>
            <author fullname="B. Gafni" initials="B." surname="Gafni"/>
            <author fullname="M. Spiegel" initials="M." surname="Spiegel"/>
            <date month="November" year="2022"/>
            <abstract>
              <t indent="0">In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in packets while they traverse a path between two points in the network. This document defines two new flags in the IOAM Trace Option headers, specifically the Loopback and Active flags.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9322"/>
          <seriesInfo name="DOI" value="10.17487/RFC9322"/>
        </reference>
        <reference anchor="RFC9326" target="https://www.rfc-editor.org/info/rfc9326" quoteTitle="true" derivedAnchor="RFC9326">
          <front>
            <title>In Situ Operations, Administration, and Maintenance (IOAM) Direct Exporting</title>
            <author fullname="H. Song" initials="H." surname="Song"/>
            <author fullname="B. Gafni" initials="B." surname="Gafni"/>
            <author fullname="F. Brockners" initials="F." surname="Brockners"/>
            <author fullname="S. Bhandari" initials="S." surname="Bhandari"/>
            <author fullname="T. Mizrahi" initials="T." surname="Mizrahi"/>
            <date month="November" year="2022"/>
            <abstract>
              <t indent="0">In situ Operations, Administration, and Maintenance (IOAM) is used for recording and collecting operational and telemetry information. Specifically, IOAM allows telemetry data to be pushed into data packets while they traverse the network. This document introduces a new IOAM option type (denoted IOAM-Option-Type) called the "IOAM Direct Export (DEX) Option-Type". This Option-Type is used as a trigger for IOAM data to be directly exported or locally aggregated without being pushed into in-flight data packets. The exporting method and format are outside the scope of this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9326"/>
          <seriesInfo name="DOI" value="10.17487/RFC9326"/>
        </reference>
        <reference anchor="RFC9378" target="https://www.rfc-editor.org/info/rfc9378" quoteTitle="true" derivedAnchor="RFC9378">
          <front>
            <title>In Situ Operations, Administration, and Maintenance (IOAM) Deployment</title>
            <author fullname="F. Brockners" initials="F." role="editor" surname="Brockners"/>
            <author fullname="S. Bhandari" initials="S." role="editor" surname="Bhandari"/>
            <author fullname="D. Bernier" initials="D." surname="Bernier"/>
            <author fullname="T. Mizrahi" initials="T." role="editor" surname="Mizrahi"/>
            <date month="April" year="2023"/>
            <abstract>
              <t indent="0">In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in the packet while the packet traverses a path between two points in the network. This document provides a framework for IOAM deployment and provides IOAM deployment considerations and guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9378"/>
          <seriesInfo name="DOI" value="10.17487/RFC9378"/>
        </reference>
      </references>
    </references>
    <section anchor="appendix" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-discussion-of-the-ioam-enca">Discussion of the IOAM-Encapsulation Approach</name>
      <t indent="0" pn="section-appendix.a-1">This section lists several approaches considered for encapsulating
      IOAM with NSH and presents the rationale for the approach chosen in this
      document.</t>
      <t indent="0" pn="section-appendix.a-2">An encapsulation of IOAM-Data-Fields in NSH should be friendly to an
      implementation in both hardware as well as software forwarders and
      support a wide range of deployment cases, including large networks that
      desire to leverage multiple IOAM-Data-Fields at the same time.</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a-3">
        <li pn="section-appendix.a-3.1">
          <t indent="0" pn="section-appendix.a-3.1.1">Hardware- and software-friendly implementation:</t>
          <t indent="0" pn="section-appendix.a-3.1.2">Hardware forwarders benefit from an encapsulation that minimizes
	iterative lookups of fields within the packet. Any operation that
	looks up the value of a field within the packet, based on which
	another lookup is performed, consumes additional gates and time in an
	implementation, both of which should be kept to a minimum. This means
	that flat TLV structures are preferred over nested TLV
	structures. IOAM-Data-Fields are grouped into several categories,
	including trace, proof-of-transit, and edge-to-edge. Each of these
	options defines a TLV structure. A hardware-friendly encapsulation
	approach avoids grouping these three option categories into yet
	another TLV structure and would instead carry the options as a serial
	sequence.</t>
        </li>
        <li pn="section-appendix.a-3.2">
          <t indent="0" pn="section-appendix.a-3.2.1">Total length of the IOAM-Data-Fields:</t>
          <t indent="0" pn="section-appendix.a-3.2.2">The total length of IOAM-Data-Fields can grow quite large if
	multiple different IOAM-Data-Fields are used and large path-lengths
	need to be considered.  For example, if an operator would consider
	using the IOAM Trace Option-Type and capture node-id, app_data,
	egress and ingress interface-id, timestamp seconds, and timestamp nanoseconds
	at every hop, then a total of 20 octets would be added to the packet
	at every hop. In this case, the particular deployment has a maximum
	path length of 15 hops in the IOAM domain, and a maximum of 300
	octets would be encapsulated in the packet.</t>
        </li>
      </ul>
      <t indent="0" pn="section-appendix.a-4">Different approaches for encapsulating IOAM-Data-Fields in NSH could
      be considered:</t>
      <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-appendix.a-5">
	<li pn="section-appendix.a-5.1" derivedCounter="1.">
          <t indent="0" pn="section-appendix.a-5.1.1">Encapsulation of IOAM-Data-Fields as "NSH MD Type 2" (see <xref target="RFC8300" sectionFormat="comma" section="2.5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8300#section-2.5" derivedContent="RFC8300"/>).</t>
          <t indent="0" pn="section-appendix.a-5.1.2">Each IOAM Option-Type (e.g., trace, proof-of-transit, and
	edge-to-edge) would be specified by a type, with the different
	IOAM-Data-Fields being TLVs within this the particular option
	type. NSH MD Type 2 offers support for variable length metadata. The
	length field is 6 bits, resulting in a maximum of 256 (2<sup>6</sup> x
	4) octets.</t>
        </li>
        <li pn="section-appendix.a-5.2" derivedCounter="2.">
          <t indent="0" pn="section-appendix.a-5.2.1">Encapsulation of IOAM-Data-Fields using the "Next Protocol"
        field.</t>
          <t indent="0" pn="section-appendix.a-5.2.2">Each IOAM Option-Type (e.g., trace, proof-of-transit, and
	edge-to-edge) would be specified by its own "next protocol".</t>
        </li>
        <li pn="section-appendix.a-5.3" derivedCounter="3.">
          <t indent="0" pn="section-appendix.a-5.3.1">Encapsulation of IOAM-Data-Fields using the "Next Protocol"
        field.</t>
          <t indent="0" pn="section-appendix.a-5.3.2">A single NSH protocol type code point would be allocated for
	IOAM. A "sub-type" field would then specify what IOAM options type
	(trace, proof-of-transit, edge-to-edge) is carried.</t>
        </li>
      </ol>
      <t indent="0" pn="section-appendix.a-6">The third option has been chosen here. This option avoids the
      additional layer of TLV-nesting that the use of NSH MD Type 2 would
      result in. In addition, this option does not constrain IOAM data to a
      maximum of 256 octets, thus allowing support for very large
      deployments.</t>
    </section>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.b-1">The authors would like to thank <contact fullname="Éric Vyncke"/>,
      <contact fullname="Nalini Elkins"/>, <contact fullname="Srihari       Raghavan"/>, <contact fullname="Ranganathan T S, Karthik Babu       Harichandra Babu"/>, <contact fullname="Akshaya Nadahalli"/>, <contact fullname="Stefano Previdi"/>, <contact fullname="Hemant Singh"/>,
      <contact fullname="Erik Nordmark"/>, <contact fullname="LJ Wobker"/>,
      <contact fullname="Andrew Yourtchenko"/>, <contact fullname="Greg       Mirsky"/>, and <contact fullname="Mohamed Boucadair"/> for their comments
      and advice.</t>
    </section>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.c">
      <name slugifiedName="name-contributors">Contributors</name>
      <t indent="0" pn="section-appendix.c-1">The following people contributed significantly to the content of
      this document and should be considered coauthors:</t>
      <contact fullname="Vengada Prasad Govindan">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <email>venggovi@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Carlos Pignataro">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <street>7200-11 Kit Creek Road</street>
            <city>Research Triangle Park</city>
            <region>NC</region>
            <code>27709</code>
            <country>United States of America</country>
          </postal>
          <email>cpignata@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Hannes Gredler">
        <organization showOnFrontPage="true">RtBrick Inc.</organization>
        <address>
          <email>hannes@rtbrick.com</email>
        </address>
      </contact>
      <contact fullname="John Leddy">
        <address>
          <email>john@leddy.net</email>
        </address>
      </contact>
      <contact fullname="Stephen Youell">
        <organization showOnFrontPage="true">JP Morgan Chase</organization>
        <address>
          <postal>
            <street>25 Bank Street</street>
            <city>London</city>
            <region/>
            <code>E14 5JP</code>
            <country>United Kingdom</country>
          </postal>
          <email>stephen.youell@jpmorgan.com</email>
        </address>
      </contact>
      <contact fullname="Tal Mizrahi">
        <organization showOnFrontPage="true">Huawei Network.IO Innovation Lab</organization>
        <address>
          <postal>
            <country>Israel</country>
          </postal>
          <email>tal.mizrahi.phd@gmail.com</email>
        </address>
      </contact>
      <contact fullname="David Mozes">
        <address>
          <email>mosesster@gmail.com</email>
        </address>
      </contact>
      <contact fullname="Petr Lapukhov">
        <organization showOnFrontPage="true">Facebook</organization>
        <address>
          <postal>
            <street>1 Hacker Way</street>
            <city>Menlo Park</city>
            <region>CA</region>
            <code>94025</code>
            <country>United States of America</country>
          </postal>
          <email>petr@fb.com</email>
        </address>
      </contact>
      <contact fullname="Remy Chang">
        <organization showOnFrontPage="true">Barefoot Networks</organization>
        <address>
          <postal>
            <street>2185 Park Boulevard</street>
            <city>Palo Alto</city>
            <region>CA</region>
            <code>94306</code>
            <country>United States of America</country>
          </postal>
          <email/>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Frank Brockners" initials="F." role="editor" surname="Brockners">
        <organization abbrev="Cisco" showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <extaddr>3rd Floor</extaddr>
            <street>Hansaallee 249</street>
            <city>Duesseldorf</city>
            <code>40549</code>
            <country>Germany</country>
          </postal>
          <email>fbrockne@cisco.com</email>
        </address>
      </author>
      <author fullname="Shwetha Bhandari" initials="S." role="editor" surname="Bhandari">
        <organization abbrev="Thoughtspot" showOnFrontPage="true">Thoughtspot</organization>
        <address>
          <postal>
            <extaddr>3rd Floor, Indiqube Orion</extaddr>
            <street>24th Main Rd, Garden Layout, HSR Layout</street>
            <city>Bangalore</city>
            <region>Karnataka</region>
            <code>560 102</code>
            <country>India</country>
          </postal>
          <email>shwetha.bhandari@thoughtspot.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
