<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC7665 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7665.xml">
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC7799 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7799.xml">
<!ENTITY RFC6830 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6830.xml">
<!ENTITY RFC7276 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7276.xml">
<!ENTITY RFC7112 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7112.xml">
<!ENTITY RFC6833 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6833.xml">
<!ENTITY RFC2460 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2460.xml">
<!ENTITY RFC791 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0791.xml">
<!ENTITY RFC6564 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6564.xml">
<!ENTITY RFC7820 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7820.xml">
<!ENTITY RFC7821 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7821.xml">
<!ENTITY RFC8126 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY RFC5905 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5905.xml">
<!ENTITY RFC7384 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7384.xml">
<!ENTITY RFC8915 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8915.xml">
<!ENTITY RFC5905 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5905.xml">
<!ENTITY RFC8039 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8039.xml">
<!ENTITY RFC8300 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8300.xml">
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY I-D.ietf-sfc-proof-of-transit SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-sfc-proof-of-transit.xml">
<!ENTITY I-D.ietf-ippm-ioam-data SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-data.xml">
<!ENTITY I-D.ietf-spring-segment-routing SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-spring-segment-routing.xml">
<!ENTITY I-D.previdi-isis-segment-routing-extensions SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.previdi-isis-segment-routing-extensions.xml">
<!ENTITY I-D.ietf-ippm-6man-pdm-option SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-6man-pdm-option.xml">
<!ENTITY I-D.gont-v6ops-ipv6-ehs-in-real-world SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.gont-v6ops-ipv6-ehs-in-real-world.xml">
<!ENTITY I-D.brockners-lisp-sr SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.brockners-lisp-sr.xml">
<!ENTITY I-D.ietf-ippm-ioam-ipv6-options SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-ipv6-options.xml">
<!ENTITY I-D.ietf-6man-segment-routing-header SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-6man-segment-routing-header.xml">
<!ENTITY I-D.ietf-nvo3-vxlan-gpe SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-nvo3-vxlan-gpe.xml">
<!ENTITY I-D.ietf-nvo3-geneve SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-nvo3-geneve.xml">
<!ENTITY I-D.lapukhov-dataplane-probe SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.lapukhov-dataplane-probe.xml">
<!ENTITY I-D.ietf-ntp-packet-timestamps SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ntp-packet-timestamps.xml">
<!ENTITY I-D.spiegel-ippm-ioam-rawexport SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.spiegel-ippm-ioam-rawexport.xml">
<!ENTITY I-D.ietf-ippm-ioam-flags SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-flags.xml">
<!ENTITY I-D.zhou-ippm-ioam-yang SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.zhou-ippm-ioam-yang.xml">
<!ENTITY I-D.mizrahi-ippm-ioam-profile SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.mizrahi-ippm-ioam-profile.xml">
<!ENTITY I-D.ietf-ippm-ioam-direct-export SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-direct-export.xml">
<!ENTITY I-D.ioametal-ippm-6man-ioam-ipv6-deployment SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ioametal-ippm-6man-ioam-ipv6-deployment.xml">
<!ENTITY I-D.weis-ippm-ioam-eth SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.weis-ippm-ioam-eth.xml">
<!ENTITY I-D.ietf-sfc-ioam-nsh SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-sfc-ioam-nsh.xml">
<!ENTITY I-D.brockners-ippm-ioam-geneve SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.brockners-ippm-ioam-geneve.xml">
<!ENTITY I-D.gandhi-spring-ioam-sr-mpls SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.gandhi-spring-ioam-sr-mpls.xml">
<!ENTITY I-D.ali-spring-ioam-srv6 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ali-spring-ioam-srv6.xml">
<!ENTITY I-D.brockners-ippm-ioam-vxlan-gpe SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.brockners-ippm-ioam-vxlan-gpe.xml">
<!ENTITY AFI SYSTEM "http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="bcp" docName="draft-brockners-opsawg-ioam-deployment-03"
     ipr="trust200902">
  <!-- ipr="full3978"-->

  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="In-situ OAM Deployment">In-situ OAM Deployment</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Frank Brockners" initials="F." surname="Brockners">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street>Hansaallee 249, 3rd Floor</street>

          <!-- Reorder these if your country does things differently -->

          <city>DUESSELDORF</city>

          <region>NORDRHEIN-WESTFALEN</region>

          <code>40549</code>

          <country>Germany</country>
        </postal>

        <email>fbrockne@cisco.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Shwetha Bhandari" initials="S." surname="Bhandari" role="editor">
        <organization abbrev="Thoughtspot">Thoughtspot</organization>
        <address>
         <postal>
          <street>3rd Floor, Indiqube Orion, 24th Main Rd, Garden Layout, HSR Layout</street>
          <city>Bangalore, KARNATAKA 560 102</city>
          <country>India</country>
         </postal>
         <email>shwetha.bhandari@thoughtspot.com</email>
        </address>
    </author>

    <author fullname="Daniel Bernier" initials="D." surname="Bernier">
      <organization abbrev="">Bell Canada</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>Canada</country>
        </postal>

        <email>daniel.bernier@bell.ca</email>
      </address>
    </author>

    <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi" role="editor">
      <organization abbrev="">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 day="24" month="June" year="2021"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>ops</area>

    <workgroup>opsawg</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>inband</keyword>

    <keyword>Telemetry, Tracing,</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>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
      provides a framework for IOAM deployment and provides best current
      practices.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction" toc="default">
      <t>"In-situ" Operations, Administration, and Maintenance (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 is being sent
      within packets specifically dedicated to OAM. IOAM is to complement
      mechanisms such as Ping, Traceroute, or other active probing mechanisms.
      In terms of "active" or "passive" OAM, "in-situ" OAM 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"/> IOAM could be portrayed as Hybrid Type
      1. 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 pre-defined path, SLA verification for the
      live 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>
    </section>

    <section anchor="Conventions" title="Conventions">

      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 
      "OPTIONAL" in this document are to be interpreted as described in BCP 14 
      <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> 
      when, and only when, they appear in all capitals, as shown here.</t>

      <t>Abbreviations used in this document:</t>

      <t><list hangIndent="11" style="hanging">
          <t hangText="E2E">Edge to Edge</t>

          <t hangText="Geneve:">Generic Network Virtualization Encapsulation
          <xref target="I-D.ietf-nvo3-geneve"/></t>

          <t hangText="GRE">Generic Routing Encapsulation</t>

          <t hangText="IOAM:">In-situ Operations, Administration, and
          Maintenance</t>

          <t hangText="MTU:">Maximum Transmit Unit</t>

          <t hangText="NSH:">Network Service Header <xref
          target="RFC8300"/></t>

          <t hangText="OAM:">Operations, Administration, and Maintenance</t>

          <t hangText="POT:">Proof of Transit</t>

          <t hangText="SFC:">Service Function Chain</t>

          <t hangText="SID:">Segment Identifier</t>

          <t hangText="SR:">Segment Routing</t>

          <t hangText="VXLAN-GPE:">Virtual eXtensible Local Area Network,
          Generic Protocol Extension <xref
          target="I-D.ietf-nvo3-vxlan-gpe"/></t>
        </list></t>
    </section>

    <section title="IOAM Deployment: Domains And Nodes">
      <t>IOAM is a network domain specific feature, with "network domain"
      being a set of network devices or entities within a single
      administration. IOAM is not targeted for a deployment on the global
      Internet. The part of the network which employs IOAM is referred to as
      the "IOAM-Domain". For example, an IOAM-domain can include an enterprise
      campus using physical connections between devices or an overlay network
      using virtual connections / tunnels for connectivity between said
      devices. An IOAM-domain is defined by its perimeter or edge. The
      operator of an IOAM-domain is expected to put provisions in place to
      ensure that packets which contain IOAM data fields do not leak beyond
      the edge of an IOAM domain, e.g. using for example packet filtering
      methods. The operator should 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), path MTU (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.</t>

      <t>An IOAM-Domain consists of "IOAM encapsulating nodes", "IOAM
      decapsulating nodes" and "IOAM transit nodes". The role of a node (i.e.
      encapsulating, transit, decapsulating) is defined within an
      IOAM-Namespace (see below). A node can have different roles in different
      IOAM-Namespaces.</t>

      <t>An "IOAM encapsulating node" incorporates one or more
      IOAM-Option-Types 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>An "IOAM transit node" updates 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 will update at most one of
      these Option-Types. A transit node does not add new IOAM-Option-Types to
      a packet, and does not change the IOAM-Data-Fields of an IOAM
      Edge-to-Edge Option-Type.</t>

      <t>An "IOAM decapsulating node" removes IOAM-Option-Type(s) from
      packets.</t>

      <t>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 which 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. An IOAM
      decapsulating node situated at the edge of an IOAM domain removes all
      IOAM-Option-Types and associated encapsulation headers for all
      IOAM-Namespaces from the packet.</t>

      <t>IOAM-Namespaces allow for a namespace-specific definition and
      interpretation of IOAM-Data-Fields. An interface-id 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"/> for a discussion of IOAM-Namespaces.</t>

      <figure align="center" anchor="IOAM-roles" title="Roles of IOAM nodes">
        <artwork align="left"><![CDATA[
         Export of      Export of      Export of     Export of
         IOAM data      IOAM data      IOAM data     IOAM data
         (optional)     (optional)     (optional)     (optional)
             ^              ^              ^              ^
             |              |              |              |
             |              |              |              |
User     +---+----+     +---+----+     +---+----+     +---+----+
packets  |Encapsu-|     | Transit|     | Transit|     |Decapsu-|
-------->|lating  |====>| Node   |====>| Node   |====>|lating  |-->
         |Node    |     | A      |     | B      |     |Node    |
         +--------+     +--------+     +--------+     +--------+

]]></artwork>
      </figure>

      <t>IOAM nodes which 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 which support IOAM. In that case,
      only the set of firewall nodes would be IOAM transit nodes rather than
      all nodes.</t>
    </section>

    <section title="Types of IOAM">
      <t>IOAM supports different modes of operation, which are differentiated
      by the type of IOAM data fields being carried in the packet, the data
      being collected, the type of nodes which collect or update data as well
      as whether and how nodes export IOAM information. <list style="symbols">
          <t>Per-hop tracing: OAM information about each IOAM node a packet
          traverses is collected and stored within the user data packet as the
          packet progresses through the IOAM domain. Potential uses of IOAM
          per-hop tracing include:<list style="symbols">
              <t>Optimization: Understand the different paths different
              packets traverse between a source and a sink in a network that
              uses load balancing such as Equal Cost Load Balancing (ECMP).
              This information could be used to tune the algorithm for ECMP
              for optimized network resource usage.</t>

              <t>Operations/Troubleshooting: Understand which path a
              particular packet or set of packets take as well as what amount
              of jitter and delay different nodes in the path contribute to
              the overall end-to-end delay and jitter.</t>
            </list></t>

          <t>Proof-of-transit: Information that a verifier node can use to
          verify whether a packet has traversed all nodes that is supposed to
          traverse is stored within the user data packet. Proof-of-transit
          could for example be used to verify that a packet indeed passes
          through all services of a service function chain (e.g. verify
          whether a packet indeed traversed the set of firewalls that it is
          expected to traverse), or whether a packet indeed took the expected
          path.</t>

          <t>Edge-to-edge: OAM information which is specific to the edges of
          an IOAM domain is collected and stored within the user data packet.
          Edge-to-Edge OAM could be used to gather operational information
          about a particular network domain, such as the delay and jitter
          incurred by that network domain or the traffic matrix of the network
          domain.</t>

          <t>Direct export: OAM information about each IOAM node a packet
          traverses is collected and immediately exported to a collector.
          Direct export could be used in situations where per-hop tracing
          information is desired, but gathering the information within the
          packet - as with per-hop tracing - is not feasible. Rather than
          automatically correlating the per-hop tracing information, as done
          with per-hop tracing, direct export requires a collector to
          correlate the information from the individual nodes. In addition,
          all nodes enabled for direct export need to be capable to export the
          IOAM information to the collector.</t>
        </list></t>

      <section anchor="IOAM-tracing" title="Per-hop Tracing IOAM">
        <t>"IOAM tracing data" is expected to be collected at every IOAM
        transit node that a packet traverses to ensure visibility into the
        entire path a packet takes within an IOAM-Domain. I.e., in a typical
        deployment all nodes in an IOAM-Domain would participate in IOAM and
        thus be IOAM transit nodes, IOAM encapsulating or IOAM decapsulating
        nodes. If not all nodes within a domain are IOAM capable, IOAM tracing
        information (i.e., node data, see below) will only be collected on
        those nodes which are IOAM capable. Nodes which are not IOAM capable
        will forward the packet without any changes to the IOAM-Data-Fields.
        The maximum number of hops and the minimum path MTU of the IOAM domain
        is assumed to be known.</t>

        <t>IOAM offers two different trace Option-Types, the "incremental"
        Option-Type as well as the "pre-allocated" Option-Type. For a
        discussion which of the two option types is the most suitable for an
        implementation and/or deployment, see <xref
        target="IOAM-trace-options"/>.</t>

        <t>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-Type(s) and processes and/or exports the
        associated data. All IOAM-Data-Fields are defined in the context of an
        IOAM-Namespace.</t>

        <t>IOAM tracing can collect the following types of information:</t>

        <t><list style="symbols">
            <t>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. </t>

            <t>Identification of the interface that a packet was received on,
            i.e. ingress interface.</t>

            <t>Identification of the interface that a packet was sent out on,
            i.e. egress interface.</t>

            <t>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 in-situ OAM domain follow the same definition.</t>

            <t>Generic data: Format-free information where syntax and semantic
            of the information is defined by the operator in a specific
            deployment. For a specific IOAM-Namespace, all IOAM nodes should
            interpret the generic data the same way. Examples for generic IOAM
            data include geo-location 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.</t>

            <t>Information to detect whether IOAM trace data was added at
            every hop or whether certain hops in the domain weren't IOAM
            transit nodes.</t>

            <t>Data that relates to how the packet traversed a node (transit
            delay, buffer occupancy in case the packet was buffered, queue
            depth in case the packet was queued)</t>
          </list>The Option-Types of incremental tracing and pre-allocated
        tracing are defined in <xref target="I-D.ietf-ippm-ioam-data"/>.</t>
      </section>

      <section anchor="IOAM-proof-of-transit" title="Proof of Transit IOAM">
        <t>IOAM Proof of Transit Option-Type is to support path or service
        function chain <xref target="RFC7665"/> verification use cases.
        Proof-of-transit uses methods like nested hashing or nested encryption
        of the IOAM data or mechanisms such as Shamir's Secret Sharing Schema
        (SSSS).</t>

        <t>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". For details see <xref target="I-D.ietf-ippm-ioam-data"/>.</t>
      </section>

      <section anchor="IOAM-edge-to-edge" title="Edge to Edge IOAM">
        <t>The IOAM Edge-to-Edge Option-Type is to carry data that is added by
        the IOAM encapsulating node and interpreted by IOAM decapsulating
        node. The IOAM transit nodes may process the data but must not modify
        it.</t>

        <t>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". For details see <xref
        target="I-D.ietf-ippm-ioam-data"/>.</t>
      </section>

      <section title="Direct Export IOAM">
        <t>Direct Export is an IOAM mode of operation within which IOAM data
        to be directly exported to a collector rather than being collected
        within the data packets. The IOAM Direct Export Option-Type consist of
        a fixed size "IOAM direct export option header". Direct Export for
        IOAM is defined in <xref
        target="I-D.ietf-ippm-ioam-direct-export"/>.</t>
      </section>
    </section>

    <section anchor="ioam-encap" title="IOAM Encapsulations">
      <t>IOAM data fields and associated data types for in-situ OAM are
      defined in <xref target="I-D.ietf-ippm-ioam-data"/>. The in-situ OAM
      data field can be transported by a variety of transport protocols,
      including NSH, Segment Routing, Geneve, IPv6, etc.</t>

      <section title="IPv6">
        <t>IOAM encapsulation for IPv6 is defined in <xref
        target="I-D.ietf-ippm-ioam-ipv6-options"/>. IOAM deployment
        considerations for IPv6 networks are found in <xref
        target="I-D.ioametal-ippm-6man-ioam-ipv6-deployment"/>.</t>
      </section>

      <section title="NSH">
        <t>IOAM encapsulation for NSH is defined in <xref
        target="I-D.ietf-sfc-ioam-nsh"/>.</t>
      </section>

      <section title="GRE">
        <t>IOAM encapsulation for GRE is outlined as part of the "EtherType
        Protocol Identification of In-situ OAM Data" in <xref
        target="I-D.weis-ippm-ioam-eth"/>, though no example protocol header
        stacks are provided in the document. When used with GRE, the
        IOAM-Option-Types (the below diagram uses "IOAM" as shorthand for
        IOAM-Option-Types) are sequenced in behind the GRE header that follows
        the "outer" IP header. <xref target="GRE-example"/> shows two example
        protocol header stacks that use GRE along with IOAM.</t>

        <figure align="center" anchor="GRE-example"
                title="GRE with IOAM examples">
          <artwork align="left"><![CDATA[
        Example 1                     Example 2

   |      ...       |            |       ...      |  
   +----------------+            +----------------+
   | TCP/UDP header |            |    IP, ...     |  
   +----------------+            +----------------+
   |    IP header   |            |   Eth. header  |
   +----------------+            +----------------+
   |      IOAM      |            |      IOAM      |
   +----------------+            +----------------+
   |    GRE header  |            |    GRE header  |
   +----------------+            +----------------+
   |    IP header   |            |    IP header   |
   +----------------+            +----------------+
   |     Layer 2    |            |     Layer 2    |
   +----------------+            +----------------+
   |     Layer 1    |            |     Layer 1    |      
   +----------------+            +----------------+

]]></artwork>
        </figure>
      </section>

      <section title="Geneve">
        <t>IOAM encapsulation for Geneve is defined in <xref
        target="I-D.brockners-ippm-ioam-geneve"/>.</t>
      </section>

      <section title="Segment Routing">
        <t>IOAM encapsulation for Segment Routing is defined in <xref
        target="I-D.gandhi-spring-ioam-sr-mpls"/>.</t>
      </section>

      <section title="Segment Routing for IPv6">
        <t>IOAM encapsulation for Segment Routing over IPv6 is defined in
        <xref target="I-D.ali-spring-ioam-srv6"/>.</t>
      </section>

      <section title="VXLAN-GPE">
        <t>IOAM encapsulation for VXLAN-GPE is defined in <xref
        target="I-D.brockners-ippm-ioam-vxlan-gpe"/>.</t>
      </section>
    </section>

    <section anchor="export" title="IOAM Data Export">
      <t>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., IPFIX.</t>

      <t>Raw data export of IOAM data using IPFIX is discussed in <xref
      target="I-D.spiegel-ippm-ioam-rawexport"/>. "Raw export of IOAM data"
      refers to a mode of operation where a node exports the IOAM data as it
      is received in the packet. The exporting node neither interprets,
      aggregates nor reformats the IOAM data before it is exported. Raw export
      of IOAM data is to support an operational model where the processing and
      interpretation of IOAM data is decoupled from the operation of
      encapsulating/updating/decapsulating IOAM data, which is also referred
      to as IOAM data-plane operation. The figure below shows the separation
      of concerns for IOAM export: Exporting IOAM data is performed by the
      "IOAM node" which performs IOAM data-plane operation, whereas the
      interpretation of IOAM data is performed by one or several IOAM data
      processing systems. The separation of concerns is to off-load
      interpretation, aggregation and formatting of IOAM data from the node
      which performs data-plane operations. In other words, a node which is
      focused on data-plane operations, i.e. forwarding of packets and
      handling IOAM data will not be tasked to also interpret the IOAM data,
      but can leave this task to another system or a set of systems. For
      scalability reasons, a single IOAM node could choose to export IOAM data
      to several IOAM data processing systems. Similarly, there several
      monitoring systems or analytics systems can be used to further process
      the data received from the IOAM preprocessing systems. <xref
      target="export-arch"/> shows an overview of IOAM export, including IOAM
      data processing systems and monitoring/analytics systems.</t>

      <figure align="center" anchor="export-arch"
              title="IOAM framework with data export">
        <artwork align="left"><![CDATA[
                              +--------------+
                             +-------------+ |
                             | Monitoring/ | |
                             | Analytics   | |
                             | system(s)   |-+
                             +-------------+
                                    ^
                                    |  Processed/interpreted/
                                    |  aggregated IOAM data
                                    |
                              +--------------+
                             +-------------+ |
                             | IOAM data   | |
                             | processing  | |
                             | system(s)   |-+
                             +-------------+
                                    ^
                                    |  Raw export of
                                    |  IOAM data
                                    |
             +--------------+-------+------+--------------+
             |              |              |              |
             |              |              |              |
User     +---+----+     +---+----+     +---+----+     +---+----+
packets  |Encapsu-|     | Transit|     | Transit|     |Decapsu-|
-------->|lating  |====>| Node   |====>| Node   |====>|lating  |-->
         |Node    |     | A      |     | B      |     |Node    |
         +--------+     +--------+     +--------+     +--------+

           ]]></artwork>
      </figure>
    </section>

    <section anchor="IOAM-framework" title="IOAM Deployment Considerations">
      <t>This section discusses several aspects of an IOAM deployment,
      including IOAM Namespaces, IOAM Layering, traffic-sets that IOAM is
      applied to and IOAM loopback mode.</t>

      <section anchor="ioam_namespaces" title="IOAM Namespaces">
        <t>IOAM-Namespaces add further context to IOAM-Option-Types and
        associated IOAM-Data-Fields. IOAM-Namespaces support several different
        uses:</t>

        <t><list style="symbols">
            <t>IOAM-Namespaces can be used by an operator to distinguish
            different operational domains. Devices at domain edges can filter
            on Namespace-IDs to provide for proper IOAM-Domain isolation.</t>

            <t>IOAM-Namespaces provide additional context for IOAM-Data-Fields
            and thus ensure that IOAM-Data-Fields are unique and can be
            interpreted properly by management stations or network
            controllers. While, for example, the node identifier field does
            not need to be unique in a deployment (e.g. an operator may wish
            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 combination of node_id and
            Namespace-ID should always be unique. 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) which do not have a unit
            associated are to be interpreted within the context of a
            IOAM-Namespace.</t>

            <t>IOAM-Namespaces can be used to identify different sets of
            devices (e.g., different types of devices) in a deployment: If an
            operator desires 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.<list style="symbols">
                <t>Assigning different IOAM Namespace-IDs to different sets of
                nodes or network partitions and using the Namespace-ID as a
                selector at the IOAM encapsulating node, a full trace for a
                flow could be collected and constructed via partial traces in
                different packets of the same flow. Example: An operator could
                choose to group the devices of a domain into two
                IOAM-Namespaces, in a way that at average, only every second
                hop would be recorded by any device. To retrieve a full view
                of the deployment, the captured IOAM-Data-Fields of the two
                IOAM-Namespaces need to be correlated.</t>

                <t>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.
                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 a 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.</t>
              </list></t>
          </list></t>
      </section>

      <section title="IOAM Layering">
        <t>If several encapsulation protocols (e.g., in case of tunneling) are
        stacked on top of each other, IOAM-Data-Fields could be present in
        different protocol fields at different layers. Layering allows
        operators to instrument the protocol layer they want to measure. 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.
        Or in other words: Even though the term "layering" often implies some
        form of hierarchy and relationship, in IOAM, layers are independent
        from each other and don't assume any relationship among them. The
        different layers could, but do not have to share the same IOAM
        encapsulation mechanisms. Similarly, the sematics of the
        IOAM-Data-Fields, can, do not have to be associated to across
        different layers. For example, a node which inserts node-id
        information into two different layers could use "node-id=10" for one
        layer and "node-id=1000" for the second layer.</t>

        <t><xref target="IOAM-layering"/> shows an example of IOAM layering.
        The figure shows a Geneve tunnel carried over IPv6 which starts at
        node A and ends at node D. IOAM information is encapsulated in IPv6 as
        well as in Geneve. At the IPv6 layer, node A is IOAM encapsulating
        node (into IPv6), node D is the IOAM decapsulating node and node B and
        node C are IOAM transit nodes. At the Geneve layer, node A is IOAM
        encapsulating node (into Geneve) and node D is IOAM decapsulating node
        (from Geneve). The use of IOAM at both layers as shown in the example
        here could be used to reveal which nodes of an underlay (here the IPv6
        network) are traversed by tunneled packet in an overlay (here the
        Geneve network) - which assumes that the IOAM information encapsulated
        by nodes A and D into Geneve and IPv6 is associated to each other.</t>

        <figure align="center" anchor="IOAM-layering"
                title="IOAM layering example">
          <artwork align="left"><![CDATA[
         +---+----+                                   +---+----+
User     |Geneve  |                                   |Geneve  |
packets  |Encapsu-|                                   |Decapsu-|
-------->|lating  |==================================>|lating  |-->
         |  Node  |                                   |  Node  |
         |   A    |                                   |   D    |
         +--------+                                   +--------+
             ^                                            ^
             |                                            |
             v                                            v
         +--------+     +--------+     +--------+     +--------+
         |IPv6    |     | IPv6   |     | IPv6   |     |IPv6    |
         |Encapsu-|     | Transit|     | Transit|     |Decapsu-|
         |lating  |====>|  Node  |====>|  Node  |====>|lating  |
         |  Node  |     |        |     |        |     |  Node  |
         |   A    |     |   B    |     |   C    |     |   D    |
         +--------+     +--------+     +--------+     +--------+

]]></artwork>
        </figure>
      </section>

      <section anchor="IOAM-trace-options" title="IOAM Trace Option Types">
        <t>IOAM offers two different IOAM Option-Types for tracing:
        "Incremental" Trace-Option-Type and "Pre-allocated" Trace-Option-Type.
        "Incremental" refers to a mode of operation where the packet is
        expanded at every IOAM node that addes IOAM-Data-Fields.
        "Pre-Allocated" describes a mode of operation where the IOAM
        encapsulating node allocates room for all IOAM-Data-Fields in the
        entire IOAM domain. More specifically:</t>

        <t><list style="hanging">
            <t hangText="Pre-allocated Trace-Option:">This trace option is
            defined as a container of node data fields 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).</t>

            <t hangText="Incremental Trace-Option:">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.</t>
          </list>A deployment can choose to configure and support one or both
        of the IOAM Trace-Option-Types. The operator decides by means of
        configuration which Trace-Option-Type(s) will be used for a particular
        domain. Deployments can mix devices which include either the
        Incremental Trace-Option-Type or the Pre-allocated Trace-Option-Type,
        e.g. in case different types of packet forwarders and associated
        different types of IOAM implementations exist in a deployment. As a
        result, both Option-Types can be present in a packet. IOAM
        decapsulating nodes remove both types of Trace-Option-Types from the
        packet.</t>

        <t>The two different Option-Types cater to different packet forwarding
        infrastructures and are to allow an optimized implementation of IOAM
        tracing:<list style="hanging">
            <t hangText="Pre-allocated Trace-Option:">For some implementations
            of packet forwarders it is efficient to allocate the space for the
            maximum number of nodes that IOAM Trace Data-Fields should be
            collected from and insert/update information in the packet at
            flexible locations, based on a pointer retrieved from a field in
            the packet. The IOAM encapsulating node allocates an array of the
            size of the maximum number of nodes that IOAM Trace Data-Fields
            should be collected from. IOAM transit nodes index into the array
            to populate the data during transit. Software forwarders often
            fall into this class of packet forwarder implementations. The
            maximum number of nodes that IOAM information could be collected
            from is configured by the operator on the IOAM encapsulating node.
            The operator has to ensure that the packet with the pre-allocated
            array that carries the IOAM Data-Fields does not exceed the MTU of
            any of the links in the IOAM domain.</t>

            <t hangText="Incremental Trace-Option:">Looking up a pointer
            contained in the packet and inserting/updating information at a
            flexible location in the packet as a result of the pointer lookup
            is costly for some forwarding infrastructures. Hardware-based
            packet forwarding infrastructures often fall into this category.
            Consequently, hardware-based packet forwarders could choose to
            support the incremental IOAM-Trace-Option-Type. The incremental
            IOAM-Trace-Option-Type eliminates the need for the IOAM transit
            nodes to read the full array in the Trace-Option-Type and allows
            packets to grow to the size of the MTU of the IOAM domain. IOAM
            transit nodes will expand the packet and insert the
            IOAM-Data-Fields as long as there is space available in the
            packet, i.e. as long as the size of the packet stays within the
            bounds of the MTU of any of the links in the IOAM domain. There is
            no need for the operator to configure the IOAM encapsulation node
            with the maximum number of nodes that IOAM information could be
            collected from. The operator has to ensure that the minimum MTU of
            any of the links in the IOAM domain is known to all IOAM transit
            nodes.</t>
          </list></t>
      </section>

      <section title="Traffic-sets That IOAM Is Applied To">
        <t>IOAM can be deployed on all or only on subsets of the live user
        traffic,e.g. per interface, based on an access control list or flow
        specification defining a specific set of traffic, etc.</t>
      </section>

      <section title="IOAM Loopback Mode">
        <t>IOAM Loopback is used to trigger each transit device along the path
        of a packet to send a copy of the data packet back to the source.
        Loopback allows an IOAM encapsulating node to trace the path to a
        given destination, and to receive per-hop data about both the forward
        and the return path. Loopback is enabled by the encapsulating node
        setting the loopback flag. Looped-back packets use the source address
        of the original packet as destination address and the address of the
        node which performs the loopback operation as source address. Nodes
        which loop back a packet clear the loopback flag before sending the
        copy back towards the source. Loopack applies to IOAM deployments
        where the encapsulating node is either a host or the start of a
        tunnel: For details on IOAM loopback, please refer to <xref
        target="I-D.ietf-ippm-ioam-flags"/>.</t>
      </section>

      <section title="IOAM Active Mode">
        <t>The IOAM active mode flag indicates that a packet is an active OAM
        packet as opposed to regular user data traffic. Active mode is
        expected to be used for active measurement using IOAM. Example
        use-cases include:<list style="symbols">
            <t>Endpoint detailed active measurement: Synthetic probe packets
            are sent between the source and destination, traversing the IOAM
            domain. These probe packets include a Trace Option-Type (i.e.,
            either incremental or pre-allocated). Since the probe packets are
            sent between the endpoints, these packets are treated as data
            packets by the IOAM domain, and do not require special treatment
            at the IOAM layer.The encapsulating node can choose to set the
            Active flag, providing an explicit indication that these probe
            packets are meant for telemetry collection.</t>

            <t>IOAM active measurement using probe packets: Probe packets are
            generated and transmitted by the IOAM encapsulating node, and are
            expected to be terminated by the decapsulating node. Probe packets
            include a Trace Option-Type (i.e., either incremental or
            pre-allocated) which has its Active flag set, indicating that the
            decapsulating node must terminate them.</t>

            <t>IOAM active measurement using replicated data packets: Probe
            packets are created by the encapsulating node by selecting some or
            all of the en route data packets and replicating them. A selected
            data packet that is replicated, and its (possibly truncated) copy
            is forwarded with one or more IOAM option, while the original
            packet is forwarded normally, without IOAM options. To the extent
            possible, the original data packet and its replica are forwarded
            through the same path. The replica includes a Trace Option-Type
            that has its Active flag set, indicating that the decapsulating
            node should terminate it.</t>
          </list></t>

        <t>For details on IOAM active mode, please refer to <xref
        target="I-D.ietf-ippm-ioam-flags"/>.</t>
      </section>

      <section anchor="ioam-brown-field"
               title="Brown Field Deployments: IOAM Unaware Nodes">
        <t>A network can consist of a mix of IOAM aware and IOAM unaware
        nodes. The encapsulation of IOAM-Data-Fields into different protocols
        (see also <xref target="ioam-encap"/>) are defined such that data
        packets that include IOAM-Data-Fields do not get dropped by IOAM
        unaware nodes. For example, packets which contain the
        IOAM-Trace-Option-Types in IPv6 Hop by Hop extension headers are
        defined with bits to indicate "00 - skip over this option and continue
        processing the header". This will ensure that when a node that is IOAM
        unaware receives a packet with IOAM-Data-Fields included, does not
        drop the packet.</t>

        <t>Deployments which leverage the IOAM-Trace-Option-Type(s) could
        benefit from the ability to detect the presence of IOAM unaware nodes,
        i.e. nodes which forward the packet but do not update/add
        IOAM-Data-Fields in IOAM-Trace-Option-Type(s). The node data that is
        defined as part of the IOAM-Trace-Option-Type(s) includes a Hop_Lim
        field associated to the node identifier to detect missed nodes, i.e.
        "holes" in the trace. Monitoring/Analytics system(s) could utilize
        this information to account for the presence of IOAM unaware nodes in
        the network.</t>
      </section>
    </section>

    <section title="IOAM Manageability">
      <t>The YANG model for configuring IOAM in network nodes which support
      IOAM is defined in <xref target="I-D.zhou-ippm-ioam-yang"/>.</t>

      <t>A deployment can leverage IOAM profiles is to limit the scope of IOAM
      features, allowing simpler implementation, verification, and
      interoperability testing in the context of specific use cases that do
      not require the full functionality of IOAM. An IOAM profile defines a
      use case or a set of use cases for IOAM, and an associated set of rules
      that restrict the scope and features of the IOAM specification, thereby
      limiting it to a subset of the full functionality. IOAM profiles are
      defined in <xref target="I-D.mizrahi-ippm-ioam-profile"/>.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document does not request any IANA actions.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>As discussed in <xref target="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.</t>

      <t>The Proof of Transit Option-Type (Section <xref
      target="IOAM-proof-of-transit"/>) is used for verifying the path of data
      packets. The security considerations of POT are further discussed in
      <xref target="I-D.ietf-sfc-proof-of-transit"/>.</t>

      <t>Security considerations related to the use of IOAM flags, in
      particular the loopback flag are found in <xref
      target="I-D.ietf-ippm-ioam-flags"/>.</t>

      <t>IOAM data can be subject to eavesdropping. Although the  
      confidentiality of the user data is not at risk in this context, 
      the IOAM data elements can be used for network reconnaissance,
      allowing attackers to collect information about network paths,
      performance, queue states, buffer occupancy and other information. 
      Recon is an improbable security threat in an IOAM deployment that
      is within a confined physical domain. However, in deployments that 
      are not confined to a single LAN, but span 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 eavesdropping.
      Another possible mitigation approach is to use the "direct exporting" 
      mode <xref target="I-D.ietf-ippm-ioam-direct-export"/>.
      In this case the IOAM related trace information would
      not be available in the customer data packets, but would trigger 
	  exporting of (secured) packet-related IOAM information at every node. 
	  IOAM data export and securing IOAM data export is outside the scope of 
	  this document.</t>

      <t>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 or modify an IOAM header in en route 
	  packets in order to consume the resources of
      network devices that take part in IOAM or collectors that 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. Such DoS attacks can be
      mitigated by deploying IOAM in confined administrative domains, and
      by defining performance limits on IOAM encapsulation and IOAM exporting.
      By limiting the rate and/or percentage of packets that 
      are subject to IOAM encpasulation and the rate of exported traffic, it
      is possible to cofine the impact of such attacks.</t>

      <t>Since IOAM options may include timestamps, if network devices use
      synchronization protocols then any attack on the time protocol <xref
      target="RFC7384"/> can compromise the integrity of the timestamp-related
      data fields. Synchronization attacks can be mitigated by combining a
      secured time distribution scheme, e.g., <xref target="RFC8915"/>, and by 
	  using redundant clock sources <xref target="RFC5905"/> and/or redundant 
	  network paths for the time distribution protocol 
	  <xref target="RFC8039"/>.</t>

      <t>At the management plane, attacks may be implemented by misconfiguring
      or by maliciously configuring IOAM-enabled nodes in a way that enables
      other attacks. Thus, IOAM configuration should be secured in a way that
      authenticates authorized users and verifies the integrity of
      configuration procedures.</t>

      <t>Notably, IOAM is expected to be deployed in specific network domains,
      thus confining the potential attack vectors to within the network
      domain. Indeed, in order to limit the scope of threats to within the
      current network 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. Note that the Immediate Export mode
      (reference to be added in a future revision) can mitigate the potential
      threat of IOAM data leaking through data packets.</t>
    </section>

    <section title="Acknowledgements">
      <t>The authors would like to thank Tal Mizrahi, Eric Vyncke, Nalini
      Elkins, Srihari Raghavan, Ranganathan T S, Barak Gafni, Karthik Babu
      Harichandra Babu, Akshaya Nadahalli, LJ Wobker, Erik Nordmark, Vengada
      Prasad Govindan, Andrew Yourtchenko, Aviv Kfir, Tianran Zhou, Zhenbin
      (Robin), Joe Clarke, Al Morton, Tom Herbet, Haoyu song, and Mickey
      Spiegel for the comments and advice on IOAM.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
      &RFC2119;

      &RFC8174; 

      <!--  &RFC5905; -->

      <!--  

      <reference anchor="POSIX"
                 target="https://standards.ieee.org/findstds/standard/1003.1-2008.html">
        <front>
          <title>IEEE Std 1003.1-2008 (Revision of IEEE Std 1003.1-2004) -
          IEEE Standard for Information Technology - Portable Operating System
          Interface (POSIX(R))</title>

          <author>
            <organization>Institute of Electrical and Electronics
            Engineers</organization>
          </author>

          <date year="2008"/>
        </front>

        <seriesInfo name="" value="IEEE Std 1003.1-2008"/>
      </reference>

      <reference anchor="IEEE1588v2"
                 target="http://standards.ieee.org/findstds/standard/1588-2008.html">
        <front>
          <title>IEEE Std 1588-2008 - IEEE Standard for a Precision Clock
          Synchronization Protocol for Networked Measurement and Control
          Systems</title>

          <author>
            <organization>Institute of Electrical and Electronics
            Engineers</organization>
          </author>

          <date year="2008"/>
        </front>

        <seriesInfo name="" value="IEEE Std 1588-2008"/>
      </reference>

