<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml2rfc.tools.ietf.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 RFC6830 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6830.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 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 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 RFC2784 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2784.xml">
<!ENTITY RFC3232 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3232.xml">
<!ENTITY I-D.ietf-ippm-ioam-data SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ippm-ioam-data.xml">
<!ENTITY I-D.brockners-inband-oam-requirements SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.brockners-inband-oam-requirements.xml">
<!ENTITY I-D.brockners-inband-oam-transport SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.brockners-inband-oam-transport.xml">
<!ENTITY I-D.brockners-proof-of-transit SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.brockners-proof-of-transit.xml">
<!ENTITY I-D.penno-sfc-trace SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.penno-sfc-trace.xml">
<!ENTITY I-D.ietf-spring-segment-routing SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-spring-segment-routing.xml">
<!ENTITY I-D.previdi-isis-segment-routing-extensions SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/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/bibxml3/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/bibxml3/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/bibxml3/reference.I-D.brockners-lisp-sr.xml">
<!ENTITY I-D.hildebrand-spud-prototype SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.hildebrand-spud-prototype.xml">
<!ENTITY I-D.ietf-sfc-nsh SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-sfc-nsh.xml">
<!ENTITY I-D.ietf-6man-segment-routing-header SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-6man-segment-routing-header.xml">
<!ENTITY I-D.ietf-nvo3-geneve SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-nvo3-geneve.xml">
<!ENTITY I-D.lapukhov-dataplane-probe SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.lapukhov-dataplane-probe.xml">
<!ENTITY I-D.SPUD SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.hildebrand-spud-prototype.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://xml2rfc.tools.ietf.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="std" docName="draft-brockners-nvo3-ioam-geneve-00"
     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 Geneve encapsulation">Geneve encapsulation for
    In-situ OAM Data</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">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street>Cessna Business Park, Sarjapura Marathalli Outer Ring
          Road</street>

          <city>Bangalore, KARNATAKA 560 087</city>

          <country>India</country>
        </postal>

        <email>shwethab@cisco.com</email>
      </address>
    </author>

    <author fullname="Vengada Prasad Govindan" initials="V."
            surname="Govindan">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

      <address>
        <email>venggovi@cisco.com</email>
      </address>
    </author>

    <author fullname="Carlos Pignataro" initials="C." surname="Pignataro">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street>7200-11 Kit Creek Road</street>

          <city>Research Triangle Park</city>

          <region>NC</region>

          <code>27709</code>

          <country>United States</country>
        </postal>

        <email>cpignata@cisco.com</email>
      </address>
    </author>

    <author fullname="Hannes Gredler" initials="H." surname="Gredler">
      <organization>RtBrick Inc.</organization>

      <address>
        <email>hannes@rtbrick.com</email>
      </address>
    </author>

    <author fullname="John Leddy" initials="J." surname="Leddy">
      <organization abbrev="Comcast">Comcast</organization>

      <address>
        <email>John_Leddy@cable.comcast.com</email>
      </address>
    </author>

    <author fullname="Stephen Youell" initials="S." surname="Youell">
      <organization abbrev="JMPC">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>
    </author>

    <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi">
      <organization abbrev="">Marvell</organization>

      <address>
        <postal>
          <street>6 Hamada St.</street>

          <city>Yokneam</city>

          <code>20692</code>

          <country>Israel</country>
        </postal>

        <email>talmi@marvell.com</email>
      </address>
    </author>

    <author fullname="David Mozes" initials="D." surname="Mozes">
      <organization abbrev="">Mellanox Technologies Ltd.</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country/>
        </postal>

        <email>davidm@mellanox.com</email>
      </address>
    </author>

    <author fullname="Petr Lapukhov" initials="P." surname="Lapukhov">
      <organization abbrev="">Facebook</organization>

      <address>
        <postal>
          <street>1 Hacker Way</street>

          <city>Menlo Park, CA</city>

          <code>94025</code>

          <country>US</country>
        </postal>

        <email>petr@fb.com</email>
      </address>
    </author>

    <author fullname="Remy Chang" initials="R." surname="Chang">
      <organization abbrev="">Barefoot Networks</organization>

      <address>
        <postal>
          <street>2185 Park Boulevard</street>

          <city>Palo Alto, CA</city>

          <code>94306</code>

          <country>US</country>
        </postal>

        <email/>
      </address>
    </author>

    <date day="30" month="October" year="2017"/>

    <!-- 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>rtg</area>

    <!-- 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
      outlines how IOAM data fields are encapsulated in Geneve.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction" toc="default">
      <t>In-situ OAM (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 IOAM data fields are added to the data
      packets rather than is being sent within packets specifically dedicated
      to OAM. This document defines how IOAM data fields are transported as
      part of the Geneve <xref target="I-D.ietf-nvo3-geneve"/> encapsulation.
      The IOAM data fields are defined in <xref
      target="I-D.ietf-ippm-ioam-data"/>.</t>
    </section>

    <section anchor="Conventions" title="Conventions">
      <section title="Requirement Language">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
        document are to be interpreted as described in <xref
        target="RFC2119"/>.</t>
      </section>

      <section title="Abbreviations">
        <t>Abbreviations used in this document:</t>

        <t><list hangIndent="11" style="hanging">
            <t hangText="IOAM:">In-situ Operations, Administration, and
            Maintenance</t>

            <t hangText="MTU:">Maximum Transmit Unit</t>

            <t hangText="OAM:">Operations, Administration, and Maintenance</t>

            <t hangText="POT:">Proof of Transit</t>

            <t hangText="Geneve:">Generic Network Virtualization
            Encapsulation</t>
          </list></t>
      </section>
    </section>

    <section title="IOAM Data Field Encapsulation in Geneve">
      <t>For encapsulating IOAM data fields into Geneve <xref
      target="I-D.ietf-nvo3-geneve"/> the different IOAM data fields are
      included in the Geneve header using tunnel options. IOAM data fields use
      a tunnel option class which includes the different types of IOAM data,
      including trace data, proof-of-transit data, and edge-to-edge data. In
      an administrative domain where IOAM is used, insertion of the IOAM
      tunnel option(s) in Geneve is enabled at the Geneve tunnel endpoints
      which also serve as IOAM encapsulating/decapsulating nodes by means of
      configuration. The Geneve header is defined in <xref
      target="I-D.ietf-nvo3-geneve"/>. IOAM specific fields for Geneve are
      defined in this document.</t>

      <section title="IOAM Trace Data in Geneve">
        <t>IOAM tracing data represents data that is inserted at nodes that a
        packet traverses. To allow for optimal implementations in both
        software as well as hardware forwarders, two different ways to
        encapsulate IOAM data are defined: "Pre-allocated" and "incremental".
        See <xref target="I-D.ietf-ippm-ioam-data"/> for details on IOAM
        tracing and the pre-allocated and incremental IOAM trace options.</t>

        <t>The packet formats of the pre-allocated IOAM trace and incremental
        IOAM trace when encapsulated in Geneve are defined as below.</t>

        <figure align="center" anchor="PreAllocHeader"
                title="IOAM Pre-allocated    Trace Option Format as a Geneve Tunnel Option">
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Hdr
|        Virtual Network Identifier (VNI)       |    Reserved   |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|  Option Class = IOAM_Trace    |Type (prealloc)|R|R|R| Length  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IOAM
|         IOAM-Trace-Type       |NodeLen|  Flags  | Octets-left | Trace
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
|                                                               |  |
|                        node data list [0]                     | IOAM
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  D
|                                                               |  a
|                        node data list [1]                     |  t
|                                                               |  a
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                             ...                               ~  S
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  p
|                                                               |  a
|                        node data list [n-1]                   |  c
|                                                               |  e
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
|                        node data list [n]                     |  |
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<--+
|                                                               |
|                                                               |
|                     Payload + Padding (L2/L3/ESP/...)         |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Pre-allocated Trace Option Data MUST be 4-octet aligned.
]]></artwork>
        </figure>

        <figure align="center" anchor="Incremental"
                title="IOAM Incremental    Trace Option Format as a Geneve Tunnel Option">
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Hdr
|        Virtual Network Identifier (VNI)       |    Reserved   |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|  Option Class = IOAM_Trace    |  Type (incr.) |R|R|R| Length  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IOAM
|        IOAM-Trace-Type        |NodeLen|  Flags  | Max Length  | Trace
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
|                                                               |  |
|                        node data list [0]                     | IOAM
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  D
|                                                               |  a
|                        node data list [1]                     |  t
|                                                               |  a
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                             ...                               ~  S
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  p
|                                                               |  a
|                        node data list [n-1]                   |  c
|                                                               |  e
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
|                        node data list [n]                     |  |
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<--+
|                                                               |
|                                                               |
|                     Payload + Padding (L2/L3/ESP/...)         |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IOAM Incremental Trace Option Data MUST be 4-octet aligned.
]]></artwork>
        </figure>

        <t>The IOAM Trace header consists of 8 octets, as illustrated in <xref
        target="PreAllocHeader"/> and <xref target="Incremental"/>. The first
        4 octets are the Geneve Tunnel Option header <xref
        target="I-D.ietf-nvo3-geneve"/>. The next 4 octets are the trace
        option header; its format is defined in <xref
        target="I-D.ietf-ippm-ioam-data"/>, and is described here for the sake
        of clarity.</t>

        <figure align="center" anchor="GeneveTraceOpt"
                title="Geneve Tunnel    Option for IOAM">
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Option Class = IOAM_Trace    |      Type     |R|R|R| Length  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

        <t>The fields of the Geneve tunnel option are as follows: <list
            style="hanging">
            <t hangText="Option Class:">16-bit unsigned integer that
            determines the IOAM option class. The value is from the IANA
            registry setup for Geneve option classes as defined in <xref
            target="I-D.ietf-nvo3-geneve"/>.</t>

            <t hangText="Type:">8-bit unsigned integer defining IOAM header
            type. Two values are defined here: IOAM_TRACE_Preallocated and
            IOAM_Trace_Incremental.</t>

            <t hangText="R (3 bits):">Option control flags reserved for future
            use. MUST be zero on transmission and ignored on receipt.</t>

            <t hangText="Length:">5-bit unsigned integer. Length of the IOAM
            HDR in 4-octet units.</t>
          </list></t>

        <t>The fields of the trace option header <xref
        target="I-D.ietf-ippm-ioam-data"/> are as follows: <list
            style="hanging">
            <t hangText="IOAM-Trace-Type:">16-bit identifier of IOAM Trace
            Type as defined in <xref target="I-D.ietf-ippm-ioam-data"/>
            IOAM-Trace-Types.</t>

            <t hangText="Node Data Length:">4-bit unsigned integer as defined
            in <xref target="I-D.ietf-ippm-ioam-data"/>.</t>

            <t hangText="Flags:">5-bit field as defined in <xref
            target="I-D.ietf-ippm-ioam-data"/>.</t>

            <t hangText="Octets-left:">7-bit unsigned integer as defined in
            <xref target="I-D.ietf-ippm-ioam-data"/>.</t>

            <t hangText="Maximum-length:">7-bit unsigned integer as defined in
            <xref target="I-D.ietf-ippm-ioam-data"/>.</t>

            <t hangText="Node data List [n]:">Variable-length field as defined
            in <xref target="I-D.ietf-ippm-ioam-data"/>.</t>
          </list></t>
      </section>

      <section title="IOAM POT Data in Geneve">
        <t>IOAM proof of transit (POT, see also <xref
        target="I-D.brockners-proof-of-transit"/>) offers a means to verify
        that a packet has traversed a defined set of nodes. IOAM POT data
        fields are encapsulated in Geneve as follows:</t>

        <figure align="center" anchor="PotEncap"
                title="IOAM POT Header    Following using a Geneve Tunnel Option">
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Hdr
|        Virtual Network Identifier (VNI)       |    Reserved   |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|     Option Class = IOAM_POT   |     Type    |P|R|R|R| Length  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IOAM
|                           Random                              |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  P
|                        Random(contd.)                         |  O
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  T
|                         Cumulative                            |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                    Cumulative (contd.)                        |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+]]></artwork>
        </figure>

        <t>The first 4 octets of the IOAM POT are the Geneve tunnel option
        header (<xref target="GenevePotOpt"/>), which includes the following
        fields:</t>

        <t><list style="hanging">
            <t hangText="Option Class:">16-bit unsigned integer that
            determines the IOAM_POT option class.The value is from the IANA
            registry setup for Geneve option classes as defined in <xref
            target="I-D.ietf-nvo3-geneve"/>.</t>

            <t hangText="Type:">7-bit identifier of a particular POT variant
            that specifies the POT data that is to be included as defined in
            <xref target="I-D.ietf-ippm-ioam-data"/>.</t>

            <t hangText="Profile to use (P):">1-bit as defined in <xref
            target="I-D.ietf-ippm-ioam-data"/> IOAM POT Option.</t>

            <t hangText="R (3 bits):">Option control flags reserved for future
            use. MUST be zero on transmission and ignored on receipt.</t>

            <t hangText="Length:">5-bit unsigned integer. Length of the IOAM
            HDR in 4-octet units.</t>
          </list></t>

        <figure align="center" anchor="GenevePotOpt"
                title="Geneve Tunnel   Option for IOAM POT">
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Option Class = IOAM_POT   |     Type    |P|R|R|R| Length  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

        <t>The rest of the fields in the POT option <xref
        target="I-D.ietf-ippm-ioam-data"/> are as follows: <list
            style="hanging">
            <t hangText="Random:">64-bit Per-packet random number.</t>

            <t hangText="Cumulative:">64-bit Cumulative value that is updated
            by the Service Functions.</t>
          </list></t>
      </section>

      <section title="IOAM Edge-to-Edge Data in Geneve">
        <t>The IOAM edge-to-edge option is to carry data that is added by the
        IOAM encapsulating node and interpreted by the IOAM decapsulating
        node. IOAM specific fields to encapsulate IOAM Edge-to-Edge data
        fields are defined as follows:</t>

        <figure align="center" anchor="GeneveE2e"
                title="IOAM    Edge-to-Edge using a Geneve Tunnel Option">
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Hdr
|        Virtual Network Identifier (VNI)       |    Reserved   |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|      Option Class = IOAM_E2E  |    Type       |R|R|R| Length  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IOAM
|      E2E Option data field determined by IOAM-E2E-Type        |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+

]]></artwork>
        </figure>

        <t>The first 4 octets of the IOAM E2E option are the Geneve tunnel
        option header (<xref target="GenevePotOpt"/>), which includes the
        following fields:</t>

        <t><list style="hanging">
            <t hangText="Option Class">16-bit unsigned integer that determines
            the IOAM_E2E option class.The value is from the IANA registry
            setup for Geneve option classes as defined in <xref
            target="I-D.ietf-nvo3-geneve"/>.</t>

            <t hangText="Type:">8-bit identifier of a particular E2E variant
            that specifies the E2E data that is included as defined in <xref
            target="I-D.ietf-ippm-ioam-data"/>.</t>

            <t hangText="R (3 bits):">Option control flags reserved for future
            use. MUST be zero on transmission and ignored on receipt.</t>

            <t hangText="Length:">5-bit unsigned integer. Length of the IOAM
            HDR in 4-octet units.</t>
          </list></t>

        <figure align="center" anchor="GeneveE2eOpt"
                title="Geneve Tunnel   Option for IOAM E2E">
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Option Class = IOAM_E2E  |    Type       |R|R|R| Length  | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

        <t>The rest of the E2E option <xref target="I-D.ietf-ippm-ioam-data"/>
        consists of: <list style="hanging">
            <t hangText="E2E Option data field:">Variable length field as
            defined in <xref target="I-D.ietf-ippm-ioam-data"/> IOAM E2E
            Option.</t>
          </list></t>
      </section>
    </section>

    <section title="Discussion of the encapsulation approach">
      <t>This section is to support the working group discussion in selecting
      the most appropriate approach for encapsulating IOAM data fields in
      Geneve.</t>

      <t>An encapsulation of IOAM data fields in Geneve should be friendly to
      an implementation in both hardware as well as software forwarders and
      support a wide range of deployment cases, including large networks that
      desire to leverage multiple IOAM data fields at the same time.</t>

      <t><list style="empty">
          <t>Hardware and software friendly implementation: Hardware
          forwarders benefit from an encapsulation that minimizes iterative
          look-ups of fields within the packet: Any operation which looks up
          the value of a field within the packet, based on which another
          lookup is performed, consumes additional gates and time in an
          implementation - both of which are desired to be kept to a minimum.
          This means that flat TLV structures are to be preferred over nested
          TLV structures. IOAM data fields are grouped into three option
          categories: Trace, proof-of-transit, and edge-to-edge. Each of these
          three options defines a TLV structure. A hardware-friendly
          encapsulation approach avoids grouping these three option categories
          into yet another TLV structure, but would rather carry the options
          as a serial sequence.</t>

          <t>Total length of the IOAM data fields: The total length of IOAM
          data can grow quite large in case multiple different IOAM data
          fields are used and large path-lengths need to be considered. If for
          example an operator would consider using the IOAM trace option and
          capture node-id, app_data, egress/ingress interface-id, timestamp
          seconds, timestamps nanoseconds at every hop, then a total of 20
          octets would be added to the packet at every hop. In case this
          particular deployment would have a maximum path length of 15 hops in
          the IOAM domain, then a maximum of 300 octets of IOAM data were to
          be encapsulated in the packet.</t>
        </list></t>

      <t>Concerns with the current encapsulation approach:</t>

      <t><list style="empty">
          <t>Hardware support: Using Geneve tunnel options to encapsulate IOAM
          data fields leads to a nested TLV structure. Each IOAM data field
          option (trace, proof-of-transit, and edge-to-edge) represents a
          type, with the different IOAM data fields being TLVs within this the
          particular option type. Nested TLVs require iterative look-ups, a
          fact that creates potential challenges for implementations in
          hardware. It would be desirable to offer a way to encapsulate IOAM
          in a way that keeps TLV nesting to a minimum.</t>

          <t>Length: Geneve tunnel option length is a 5-bit field in the
          current specification <xref target="I-D.ietf-nvo3-geneve"/>
          resulting in a maximum option length of 128 (2^5 x 4) octets which
          constrains the use of IOAM to either small domains or a few IOAM
          data fields only. Support for large domains with a variety of IOAM
          data fields would be desirable.</t>
        </list></t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is requested to allocate a Geneve "option class" numbers for the
      following IOAM types:</t>

      <t><figure>
          <artwork><![CDATA[              +---------------+-------------+---------------+
              | Option Class  | Description | Reference     |
              +---------------+-------------+---------------+
              | x             | IOAM_Trace  | This document |
              | y             | IOAM_POT    | This document |
              | z             | IOAM_E2E    | This document |
              +---------------+-------------+---------------+

]]></artwork>
        </figure></t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The security considerations of Geneve are discussed in <xref
      target="I-D.ietf-nvo3-geneve"/>, and the security considerations of IOAM
      in general are discussed in <xref
      target="I-D.ietf-ippm-ioam-data"/>.</t>

      <t>IOAM is considered a "per domain" feature, where one or several
      operators decide on leveraging and configuring IOAM according to their
      needs. Still, operators need to properly secure the IOAM domain to avoid
      malicious configuration and use, which could include injecting malicious
      IOAM packets into a domain.</t>
    </section>

    <section title="Acknowledgements">
      <t>The authors would like to thank Eric Vyncke, Nalini Elkins, Srihari
      Raghavan, Ranganathan T S, Karthik Babu Harichandra Babu, Akshaya
      Nadahalli, Stefano Previdi, Hemant Singh, Erik Nordmark, LJ Wobker, and
      Andrew Yourtchenko for the comments and advice.</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;

      &I-D.brockners-inband-oam-requirements;

      &I-D.ietf-ippm-ioam-data;

      &I-D.ietf-nvo3-geneve;

      &RFC2784;

      &RFC3232;

      <reference anchor="ETYPES"
                 target="https://www.iana.org/assignments/ethernet-numbers/ethernet-numbers.xhtml">
        <front>
          <title>IANA Ethernet Numbers</title>

          <author/>

          <date/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      &RFC7665;

      &I-D.brockners-proof-of-transit;

      <reference anchor="FD.io" target="https://fd.io/">
        <front>
          <title>Fast Data Project: FD.io</title>

          <author/>

          <date/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
