<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-ippm-ioam-data-17" indexInclude="true" ipr="trust200902" number="9197" prepTime="2022-05-23T11:40:13" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-ippm-ioam-data-17" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9197" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="In Situ OAM Data Fields">Data Fields for In Situ Operations, Administration, and Maintenance (IOAM)</title>
    <seriesInfo name="RFC" value="9197" stream="IETF"/>
    <author fullname="Frank Brockners" initials="F." surname="Brockners" role="editor">
      <organization abbrev="Cisco" showOnFrontPage="true">Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>Hansaallee 249</street>
          <extaddr>3rd Floor</extaddr>
          <city>Duesseldorf</city>
          <extaddr>Nordhein-Westfalen</extaddr>
          <code>40549</code>
          <country>Germany</country>
        </postal>
        <email>fbrockne@cisco.com</email>
      </address>
    </author>
    <author fullname="Shwetha Bhandari" initials="S." surname="Bhandari" role="editor">
      <organization abbrev="Thoughtspot" showOnFrontPage="true">Thoughtspot</organization>
      <address>
        <postal>
          <extaddr>3rd Floor</extaddr>
          <extaddr>Indiqube Orion</extaddr>
          <extaddr>Garden Layout</extaddr>
          <extaddr>HSR Layout</extaddr>
          <street>24th Main Rd</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560 102</code>
          <country>India</country>
        </postal>
        <email>shwetha.bhandari@thoughtspot.com</email>
      </address>
    </author>
    <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi" role="editor">
      <organization showOnFrontPage="true">Huawei</organization>
      <address>
        <postal>
          <street>8-2 Matam</street>
          <city>Haifa</city>
          <code>3190501</code>
          <country>Israel</country>
        </postal>
        <email>tal.mizrahi.phd@gmail.com</email>
      </address>
    </author>
    <date month="05" year="2022"/>
    <area>tsv</area>
    <workgroup>ippm</workgroup>
    <keyword>inband</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)
      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>
    <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/rfc9197" 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) 2022 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-scope-applicability-and-ass">Scope, Applicability, and Assumptions</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-ioam-data-fields-types-and-">IOAM Data-Fields, Types, and Nodes</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-data-fields-and-option">IOAM Data-Fields and Option-Types</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-domains-and-types-of-i">IOAM-Domains and Types of IOAM Nodes</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-namespaces">IOAM-Namespaces</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-trace-option-types">IOAM Trace Option-Types</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.4.2">
                  <li pn="section-toc.1-1.4.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.1.1"><xref derivedContent="4.4.1" format="counter" sectionFormat="of" target="section-4.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-pre-allocated-and-increment">Pre-allocated and Incremental Trace Option-Types</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.2.1"><xref derivedContent="4.4.2" format="counter" sectionFormat="of" target="section-4.4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-node-data-fields-and-a">IOAM Node Data Fields and Associated Formats</xref></t>
                    <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.4.2.2.2">
                      <li pn="section-toc.1-1.4.2.4.2.2.2.1">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.1.1"><xref derivedContent="4.4.2.1" format="counter" sectionFormat="of" target="section-4.4.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-hop_lim-and-node_id-short">Hop_Lim and node_id Short</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.2">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.2.1"><xref derivedContent="4.4.2.2" format="counter" sectionFormat="of" target="section-4.4.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ingress_if_id-and-egress_if">ingress_if_id and egress_if_id Short</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.3">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.3.1"><xref derivedContent="4.4.2.3" format="counter" sectionFormat="of" target="section-4.4.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-timestamp-seconds">Timestamp Seconds</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.4">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.4.1"><xref derivedContent="4.4.2.4" format="counter" sectionFormat="of" target="section-4.4.2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-timestamp-fraction">Timestamp Fraction</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.5">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.5.1"><xref derivedContent="4.4.2.5" format="counter" sectionFormat="of" target="section-4.4.2.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-transit-delay">Transit Delay</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.6">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.6.1"><xref derivedContent="4.4.2.6" format="counter" sectionFormat="of" target="section-4.4.2.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-namespace-specific-data">Namespace-Specific Data</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.7">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.7.1"><xref derivedContent="4.4.2.7" format="counter" sectionFormat="of" target="section-4.4.2.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-queue-depth">Queue Depth</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.8">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.8.1"><xref derivedContent="4.4.2.8" format="counter" sectionFormat="of" target="section-4.4.2.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-checksum-complement">Checksum Complement</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.9">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.9.1"><xref derivedContent="4.4.2.9" format="counter" sectionFormat="of" target="section-4.4.2.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-hop_lim-and-node_id-wide">Hop_Lim and node_id Wide</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.10">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.10.1"><xref derivedContent="4.4.2.10" format="counter" sectionFormat="of" target="section-4.4.2.10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-ingress_if_id-and-egress_if_">ingress_if_id and egress_if_id Wide</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.11">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.11.1"><xref derivedContent="4.4.2.11" format="counter" sectionFormat="of" target="section-4.4.2.11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-namespace-specific-data-wid">Namespace-Specific Data Wide</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.12">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.12.1"><xref derivedContent="4.4.2.12" format="counter" sectionFormat="of" target="section-4.4.2.12"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-buffer-occupancy">Buffer Occupancy</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.4.2.2.2.13">
                        <t indent="0" pn="section-toc.1-1.4.2.4.2.2.2.13.1"><xref derivedContent="4.4.2.13" format="counter" sectionFormat="of" target="section-4.4.2.13"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-opaque-state-snapshot">Opaque State Snapshot</xref></t>
                      </li>
                    </ul>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.3">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.3.1"><xref derivedContent="4.4.3" format="counter" sectionFormat="of" target="section-4.4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-examples-of-ioam-node-data">Examples of IOAM Node Data</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.5">
                <t indent="0" pn="section-toc.1-1.4.2.5.1"><xref derivedContent="4.5" format="counter" sectionFormat="of" target="section-4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-proof-of-transit-optio">IOAM Proof of Transit Option-Type</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.5.2">
                  <li pn="section-toc.1-1.4.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.5.2.1.1"><xref derivedContent="4.5.1" format="counter" sectionFormat="of" target="section-4.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-proof-of-transit-type-">IOAM Proof of Transit Type 0</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.6">
                <t indent="0" pn="section-toc.1-1.4.2.6.1"><xref derivedContent="4.6" format="counter" sectionFormat="of" target="section-4.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-edge-to-edge-option-ty">IOAM Edge-to-Edge Option-Type</xref></t>
              </li>
            </ul>
          </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-timestamp-formats">Timestamp Formats</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ptp-truncated-timestamp-for">PTP Truncated Timestamp Format</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ntp-64-bit-timestamp-format">NTP 64-Bit Timestamp Format</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-posix-based-timestamp-forma">POSIX-Based Timestamp Format</xref></t>
              </li>
            </ul>
          </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-ioam-data-export">IOAM Data Export</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-option-type-registry">IOAM Option-Type Registry</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-trace-type-registry">IOAM Trace-Type Registry</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.3">
                <t indent="0" pn="section-toc.1-1.7.2.3.1"><xref derivedContent="7.3" format="counter" sectionFormat="of" target="section-7.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-trace-flags-registry">IOAM Trace-Flags Registry</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.4">
                <t indent="0" pn="section-toc.1-1.7.2.4.1"><xref derivedContent="7.4" format="counter" sectionFormat="of" target="section-7.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-pot-type-registry">IOAM POT-Type Registry</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.5">
                <t indent="0" pn="section-toc.1-1.7.2.5.1"><xref derivedContent="7.5" format="counter" sectionFormat="of" target="section-7.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-pot-flags-registry">IOAM POT-Flags Registry</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.6">
                <t indent="0" pn="section-toc.1-1.7.2.6.1"><xref derivedContent="7.6" format="counter" sectionFormat="of" target="section-7.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-e2e-type-registry">IOAM E2E-Type Registry</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.7">
                <t indent="0" pn="section-toc.1-1.7.2.7.1"><xref derivedContent="7.7" format="counter" sectionFormat="of" target="section-7.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ioam-namespace-id-registry">IOAM Namespace-ID Registry</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-management-and-deployment-c">Management and Deployment Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <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.10.2">
              <li pn="section-toc.1-1.10.2.1">
                <t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.2">
                <t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><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">This document defines data fields for In situ Operations,
      Administration, and Maintenance (IOAM). IOAM records OAM
      information within the packet 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 being
      sent within packets specifically dedicated to OAM. IOAM is used
      to complement mechanisms, such as Ping or Traceroute. In terms
      of "active" or "passive" OAM, IOAM can be considered a hybrid
      OAM type. "In situ" mechanisms do not require extra packets to
      be sent. IOAM adds information to the already available data
      packets and therefore cannot be considered passive. In terms of
      the classification given in <xref target="RFC7799" format="default" sectionFormat="of" derivedContent="RFC7799"/>, IOAM could be portrayed as Hybrid Type
      I.      IOAM mechanisms can be leveraged where mechanisms using,
      e.g., ICMP do not apply or do not offer the desired results,
      such as proving that a certain traffic flow takes a predefined
      path, Service Level Agreement (SLA) verification for the data
      traffic, detailed statistics on traffic distribution paths in
      networks that distribute traffic across multiple paths, or
      scenarios in which probe traffic is potentially handled
      differently from regular data traffic by the network
      devices.</t>
      <t indent="0" pn="section-1-2"> The term "in situ OAM" was originally motivated by the use
      of OAM-related mechanisms that add information into a packet. This
      document uses IOAM as a term defining the IOAM technology. IOAM
      includes "in situ" mechanisms but also mechanisms that could trigger 
      the creation of additional packets dedicated to OAM.   
      </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 and definitions used in this document:</t>
      <dl newline="false" spacing="normal" indent="15" pn="section-2-3">
        <dt pn="section-2-3.1">E2E:</dt>
        <dd pn="section-2-3.2">Edge to Edge</dd>
        <dt pn="section-2-3.3">Geneve:</dt>
        <dd pn="section-2-3.4">Generic Network Virtualization Encapsulation
          <xref target="RFC8926" format="default" sectionFormat="of" derivedContent="RFC8926"/></dd>
        <dt pn="section-2-3.5">IOAM:</dt>
        <dd pn="section-2-3.6">In situ Operations, Administration, and
          Maintenance</dd>
        <dt pn="section-2-3.7">MTU:</dt>
        <dd pn="section-2-3.8">Maximum Transmission Unit</dd>
        <dt pn="section-2-3.9">NSH:</dt>
        <dd pn="section-2-3.10">Network Service Header <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/></dd>
        <dt pn="section-2-3.11">OAM:</dt>
        <dd pn="section-2-3.12">Operations, Administration, and Maintenance</dd>
        <dt pn="section-2-3.13">PMTU:</dt>
        <dd pn="section-2-3.14">Path MTU</dd>
        <dt pn="section-2-3.15">POT:</dt>
        <dd pn="section-2-3.16">Proof of Transit</dd>
        <dt pn="section-2-3.17">Short format:</dt>
        <dd pn="section-2-3.18">refers to
          an IOAM-Data-Field that comprises 4 octets</dd>
        <dt pn="section-2-3.19">SID:</dt>
        <dd pn="section-2-3.20">Segment Identifier</dd>
        <dt pn="section-2-3.21">SR:</dt>
        <dd pn="section-2-3.22">Segment Routing</dd>
        <dt pn="section-2-3.23">VXLAN-GPE:</dt>
        <dd pn="section-2-3.24">Virtual eXtensible Local Area Network,
          Generic Protocol Extension <xref target="I-D.ietf-nvo3-vxlan-gpe" format="default" sectionFormat="of" derivedContent="NVO3-VXLAN-GPE"/></dd>
        <dt pn="section-2-3.25">Wide format:</dt>
        <dd pn="section-2-3.26">refers to
          an IOAM-Data-Field that comprises 8 octets</dd>
      </dl>
    </section>
    <section anchor="IOAM_scope" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-scope-applicability-and-ass">Scope, Applicability, and Assumptions</name>
      <t indent="0" pn="section-3-1">IOAM assumes a set of constraints as well as 
      guiding principles and concepts that go hand in hand with the definition
      of the IOAM-Data-Fields. These constraints, guiding principles, and
      concepts are described in this section. A discussion of how IOAM-Data-Fields and the associated concepts are applied to an IOAM deployment
      are out of scope for this document. Please refer to 
      <xref target="I-D.ietf-ippm-ioam-deployment" format="default" sectionFormat="of" derivedContent="IPPM-IOAM-DEPLOYMENT"/> for IOAM
      deployment considerations.</t>
      <dl newline="true" spacing="normal" indent="3" pn="section-3-2">
        <dt pn="section-3-2.1">Scope:</dt>
        <dd pn="section-3-2.2">This document defines the data fields and associated data
	types for IOAM. The IOAM-Data-Fields can be encapsulated in
	a variety of protocols, including NSH, Segment Routing, Geneve, and IPv6.
	Specification details for these different protocols are outside
	the scope of this document. It is expected that each such encapsulation
	would be specified by an RFC and jointly designed by the working group
	that develops or maintains the encapsulation protocol and the IETF IP Performance
	Measurement (IPPM) Working Group.</dd>
        <dt pn="section-3-2.3">Domain (or scope) of in situ OAM deployment:</dt>
        <dd pn="section-3-2.4">IOAM is focused on "limited domains", as defined in <xref target="RFC8799" format="default" sectionFormat="of" derivedContent="RFC8799"/>.
	For IOAM, a limited domain could, for example, be an enterprise campus
	using physical connections between devices or an overlay network using virtual
	connections/tunnels for connectivity between said devices.
      
	A limited domain that uses IOAM may constitute one or multiple 
	"IOAM-Domains", each disambiguated through separate namespace identifiers.
	An IOAM-Domain is bounded by its perimeter or edge.  IOAM-Domains 
	may overlap inside the limited domain.
	
	Designers of protocol
	encapsulations for IOAM specify mechanisms to ensure that IOAM data
	stays within an IOAM-Domain. In addition, the operator of such a domain
	is expected to put provisions in place to ensure that IOAM data does not
	leak beyond the edge of an IOAM-Domain using, for example, packet
	filtering methods. The operator <bcp14>SHOULD</bcp14> consider the potential
	operational impact of IOAM to mechanisms, such as ECMP processing (e.g.,
	load-balancing schemes based on packet length could be impacted by the
	increased packet size due to IOAM), PMTU (i.e., ensure that the MTU
	of all links within a domain is sufficiently large to support the
	increased packet size due to IOAM), and ICMP message handling (i.e., in
	case of IPv6, IOAM support for ICMPv6 echo request/reply is desired,
	which would translate into ICMPv6 extensions to enable IOAM-Data-Fields
	to be copied from an echo request message to an echo reply message).</dd>
        <dt pn="section-3-2.5">IOAM control points:</dt>
        <dd pn="section-3-2.6">IOAM-Data-Fields are added to or removed from
	the user traffic by the devices that form the edge of a domain.
	Devices that form an IOAM-Domain can add, update, or remove
	IOAM-Data-Fields. Edge devices of an IOAM-Domain can be hosts or network
	devices.</dd>
        <dt pn="section-3-2.7">Traffic sets that IOAM is applied to:</dt>
        <dd pn="section-3-2.8">IOAM can be deployed on all or
	only on subsets of the user traffic. Using IOAM on a selected set
	of traffic (e.g., per interface, based on an access control list or flow
	specification defining a specific set of traffic, etc.) could be useful
	in deployments where the cost of processing IOAM-Data-Fields by
	encapsulating, transit, or decapsulating nodes might be a concern from
	a performance or operational perspective. Thus, limiting the amount of
	traffic IOAM is applied to could be beneficial in some deployments.</dd>
        <dt pn="section-3-2.9">Encapsulation independence:</dt>
        <dd pn="section-3-2.10">The definition of IOAM-Data-Fields is
	independent from the protocols the IOAM-Data-Fields are encapsulated
	into. IOAM-Data-Fields can be encapsulated into several encapsulating
	protocols.</dd>
        <dt pn="section-3-2.11">Layering:</dt>
        <dd pn="section-3-2.12">If several encapsulation protocols (e.g., in case of
	tunneling) are stacked on top of each other, IOAM-Data-Fields could be
	present at multiple layers. The behavior follows the "ships-in-the-night"
	model, i.e., IOAM-Data-Fields in one layer are independent from
	IOAM-Data-Fields in another layer. Layering allows operators to
	instrument the protocol layer they want to measure. The different layers
	could, but do not have to, share the same IOAM encapsulation
	mechanisms.</dd>
        <dt pn="section-3-2.13">IOAM implementation:</dt>
        <dd pn="section-3-2.14">The definition of the IOAM-Data-Fields takes the
	specifics of devices with hardware data planes and software data planes
	into account.</dd>
      </dl>
    </section>
    <section anchor="IOAM_option_format" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-ioam-data-fields-types-and-">IOAM Data-Fields, Types, and Nodes</name>
      <t indent="0" pn="section-4-1">This section details IOAM-related nomenclature and describes data
      types, such as IOAM-Data-Fields, IOAM-Types, IOAM-Namespaces, as well as
      the different types of IOAM nodes.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-ioam-data-fields-and-option">IOAM Data-Fields and Option-Types</name>
        <t indent="0" pn="section-4.1-1">An IOAM-Data-Field is a set of bits with a defined format and
        meaning, which can be stored at a certain place in a packet for the
        purpose of IOAM.</t>
        <t indent="0" pn="section-4.1-2">To accommodate the different uses of IOAM, IOAM-Data-Fields fall
        into different categories. In IOAM, these categories are referred to as
        "IOAM-Option-Types". A common registry is maintained for
        IOAM-Option-Types (see <xref target="IOAM-type-registry" format="default" sectionFormat="of" derivedContent="Section 7.1"/> for
        details). Corresponding to these IOAM-Option-Types, different
        IOAM-Data-Fields are defined.</t>
        <t indent="0" pn="section-4.1-3">This document defines four IOAM-Option-Types:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.1-4">
          <li pn="section-4.1-4.1">Pre-allocated Trace Option-Type</li>
          <li pn="section-4.1-4.2">Incremental Trace Option-Type</li>
          <li pn="section-4.1-4.3">POT Option-Type</li>
          <li pn="section-4.1-4.4">E2E Option-Type</li>
        </ul>
        <t indent="0" pn="section-4.1-5">Future IOAM-Option-Types can be allocated by IANA, as described in 
		 <xref target="IOAM-type-registry" format="default" sectionFormat="of" derivedContent="Section 7.1"/>.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-ioam-domains-and-types-of-i">IOAM-Domains and Types of IOAM Nodes</name>
        <t indent="0" pn="section-4.2-1"><xref target="IOAM_scope" format="default" sectionFormat="of" derivedContent="Section 3"/> already mentioned that IOAM is expected to be deployed in a limited domain <xref target="RFC8799" format="default" sectionFormat="of" derivedContent="RFC8799"/>. 
        One or more IOAM-Option-Types are added to a packet upon entering an
        IOAM-Domain and are removed from the packet when exiting the domain.
        Within the IOAM-Domain, the IOAM-Data-Fields <bcp14>MAY</bcp14> be updated by network
        nodes that the packet traverses. An IOAM-Domain consists of "IOAM
        encapsulating nodes", "IOAM decapsulating nodes", and "IOAM transit
        nodes". The role of a node (i.e., encapsulating, transit, and
        decapsulating) is defined within an IOAM-Namespace (see below). A node
        can have different roles in different IOAM-Namespaces.</t>
        <t indent="0" pn="section-4.2-2">A device that adds at least one IOAM-Option-Type to the packet is
        called an "IOAM encapsulating node", whereas a device that removes
        an IOAM-Option-Type is referred to as an "IOAM decapsulating node".
        Nodes within the domain that are aware of IOAM data and
        read, write, and/or process IOAM data
        are called "IOAM transit nodes". IOAM
        nodes that add or remove the IOAM-Data-Fields can also update the
        IOAM-Data-Fields at the same time. Or, in other words, IOAM
        encapsulating or decapsulating nodes can also serve as IOAM transit
        nodes at the same time. Note that not every node in an IOAM-Domain
        needs to be an IOAM transit node. For example, a deployment might
        require that packets traverse a set of firewalls that support IOAM.
        In that case, only the set of firewall nodes would be IOAM transit
        nodes, rather than all nodes.</t>
        <t indent="0" pn="section-4.2-3">An IOAM encapsulating node incorporates one or more
        IOAM-Option-Types (from the list of IOAM-Types, see <xref target="IOAM-type-registry" format="default" sectionFormat="of" derivedContent="Section 7.1"/>) into packets that IOAM is enabled for.
        If IOAM is enabled for a selected subset of the traffic, the IOAM
        encapsulating node is responsible for applying the IOAM functionality
        to the selected subset.</t>
        <t indent="0" pn="section-4.2-4">An IOAM transit node reads, writes, and/or processes
        one or more of the IOAM-Data-Fields.
        If both the Pre-allocated and the Incremental Trace Option-Types are
        present in the packet, each IOAM transit node, based on configuration and
	    available implementation of IOAM, might populate IOAM trace data in
	    either a Pre-allocated or Incremental Trace Option-Type but not both.
        Note that not populating any of the Trace Option-Types is also valid
 	 behavior for an IOAM transit node.
        A transit node <bcp14>MUST</bcp14> ignore IOAM-Option-Types that it does not
        understand. A transit node <bcp14>MUST NOT</bcp14> add new IOAM-Option-Types to a
        packet, <bcp14>MUST NOT</bcp14> remove IOAM-Option-Types from a packet, and
        <bcp14>MUST NOT</bcp14> change the IOAM-Data-Fields of an IOAM Edge-to-Edge
        Option-Type.</t>
        <t indent="0" pn="section-4.2-5">An IOAM decapsulating node removes IOAM-Option-Type(s) from
        packets.</t>
        <t indent="0" pn="section-4.2-6">The role of an IOAM encapsulating, IOAM transit, or
        IOAM decapsulating node is always performed within a specific
        IOAM-Namespace. This means that an IOAM node that is, e.g., an
        IOAM decapsulating node for IOAM-Namespace "A" but not for
        IOAM-Namespace "B" will only remove the IOAM-Option-Types for
        IOAM-Namespace "A" from the packet. Note that this applies even
        for IOAM-Option-Types that the node does not understand, for
        example, an IOAM-Option-Type other than the four described above,
        which is added in a future revision.</t>
        <t indent="0" pn="section-4.2-7">IOAM-Namespaces allow for a namespace-specific definition and
        interpretation of IOAM-Data-Fields. An interface identifier could, for example,
        point to a physical interface (e.g., to understand which physical
        interface of an aggregated link is used when receiving or transmitting
        a packet), whereas, in another case, it could refer to a logical
        interface (e.g., in case of tunnels). Please refer to <xref target="ioam_namespaces" format="default" sectionFormat="of" derivedContent="Section 4.3"/> for details on IOAM-Namespaces.</t>
      </section>
      <section anchor="ioam_namespaces" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-ioam-namespaces">IOAM-Namespaces</name>
        <t indent="0" pn="section-4.3-1">IOAM-Namespaces add further context to IOAM-Option-Types and
        associated IOAM-Data-Fields. The IOAM-Option-Types and associated 
		IOAM-Data-Fields are interpreted as defined in this document, 
		regardless of the value of the IOAM-Namespace. However, 
		IOAM-Namespaces provide a way to group nodes to 
		support different deployment approaches
		of IOAM (see a few example use cases below). IOAM-Namespaces also
		help to resolve potential issues that can occur due to IOAM-Data-Fields not
        being globally unique (e.g., IOAM node identifiers do not have to be
        globally unique).
	The significance of IOAM-Data-Fields is always within a
        particular IOAM-Namespace. Given that IOAM-Data-Fields are always 
        interpreted as the context of a specific namespace, the Namespace-ID 
        field always needs to be carried along with the IOAM data-fields themselves.</t>
        <t indent="0" pn="section-4.3-2">An IOAM-Namespace is identified by a 16-bit namespace identifier
        (Namespace-ID). The IOAM-Namespace field is included in all the 
		IOAM-Option-Types defined in this document and <bcp14>MUST</bcp14> be included 
		in all future IOAM-Option-Types. The Namespace-ID value is divided
        into two subranges:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-3">
          <li pn="section-4.3-3.1">an operator-assigned range from 0x0001 to 0x7FFF and</li>
          <li pn="section-4.3-3.2">an IANA-assigned range from 0x8000 to 0xFFFF.</li>
        </ul>
        <t indent="0" pn="section-4.3-4">The IANA-assigned range is intended to allow future
        extensions to have new and interoperable IOAM functionality, while the
        operator-assigned range is intended to be domain specific and managed
        by the network operator. The Namespace-ID value of 0x0000 is the 
		"Default-Namespace-ID". The Default-Namespace-ID indicates that no 
		specific namespace is associated with the IOAM-Data-Fields in the 
		packet. The Default-Namespace-ID <bcp14>MUST</bcp14> be supported by all nodes 
		implementing IOAM. A use case for the Default-Namespace-ID are 
		deployments that do not leverage specific namespaces for some or all 
		of their packets that carry IOAM-Data-Fields.</t>
        <t indent="0" pn="section-4.3-5">Namespace identifiers allow devices that are IOAM capable to
        determine:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-6">
          <li pn="section-4.3-6.1">whether one or more IOAM-Option-Types need to be processed by a device.
            If the Namespace-ID contained in a packet does not match any
            Namespace-ID the node is configured to operate on, then the node
            <bcp14>MUST NOT</bcp14> change the contents of the IOAM-Data-Fields.</li>
          <li pn="section-4.3-6.2">which IOAM-Option-Type needs to be processed/updated in case
            there are multiple IOAM-Option-Types present in the packet.
            Multiple IOAM-Option-Types can be present in a packet in case of
            overlapping IOAM-Domains or in case of a layered IOAM
            deployment.</li>
          <li pn="section-4.3-6.3">whether one or more IOAM-Option-Types have to be removed from the packet,
            e.g., at a domain edge or domain boundary.</li>
        </ul>
        <t indent="0" pn="section-4.3-7">IOAM-Namespaces support several different uses:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-8">
          <li pn="section-4.3-8.1">IOAM-Namespaces can be used by an operator to distinguish
            different IOAM-Domains. Devices at edges of an IOAM-Domain 
            can filter
            on Namespace-IDs to provide for proper IOAM-Domain isolation.</li>
          <li pn="section-4.3-8.2">IOAM-Namespaces provide additional context for
          IOAM-Data-Fields and, thus, can be used to ensure that
          IOAM-Data-Fields are unique and are interpreted properly by
          management stations or network controllers.  The node
          identifier field (node_id, see below) does not need to be
          unique in a deployment.  This could be the case if an
          operator wishes to use different node identifiers for
          different IOAM layers, even within the same device, or node
          identifiers might not be unique for other organizational
          reasons, such as after a merger of two formerly separated
          organizations. The Namespace-ID can be used as a context
          identifier, such that the combination of node_id and
          Namespace-ID will always be unique.</li>
          <li pn="section-4.3-8.3">
            Similarly, IOAM-Namespaces can be used to define how certain
            IOAM-Data-Fields are interpreted; IOAM offers three different
            timestamp format options. The Namespace-ID can be used to
            determine the timestamp format. IOAM-Data-Fields (e.g., buffer
            occupancy) that do not have a unit associated are to be
            interpreted within the context of an IOAM-Namespace.</li>
          <li pn="section-4.3-8.4">IOAM-Namespaces can be used to identify different sets of
            devices (e.g., different types of devices) in a deployment; if an
            operator wants to insert different IOAM-Data-Fields based on the
            device, the devices could be grouped into multiple
            IOAM-Namespaces. This could be due to the fact that the IOAM
            feature set differs between different sets of devices, or it could
            be for reasons of optimized space usage in the packet header. It
            could also stem from hardware or operational limitations on the
            size of the trace data that can be added and processed, preventing
            collection of a full trace for a flow.</li>
          <li pn="section-4.3-8.5">By assigning different IOAM 
                Namespace-IDs to different sets of
                nodes or network partitions and using a separate instance of
                an IOAM-Option-Type for each Namespace-ID, a full trace for a
                flow could be collected and constructed via partial traces
                from each IOAM-Option-Type in each of the packets in the flow.
                For example, an operator could choose to group the devices of a
                domain into two IOAM-Namespaces in a way that each
                IOAM-Namespace is represented by one of two IOAM-Option-Types
                in the packet. Each node would record data only for the
                IOAM-Namespace that it belongs to, ignoring the other
                IOAM-Option-Type with an IOAM-Namespace to which it doesn't
                belong. To retrieve a full view of the deployment, the
                captured IOAM-Data-Fields of the two IOAM-Namespaces need to
                be correlated.</li>
        </ul>
      </section>
      <section anchor="IOAM_tracing_option" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-ioam-trace-option-types">IOAM Trace Option-Types</name>
        <t indent="0" pn="section-4.4-1"> In a typical deployment, all nodes in an IOAM-Domain would
        participate in IOAM; thus, they would be IOAM transit nodes, IOAM
        encapsulating nodes, or IOAM decapsulating nodes. If not all
        nodes within a domain support IOAM functionality as defined in
        this document, IOAM tracing information (i.e., node data, see
        below) can only be collected on those nodes that support IOAM
        functionality as defined in this document. Nodes that do not
        support IOAM functionality as defined in this document will
        forward the packet without any changes to the
        IOAM-Data-Fields.  The maximum number of hops and the minimum
        PMTU of the IOAM-Domain is assumed to be known. An
        overflow indicator (O-bit) is defined as one of the ways to
        deal with situations where the PMTU was underestimated, i.e.,
        where the number of hops that are IOAM capable exceeds the
        available space in the packet.</t>
        <t indent="0" pn="section-4.4-2">To optimize hardware and software implementations, IOAM tracing is
        defined as two separate options. A deployment can choose to configure 
		and support one or both of the following options.</t>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.4-3">
          <dt pn="section-4.4-3.1">Pre-allocated Trace-Option:</dt>
          <dd pn="section-4.4-3.2">This trace option is
            defined as a container of node data fields (see below) with
            pre-allocated space for each node to populate its information.
            This option is useful for implementations where it is efficient to
            allocate the space once and index into the array to populate the
            data during transit (e.g., software forwarders often fall into
            this class). The IOAM encapsulating node allocates space for the
            Pre-allocated Trace Option-Type in the packet and sets
            corresponding fields in this IOAM-Option-Type. The IOAM
            encapsulating node allocates an array that is used to store
            operational data retrieved from every node while the packet
            traverses the domain. IOAM transit nodes update the content of the
            array and possibly update the checksums of outer headers. A
            pointer that is part of the IOAM trace data points to the next
            empty slot in the array. An IOAM transit node that updates the
            content of the Pre-allocated Trace-Option also updates the value of the
            pointer, which specifies where the next IOAM transit node fills in
            its data. The "node data list" array (see below) in the packet is
            populated iteratively as the packet traverses the network,
            starting with the last entry of the array, i.e., "node data list
            [n]" is the first entry to be populated, "node data list [n-1]" is
            the second one, etc.</dd>
          <dt pn="section-4.4-3.3">Incremental Trace-Option:</dt>
          <dd pn="section-4.4-3.4">This trace option is
            defined as a container of node data fields, where each node
            allocates and pushes its node data immediately following the
            option header. This type of trace recording is useful for some of
            the hardware implementations, as it eliminates the need for the
            transit network elements to read the full array in the option and
            allows for as arbitrarily long packets as the MTU allows. The IOAM
            encapsulating node allocates space for the Incremental Trace
            Option-Type. Based on the operational state and configuration, the
            IOAM encapsulating node sets the fields in the Option-Type that
            control what IOAM-Data-Fields have to be collected and how large
            the node data list can grow. IOAM transit nodes push their node
			data to the node data list subject to any protocol constraints of 
			the encapsulating layer. They then decrease the remaining length
			available to subsequent nodes and adjust the lengths and possibly
			checksums in outer headers.</dd>
        </dl>
        <t indent="0" pn="section-4.4-4">IOAM encapsulating nodes and IOAM decapsulating nodes that support
        tracing <bcp14>MUST</bcp14> support both Trace Option-Types. For IOAM transit nodes, it
        is sufficient to support one of the Trace Option-Types.  
        In the event that both options are utilized in a deployment 
        at the same time, the Incremental Trace-Option <bcp14>MUST</bcp14> be placed
        before the Pre-allocated Trace-Option. Deployments that mix devices
        with either the Incremental Trace-Option or the Pre-allocated
        Trace-Option could result in both Option-Types being present in a
        packet. Given that the operator knows which equipment is deployed in a
        particular IOAM-Domain, the operator will decide by means of 
		configuration which type(s) of trace options will be used for a 
		particular domain.</t>
        <t indent="0" pn="section-4.4-5">Every node data entry holds information for a particular IOAM
        transit node that is traversed by a packet. The IOAM decapsulating
        node removes the IOAM-Option-Types and processes and/or exports the
        associated data. Like all IOAM-Data-Fields, the IOAM-Data-Fields of
        the IOAM Trace Option-Types are defined in the context of an
        IOAM-Namespace.</t>
        <t indent="0" pn="section-4.4-6">IOAM tracing can collect the following types of information:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.4-7">
          <li pn="section-4.4-7.1">Identification of the IOAM node. An IOAM node identifier can
            match to a device identifier or a particular control point or
            subsystem within a device.</li>
          <li pn="section-4.4-7.2">Identification of the interface that a packet was received on,
            i.e., ingress interface.</li>
          <li pn="section-4.4-7.3">Identification of the interface that a packet was sent out on,
            i.e., egress interface.</li>
          <li pn="section-4.4-7.4">Time of day when the packet was processed by the node, as well
            as the transit delay. Different definitions of processing time are
            feasible and expected, though it is important that all devices of
            an IOAM-Domain follow the same definition.</li>
          <li pn="section-4.4-7.5">Generic data, i.e., format-free information where syntax and semantics
            of the information is defined by the operator in a specific
            deployment. For a specific IOAM-Namespace, all IOAM nodes have to
            interpret the generic data the same way. Examples for generic IOAM
            data include geolocation information (location of the node at the
            time the packet was processed), buffer queue fill level or cache
            fill level at the time the packet was processed, or even a battery-charge level.</li>
          <li pn="section-4.4-7.6">Information to detect whether IOAM trace data was added at
            every hop or whether certain hops in the domain weren't IOAM
            transit nodes.</li>
        </ul>
        <t indent="0" pn="section-4.4-8">It should be noted that the semantics of some of the node data 
		  fields that are defined below, such as the queue depth and buffer 
		  occupancy, are implementation specific. This approach is intended 
		  to allow IOAM nodes with various different architectures.</t>
        <section anchor="TraceOptionDef" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.1">
          <name slugifiedName="name-pre-allocated-and-increment">Pre-allocated and Incremental Trace Option-Types</name>
          <t indent="0" pn="section-4.4.1-1">The IOAM Pre-allocated Trace-Option and the IOAM Incremental
          Trace-Option have similar formats. Except where noted below, the
          internal formats and fields of the two trace options are identical.
          Both trace options consist of a fixed-size "trace option header" and
          a variable data space to store gathered data, i.e., the "node data list".
          An IOAM transit node (that is, not an IOAM encapsulating node or IOAM
          decapsulating node) <bcp14>MUST NOT</bcp14> modify any of the fields in the fixed-size "trace option header", other than
          Flags" and "RemainingLen", i.e., an IOAM
          transit node <bcp14>MUST NOT</bcp14> modify the Namespace-ID, NodeLen,
          IOAM Trace-Type, or Reserved fields.</t>
          <t indent="0" pn="section-4.4.1-2">The Pre-allocated and Incremental Trace-Option headers:</t>
          <artwork name="" type="" align="left" alt="" pn="section-4.4.1-3"> 
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Namespace-ID           |NodeLen  | Flags | RemainingLen|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               IOAM Trace-Type                 |  Reserved     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
          <t indent="0" pn="section-4.4.1-4">The trace option data <bcp14>MUST</bcp14> be aligned by 4 octets:</t>
          <artwork name="" type="" align="left" alt="" pn="section-4.4.1-5">
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;-+
|                                                               |  |
|                        node data list [0]                     |  |
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  D
|                                                               |  a
|                        node data list [1]                     |  t
|                                                               |  a
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
~                             ...                               ~  S
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  p
|                                                               |  a
|                        node data list [n-1]                   |  c
|                                                               |  e
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
|                        node data list [n]                     |  |
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;-+
</artwork>
          <dl newline="true" spacing="normal" indent="3" pn="section-4.4.1-6">
            <dt pn="section-4.4.1-6.1">Namespace-ID:</dt>
            <dd pn="section-4.4.1-6.2">16-bit identifier of an
              IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as
              the "Default-Namespace-ID" (see <xref target="ioam_namespaces" format="default" sectionFormat="of" derivedContent="Section 4.3"/>) 
			  and <bcp14>MUST</bcp14> be known to all the nodes
              implementing IOAM. For any other Namespace-ID value that does
              not match any Namespace-ID the node is configured to operate on,
              the node <bcp14>MUST NOT</bcp14> change the contents of the
              IOAM-Data-Fields.</dd>
            <dt pn="section-4.4.1-6.3">NodeLen:</dt>
            <dd pn="section-4.4.1-6.4">
              <t indent="0" pn="section-4.4.1-6.4.1">5-bit unsigned integer. This field
              specifies the length of data added by each node in multiples of
              4 octets, excluding the length of the "Opaque State Snapshot"
              field. </t>
              <t indent="0" pn="section-4.4.1-6.4.2">If IOAM Trace-Type Bit 22 is not
              set, then NodeLen specifies the actual length added by each
              node. If IOAM Trace-Type Bit 22 is set, then the actual length
              added by a node would be (NodeLen + length of the "Opaque State
              Snapshot" field) in 4-octet units. </t>
              <t indent="0" pn="section-4.4.1-6.4.3">For
              example, if 3 IOAM Trace-Type bits are set and none of them are
              in wide format, then NodeLen would be 3. If 3 IOAM Trace-Type bits are set
              and 2 of them are wide, then NodeLen would be 5. </t>
              <t indent="0" pn="section-4.4.1-6.4.4">An IOAM encapsulating node <bcp14>MUST</bcp14> set NodeLen.
              </t>
              <t indent="0" pn="section-4.4.1-6.4.5">A node receiving an IOAM Pre-allocated
              or Incremental Trace-Option relies on the NodeLen value.</t>
            </dd>
            <dt pn="section-4.4.1-6.5">Flags:</dt>
            <dd anchor="TraceFlags" pn="section-4.4.1-6.6">
              <t indent="0" pn="section-4.4.1-6.6.1">4-bit field. Flags are
              allocated by IANA, as specified in <xref target="Flags-Registry-Sec" format="default" sectionFormat="of" derivedContent="Section 7.3"/>. This document allocates a single
              flag as follows: </t>
              <dl newline="true" spacing="normal" indent="3" pn="section-4.4.1-6.6.2">
                <dt pn="section-4.4.1-6.6.2.1">Bit 0:</dt>
                <dd pn="section-4.4.1-6.6.2.2">"Overflow" (O-bit) (most significant
                  bit). In case a network element is supposed to add node data to a packet
                  but detects that there are not enough octets left to record the node
                  data, the network element <bcp14>MUST NOT</bcp14> add any fields and
		  <bcp14>MUST</bcp14> set
                  the overflow "O-bit" to "1" in the IOAM Trace-Option header.
                  This is useful for transit nodes to ignore further
                  processing of the option.</dd>
              </dl>
            </dd>
            <dt pn="section-4.4.1-6.7">RemainingLen:</dt>
            <dd pn="section-4.4.1-6.8">7-bit unsigned integer. This field specifies the data
            space in multiples of 4 octets remaining for recording the
            node data before the node data list is considered to have
            overflowed. The sender <bcp14>MUST</bcp14> assign the
            initial value of the RemainingLen field. The sender
            <bcp14>MAY</bcp14> calculate the value of the RemainingLen
            field by computing the number of node data bytes allowed
            before exceeding the PMTU, given that the PMTU is known to
            the sender. Subsequent nodes can carry out a simple
            comparison between RemainingLen and NodeLen, along with
            the length of the "Opaque State Snapshot", if applicable,
            to determine whether or not data can be added by this
            node.  When node data is added, the node
            <bcp14>MUST</bcp14> decrease RemainingLen by the amount of
            data added. In the Pre-allocated Trace-Option,
            RemainingLen is used to derive the offset in data space to
            record the node data element.

	    Specifically, the recording
            of the node data element would start from RemainingLen -
            NodeLen - size of (opaque snapshot) in 4-octet units. If
            RemainingLen in a Pre-allocated Trace-Option exceeds the
            length of the option, as specified in the lower-layer
            header (which is not within the scope of this document),
            then the node <bcp14>MUST NOT</bcp14> add any fields.</dd>
            <dt pn="section-4.4.1-6.9">IOAM Trace-Type:</dt>
            <dd anchor="IOAMTraceType" pn="section-4.4.1-6.10">
              <t indent="0" pn="section-4.4.1-6.10.1">24-bit
              identifier that specifies which data types are used in this
              node data list.</t>
              <t indent="0" pn="section-4.4.1-6.10.2">The IOAM Trace-Type value is a bit field. The
              following bits are defined in this document, with details on
              each bit described in <xref target="trace-node-data-element" format="default" sectionFormat="of" derivedContent="Section 4.4.2"/>. The order of packing the
              data fields in each node data element follows the bit order of
              the IOAM Trace-Type field as follows:</t>
              <dl newline="false" spacing="normal" indent="10" pn="section-4.4.1-6.10.3">
                <dt pn="section-4.4.1-6.10.3.1">Bit 0</dt>
                <dd pn="section-4.4.1-6.10.3.2">Most significant bit. When set, 
                  indicates the presence of Hop_Lim and node_id (short format) in
                  the node data.</dd>
                <dt pn="section-4.4.1-6.10.3.3">Bit 1</dt>
                <dd pn="section-4.4.1-6.10.3.4">When set, indicates the presence of
                  ingress_if_id and egress_if_id (short format) in the node
                  data.</dd>
                <dt pn="section-4.4.1-6.10.3.5">Bit 2</dt>
                <dd pn="section-4.4.1-6.10.3.6">When set, indicates the presence of
                  timestamp seconds in the node data.</dd>
                <dt pn="section-4.4.1-6.10.3.7">Bit 3</dt>
                <dd pn="section-4.4.1-6.10.3.8">When set, indicates the presence of
                  timestamp fraction in the node data.</dd>
                <dt pn="section-4.4.1-6.10.3.9">Bit 4</dt>
                <dd pn="section-4.4.1-6.10.3.10">When set,  indicates the presence of transit
                  delay in the node data.</dd>
                <dt pn="section-4.4.1-6.10.3.11">Bit 5</dt>
                <dd pn="section-4.4.1-6.10.3.12">When set, indicates the presence of
                  IOAM-Namespace-specific data in short format in the node
                  data.</dd>
                <dt pn="section-4.4.1-6.10.3.13">Bit 6</dt>
                <dd pn="section-4.4.1-6.10.3.14">When set, indicates the presence of queue
                  depth in the node data.</dd>
                <dt pn="section-4.4.1-6.10.3.15">Bit 7</dt>
                <dd pn="section-4.4.1-6.10.3.16">When set, indicates the presence of the
                  Checksum Complement node data.</dd>
                <dt pn="section-4.4.1-6.10.3.17">Bit 8</dt>
                <dd pn="section-4.4.1-6.10.3.18">When set, indicates the presence of Hop_Lim
                  and node_id in wide format in the node data.</dd>
                <dt pn="section-4.4.1-6.10.3.19">Bit 9</dt>
                <dd pn="section-4.4.1-6.10.3.20">When set, indicates the presence of
                  ingress_if_id and egress_if_id in wide format in the node
                  data.</dd>
                <dt pn="section-4.4.1-6.10.3.21">Bit 10</dt>
                <dd pn="section-4.4.1-6.10.3.22">When set, indicates the presence of
                  IOAM-Namespace-specific data in wide format in the node
                  data.</dd>
                <dt pn="section-4.4.1-6.10.3.23">Bit 11</dt>
                <dd pn="section-4.4.1-6.10.3.24">When set, indicates the presence of buffer
                  occupancy in the node data.</dd>
                <dt pn="section-4.4.1-6.10.3.25">Bits 12-21</dt>
                <dd pn="section-4.4.1-6.10.3.26">
                  <t indent="0" pn="section-4.4.1-6.10.3.26.1">Undefined. These values are available 
		  for future assignment in the IOAM Trace-Type Registry 
		  (<xref target="ioam-trace-type-registry" format="default" sectionFormat="of" derivedContent="Section 7.2"/>). Every
		  future node data field corresponding to one of these bits
		  <bcp14>MUST</bcp14> be 4 octets long. An IOAM encapsulating node
		  <bcp14>MUST</bcp14> set the 
		  value of each undefined bit to 0.  If an IOAM transit 
		  node receives a packet with one or more of these bits set
		  to 1, it <bcp14>MUST</bcp14> either: </t>
                  <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-4.4.1-6.10.3.26.2">
		    <li pn="section-4.4.1-6.10.3.26.2.1" derivedCounter="1.">add corresponding node data filled with the reserved
                      value 0xFFFFFFFF after the node data fields for the
                      IOAM Trace-Type bits defined above, such that the total
                      node data added by this node in units of 4 octets is
                      equal to NodeLen or</li>
                    <li pn="section-4.4.1-6.10.3.26.2.2" derivedCounter="2.">not add any node data fields to the packet, even for
                      the IOAM Trace-Type bits defined above.</li>
                  </ol>
                </dd>
                <dt pn="section-4.4.1-6.10.3.27">Bit 22</dt>
                <dd pn="section-4.4.1-6.10.3.28">When set, indicates the presence of the
                  variable-length Opaque State Snapshot field.</dd>
                <dt pn="section-4.4.1-6.10.3.29">Bit 23</dt>
                <dd pn="section-4.4.1-6.10.3.30">Reserved; <bcp14>MUST</bcp14> be set to zero upon
                  transmission and be ignored upon receipt. This bit is
                  reserved to allow for future extensions of the 
                  IOAM Trace-Type bit field.</dd>
              </dl>
              <t indent="0" pn="section-4.4.1-6.10.4"><xref target="trace-node-data-element" format="default" sectionFormat="of" derivedContent="Section 4.4.2"/>
              describes the IOAM-Data-Types and their formats. Within an
              IOAM-Domain, possible combinations of these bits making the
              IOAM Trace-Type can be restricted by configuration knobs.</t>
            </dd>
            <dt pn="section-4.4.1-6.11">Reserved:</dt>
            <dd pn="section-4.4.1-6.12">8 bits. An IOAM encapsulating node <bcp14>MUST</bcp14>
            set the value to zero upon transmission. IOAM transit nodes
	    <bcp14>MUST</bcp14> ignore the received value.</dd>
            <dt pn="section-4.4.1-6.13">Node data List [n]:</dt>
            <dd pn="section-4.4.1-6.14">Variable-length field. This is
              a list of node data elements where the content of each node data
              element is determined by the IOAM Trace-Type. The order of
              packing the data fields in each node data element follows the
              bit order of the IOAM Trace-Type field. Each node <bcp14>MUST</bcp14> prepend
              its node data element in front of the node data elements that it
              received, such that the transmitted node data list begins with
              this node's data element as the first populated element in the
              list. The last node data element in this list is the node data
              of the first IOAM-capable node in the path. Populating the node
              data list in this way ensures that the order of the node data list
              is the same for Incremental and Pre-allocated Trace-Options. In
              the Pre-allocated Trace-Option, the index contained in
              RemainingLen identifies the offset for current active node data
              to be populated.</dd>
          </dl>
        </section>
        <section anchor="trace-node-data-element" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2">
          <name slugifiedName="name-ioam-node-data-fields-and-a">IOAM Node Data Fields and Associated Formats</name>
          <t indent="0" pn="section-4.4.2-1">All the IOAM-Data-Fields <bcp14>MUST</bcp14> be aligned by 4 octets. If a
	  node that is supposed to update an IOAM-Data-Field is not capable of
          populating the value of a field set in the IOAM Trace-Type, the
          field value <bcp14>MUST</bcp14> be set to 0xFFFFFFFF for 4-octet fields or
          0xFFFFFFFFFFFFFFFF for 8-octet fields, indicating that the value is
          not populated, except when explicitly specified in the field
          description below.</t>
          <t indent="0" pn="section-4.4.2-2">Some IOAM-Data-Fields defined below, such as interface
          identifiers or IOAM-Namespace-specific data, are defined in both
          "short format" and "wide format". 
          The  use of "short format" or "wide format" is not mutually exclusive.
          A deployment could choose to leverage both. For example,
          ingress_if_id_(short format) could be an identifier for the physical
          interface, whereas ingress_if_id_(wide format) could be an
          identifier for a logical sub-interface of that physical
          interface.</t>
          <t indent="0" pn="section-4.4.2-3">Data fields and associated data types for each of the
          IOAM-Data-Fields are specified in the following sections.
          The definition of IOAM-Data-Fields focuses on the syntax
          of the data fields and avoids specifying the semantics
          where feasible. This is why no units are defined for
          data fields, e.g., like "buffer occupancy" or "queue depth".
          With this approach, nodes can supply the
          information in their original format and are not required
          to perform unit or format conversions. Systems that further
          process IOAM information, e.g., like a network management
          system, are assumed to also handle unit conversions as part
          of their IOAM-Data-Fields processing. The combination of a 
          particular data field and the Namespace-ID provides for the context 
          to interpret the provided data appropriately.
          </t>
          <section anchor="Hop_Lim" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.1">
            <name slugifiedName="name-hop_lim-and-node_id-short">Hop_Lim and node_id Short</name>
            <t indent="0" pn="section-4.4.2.1-1">The "Hop_Lim and node_id short" field is a 4-octet field
            that is defined as follows: </t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.1-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            <dl newline="true" spacing="normal" indent="3" pn="section-4.4.2.1-3">
              <dt pn="section-4.4.2.1-3.1">Hop_Lim:</dt>
              <dd pn="section-4.4.2.1-3.2">1-octet unsigned integer. It is set to
                the Hop Limit value in the packet at egress from the node that records
                this data. Hop Limit information is used to identify the
                location of the node in the communication path. This is copied
                from the lower layer, e.g., TTL value in IPv4 header or Hop
                Limit field from IPv6 header of the packet when the packet is
                ready for transmission. The semantics of the Hop_Lim field
                depend on the lower-layer protocol that IOAM is encapsulated
                into; therefore, its specific semantics are outside the
                scope of this memo. The value of this field <bcp14>MUST</bcp14> be set to
                0xff when the lower level does not have a field equivalent to TTL / Hop Limit.</dd>
              <dt pn="section-4.4.2.1-3.3">node_id:</dt>
              <dd pn="section-4.4.2.1-3.4">3-octet unsigned integer. A node
                identifier field to uniquely identify a node within the
                IOAM-Namespace and associated IOAM-Domain. The procedure to
                allocate, manage, and map the node_ids is beyond the scope of
                this document. See
                <xref target="I-D.ietf-ippm-ioam-deployment" format="default" sectionFormat="of" derivedContent="IPPM-IOAM-DEPLOYMENT"/> for 
                a discussion of deployment-related aspects of the node_id. </dd>
            </dl>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.2">
            <name slugifiedName="name-ingress_if_id-and-egress_if">ingress_if_id and egress_if_id Short</name>
            <t indent="0" pn="section-4.4.2.2-1">The "ingress_if_id and egress_if_id" field is a 4-octet field
            that is defined as follows: </t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.2-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ingress_if_id             |         egress_if_id          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            <dl newline="true" spacing="normal" indent="3" pn="section-4.4.2.2-3">
              <dt pn="section-4.4.2.2-3.1">ingress_if_id:</dt>
              <dd pn="section-4.4.2.2-3.2">2-octet unsigned integer.
                An interface identifier to record the ingress interface the
                packet was received on.</dd>
              <dt pn="section-4.4.2.2-3.3">egress_if_id:</dt>
              <dd pn="section-4.4.2.2-3.4">2-octet unsigned integer.
                An interface identifier to record the egress interface the packet
                is forwarded out of.</dd>
            </dl>
            <t indent="0" pn="section-4.4.2.2-4">Note that due to the fact that IOAM uses its own
            IOAM-Namespaces for IOAM-Data-Fields, data fields, like interface
            identifiers, can be used in a flexible way to represent system
            resources that are associated with ingressing or egressing
            packets, i.e., ingress_if_id could represent a physical interface,
            a virtual or logical interface, or even a queue.</t>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.3">
            <name slugifiedName="name-timestamp-seconds">Timestamp Seconds</name>
            <t indent="0" pn="section-4.4.2.3-1">The "timestamp seconds" field is a 4-octet unsigned integer
            field. It contains the absolute timestamp in seconds that specifies the time at
            which the packet was received by the node. This field has three
            possible formats, based on either the Precision Time Protocol (PTP) (see e.g., <xref target="RFC8877" format="default" sectionFormat="of" derivedContent="RFC8877"/>),
            NTP <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>, or POSIX <xref target="POSIX" format="default" sectionFormat="of" derivedContent="POSIX"/>. The
            three timestamp formats are specified in <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. In all three cases, the timestamp seconds
            field contains the 32 most significant bits of the timestamp
            format that is specified in <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. If a
            node is not capable of populating this field, it assigns the value
            0xFFFFFFFF. Note that this is a legitimate value that is valid for
            1 second in approximately 136 years; the analyzer has to correlate
            several packets or compare the timestamp value to its own
            time of day in order to detect the error indication.</t>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.4">
            <name slugifiedName="name-timestamp-fraction">Timestamp Fraction</name>
            <t indent="0" pn="section-4.4.2.4-1">The "timestamp fraction" field is a 4-octet unsigned integer
            field. Fraction specifies the fractional portion of the number of
            seconds since the NTP epoch <xref target="RFC8877" format="default" sectionFormat="of" derivedContent="RFC8877"/>. The field specifies the time at
            which the packet was received by the node. This field has three
            possible formats, based on either PTP (see e.g., <xref target="RFC8877" format="default" sectionFormat="of" derivedContent="RFC8877"/>),
            NTP <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>, or POSIX <xref target="POSIX" format="default" sectionFormat="of" derivedContent="POSIX"/>. The
            three timestamp formats are specified in <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. In all three cases, the timestamp
            fraction field contains the 32 least significant bits of the
            timestamp format that is specified in <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. If a node is not capable of populating
            this field, it assigns the value 0xFFFFFFFF. Note that this is a
            legitimate value in the NTP format, valid for approximately 233
            picoseconds in every second. If the NTP format is used, the
            analyzer has to correlate several packets in order to detect the
            error indication.</t>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.5">
            <name slugifiedName="name-transit-delay">Transit Delay</name>
            <t indent="0" pn="section-4.4.2.5-1">The "transit delay" field is a 4-octet unsigned integer in the
            range 0 to 2<sup>31</sup>-1. It is the time in nanoseconds the packet spent
            in the transit node. This can serve as an indication of the
            queuing delay at the node. If the transit delay exceeds 2<sup>31</sup>-1
            nanoseconds, then the top bit 'O' is set to indicate overflow and
            value set to 0x80000000. When this field is part of the data field
            but a node populating the field is not able to fill it, the field
            position in the field <bcp14>MUST</bcp14> be filled with value 0xFFFFFFFF to
	    mean not populated.</t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.5-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|O|                     transit delay                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.6">
            <name slugifiedName="name-namespace-specific-data">Namespace-Specific Data</name>
            <t indent="0" pn="section-4.4.2.6-1">The "namespace-specific data" field is a 4-octet field that
            can be used by the node to add IOAM-Namespace-specific data. This
            represents a "free-format" 4-octet bit field with its semantics
            defined in the context of a specific IOAM-Namespace.</t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.6-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    namespace-specific data                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.7">
            <name slugifiedName="name-queue-depth">Queue Depth</name>
            <t indent="0" pn="section-4.4.2.7-1">The "queue depth" field is a 4-octet unsigned integer field.
            This field indicates the current length of the egress interface
            queue of the interface from where the packet is forwarded out. The
            queue depth is expressed as the current amount of memory buffers
            used by the queue (a packet could consume one or more memory
            buffers, depending on its size). </t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.7-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       queue depth                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.8">
            <name slugifiedName="name-checksum-complement">Checksum Complement</name>
            <t indent="0" pn="section-4.4.2.8-1">The "Checksum Complement" field is a 4-octet node data that
            contains the Checksum Complement value. The Checksum
            Complement is useful when IOAM is transported over encapsulations
            that make use of a UDP transport, such as VXLAN-GPE or Geneve.
            Without the Checksum Complement, nodes adding IOAM node data 
            update the UDP Checksum field following the recommendation of the
	    encapsulation protocols. When the Checksum Complement is
            present, an IOAM encapsulating node or IOAM transit node adding
            node data <bcp14>MUST</bcp14> carry out one of the following two alternatives
	    in order to maintain the correctness of the UDP Checksum value:</t>
            <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-4.4.2.8-2">
	      <li pn="section-4.4.2.8-2.1" derivedCounter="1.">recompute the UDP Checksum field or</li>
              <li pn="section-4.4.2.8-2.2" derivedCounter="2.">use the Checksum Complement to make a checksum-neutral
                update in the UDP payload; the Checksum Complement is assigned
                a value that complements the rest of the node data fields that
                were added by the current node, causing the existing UDP
                Checksum field to remain correct.</li>
            </ol>
            <t indent="0" pn="section-4.4.2.8-3"> IOAM decapsulating nodes <bcp14>MUST</bcp14> recompute the UDP Checksum
            field, since they do not know whether previous hops modified the
            UDP Checksum field or the Checksum Complement field.</t>
            <t indent="0" pn="section-4.4.2.8-4"> Checksum Complement fields are used in a similar manner in
	    <xref target="RFC7820" format="default" sectionFormat="of" derivedContent="RFC7820"/> and <xref target="RFC7821" format="default" sectionFormat="of" derivedContent="RFC7821"/>.  </t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.8-5">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Checksum Complement                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.9">
            <name slugifiedName="name-hop_lim-and-node_id-wide">Hop_Lim and node_id Wide</name>
            <t indent="0" pn="section-4.4.2.9-1">The "Hop_Lim and node_id wide" field is an 8-octet field
            defined as follows: </t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.9-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                         node_id (contd)                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            <dl newline="true" spacing="normal" indent="3" pn="section-4.4.2.9-3">
              <dt pn="section-4.4.2.9-3.1">Hop_Lim:</dt>
              <dd pn="section-4.4.2.9-3.2">1-octet unsigned integer. See <xref target="Hop_Lim" format="default" sectionFormat="of" derivedContent="Section 4.4.2.1"/>
	      for the definition of the field.</dd>
              <dt pn="section-4.4.2.9-3.3">node_id:</dt>
              <dd pn="section-4.4.2.9-3.4">7-octet unsigned integer. It is a node
                identifier field to uniquely identify a node within the
                IOAM-Namespace and associated IOAM-Domain. The procedure to
                allocate, manage, and map the node_ids is beyond the scope of
                this document.</dd>
            </dl>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.10">
            <name slugifiedName="name-ingress_if_id-and-egress_if_">ingress_if_id and egress_if_id Wide</name>
            <t indent="0" pn="section-4.4.2.10-1">The "ingress_if_id and egress_if_id wide" field is an 8-octet
            field, which is defined as follows: </t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.10-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       ingress_if_id                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       egress_if_id                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            <dl newline="true" spacing="normal" indent="3" pn="section-4.4.2.10-3">
              <dt pn="section-4.4.2.10-3.1">ingress_if_id:</dt>
              <dd pn="section-4.4.2.10-3.2">4-octet unsigned integer.
                It is an interface identifier to record the ingress interface the
                packet was received on.</dd>
              <dt pn="section-4.4.2.10-3.3">egress_if_id:</dt>
              <dd pn="section-4.4.2.10-3.4">4-octet unsigned integer.
                It is an interface identifier to record the egress interface the packet
                is forwarded out of.</dd>
            </dl>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.11">
            <name slugifiedName="name-namespace-specific-data-wid">Namespace-Specific Data Wide</name>
            <t indent="0" pn="section-4.4.2.11-1">The "namespace-specific data wide" field is an 8-octet field
            that can be used by the node to add IOAM-Namespace-specific data.
            This represents a "free-format" 8-octet bit field with its
            semantics defined in the context of a specific
            IOAM-Namespace.</t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.11-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    namespace-specific data                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                namespace-specific data (contd)                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.12">
            <name slugifiedName="name-buffer-occupancy">Buffer Occupancy</name>
            <t indent="0" pn="section-4.4.2.12-1">The "buffer occupancy" field is a 4-octet unsigned integer
            field. This field indicates the current status of the occupancy of
            the common buffer pool used by a set of queues. The units of this
            field are implementation specific. Hence, the units are
            interpreted within the context of an IOAM-Namespace and/or
            node identifier if used. The authors acknowledge that, in some operational
            cases, there is a need for the units to be consistent across a
            packet path through the network; hence, it is recommended for
            implementations to use standard units, such as bytes. </t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.12-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       buffer occupancy                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
          </section>
          <section numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2.13">
            <name slugifiedName="name-opaque-state-snapshot">Opaque State Snapshot</name>
            <t indent="0" pn="section-4.4.2.13-1">The "Opaque State Snapshot" field is a variable-length field and
            follows the fixed-length IOAM-Data-Fields defined above. It allows
            the network element to store an arbitrary state in the node data
            field without a predefined schema. The schema is to be defined
            within the context of an IOAM-Namespace. The schema needs to be
            made known to the analyzer by some out-of-band mechanism. The
            specification of this mechanism is beyond the scope of this
            document. A 24-bit "Schema ID" field, interpreted within the
            context of an IOAM-Namespace, indicates which particular schema is
            used and has to be configured on the network element by the
            operator.</t>
            <artwork name="" type="" align="left" alt="" pn="section-4.4.2.13-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Length      |                     Schema ID                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                                                               |
|                        Opaque data                            |
~                                                               ~
.                                                               .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            <dl newline="true" spacing="normal" indent="3" pn="section-4.4.2.13-3">
              <dt pn="section-4.4.2.13-3.1">Length:</dt>
              <dd pn="section-4.4.2.13-3.2">1-octet unsigned integer. It is the
                length in multiples of 4 octets of the Opaque data field that
                follows Schema ID.</dd>
              <dt pn="section-4.4.2.13-3.3">Schema ID:</dt>
              <dd pn="section-4.4.2.13-3.4">3-octet unsigned integer identifying
                the schema of Opaque data.</dd>
              <dt pn="section-4.4.2.13-3.5">Opaque data:</dt>
              <dd pn="section-4.4.2.13-3.6">Variable-length field. This field
                is interpreted as specified by the schema identified by the
                Schema ID.</dd>
            </dl>
            <t indent="0" pn="section-4.4.2.13-4">When this field is part of the data field, but a node
            populating the field has no opaque state data to report, the
            Length <bcp14>MUST</bcp14> be set to 0 and the Schema ID <bcp14>MUST</bcp14>
	    be set to 0xFFFFFF to mean no schema.</t>
          </section>
        </section>
        <section anchor="trace-type-node-data" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.3">
          <name slugifiedName="name-examples-of-ioam-node-data">Examples of IOAM Node Data</name>
          <t indent="0" pn="section-4.4.3-1">The format used for the entries in a packet's "node data list" 
          array can vary from packet to packet and deployment to deployment.
          Some deployments
          might only be interested in recording the node identifiers, whereas
          others might be interested in recording node identifiers and
          timestamps.
	  This section provides example entries of the "node data
          list" array.</t>
          <dl newline="false" spacing="normal" indent="3" pn="section-4.4.3-2">
            <dt pn="section-4.4.3-2.1">0xD40000:</dt>
            <dd pn="section-4.4.3-2.2">
              <t indent="0" pn="section-4.4.3-2.2.1">If the IOAM Trace-Type is 0xD40000 (0b110101000000000000000000), then
	    the format of node data is:</t>
              <artwork name="" type="" align="left" alt="" pn="section-4.4.3-2.2.2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ingress_if_id             |         egress_if_id          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     timestamp fraction                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    namespace-specific data                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            </dd>
            <dt pn="section-4.4.3-2.3">0xC00000:</dt>
            <dd pn="section-4.4.3-2.4">
              <t indent="0" pn="section-4.4.3-2.4.1">If the IOAM Trace-Type is 0xC00000 (0b110000000000000000000000), then
	    the format is:</t>
              <artwork name="" type="" align="left" alt="" pn="section-4.4.3-2.4.2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ingress_if_id             |         egress_if_id          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            </dd>
            <dt pn="section-4.4.3-2.5">0x900000:</dt>
            <dd pn="section-4.4.3-2.6">
              <t indent="0" pn="section-4.4.3-2.6.1">If the IOAM Trace-Type is 0x900000 (0b100100000000000000000000), then
	    the format is: </t>
              <artwork name="" type="" align="left" alt="" pn="section-4.4.3-2.6.2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   timestamp fraction                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    </artwork>
            </dd>
            <dt pn="section-4.4.3-2.7">0x840000:</dt>
            <dd pn="section-4.4.3-2.8">
              <t indent="0" pn="section-4.4.3-2.8.1">If the IOAM Trace-Type is 0x840000 (0b100001000000000000000000), then
	    the format is:</t>
              <artwork name="" type="" align="left" alt="" pn="section-4.4.3-2.8.2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    namespace-specific data                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            </dd>
            <dt pn="section-4.4.3-2.9">0x940000:</dt>
            <dd pn="section-4.4.3-2.10">
              <t indent="0" pn="section-4.4.3-2.10.1">If the IOAM Trace-Type is 0x940000 (0b100101000000000000000000), then
	    the format is:</t>
              <artwork name="" type="" align="left" alt="" pn="section-4.4.3-2.10.2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    timestamp fraction                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    namespace-specific data                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            </dd>
            <dt pn="section-4.4.3-2.11">0x308002:</dt>
            <dd pn="section-4.4.3-2.12">
              <t indent="0" pn="section-4.4.3-2.12.1">If the IOAM Trace-Type is 0x308002 (0b001100001000000000000010), then
	    the format is:</t>
              <artwork name="" type="" align="left" alt="" pn="section-4.4.3-2.12.2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      timestamp seconds                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    timestamp fraction                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Hop_Lim     |              node_id                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         node_id(contd)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Length      |                     Schema ID                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                                                               |
|                        Opaque data                            |
~                                                               ~
.                                                               .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="IOAM_proof_of_transit_option" numbered="true" toc="include" removeInRFC="false" pn="section-4.5">
        <name slugifiedName="name-ioam-proof-of-transit-optio">IOAM Proof of Transit Option-Type</name>
        <t indent="0" pn="section-4.5-1">The IOAM Proof of Transit Option-Type is used to support
        path or service function chain <xref target="RFC7665" format="default" sectionFormat="of" derivedContent="RFC7665"/> verification use cases, i.e., prove that
        traffic transited a defined path.

	While the details on how the
        IOAM data for the Proof of Transit Option-Type is processed at IOAM
        encapsulating, decapsulating, and transit nodes are outside
        the scope of the document, Proof of Transit approaches share
        the need to uniquely identify a packet, as well as iteratively
        operate on a set of information that is handed from node to
        node. Correspondingly, two pieces of information are added as
        IOAM-Data-Fields to the packet:</t>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.5-2">
          <dt pn="section-4.5-2.1">PktID:</dt>
          <dd pn="section-4.5-2.2">unique identifier for the packet</dd>
          <dt pn="section-4.5-2.3">Cumulative:</dt>
          <dd pn="section-4.5-2.4">information that is handed from node to node and
            updated by every node according to a verification algorithm</dd>
        </dl>
        <t indent="0" pn="section-4.5-3">The IOAM Proof of Transit Option-Type consist of a fixed-size
        "IOAM Proof of Transit Option header" and "IOAM Proof of Transit
        Option data fields":</t>
        <t indent="0" pn="section-4.5-4">IOAM Proof of Transit Option header:</t>
        <artwork name="" type="" align="left" alt="" pn="section-4.5-5"> 
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Namespace-ID            |IOAM POT-Type  | IOAM POT flags| 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        <t indent="0" pn="section-4.5-6">IOAM Proof of Transit Option-Type IOAM-Data-Fields <bcp14>MUST</bcp14> be 
	aligned by 4 octets:</t>
        <artwork name="" type="" align="left" alt="" pn="section-4.5-7">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       POT Option data field determined by IOAM POT-Type       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.5-8">
          <dt pn="section-4.5-8.1">Namespace-ID:</dt>
          <dd pn="section-4.5-8.2">16-bit identifier of an
            IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as the
            "Default-Namespace-ID" (see <xref target="ioam_namespaces" format="default" sectionFormat="of" derivedContent="Section 4.3"/>) 
			and <bcp14>MUST</bcp14> be known to all the nodes implementing
            IOAM. For any other Namespace-ID value that does not match any
            Namespace-ID the node is configured to operate on, the node <bcp14>MUST NOT</bcp14> change the contents of the IOAM-Data-Fields.</dd>
          <dt pn="section-4.5-8.3">IOAM POT-Type:</dt>
          <dd pn="section-4.5-8.4">
            <t indent="0" pn="section-4.5-8.4.1">8-bit identifier of a particular POT
            variant that specifies the POT data that is included. This
            document defines IOAM POT-Type 0:</t>
            <dl newline="false" spacing="normal" indent="3" pn="section-4.5-8.4.2">
              <dt pn="section-4.5-8.4.2.1">0:</dt>
              <dd pn="section-4.5-8.4.2.2">POT data is a 16-octet field to carry data associated to POT
	      procedures.</dd>
            </dl>
            <t indent="0" pn="section-4.5-8.4.3">
            If a node receives an IOAM POT-Type value that it does not
            understand, the node <bcp14>MUST NOT</bcp14> change, add to, or remove 
            the contents of the IOAM-Data-Fields.</t>
          </dd>
          <dt pn="section-4.5-8.5">IOAM POT flags:</dt>
          <dd pn="section-4.5-8.6">8 bits. This document does not define any flags. Bits 0-7 are 
          available for assignment (see <xref target="pot-flags-sec" format="default" sectionFormat="of" derivedContent="Section 7.5"/>). 
          Bits that have not been assigned <bcp14>MUST</bcp14> be set to zero upon 
          transmission and be ignored upon receipt.</dd>
          <dt pn="section-4.5-8.7">POT Option data:</dt>
          <dd pn="section-4.5-8.8">Variable-length field. The type of
            which is determined by the IOAM POT-Type.</dd>
        </dl>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-4.5.1">
          <name slugifiedName="name-ioam-proof-of-transit-type-">IOAM Proof of Transit Type 0</name>
          <t indent="0" pn="section-4.5.1-1">IOAM Proof of Transit Option of IOAM POT-Type 0:</t>
          <artwork name="" type="" align="left" alt="" pn="section-4.5.1-2">  
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Namespace-ID           |IOAM POT-Type=0|R R R R R R R R|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;-+
|                        PktID                                  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  P
|                        PktID (contd)                          |  O
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  T
|                        Cumulative                             |  | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                        Cumulative (contd)                     |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;-+
</artwork>
          <dl newline="true" spacing="normal" indent="3" pn="section-4.5.1-3">
            <dt pn="section-4.5.1-3.1">Namespace-ID:</dt>
            <dd pn="section-4.5.1-3.2">16-bit identifier of an
              IOAM-Namespace (see <xref target="ioam_namespaces" format="default" sectionFormat="of" derivedContent="Section 4.3"/> 
              above).</dd>
            <dt pn="section-4.5.1-3.3">IOAM POT-Type:</dt>
            <dd pn="section-4.5.1-3.4">8-bit identifier of a particular
              POT variant that specifies the POT data that is included 
              (see <xref target="IOAM_proof_of_transit_option" format="default" sectionFormat="of" derivedContent="Section 4.5"/> 
              above). For this case here, IOAM POT-Type is set to the value 0.</dd>
            <dt pn="section-4.5.1-3.5">Bit 0-7:</dt>
            <dd pn="section-4.5.1-3.6">Undefined (see <xref target="IOAM_proof_of_transit_option" format="default" sectionFormat="of" derivedContent="Section 4.5"/> 
              above).</dd>
            <dt pn="section-4.5.1-3.7">PktID:</dt>
            <dd pn="section-4.5.1-3.8">64-bit packet identifier.</dd>
            <dt pn="section-4.5.1-3.9">Cumulative:</dt>
            <dd pn="section-4.5.1-3.10">64-bit Cumulative that is updated at
              specific nodes by processing per packet PktID field and
              configured parameters.</dd>
          </dl>
          <aside pn="section-4.5.1-4">
            <t indent="0" pn="section-4.5.1-4.1">Note: Larger or smaller sizes of "PktID" and "Cumulative"
          data are feasible and could be required for certain deployments,
          e.g., in case of space constraints in the encapsulation protocols
          used. Future documents could introduce different sizes of data for
          "Proof of Transit".</t>
          </aside>
        </section>
      </section>
      <section anchor="IOAM_edge_to_edge_opt" numbered="true" toc="include" removeInRFC="false" pn="section-4.6">
        <name slugifiedName="name-ioam-edge-to-edge-option-ty">IOAM Edge-to-Edge Option-Type</name>
        <t indent="0" pn="section-4.6-1">The IOAM Edge-to-Edge Option-Type carries data that is added by
        the IOAM encapsulating node and interpreted by the IOAM decapsulating
        node. The IOAM transit nodes <bcp14>MAY</bcp14> process the data but <bcp14>MUST NOT</bcp14> modify
        it.</t>
        <t indent="0" pn="section-4.6-2">The IOAM Edge-to-Edge Option-Type consist of a fixed-size "IOAM
        Edge-to-Edge Option-Type header" and "IOAM Edge-to-Edge Option-Type
        data fields":</t>
        <t indent="0" pn="section-4.6-3">IOAM Edge-to-Edge Option-Type header:</t>
        <artwork name="" type="" align="left" alt="" pn="section-4.6-4">   
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Namespace-ID           |         IOAM E2E-Type         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        <t indent="0" pn="section-4.6-5">The IOAM Edge-to-Edge Option-Type IOAM-Data-Fields <bcp14>MUST</bcp14>
	be aligned by 4 octets:</t>
        <artwork name="" type="" align="left" alt="" pn="section-4.6-6">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       E2E Option data field determined by IOAM-E2E-Type       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.6-7">
          <dt pn="section-4.6-7.1">Namespace-ID:</dt>
          <dd pn="section-4.6-7.2">16-bit identifier of an
            IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as the
            "Default-Namespace-ID" (see <xref target="ioam_namespaces" format="default" sectionFormat="of" derivedContent="Section 4.3"/>)
			and <bcp14>MUST</bcp14> be known to all the nodes implementing
            IOAM. For any other Namespace-ID value that does not match any
            Namespace-ID the node is configured to operate on, the node
            <bcp14>MUST NOT</bcp14> change the contents of the IOAM-Data-Fields.</dd>
          <dt pn="section-4.6-7.3">IOAM-E2E-Type:</dt>
          <dd pn="section-4.6-7.4">
            <t indent="0" pn="section-4.6-7.4.1">16-bit identifier that specifies
            which data types are used in the E2E Option data. The
            IOAM-E2E-Type value is a bit field. The order of packing the E2E
            Option data field elements follows the bit order of the
            IOAM E2E-Type field as follows:</t>
            <dl newline="false" spacing="normal" indent="9" pn="section-4.6-7.4.2">
              <dt pn="section-4.6-7.4.2.1">Bit 0</dt>
              <dd pn="section-4.6-7.4.2.2">Most significant bit. When set, it indicates the
                presence of a 64-bit sequence number added to a specific
                "packet group" that is used to detect packet loss, packet
                reordering, or packet duplication within the group. The
                "packet group" is deployment dependent and defined at the IOAM
                encapsulating node, e.g., by n-tuple-based classification of
                packets. When this bit is set, "Bit 1" (for a 32-bit sequence
                number, see below) <bcp14>MUST</bcp14> be zero.</dd>
              <dt pn="section-4.6-7.4.2.3">Bit 1</dt>
              <dd pn="section-4.6-7.4.2.4">When set, it indicates the presence of a 32-bit
                sequence number added to a specific "packet group" that is
                used to detect packet loss, packet reordering, or packet
                duplication within that group. The "packet group" is
                deployment dependent and defined at the IOAM encapsulating
                node, e.g., by n-tuple-based classification of packets. 
                When this bit is set, "Bit 0" (for a 64-bit sequence
                number, see above) <bcp14>MUST</bcp14> be zero.</dd>
              <dt pn="section-4.6-7.4.2.5">Bit 2</dt>
              <dd pn="section-4.6-7.4.2.6">When set, it indicates the presence of timestamp
                seconds, representing the time at which the packet entered the
                IOAM-Domain. Within the IOAM encapsulating node, the time that
                the timestamp is retrieved can depend on the implementation.
                Some possibilities are 1) the time at which the packet was
                received by the node, 2) the time at which the packet was
                transmitted by the node, or 3) when a tunnel encapsulation is
                used, the point at which the packet is encapsulated into the
                tunnel. Each implementation has to document when the E2E
                timestamp that is going to be put in the packet is retrieved.
                This 4-octet field has three possible formats, based on either
                PTP (see e.g., <xref target="RFC8877" format="default" sectionFormat="of" derivedContent="RFC8877"/>), NTP <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>,
                or POSIX <xref target="POSIX" format="default" sectionFormat="of" derivedContent="POSIX"/>. The three timestamp
		formats
                are specified in <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. In all
		three
                cases, the timestamp seconds field contains the 32 most
                significant bits of the timestamp format that is specified in
                <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. If a node is not capable of
                populating this field, it assigns the value 0xFFFFFFFF. Note
                that this is a legitimate value that is valid for 1 second in
                approximately 136 years; the analyzer has to correlate several
                packets or compare the timestamp value to its own time of day
                in order to detect the error indication.</dd>
              <dt pn="section-4.6-7.4.2.7">Bit 3</dt>
              <dd pn="section-4.6-7.4.2.8">When set, it indicates the presence of timestamp
                fraction, representing the time at which the packet entered
                the IOAM-Domain. This 4-octet field has three possible
                formats, based on either PTP (see e.g., <xref target="RFC8877" format="default" sectionFormat="of" derivedContent="RFC8877"/>), NTP
                <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>, or POSIX <xref target="POSIX" format="default" sectionFormat="of" derivedContent="POSIX"/>. The
                three timestamp formats are specified in <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. In all three cases, the timestamp
                fraction field contains the 32 least significant bits of the
                timestamp format that is specified in <xref target="TimestampSec" format="default" sectionFormat="of" derivedContent="Section 5"/>. If a node is not capable of
                populating this field, it assigns the value 0xFFFFFFFF. Note
                that this is a legitimate value in the NTP format, valid for
                approximately 233 picoseconds in every second. If the NTP
                format is used, the analyzer has to correlate several packets
                in order to detect the error indication.</dd>
              <dt pn="section-4.6-7.4.2.9">Bit 4-15</dt>
              <dd pn="section-4.6-7.4.2.10">Undefined. An IOAM encapsulating node
              <bcp14>MUST</bcp14> set the value of these bits to zero upon transmission
	      and ignore them upon receipt.</dd>
            </dl>
          </dd>
          <dt pn="section-4.6-7.5">E2E Option data:</dt>
          <dd pn="section-4.6-7.6">Variable-length field. The type of
            which is determined by the IOAM E2E-Type.</dd>
        </dl>
      </section>
    </section>
    <section anchor="TimestampSec" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-timestamp-formats">Timestamp Formats</name>
      <t indent="0" pn="section-5-1">The IOAM-Data-Fields include a timestamp field that is represented
      in one of three possible timestamp formats. It is assumed that the
      management plane is responsible for determining which timestamp format
      is used.</t>
      <section anchor="PTPFromatSec" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-ptp-truncated-timestamp-for">PTP Truncated Timestamp Format</name>
        <t indent="0" pn="section-5.1-1">The Precision Time Protocol (PTP) uses
        an 80-bit timestamp format. The truncated timestamp format is a 64-bit
        field, which is the 64 least significant bits of the 80-bit PTP
        timestamp. The PTP truncated format is specified in <xref target="RFC8877" section="4.3" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8877#section-4.3" derivedContent="RFC8877"/>, and the details are
        presented below for the sake of completeness.</t>
        <artwork align="left" name="" type="" alt="" pn="section-5.1-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Seconds                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Nanoseconds                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        <dl newline="true" spacing="normal" indent="3" pn="section-5.1-3">
          <dt pn="section-5.1-3.1">Timestamp field format:</dt>
          <dd pn="section-5.1-3.2">
            <dl newline="false" spacing="normal" indent="3" pn="section-5.1-3.2.1">
              <dt pn="section-5.1-3.2.1.1">Seconds:</dt>
              <dd pn="section-5.1-3.2.1.2">
                <t indent="0" pn="section-5.1-3.2.1.2.1">Specifies the integer portion of the number of seconds
            since the PTP epoch</t>
                <dl newline="false" spacing="normal" indent="3" pn="section-5.1-3.2.1.2.2">
                  <dt pn="section-5.1-3.2.1.2.2.1">Size:</dt>
                  <dd pn="section-5.1-3.2.1.2.2.2">32 bits</dd>
                  <dt pn="section-5.1-3.2.1.2.2.3">Units:</dt>
                  <dd pn="section-5.1-3.2.1.2.2.4">seconds</dd>
                </dl>
              </dd>
              <dt pn="section-5.1-3.2.1.3">Nanoseconds:</dt>
              <dd pn="section-5.1-3.2.1.4">
                <t indent="0" pn="section-5.1-3.2.1.4.1">Specifies the fractional portion of the number of
            seconds since the PTP epoch</t>
                <dl newline="false" spacing="normal" indent="3" pn="section-5.1-3.2.1.4.2">
                  <dt pn="section-5.1-3.2.1.4.2.1">Size:</dt>
                  <dd pn="section-5.1-3.2.1.4.2.2">32 bits</dd>
                  <dt pn="section-5.1-3.2.1.4.2.3">Units:</dt>
                  <dd pn="section-5.1-3.2.1.4.2.4">nanoseconds. The value of this field is in the range 0
              to (10<sup>9</sup>)-1.</dd>
                </dl>
              </dd>
            </dl>
          </dd>
          <dt pn="section-5.1-3.3">Epoch: </dt>
          <dd pn="section-5.1-3.4">PTP epoch. For details, see e.g., <xref target="RFC8877" format="default" sectionFormat="of" derivedContent="RFC8877"/>.</dd>
          <dt pn="section-5.1-3.5">Resolution: </dt>
          <dd pn="section-5.1-3.6">The resolution is 1 nanosecond.</dd>
          <dt pn="section-5.1-3.7">Wraparound:</dt>
          <dd pn="section-5.1-3.8">This time format wraps around every 2<sup>32</sup> seconds, which is
        roughly 136 years. The next wraparound will occur in the year
        2106.</dd>
          <dt pn="section-5.1-3.9">Synchronization Aspects: </dt>
          <dd pn="section-5.1-3.10">It is assumed that the nodes that run this protocol are
        synchronized among themselves. Nodes <bcp14>MAY</bcp14> be
        synchronized to a global reference time. Note that if PTP is
        used for synchronization, the timestamp <bcp14>MAY</bcp14> be
        derived from the PTP-synchronized clock, allowing the
        timestamp to be measured with respect to the clock of a PTP
        Grandmaster clock.</dd>
        </dl>
      </section>
      <section anchor="NTPFormatSec" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-ntp-64-bit-timestamp-format">NTP 64-Bit Timestamp Format</name>
        <t indent="0" pn="section-5.2-1">The Network Time Protocol (NTP) <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>
	timestamp format is 64 bits long. This specification uses the 
	NTP timestamp format that is specified in <xref target="RFC8877" section="4.2.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8877#section-4.2.1" derivedContent="RFC8877"/>, and the details are
        presented below for the sake of completeness.</t>
        <artwork align="left" name="" type="" alt="" pn="section-5.2-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Seconds                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Fraction                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        <dl newline="true" spacing="normal" indent="3" pn="section-5.2-3">
          <dt pn="section-5.2-3.1">Timestamp field format: </dt>
          <dd pn="section-5.2-3.2">
            <dl newline="false" spacing="normal" indent="3" pn="section-5.2-3.2.1">
              <dt pn="section-5.2-3.2.1.1">Seconds:</dt>
              <dd pn="section-5.2-3.2.1.2">
                <t indent="0" pn="section-5.2-3.2.1.2.1">specifies the integer portion of the number of seconds
              since the NTP epoch</t>
                <dl newline="false" spacing="normal" indent="3" pn="section-5.2-3.2.1.2.2">
                  <dt pn="section-5.2-3.2.1.2.2.1">Size:</dt>
                  <dd pn="section-5.2-3.2.1.2.2.2">32 bits</dd>
                  <dt pn="section-5.2-3.2.1.2.2.3">Units:</dt>
                  <dd pn="section-5.2-3.2.1.2.2.4">seconds</dd>
                </dl>
              </dd>
              <dt pn="section-5.2-3.2.1.3">Fraction:</dt>
              <dd pn="section-5.2-3.2.1.4">
                <t indent="0" pn="section-5.2-3.2.1.4.1">specifies the fractional portion of the number of
            seconds since the NTP epoch</t>
                <dl newline="false" spacing="normal" indent="3" pn="section-5.2-3.2.1.4.2">
                  <dt pn="section-5.2-3.2.1.4.2.1">Size:</dt>
                  <dd pn="section-5.2-3.2.1.4.2.2">32 bits</dd>
                  <dt pn="section-5.2-3.2.1.4.2.3">Units:</dt>
                  <dd pn="section-5.2-3.2.1.4.2.4">the unit is 2<sup>(-32)</sup> seconds, which is roughly equal to
              233 picoseconds.</dd>
                </dl>
              </dd>
            </dl>
          </dd>
          <dt pn="section-5.2-3.3">Epoch: </dt>
          <dd pn="section-5.2-3.4">NTP epoch. For details, see <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>.</dd>
          <dt pn="section-5.2-3.5">Resolution:</dt>
          <dd pn="section-5.2-3.6">The resolution is 2<sup>(-32)</sup> seconds.</dd>
          <dt pn="section-5.2-3.7">Wraparound:</dt>
          <dd pn="section-5.2-3.8">This time format wraps around every 2<sup>32</sup> seconds, which is
            roughly 136 years. The next wraparound will occur in the year
            2036.</dd>
          <dt pn="section-5.2-3.9">Synchronization Aspects:</dt>
          <dd pn="section-5.2-3.10">Nodes that use this timestamp format will typically be
        synchronized to UTC using NTP <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>. Thus, the
        timestamp <bcp14>MAY</bcp14> be derived from the NTP-synchronized clock, allowing
        the timestamp to be measured with respect to the clock of an NTP
        server.</dd>
        </dl>
      </section>
      <section anchor="POSIXFormatSec" numbered="true" toc="include" removeInRFC="false" pn="section-5.3">
        <name slugifiedName="name-posix-based-timestamp-forma">POSIX-Based Timestamp Format</name>
        <t indent="0" pn="section-5.3-1">This timestamp format is based on the POSIX time format <xref target="POSIX" format="default" sectionFormat="of" derivedContent="POSIX"/>. The detailed specification of the timestamp format
        used in this document is presented below.</t>
        <artwork align="left" name="" type="" alt="" pn="section-5.3-2">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Seconds                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Microseconds                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        <dl newline="true" spacing="normal" indent="3" pn="section-5.3-3">
          <dt pn="section-5.3-3.1">Timestamp field format:</dt>
          <dd pn="section-5.3-3.2">
            <dl newline="false" spacing="normal" indent="3" pn="section-5.3-3.2.1">
              <dt pn="section-5.3-3.2.1.1">Seconds:</dt>
              <dd pn="section-5.3-3.2.1.2">
                <t indent="0" pn="section-5.3-3.2.1.2.1">specifies the integer portion of the number of seconds
              since the POSIX epoch</t>
                <dl newline="false" spacing="normal" indent="3" pn="section-5.3-3.2.1.2.2">
                  <dt pn="section-5.3-3.2.1.2.2.1">Size:</dt>
                  <dd pn="section-5.3-3.2.1.2.2.2">32 bits</dd>
                  <dt pn="section-5.3-3.2.1.2.2.3">Units:</dt>
                  <dd pn="section-5.3-3.2.1.2.2.4">seconds</dd>
                </dl>
              </dd>
              <dt pn="section-5.3-3.2.1.3">Microseconds:</dt>
              <dd pn="section-5.3-3.2.1.4">
                <t indent="0" pn="section-5.3-3.2.1.4.1">specifies the fractional portion of the number of
              seconds since the POSIX epoch</t>
                <dl newline="false" spacing="normal" indent="3" pn="section-5.3-3.2.1.4.2">
                  <dt pn="section-5.3-3.2.1.4.2.1">Size:</dt>
                  <dd pn="section-5.3-3.2.1.4.2.2">32 bits</dd>
                  <dt pn="section-5.3-3.2.1.4.2.3">Units:</dt>
                  <dd pn="section-5.3-3.2.1.4.2.4">the unit is microseconds. The value of this field is
		in the range 0 to (10<sup>6</sup>)-1.</dd>
                </dl>
              </dd>
            </dl>
          </dd>
          <dt pn="section-5.3-3.3">Epoch:</dt>
          <dd pn="section-5.3-3.4">POSIX epoch. For details, see <xref target="POSIX" format="default" sectionFormat="of" derivedContent="POSIX"/>,
	    Appendix A.4.16.</dd>
          <dt pn="section-5.3-3.5">Resolution:</dt>
          <dd pn="section-5.3-3.6">The resolution is 1 microsecond.</dd>
          <dt pn="section-5.3-3.7">Wraparound: </dt>
          <dd pn="section-5.3-3.8">This time format wraps around every 2<sup>32</sup> seconds, which is
            roughly 136 years. The next wraparound will occur in the year
            2106.</dd>
          <dt pn="section-5.3-3.9">Synchronization Aspects: </dt>
          <dd pn="section-5.3-3.10">It is assumed that nodes that use this timestamp format run the
            Linux operating system and hence use the POSIX time. In some
            cases, nodes <bcp14>MAY</bcp14> be synchronized to UTC using a synchronization
            mechanism that is outside the scope of this document, such as NTP
            <xref target="RFC5905" format="default" sectionFormat="of" derivedContent="RFC5905"/>. Thus, the timestamp
	    <bcp14>MAY</bcp14> be derived from
            the NTP-synchronized clock, allowing the timestamp to be measured
            with respect to the clock of an NTP server.</dd>
        </dl>
      </section>
    </section>
    <section anchor="export" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-ioam-data-export">IOAM Data Export</name>
      <t indent="0" pn="section-6-1">IOAM nodes collect information for packets traversing a domain that
      supports IOAM. IOAM decapsulating nodes, as well as IOAM transit nodes,
      can choose to retrieve IOAM information from the packet, process the
      information further, and export the information using e.g., IP Flow Information Export
      (IPFIX). The
      mechanisms and associated data formats for exporting IOAM data are
      outside the scope of this document.</t>
      <t indent="0" pn="section-6-2">A way to perform raw data export of IOAM data 
      using IPFIX is discussed in <xref target="I-D.spiegel-ippm-ioam-rawexport" format="default" sectionFormat="of" derivedContent="IPPM-IOAM-RAWEXPORT"/>.</t>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-7-1">IANA has defined a registry group named
	  "In Situ OAM (IOAM)".</t>
      <t indent="0" pn="section-7-2">This group includes the following registries:</t>
      <ul empty="true" spacing="normal" bare="false" indent="3" pn="section-7-3">
        <li pn="section-7-3.1">IOAM Option-Type</li>
        <li pn="section-7-3.2">IOAM Trace-Type</li>
        <li pn="section-7-3.3">IOAM Trace-Flags</li>
        <li pn="section-7-3.4">IOAM POT-Type</li>
        <li pn="section-7-3.5">IOAM POT-Flags</li>
        <li pn="section-7-3.6">IOAM E2E-Type</li>
        <li pn="section-7-3.7">IOAM Namespace-ID</li>
      </ul>
      <t indent="0" pn="section-7-4">The subsequent subsections detail the registries therein
      contained.</t>
      <section anchor="IOAM-type-registry" numbered="true" toc="include" removeInRFC="false" pn="section-7.1">
        <name slugifiedName="name-ioam-option-type-registry">IOAM Option-Type Registry</name>
        <t indent="0" pn="section-7.1-1">This registry defines 128 code points for the IOAM
        Option-Type field for identifying IOAM-Option-Types, as
        explained in <xref target="IOAM_option_format" format="default" sectionFormat="of" derivedContent="Section 4"/>. The following code points are defined in
        this document:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.1-2">
          <dt pn="section-7.1-2.1">0:</dt>
          <dd pn="section-7.1-2.2">IOAM Pre-allocated Trace Option-Type</dd>
          <dt pn="section-7.1-2.3">1:</dt>
          <dd pn="section-7.1-2.4">IOAM Incremental Trace Option-Type</dd>
          <dt pn="section-7.1-2.5">2:</dt>
          <dd pn="section-7.1-2.6">IOAM POT Option-Type</dd>
          <dt pn="section-7.1-2.7">3:</dt>
          <dd pn="section-7.1-2.8">IOAM E2E Option-Type</dd>
        </dl>
        <t indent="0" pn="section-7.1-3">Code points 4-127 are available for assignment via the "IETF Review" process,
        as per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.</t>
        <t indent="0" pn="section-7.1-4">New registration requests <bcp14>MUST</bcp14> use the following template:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.1-5">
          <dt pn="section-7.1-5.1">Name:</dt>
          <dd pn="section-7.1-5.2">name of the newly registered Option-Type</dd>
          <dt pn="section-7.1-5.3">Code point:</dt>
          <dd pn="section-7.1-5.4">desired value of the requested code point</dd>
          <dt pn="section-7.1-5.5">Description:</dt>
          <dd pn="section-7.1-5.6">brief description of the newly registered Option-Type</dd>
          <dt pn="section-7.1-5.7">Reference:</dt>
          <dd pn="section-7.1-5.8">reference to the document that defines the new Option-Type</dd>
        </dl>
        <t indent="0" pn="section-7.1-6">The evaluation of a new registration request <bcp14>MUST</bcp14> also include
        checking whether the new IOAM-Option-Type includes an
        IOAM-Namespace field and that the IOAM-Namespace field is the first
        field in the newly defined header of the new Option-Type.</t>
      </section>
      <section anchor="ioam-trace-type-registry" numbered="true" toc="include" removeInRFC="false" pn="section-7.2">
        <name slugifiedName="name-ioam-trace-type-registry">IOAM Trace-Type Registry</name>
        <t indent="0" pn="section-7.2-1">This registry defines code points for each bit in the 24-bit
        IOAM Trace-Type field for the Pre-allocated Trace Option-Type and Incremental
        Trace Option-Type defined in <xref target="IOAM_tracing_option" format="default" sectionFormat="of" derivedContent="Section 4.4"/>. Bits 0-11 are defined in this document in
        <xref target="IOAMTraceType" format="none" sectionFormat="of" derivedContent="">Paragraph 5</xref> of <xref target="TraceOptionDef" format="default" sectionFormat="of" derivedContent="Section 4.4.1"/>:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.2-2">
          <dt pn="section-7.2-2.1">Bit 0:</dt>
          <dd pn="section-7.2-2.2">hop_Lim and node_id in short format</dd>
          <dt pn="section-7.2-2.3">Bit 1:</dt>
          <dd pn="section-7.2-2.4">ingress_if_id and egress_if_id in short
            format</dd>
          <dt pn="section-7.2-2.5">Bit 2:</dt>
          <dd pn="section-7.2-2.6">timestamp seconds</dd>
          <dt pn="section-7.2-2.7">Bit 3:</dt>
          <dd pn="section-7.2-2.8">timestamp fraction</dd>
          <dt pn="section-7.2-2.9">Bit 4:</dt>
          <dd pn="section-7.2-2.10">transit delay</dd>
          <dt pn="section-7.2-2.11">Bit 5:</dt>
          <dd pn="section-7.2-2.12">namespace-specific data in short format</dd>
          <dt pn="section-7.2-2.13">Bit 6:</dt>
          <dd pn="section-7.2-2.14">queue depth</dd>
          <dt pn="section-7.2-2.15">Bit 7:</dt>
          <dd pn="section-7.2-2.16">checksum complement</dd>
          <dt pn="section-7.2-2.17">Bit 8:</dt>
          <dd pn="section-7.2-2.18">hop_Lim and node_id in wide format</dd>
          <dt pn="section-7.2-2.19">Bit 9:</dt>
          <dd pn="section-7.2-2.20">ingress_if_id and egress_if_id in wide
            format</dd>
          <dt pn="section-7.2-2.21">Bit 10:</dt>
          <dd pn="section-7.2-2.22">namespace-specific data in wide format</dd>
          <dt pn="section-7.2-2.23">Bit 11:</dt>
          <dd pn="section-7.2-2.24">buffer occupancy</dd>
          <dt pn="section-7.2-2.25">Bit 22:</dt>
          <dd pn="section-7.2-2.26">variable-length Opaque State Snapshot</dd>
          <dt pn="section-7.2-2.27">Bit 23:</dt>
          <dd pn="section-7.2-2.28">reserved</dd>
        </dl>
        <t indent="0" pn="section-7.2-3">Bits 12-21 are available for assignment
        via the "IETF Review" process, as per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.</t>
        <t indent="0" pn="section-7.2-4">New registration requests <bcp14>MUST</bcp14> use the following template:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.2-5">
          <dt pn="section-7.2-5.1">Bit:</dt>
          <dd pn="section-7.2-5.2">desired bit to be allocated in the 24-bit
             IOAM Trace Option-Type field for the Pre-allocated Trace Option-Type
              and Incremental Trace Option-Type</dd>
          <dt pn="section-7.2-5.3">Description:</dt>
          <dd pn="section-7.2-5.4">brief description of the newly registered bit</dd>
          <dt pn="section-7.2-5.5">Reference:</dt>
          <dd pn="section-7.2-5.6">reference to the document that defines the new bit</dd>
        </dl>
      </section>
      <section anchor="Flags-Registry-Sec" numbered="true" toc="include" removeInRFC="false" pn="section-7.3">
        <name slugifiedName="name-ioam-trace-flags-registry">IOAM Trace-Flags Registry</name>
        <t indent="0" pn="section-7.3-1">This registry defines code points for each bit in the 4-bit flags
        for the Pre-allocated Trace-Option and Incremental Trace-Option defined in
	<xref target="IOAM_tracing_option" format="default" sectionFormat="of" derivedContent="Section 4.4"/>. The
	meaning of
        Bit 0 (the most significant bit) for trace flags is defined in this
        document in <xref target="TraceFlags" format="none" sectionFormat="of" derivedContent="">Paragraph 3</xref> of <xref target="TraceOptionDef" format="default" sectionFormat="of" derivedContent="Section 4.4.1"/>:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.3-2">
          <dt pn="section-7.3-2.1">Bit 0:</dt>
          <dd pn="section-7.3-2.2">"Overflow" (O-bit)</dd>
        </dl>
        <t indent="0" pn="section-7.3-3">Bits 1-3 are available for assignment via the "IETF Review"
        process, as per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.</t>
        <t indent="0" pn="section-7.3-4">New registration requests <bcp14>MUST</bcp14> use the following template:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.3-5">
          <dt pn="section-7.3-5.1">Bit:</dt>
          <dd pn="section-7.3-5.2">desired bit to be allocated 
          in the 8-bit flags field of the Pre-allocated 
          Trace Option-Type and Incremental Trace Option-Type</dd>
          <dt pn="section-7.3-5.3">Description:</dt>
          <dd pn="section-7.3-5.4">brief description of the newly registered bit</dd>
          <dt pn="section-7.3-5.5">Reference:</dt>
          <dd pn="section-7.3-5.6">reference to the document that defines the new bit</dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-7.4">
        <name slugifiedName="name-ioam-pot-type-registry">IOAM POT-Type Registry</name>
        <t indent="0" pn="section-7.4-1">This registry defines 256 code points to define the IOAM POT-Type for the
        IOAM Proof of Transit Option (<xref target="IOAM_proof_of_transit_option" format="default" sectionFormat="of" derivedContent="Section 4.5"/>). The code point value 0 is
        defined in this document:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.4-2">
          <dt pn="section-7.4-2.1">0:</dt>
          <dd pn="section-7.4-2.2">16-Octet POT data</dd>
        </dl>
        <t indent="0" pn="section-7.4-3">Code points 1-255 are available for assignment via the "IETF Review"
        process, as per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.</t>
        <t indent="0" pn="section-7.4-4">New registration requests <bcp14>MUST</bcp14> use the following template:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.4-5">
          <dt pn="section-7.4-5.1">Name:</dt>
          <dd pn="section-7.4-5.2">name of the newly registered POT-Type</dd>
          <dt pn="section-7.4-5.3">Code point:</dt>
          <dd pn="section-7.4-5.4">desired value of the requested code point</dd>
          <dt pn="section-7.4-5.5">Description:</dt>
          <dd pn="section-7.4-5.6">brief description of the newly registered POT-Type</dd>
          <dt pn="section-7.4-5.7">Reference:</dt>
          <dd pn="section-7.4-5.8">reference to the document that defines the new POT-Type</dd>
        </dl>
      </section>
      <section anchor="pot-flags-sec" numbered="true" toc="include" removeInRFC="false" pn="section-7.5">
        <name slugifiedName="name-ioam-pot-flags-registry">IOAM POT-Flags Registry</name>
        <t indent="0" pn="section-7.5-1">This registry defines code points for each bit in the 8-bit flags
        for the IOAM POT Option-Type defined in <xref target="IOAM_proof_of_transit_option" format="default" sectionFormat="of" derivedContent="Section 4.5"/>. </t>
        <t indent="0" pn="section-7.5-2">Bits 0-7 are available for assignment via the
        "IETF Review" process, as per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.</t>
        <t indent="0" pn="section-7.5-3">New registration requests <bcp14>MUST</bcp14> use the following template:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.5-4">
          <dt pn="section-7.5-4.1">Bit:</dt>
          <dd pn="section-7.5-4.2">desired bit to be allocated 
          in the 8-bit flags field of the IOAM POT Option-Type</dd>
          <dt pn="section-7.5-4.3">Description:</dt>
          <dd pn="section-7.5-4.4">brief description of the newly registered bit</dd>
          <dt pn="section-7.5-4.5">Reference:</dt>
          <dd pn="section-7.5-4.6">reference to the document that defines the new bit</dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-7.6">
        <name slugifiedName="name-ioam-e2e-type-registry">IOAM E2E-Type Registry</name>
        <t indent="0" pn="section-7.6-1">This registry defines code points for each bit in the 16-bit
        IOAM E2E-Type field for the IOAM E2E Option (<xref target="IOAM_edge_to_edge_opt" format="default" sectionFormat="of" derivedContent="Section 4.6"/>). Bits 0-3 are defined
        in this document:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.6-2">
          <dt pn="section-7.6-2.1">Bit 0:</dt>
          <dd pn="section-7.6-2.2">64-bit sequence number</dd>
          <dt pn="section-7.6-2.3">Bit 1:</dt>
          <dd pn="section-7.6-2.4">32-bit sequence number</dd>
          <dt pn="section-7.6-2.5">Bit 2:</dt>
          <dd pn="section-7.6-2.6">timestamp seconds</dd>
          <dt pn="section-7.6-2.7">Bit 3:</dt>
          <dd pn="section-7.6-2.8">timestamp fraction</dd>
        </dl>
        <t indent="0" pn="section-7.6-3">Bits 4-15 are available for assignment via the
        "IETF Review" process, as per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.</t>
        <t indent="0" pn="section-7.6-4">New registration requests <bcp14>MUST</bcp14> use the following template:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.6-5">
          <dt pn="section-7.6-5.1">Bit:</dt>
          <dd pn="section-7.6-5.2">desired bit to be allocated 
          in the 16-bit IOAM E2E-Type field</dd>
          <dt pn="section-7.6-5.3">Description:</dt>
          <dd pn="section-7.6-5.4">brief description of the newly registered bit</dd>
          <dt pn="section-7.6-5.5">Reference:</dt>
          <dd pn="section-7.6-5.6">reference to the document that defines the new bit</dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-7.7">
        <name slugifiedName="name-ioam-namespace-id-registry">IOAM Namespace-ID Registry</name>
        <t indent="0" pn="section-7.7-1">IANA has set up the "IOAM Namespace-ID" registry that
        contains 16-bit values and follows the template for requests
        shown below. The meaning of 0x0000 is defined in this
        document. IANA has reserved the values 0x0001 to
        0x7FFF for private use (managed by operators), as specified in
        <xref target="ioam_namespaces" format="default" sectionFormat="of" derivedContent="Section 4.3"/> of this
        document. Registry entries for the values 0x8000 to 0xFFFF are
        to be assigned via the "Expert Review" policy, as per <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>. </t>
        <t indent="0" pn="section-7.7-2">Upon receiving a new allocation request, a designated 
	expert will perform the following:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-7.7-3">
          <li pn="section-7.7-3.1">Review whether the request is complete, i.e., the 
          registration template has been filled in. The expert
          will send incomplete requests back to the requester.</li>
          <li pn="section-7.7-3.2">Check whether the request is neither a duplicate of nor
          conflicting with either an already existing allocation 
          or a pending allocation. In case of duplicates or conflicts,
          the expert will ask the requester to update the allocation
          request accordingly.</li>
          <li pn="section-7.7-3.3">Solicit feedback from relevant working groups and communities to ensure
          that the new allocation request has been properly reviewed
          and that rough consensus on the request exists. At a minimum,
          the expert will solicit feedback from the IPPM Working Group
          by posting the request to the ippm@ietf.org
          mailing list. The expert will allow for a 3-week review
          period on the mailing lists. 
          If the feedback received from the relevant working
          groups and communities within the review period 
          indicates rough consensus on the
          request, the expert will approve the request and ask IANA
          to allocate the new Namespace-ID. In case the expert
          senses a lack of consensus from the feedback received, the
          expert will ask the requester to engage with the corresponding
          working groups and communities to further review and refine
          the request.</li>
        </ul>
        <t indent="0" pn="section-7.7-4"> It is intended that any allocation will be accompanied 
        by a published RFC.  In order to allow for the allocation of code points
        prior to the RFC being approved for publication, the designated expert can approve 
	allocations once it seems clear that an RFC will be published.</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.7-5">
          <dt pn="section-7.7-5.1">0x0000:</dt>
          <dd pn="section-7.7-5.2">default namespace (known to all IOAM nodes)</dd>
          <dt pn="section-7.7-5.3">0x0001 - 0x7FFF:</dt>
          <dd pn="section-7.7-5.4">reserved for private use</dd>
          <dt pn="section-7.7-5.5">0x8000 - 0xFFFF:</dt>
          <dd pn="section-7.7-5.6">unassigned</dd>
        </dl>
        <t indent="0" pn="section-7.7-6">New registration requests <bcp14>MUST</bcp14> use the following template:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-7.7-7">
          <dt pn="section-7.7-7.1">Name:</dt>
          <dd pn="section-7.7-7.2">name of the newly registered Namespace-ID</dd>
          <dt pn="section-7.7-7.3">Code point:</dt>
          <dd pn="section-7.7-7.4">desired value of the requested Namespace-ID</dd>
          <dt pn="section-7.7-7.5">Description:</dt>
          <dd pn="section-7.7-7.6">brief description of the newly 
          registered Namespace-ID</dd>
          <dt pn="section-7.7-7.7">Reference:</dt>
          <dd pn="section-7.7-7.8">reference to the document that
          defines the new Namespace-ID</dd>
          <dt pn="section-7.7-7.9">Status of the registration:</dt>
          <dd pn="section-7.7-7.10">Status can be either 
          "permanent" or "provisional". Namespace-ID registrations following
          a successful expert review will have the status "provisional".
          Once the RFC that defines the new Namespace-ID is published,
          the status is changed to "permanent".</dd>
        </dl>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-management-and-deployment-c">Management and Deployment Considerations</name>
      <t indent="0" pn="section-8-1">This document defines the structure and use of IOAM-Data-Fields. 
      This document does not define the encapsulation of IOAM-Data-Fields into different
      protocols. Management and deployment aspects for IOAM have to be considered within
      the context of the protocol IOAM-Data-Fields are encapsulated into and, as such, are
      out of scope for this document. For a discussion of IOAM deployment, please also
      refer to <xref target="I-D.ietf-ippm-ioam-deployment" format="default" sectionFormat="of" derivedContent="IPPM-IOAM-DEPLOYMENT"/>, which
      outlines a framework for IOAM deployment and provides best current practices.</t>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-9-1">As discussed in <xref target="RFC7276" format="default" sectionFormat="of" derivedContent="RFC7276"/>, a successful attack on
      an OAM protocol in general, and specifically on IOAM, can prevent the
      detection of failures or anomalies or create a false illusion of
      nonexistent ones. In particular, these threats are applicable by
      compromising the integrity of IOAM data, either by maliciously modifying
      IOAM options in transit or by injecting packets with maliciously
      generated IOAM options. All nodes in the path of an IOAM-carrying 
      packet can perform such an attack.</t>
      <t indent="0" pn="section-9-2">The Proof of Transit Option-Type (see <xref target="IOAM_proof_of_transit_option" format="default" sectionFormat="of" derivedContent="Section 4.5"/>) is used for verifying the path
      of data packets, i.e., proving that packets transited through a defined set of
      nodes.</t>
      <t indent="0" pn="section-9-3">In case an attacker gains access to several nodes in a network
      	and would be able to change the system software of these nodes,
        IOAM-Data-Fields could be misused and repurposed for a use
        different from what is specified in this document. 
        One type of misuse is the implementation of a covert channel between
      	network nodes.</t>
      <t indent="0" pn="section-9-4">From a confidentiality perspective, although IOAM options are not expected to
      contain user data, they can be used for network reconnaissance, allowing
      attackers to collect information about network paths, performance, queue
      states, buffer occupancy, etc. Moreover, if IOAM data
      leaks from the IOAM-Domain, it could enable reconnaissance beyond the scope
      of the IOAM-Domain. One possible application of such reconnaissance is 
      to gauge the effectiveness of an ongoing attack, e.g., 
      if buffers and queues are overflowing. </t>
      <t indent="0" pn="section-9-5">IOAM can be used as a means for implementing Denial-of-Service (DoS)
      attacks or for amplifying them. For example, a malicious attacker can
      add an IOAM header to packets in order to consume the resources of
      network devices that take part in IOAM or entities that receive, collect,
      or analyze the IOAM data. Another example is a packet length attack in
      which an attacker pushes headers associated with IOAM-Option-Types into
      data packets, causing these packets to be increased beyond the MTU size,
      resulting in fragmentation or in packet drops. In case POT is used,
      an attacker could corrupt the POT data fields in the packet, resulting
      in a verification failure of the POT data, even if the packet followed
      the correct path.</t>
      <t indent="0" pn="section-9-6">Since IOAM options can include timestamps, if network devices use
      synchronization protocols, then any attack on the time protocol <xref target="RFC7384" format="default" sectionFormat="of" derivedContent="RFC7384"/> can compromise the integrity of the
      timestamp-related data fields.</t>
      <t indent="0" pn="section-9-7">At the management plane, attacks can be set up by misconfiguring
      or by maliciously configuring IOAM-enabled nodes in a way that enables
      other attacks. IOAM configuration should only be managed by 
      authorized processes or users. </t>
      <t indent="0" pn="section-9-8">IETF protocols require features to ensure their security. While IOAM-Data-Fields
      don't represent a protocol by themselves, the IOAM-Data-Fields add to the protocol
      that the IOAM-Data-Fields are encapsulated into. Any specification that defines how
      IOAM-Data-Fields carried in an encapsulating protocol <bcp14>MUST</bcp14> provide
      for a mechanism for cryptographic integrity protection of the IOAM-Data-Fields.
      Cryptographic integrity protection could be achieved through a mechanism of
      the encapsulating protocol, or it could incorporate the mechanisms specified in <xref target="I-D.ietf-ippm-ioam-data-integrity" format="default" sectionFormat="of" derivedContent="IPPM-IOAM-DATA-INTEGRITY"/>. </t>
      <t indent="0" pn="section-9-9">The current document does not define a specific IOAM encapsulation.
      It has to be noted that some IOAM encapsulation types can introduce
      specific security considerations. A specification that defines an IOAM
      encapsulation is expected to address the respective
      encapsulation-specific security considerations.</t>
      <t indent="0" pn="section-9-10">Notably, IOAM is expected to be deployed in limited domains, 
      thus confining the potential attack vectors to within
      the limited domain. A limited administrative domain provides the
      operator with the means to select, monitor, and control the access of
      all the network devices, making these devices trusted by the operator.
      Indeed, in order to limit the scope of threats mentioned above to within
      the current limited domain, the network operator is expected to enforce
      policies that prevent IOAM traffic from leaking outside of the IOAM-Domain and prevent IOAM data from outside the domain to be processed
      and used within the domain.</t>
      <t indent="0" pn="section-9-11">This document does not define the data contents of custom fields, 
      like "Opaque State Snapshot" and "namespace-specific data" IOAM-Data-Fields. These custom data fields will have security 
      considerations corresponding to their defined data contents 
      that need to be described where those formats are defined.</t>
      <t indent="0" pn="section-9-12">IOAM deployments that leverage both IOAM Trace Option-Types, i.e.,
	the Pre-allocated Trace Option-Type and Incremental Trace Option-Type,
       can suffer from incomplete visibility if the information gathered via
       the two Trace Option-Types is not correlated and aggregated 
       appropriately. If IOAM transit nodes leverage the IOAM-Data-Fields
       in the packet for further actions or insights, 
       then IOAM transit nodes that only support one IOAM 
       Trace Option-Type in an IOAM deployment that leverages both Trace
       Option-Types have limited visibility and thus can draw inappropriate
       conclusions or take wrong actions.</t>
      <t indent="0" pn="section-9-13">The security considerations of a system that deploys IOAM, much like
      any system, has to be reviewed on a per-deployment-scenario basis based
      on a systems-specific threat analysis, which can lead to specific
      security solutions that are beyond the scope of the current document.
      Specifically, in an IOAM deployment that is not confined to a single
      LAN but spans multiple inter-connected sites (for example, using an
      overlay network), the inter-site links can be secured (e.g., by IPsec)
      in order to avoid external threats.</t>
      <t indent="0" pn="section-9-14">IOAM deployment considerations, including approaches to mitigate the above
      discussed threads and potential attacks, are outside the scope of this 
      document. IOAM deployment considerations are discussed in 
      <xref target="I-D.ietf-ippm-ioam-deployment" format="default" sectionFormat="of" derivedContent="IPPM-IOAM-DEPLOYMENT"/>.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.kitamura-ipv6-record-route" to="IPV6-RECORD-ROUTE"/>
    <displayreference target="I-D.ietf-nvo3-vxlan-gpe" to="NVO3-VXLAN-GPE"/>
    <displayreference target="I-D.spiegel-ippm-ioam-rawexport" to="IPPM-IOAM-RAWEXPORT"/>
    <displayreference target="I-D.ietf-ippm-ioam-deployment" to="IPPM-IOAM-DEPLOYMENT"/>
    <displayreference target="I-D.ietf-ippm-ioam-data-integrity" to="IPPM-IOAM-DATA-INTEGRITY"/>
    <references pn="section-10">
      <name slugifiedName="name-references">References</name>
      <references pn="section-10.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="POSIX" target="https://standards.ieee.org/ieee/1003.1/7101/" quoteTitle="true" derivedAnchor="POSIX">
          <front>
            <title>IEEE/Open Group 1003.1-2017 - IEEE Standard for Information Technology--Portable Operating System Interface (POSIX(TM)) Base Specifications, Issue 7</title>
            <author>
              <organization showOnFrontPage="true">IEEE</organization>
            </author>
            <date year="2018" month="January"/>
          </front>
          <seriesInfo name="IEEE Std" value="1003.1-2017"/>
        </reference>
        <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 initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <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="RFC5905" target="https://www.rfc-editor.org/info/rfc5905" quoteTitle="true" derivedAnchor="RFC5905">
          <front>
            <title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
            <author initials="D." surname="Mills" fullname="D. Mills">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Martin" fullname="J. Martin" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Burbank" fullname="J. Burbank">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W." surname="Kasch" fullname="W. Kasch">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2010" month="June"/>
            <abstract>
              <t indent="0">The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet.  This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family.  NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs.  It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required.  It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5905"/>
          <seriesInfo name="DOI" value="10.17487/RFC5905"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </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 initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <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>
      </references>
      <references pn="section-10.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-ippm-ioam-data-integrity" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-ippm-ioam-data-integrity-01" derivedAnchor="IPPM-IOAM-DATA-INTEGRITY">
          <front>
            <title>Integrity of In-situ OAM Data Fields</title>
            <author fullname="Frank Brockners">
              <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Shwetha Bhandari">
              <organization showOnFrontPage="true">Thoughtspot</organization>
            </author>
            <author fullname="Tal Mizrahi">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <author fullname="Justin Iurman">
              <organization showOnFrontPage="true">Universite de Liege</organization>
            </author>
            <date month="March" day="2" year="2022"/>
            <abstract>
              <t indent="0">   In-situ Operations, Administration, and Maintenance (IOAM) records
   operational and telemetry information in the packet while the packet
   traverses a path in the network.  IETF protocols require features to
   ensure their security.  This document describes the integrity
   protection of IOAM-Data-Fields.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ippm-ioam-data-integrity-01"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-ippm-ioam-data-integrity-01.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-ippm-ioam-deployment" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-ippm-ioam-deployment-01" derivedAnchor="IPPM-IOAM-DEPLOYMENT">
          <front>
            <title>In-situ OAM Deployment</title>
            <author fullname="Frank Brockners">
              <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Shwetha Bhandari">
              <organization showOnFrontPage="true">Thoughtspot</organization>
            </author>
            <author fullname="Daniel Bernier">
              <organization showOnFrontPage="true">Bell Canada</organization>
            </author>
            <author fullname="Tal Mizrahi">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <date month="April" day="11" 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
   provides a framework for IOAM deployment and provides best current
   practices.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ippm-ioam-deployment-01"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-ippm-ioam-deployment-01.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.spiegel-ippm-ioam-rawexport" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-spiegel-ippm-ioam-rawexport-06" derivedAnchor="IPPM-IOAM-RAWEXPORT">
          <front>
            <title>In-situ OAM raw data export with IPFIX</title>
            <author fullname="Mickey Spiegel">
              <organization showOnFrontPage="true">Barefoot Networks, an Intel company</organization>
            </author>
            <author fullname="Frank Brockners">
              <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Shwetha Bhandari">
              <organization showOnFrontPage="true">Thoughtspot</organization>
            </author>
            <author fullname="Ramesh Sivakolundu">
              <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
            </author>
            <date month="February" day="21" year="2022"/>
            <abstract>
              <t indent="0">   In-situ Operations, Administration, and Maintenance (IOAM) records
   operational and telemetry information in the packet while the packet
   traverses a path between two points in the network.  This document
   discusses how In-situ Operations, Administration, and Maintenance
   (IOAM) information can be exported in raw, i.e. uninterpreted, format
   from network devices to systems, such as monitoring or analytics
   systems using IPFIX.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-spiegel-ippm-ioam-rawexport-06"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-spiegel-ippm-ioam-rawexport-06.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.kitamura-ipv6-record-route" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-kitamura-ipv6-record-route-00" derivedAnchor="IPV6-RECORD-ROUTE">
          <front>
            <title>Record Route for IPv6 (RR6) Hop-by-Hop Option Extension</title>
            <author initials="H." surname="Kitamura" fullname="Hiroshi Kitamura">
              <organization showOnFrontPage="true">NEC Corporation</organization>
            </author>
            <date month="November" day="17" year="2000"/>
            <abstract>
              <t indent="0">This document proposes a 'Record Route for IPv6 (RR6)' mechanism.  It