-->
    </references>

    <references title="Informative References">
      &RFC7665;

      &RFC7799;

      &RFC7384;

      &RFC7276;

      &RFC8300;
	  
	  &RFC8915;
	  
	  &RFC5905;

	  &RFC8039;

      &I-D.ietf-nvo3-vxlan-gpe;

      &I-D.ietf-nvo3-geneve;

      &I-D.ietf-ippm-ioam-data;

      &I-D.ietf-ippm-ioam-flags;

      &I-D.ietf-ippm-ioam-direct-export;

      &I-D.zhou-ippm-ioam-yang;

      &I-D.mizrahi-ippm-ioam-profile;

      &I-D.spiegel-ippm-ioam-rawexport;

      &I-D.ietf-sfc-proof-of-transit;

      &I-D.ietf-ippm-ioam-ipv6-options;

      &I-D.ioametal-ippm-6man-ioam-ipv6-deployment;

      &I-D.weis-ippm-ioam-eth;

      &I-D.ietf-sfc-ioam-nsh;

      &I-D.brockners-ippm-ioam-geneve;

      &I-D.gandhi-spring-ioam-sr-mpls;

      &I-D.ali-spring-ioam-srv6;

      &I-D.brockners-ippm-ioam-vxlan-gpe;
    </references>
  </back>
</rfc>