is composed of one new IPv6 hop-by-hop option (RR6 option) extension.
The RR6 mechanism is redesigned to establish an optimized record
route mechanism for IPv6. Two types of new features are introduced.
1. In order to prevent scalability problems and to make the mechanism
flexible, the beginning and ending points of the data recording range
are controlled by using their specifiers.
2. In order to record long IPv6 addresses efficiently, a simple
address compression method is introduced. Since the compression is
achieved by utilizing characteristics of recorded IPv6 addresses
effectively, the mechanism is efficient and optimized for IPv6.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kitamura-ipv6-record-route-00"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-kitamura-ipv6-record-route-00.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-nvo3-vxlan-gpe" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-nvo3-vxlan-gpe-12" derivedAnchor="NVO3-VXLAN-GPE">
          <front>
            <title>Generic Protocol Extension for VXLAN (VXLAN-GPE)</title>
            <author fullname="Fabio Maino" role="editor">
              <organization showOnFrontPage="true">Cisco Systems</organization>
            </author>
            <author fullname="Larry Kreeger" role="editor">
              <organization showOnFrontPage="true">Arrcus</organization>
            </author>
            <author fullname="Uri Elzur" role="editor">
              <organization showOnFrontPage="true">Intel</organization>
            </author>
            <date month="September" day="22" year="2021"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nvo3-vxlan-gpe-12"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC7276" target="https://www.rfc-editor.org/info/rfc7276" quoteTitle="true" derivedAnchor="RFC7276">
          <front>
            <title>An Overview of Operations, Administration, and Maintenance (OAM) Tools</title>
            <author initials="T." surname="Mizrahi" fullname="T. Mizrahi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Sprecher" fullname="N. Sprecher">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Bellagamba" fullname="E. Bellagamba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Weingarten" fullname="Y. Weingarten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t indent="0">Operations, Administration, and Maintenance (OAM) is a general term that refers to a toolset for fault detection and isolation, and for performance measurement.  Over the years, various OAM tools have been defined for various layers in the protocol stack.</t>
              <t indent="0">This document summarizes some of the OAM tools defined in the IETF in the context of IP unicast, MPLS, MPLS Transport Profile (MPLS-TP), pseudowires, and Transparent Interconnection of Lots of Links (TRILL). This document focuses on tools for detecting and isolating failures in networks and for performance monitoring. Control and management aspects of OAM are outside the scope of this document.  Network repair functions such as Fast Reroute (FRR) and protection switching, which are often triggered by OAM protocols, are also out of the scope of this document.</t>
              <t indent="0">The target audience of this document includes network equipment vendors, network operators, and standards development organizations. This document can be used as an index to some of the main OAM tools  defined in the IETF.  At the end of the document, a list of the OAM toolsets and a list of the OAM functions are presented as a summary.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7276"/>
          <seriesInfo name="DOI" value="10.17487/RFC7276"/>
        </reference>
        <reference anchor="RFC7384" target="https://www.rfc-editor.org/info/rfc7384" quoteTitle="true" derivedAnchor="RFC7384">
          <front>
            <title>Security Requirements of Time Protocols in Packet Switched Networks</title>
            <author initials="T." surname="Mizrahi" fullname="T. Mizrahi">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="October"/>
            <abstract>
              <t indent="0">As time and frequency distribution protocols are becoming increasingly common and widely deployed, concern about their exposure to various security threats is increasing.  This document defines a set of security requirements for time protocols, focusing on the Precision Time Protocol (PTP) and the Network Time Protocol (NTP). This document also discusses the security impacts of time protocol practices, the performance implications of external security practices on time protocols, and the dependencies between other security services and time synchronization.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7384"/>
          <seriesInfo name="DOI" value="10.17487/RFC7384"/>
        </reference>
        <reference anchor="RFC7665" target="https://www.rfc-editor.org/info/rfc7665" quoteTitle="true" derivedAnchor="RFC7665">
          <front>
            <title>Service Function Chaining (SFC) Architecture</title>
            <author initials="J." surname="Halpern" fullname="J. Halpern" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Pignataro" fullname="C. Pignataro" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="October"/>
            <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="RFC7799" target="https://www.rfc-editor.org/info/rfc7799" quoteTitle="true" derivedAnchor="RFC7799">
          <front>
            <title>Active and Passive Metrics and Methods (with Hybrid Types In-Between)</title>
            <author initials="A." surname="Morton" fullname="A. Morton">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="May"/>
            <abstract>
              <t indent="0">This memo provides clear definitions for Active and Passive performance assessment.  The construction of Metrics and Methods can be described as either "Active" or "Passive".  Some methods may use a subset of both Active and Passive attributes, and we refer to these as "Hybrid Methods".  This memo also describes multiple dimensions to help evaluate new methods as they emerge.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7799"/>
          <seriesInfo name="DOI" value="10.17487/RFC7799"/>
        </reference>
        <reference anchor="RFC7820" target="https://www.rfc-editor.org/info/rfc7820" quoteTitle="true" derivedAnchor="RFC7820">
          <front>
            <title>UDP Checksum Complement in the One-Way Active Measurement Protocol (OWAMP) and Two-Way Active Measurement Protocol (TWAMP)</title>
            <author initials="T." surname="Mizrahi" fullname="T. Mizrahi">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="March"/>
            <abstract>
              <t indent="0">The One-Way Active Measurement Protocol (OWAMP) and the Two-Way Active Measurement Protocol (TWAMP) are used for performance monitoring in IP networks.  Delay measurement is performed in these protocols by using timestamped test packets.  Some implementations use hardware-based timestamping engines that integrate the accurate transmission time into every outgoing OWAMP/TWAMP test packet during transmission.  Since these packets are transported over UDP, the UDP Checksum field is then updated to reflect this modification.  This document proposes to use the last 2 octets of every test packet as a Checksum Complement, allowing timestamping engines to reflect the checksum modification in the last 2 octets rather than in the UDP Checksum field.  The behavior defined in this document is completely interoperable with existing OWAMP/TWAMP implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7820"/>
          <seriesInfo name="DOI" value="10.17487/RFC7820"/>
        </reference>
        <reference anchor="RFC7821" target="https://www.rfc-editor.org/info/rfc7821" quoteTitle="true" derivedAnchor="RFC7821">
          <front>
            <title>UDP Checksum Complement in the Network Time Protocol (NTP)</title>
            <author initials="T." surname="Mizrahi" fullname="T. Mizrahi">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="March"/>
            <abstract>
              <t indent="0">The Network Time Protocol (NTP) allows clients to synchronize to a time server using timestamped protocol messages.  To facilitate accurate timestamping, some implementations use hardware-based timestamping engines that integrate the accurate transmission time into every outgoing NTP packet during transmission.  Since these packets are transported over UDP, the UDP Checksum field is then updated to reflect this modification.  This document proposes an extension field that includes a 2-octet Checksum Complement, allowing timestamping engines to reflect the checksum modification in the last 2 octets of the packet rather than in the UDP Checksum field.  The behavior defined in this document is interoperable with existing NTP implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7821"/>
          <seriesInfo name="DOI" value="10.17487/RFC7821"/>
        </reference>
        <reference anchor="RFC8300" target="https://www.rfc-editor.org/info/rfc8300" quoteTitle="true" derivedAnchor="RFC8300">
          <front>
            <title>Network Service Header (NSH)</title>
            <author initials="P." surname="Quinn" fullname="P. Quinn" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="U." surname="Elzur" fullname="U. Elzur" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Pignataro" fullname="C. Pignataro" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="January"/>
            <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="RFC8799" target="https://www.rfc-editor.org/info/rfc8799" quoteTitle="true" derivedAnchor="RFC8799">
          <front>
            <title>Limited Domains and Internet Protocols</title>
            <author initials="B." surname="Carpenter" fullname="B. Carpenter">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Liu" fullname="B. Liu">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="July"/>
            <abstract>
              <t indent="0">There is a noticeable trend towards network behaviors and semantics that are specific to a particular set of requirements applied within a limited region of the Internet. Policies, default parameters, the options supported, the style of network management, and security requirements may vary between such limited regions. This document reviews examples of such limited domains (also known as controlled environments), notes emerging solutions, and includes a related taxonomy. It then briefly discusses the standardization of protocols for limited domains. Finally, it shows the need for a precise definition of "limited domain membership" and for mechanisms to allow nodes to join a domain securely and to find other members, including boundary nodes. </t>
              <t indent="0">This document is the product of the research of the authors. It has been produced through discussions and consultation within the IETF but is not the product of IETF consensus.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8799"/>
          <seriesInfo name="DOI" value="10.17487/RFC8799"/>
        </reference>
        <reference anchor="RFC8877" target="https://www.rfc-editor.org/info/rfc8877" quoteTitle="true" derivedAnchor="RFC8877">
          <front>
            <title>Guidelines for Defining Packet Timestamps</title>
            <author initials="T." surname="Mizrahi" fullname="T. Mizrahi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Fabini" fullname="J. Fabini">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Morton" fullname="A. Morton">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="September"/>
            <abstract>
              <t indent="0">Various network protocols make use of binary-encoded timestamps that are incorporated in the protocol packet format, referred to as "packet timestamps" for short. This document specifies guidelines for defining packet timestamp formats in networking protocols at various layers. It also presents three recommended timestamp formats. The target audience of this document includes network protocol designers. It is expected that a new network protocol that requires a packet timestamp will, in most cases, use one of the recommended timestamp formats. If none of the recommended formats fits the protocol requirements, the new protocol specification should specify the format of the packet timestamp according to the guidelines in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8877"/>
          <seriesInfo name="DOI" value="10.17487/RFC8877"/>
        </reference>
        <reference anchor="RFC8926" target="https://www.rfc-editor.org/info/rfc8926" quoteTitle="true" derivedAnchor="RFC8926">
          <front>
            <title>Geneve: Generic Network Virtualization Encapsulation</title>
            <author initials="J." surname="Gross" fullname="J. Gross" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="I." surname="Ganga" fullname="I. Ganga" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Sridhar" fullname="T. Sridhar" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="November"/>
            <abstract>
              <t indent="0">Network virtualization involves the cooperation of devices with a wide variety of capabilities such as software and hardware tunnel endpoints, transit fabrics, and centralized control clusters.  As a result of their role in tying together different elements of the system, the requirements on tunnels are influenced by all of these components.  Therefore, flexibility is the most important aspect of a tunneling protocol if it is to keep pace with the evolution of technology. This document describes Geneve, an encapsulation protocol designed to recognize and accommodate these changing capabilities and needs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8926"/>
          <seriesInfo name="DOI" value="10.17487/RFC8926"/>
        </reference>
      </references>
    </references>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">The authors would like to thank <contact fullname="Éric Vyncke"/>, <contact fullname="Nalini Elkins"/>, <contact fullname="Srihari       Raghavan"/>, <contact fullname="Ranganathan T S"/>, <contact fullname="Karthik Babu       Harichandra Babu"/>, <contact fullname="Akshaya       Nadahalli"/>, <contact fullname="LJ Wobker"/>, <contact fullname="Erik Nordmark"/>,
      <contact fullname="Vengada Prasad Govindan"/>, <contact fullname="Andrew       Yourtchenko"/>, <contact fullname="Aviv Kfir"/>, <contact fullname="Tianran Zhou"/>,
      <contact fullname="Zhenbin (Robin)"/>, and <contact fullname="Greg Mirsky"/> for the
      comments and advice.</t>
      <t indent="0" pn="section-appendix.a-2">This document leverages and builds on top of several concepts
      described in <xref target="I-D.kitamura-ipv6-record-route" format="default" sectionFormat="of" derivedContent="IPV6-RECORD-ROUTE"/>. The
      authors would like to acknowledge the work done by the author <contact fullname="Hiroshi Kitamura"/> and people involved in writing it.</t>
      <t indent="0" pn="section-appendix.a-3">The authors would like to gracefully acknowledge useful review and
      insightful comments received from <contact fullname="Joe Clarke"/>, <contact fullname="Al Morton"/>, <contact fullname="Tom Herbert"/>,
      <contact fullname="Carlos J. Bernardos"/>, <contact fullname="Haoyu Song"/>,
      <contact fullname="Mickey Spiegel"/>, <contact fullname="Roman Danyliw"/>, 
      <contact fullname="Benjamin Kaduk"/>, <contact fullname="Murray S. Kucherawy"/>,
      <contact fullname="Ian Swett"/>, <contact fullname="Martin Duke"/>, 
      <contact fullname="Francesca Palombini"/>, <contact fullname="Lars Eggert"/>,
      <contact fullname="Alvaro Retana"/>, <contact fullname="Erik Kline"/>,
      <contact fullname="Robert Wilton"/>, <contact fullname="Zaheduzzaman Sarker"/>,
      <contact fullname="Dan Romascanu"/>, and <contact fullname="Barak Gafni"/>.</t>
    </section>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-contributors">Contributors</name>
      <t indent="0" pn="section-appendix.b-1">This document was the collective effort of several authors. The text
	  and content were contributed by the editors and the coauthors listed 
	  below.</t>
      <contact fullname="Carlos Pignataro">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <street>7200-11 Kit Creek Road</street>
            <extaddr>Research Triangle Park</extaddr>
            <region>NC</region>
            <code>27709</code>
            <country>United States of America</country>
          </postal>
          <email>cpignata@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Mickey Spiegel">
        <organization showOnFrontPage="true">Barefoot Networks, an Intel company</organization>
        <address>
          <postal>
            <street>101 Innovation Drive</street>
            <city>San Jose</city>
            <region>CA</region>
            <code>95134-1941</code>
            <country>United States of America</country>
          </postal>
          <email>mickey.spiegel@intel.com</email>
        </address>
      </contact>
      <contact fullname="Barak Gafni">
        <organization showOnFrontPage="true">Nvidia</organization>
        <address>
          <postal>
            <street>350 Oakmead Parkway</street>
            <extaddr>Suite 100</extaddr>
            <city>Sunnyvale</city>
            <region>CA</region>
            <code>94085</code>
            <country>United States of America</country>
          </postal>
          <email>gbarak@nvidia.com</email>
        </address>
      </contact>
      <contact fullname="Jennifer Lemon">
        <organization showOnFrontPage="true">Broadcom</organization>
        <address>
          <postal>
            <street>270 Innovation Drive</street>
            <city>San Jose</city>
            <region>CA</region>
            <code>95134</code>
            <country>United States of America</country>
          </postal>
          <email>jennifer.lemon@broadcom.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>
          <postal>
            <country>United States of America</country>
          </postal>
          <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>
            <code>E14 5JP</code>
            <country>United Kingdom</country>
          </postal>
          <email>stephen.youell@jpmorgan.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, an Intel company</organization>
        <address>
          <postal>
            <street>101 Innovation Drive</street>
            <city>San Jose</city>
            <region>CA</region>
            <code>95134-1941</code>
            <country>United States of America</country>
          </postal>
          <email>remy.chang@intel.com</email>
        </address>
      </contact>
      <contact fullname="Daniel Bernier">
        <organization showOnFrontPage="true">Bell Canada</organization>
        <address>
          <postal>
            <country>Canada</country>
          </postal>
          <email>daniel.bernier@bell.ca</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Frank Brockners" initials="F." surname="Brockners" role="editor">
        <organization abbrev="Cisco" showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <street>Hansaallee 249</street>
            <extaddr>3rd Floor</extaddr>
            <city>Duesseldorf</city>
            <extaddr>Nordhein-Westfalen</extaddr>
            <code>40549</code>
            <country>Germany</country>
          </postal>
          <email>fbrockne@cisco.com</email>
        </address>
      </author>
      <author fullname="Shwetha Bhandari" initials="S." surname="Bhandari" role="editor">
        <organization abbrev="Thoughtspot" showOnFrontPage="true">Thoughtspot</organization>
        <address>
          <postal>
            <extaddr>3rd Floor</extaddr>
            <extaddr>Indiqube Orion</extaddr>
            <extaddr>Garden Layout</extaddr>
            <extaddr>HSR Layout</extaddr>
            <street>24th Main Rd</street>
            <city>Bangalore</city>
            <region>Karnataka</region>
            <code>560 102</code>
            <country>India</country>
          </postal>
          <email>shwetha.bhandari@thoughtspot.com</email>
        </address>
      </author>
      <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi" role="editor">
        <organization showOnFrontPage="true">Huawei</organization>
        <address>
          <postal>
            <street>8-2 Matam</street>
            <city>Haifa</city>
            <code>3190501</code>
            <country>Israel</country>
          </postal>
          <email>tal.mizrahi.phd@gmail.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
