<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" docName="draft-ietf-nvo3-encap-12" number="9638" consensus="true" obsoletes="" tocInclude="true" ipr="trust200902" updates="" submissionType="IETF" xml:lang="en" symRefs="true" sortRefs="true" prepTime="2024-09-25T11:29:04" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-nvo3-encap-12" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9638" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="NVO3 Encapsulation Considerations">Network Virtualization over Layer 3 (NVO3) Encapsulation Considerations</title>
    <seriesInfo name="RFC" value="9638" stream="IETF"/>
    <author initials="S." surname="Boutros" fullname="Sami Boutros" role="editor">
      <organization showOnFrontPage="true">Ciena Corporation</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>sboutros@ciena.com</email>
      </address>
    </author>
    <author fullname="Donald E. Eastlake 3rd" initials="D." surname="Eastlake 3rd" role="editor">
      <organization showOnFrontPage="true">Independent</organization>
      <address>
        <postal>
          <street>2386 Panoramic Circle</street>
          <city>Apopka</city>
          <region>FL</region>
          <code>32703</code>
          <country>United States of America</country>
        </postal>
        <phone>+1-508-333-2270</phone>
        <email>d3e3e3@gmail.com</email>
      </address>
    </author>
    <date month="09" year="2024"/>
    <area>RTG</area>
    <workgroup>nvo3</workgroup>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">The IETF Network Virtualization Overlays (NVO3) Working Group
  developed considerations for a common encapsulation that addresses
  various network virtualization overlay technical concerns.
  This document provides a record, for the benefit of the IETF community, 
  of the considerations arrived at by the NVO3 Working Group starting from
  the output of the NVO3 encapsulation Design Team. These considerations
  may be helpful with future deliberations by working groups over the choice of
  encapsulation formats.</t>
      <t indent="0" pn="section-abstract-2">There are implications of having different encapsulations in real
  environments consisting of both software and hardware
  implementations and within and spanning multiple data centers.  For
  example, Operations, Administration, and Maintenance (OAM) functions such as path MTU discovery become challenging
  with multiple encapsulations along the data path.</t>
      <t indent="0" pn="section-abstract-3">Based on these considerations, the NVO3 Working Group determined that
  Generic Network Virtualization Encapsulation (Geneve) with a few modifications is the common encapsulation. This document provides more details, particularly in Section 7.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.  
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by the
            Internet Engineering Steering Group (IESG).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see Section 2 of RFC 7841. 
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9638" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2024 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-design-team-and-working-gro">Design Team and Working Group Process</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-abbreviations-acronyms-and-">Abbreviations, Acronyms, and Definitions</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-encapsulation-issues-and-ba">Encapsulation Issues and Background</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-geneve">Geneve</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-generic-udp-encapsulation-g">Generic UDP Encapsulation (GUE)</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-generic-protocol-extension-">Generic Protocol Extension (GPE) for VXLAN</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-common-encapsulation-consid">Common Encapsulation Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-current-encapsulations">Current Encapsulations</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-useful-extensions-use-cases">Useful Extensions Use Cases</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.2.2">
                  <li pn="section-toc.1-1.6.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.2.2.1.1"><xref derivedContent="6.2.1" format="counter" sectionFormat="of" target="section-6.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-telemetry-extensions">Telemetry Extensions</xref></t>
                  </li>
                  <li pn="section-toc.1-1.6.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.6.2.2.2.2.1"><xref derivedContent="6.2.2" format="counter" sectionFormat="of" target="section-6.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-integrity-extensio">Security/Integrity Extensions</xref></t>
                  </li>
                  <li pn="section-toc.1-1.6.2.2.2.3">
                    <t indent="0" pn="section-toc.1-1.6.2.2.2.3.1"><xref derivedContent="6.2.3" format="counter" sectionFormat="of" target="section-6.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-group-based-policy">Group-Based Policy</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-hardware-considerations">Hardware Considerations</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.4">
                <t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" format="counter" sectionFormat="of" target="section-6.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extension-size">Extension Size</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.5">
                <t indent="0" pn="section-toc.1-1.6.2.5.1"><xref derivedContent="6.5" format="counter" sectionFormat="of" target="section-6.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ordering-of-extension-heade">Ordering of Extension Headers</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.6">
                <t indent="0" pn="section-toc.1-1.6.2.6.1"><xref derivedContent="6.6" format="counter" sectionFormat="of" target="section-6.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tlv-versus-bit-fields">TLV versus Bit Fields</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.7">
                <t indent="0" pn="section-toc.1-1.6.2.7.1"><xref derivedContent="6.7" format="counter" sectionFormat="of" target="section-6.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-control-plane-consideration">Control Plane Considerations</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.8">
                <t indent="0" pn="section-toc.1-1.6.2.8.1"><xref derivedContent="6.8" format="counter" sectionFormat="of" target="section-6.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-split-nve">Split NVE</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.9">
                <t indent="0" pn="section-toc.1-1.6.2.9.1"><xref derivedContent="6.9" format="counter" sectionFormat="of" target="section-6.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-larger-vni-considerations">Larger VNI Considerations</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-recommendations">Recommendations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.10.2">
              <li pn="section-toc.1-1.10.2.1">
                <t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.2">
                <t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-encapsulation-comparison">Encapsulation Comparison</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2">
              <li pn="section-toc.1-1.11.2.1">
                <t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent="A.1" format="counter" sectionFormat="of" target="section-appendix.a.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-overview">Overview</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.2">
                <t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent="A.2" format="counter" sectionFormat="of" target="section-appendix.a.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extensibility">Extensibility</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2.2.2">
                  <li pn="section-toc.1-1.11.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.11.2.2.2.1.1"><xref derivedContent="A.2.1" format="counter" sectionFormat="of" target="section-appendix.a.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-innate-extensibility-suppor">Innate Extensibility Support</xref></t>
                  </li>
                  <li pn="section-toc.1-1.11.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.11.2.2.2.2.1"><xref derivedContent="A.2.2" format="counter" sectionFormat="of" target="section-appendix.a.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extension-parsing">Extension Parsing</xref></t>
                  </li>
                  <li pn="section-toc.1-1.11.2.2.2.3">
                    <t indent="0" pn="section-toc.1-1.11.2.2.2.3.1"><xref derivedContent="A.2.3" format="counter" sectionFormat="of" target="section-appendix.a.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-critical-extensions">Critical Extensions</xref></t>
                  </li>
                  <li pn="section-toc.1-1.11.2.2.2.4">
                    <t indent="0" pn="section-toc.1-1.11.2.2.2.4.1"><xref derivedContent="A.2.4" format="counter" sectionFormat="of" target="section-appendix.a.2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-maximal-header-length">Maximal Header Length</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.11.2.3">
                <t indent="0" pn="section-toc.1-1.11.2.3.1"><xref derivedContent="A.3" format="counter" sectionFormat="of" target="section-appendix.a.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-encapsulation-header">Encapsulation Header</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2.3.2">
                  <li pn="section-toc.1-1.11.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.11.2.3.2.1.1"><xref derivedContent="A.3.1" format="counter" sectionFormat="of" target="section-appendix.a.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-virtual-network-identifier-">Virtual Network Identifier (VNI)</xref></t>
                  </li>
                  <li pn="section-toc.1-1.11.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.11.2.3.2.2.1"><xref derivedContent="A.3.2" format="counter" sectionFormat="of" target="section-appendix.a.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-next-protocol">Next Protocol</xref></t>
                  </li>
                  <li pn="section-toc.1-1.11.2.3.2.3">
                    <t indent="0" pn="section-toc.1-1.11.2.3.2.3.1"><xref derivedContent="A.3.3" format="counter" sectionFormat="of" target="section-appendix.a.3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-other-header-fields">Other Header Fields</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.11.2.4">
                <t indent="0" pn="section-toc.1-1.11.2.4.1"><xref derivedContent="A.4" format="counter" sectionFormat="of" target="section-appendix.a.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-comparison-summary">Comparison Summary</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.14">
            <t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The NVO3 Working Group is chartered to gather requirements and
develop solutions for network virtualization data planes based on
encapsulation of virtual network traffic over an IP-based underlay
data plane.  Requirements include due consideration for OAM and
security.  Based on these requirements, the WG was to select, extend,
and/or develop one or more data plane encapsulation formats.</t>
      <t indent="0" pn="section-1-2">This led to WG Internet-Drafts and an RFC describing three encapsulations as
follows:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1-3">
        <li pn="section-1-3.1">"Geneve: Generic Network Virtualization Encapsulation" <xref target="RFC8926" format="default" sectionFormat="of" derivedContent="RFC8926"/></li>
        <li pn="section-1-3.2">"Generic UDP Encapsulation" <xref target="I-D.ietf-intarea-gue" format="default" sectionFormat="of" derivedContent="GUE"/></li>
        <li pn="section-1-3.3">"Generic Protocol Extension for VXLAN (VXLAN-GPE)" <xref target="I-D.ietf-nvo3-vxlan-gpe" format="default" sectionFormat="of" derivedContent="VXLAN-GPE"/></li>
      </ul>
      <t indent="0" pn="section-1-4">Discussion on the list and in face-to-face meetings identified a
number of technical problems with each of these encapsulations.
Furthermore, there was a clear consensus at the 96th IETF meeting in
Berlin that the working group should progress only one data plane encapsulation, to maximize interoperability. In order to overcome a
deadlock on the encapsulation decision, the WG consensus was to form a
Design Team <xref target="RFC2418" format="default" sectionFormat="of" derivedContent="RFC2418"/> to resolve this issue and provide
initial considerations.</t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-design-team-and-working-gro">Design Team and Working Group Process</name>
      <t indent="0" pn="section-2-1">The Design Team was to select one of the proposed encapsulations and
enhance it to address the technical concerns.  The goals were simple evolution of
deployed networks as well as applicability to all locations in the NVO3
architecture. The Design Team was to specifically select a design that allows for future extensibility but is not burdensome on hardware implementations. The selected design also needed to operate well with the Internet Control Message Protocol (ICMP) and
in Equal-Cost Multipath (ECMP) environments.  If further extensibility is
required, then it should be done in such a manner that it does not require the
consent of an entity outside of the IETF.</t>
      <t indent="0" pn="section-2-2">The output of the Design Team was then processed through the
  working group, resulting in a working group consensus for this
  document.</t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-3-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
    "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be
    interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
      </t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-abbreviations-acronyms-and-">Abbreviations, Acronyms, and Definitions</name>
      <t indent="0" pn="section-4-1">The following abbreviations and acronyms are used in this
 document:</t>
      <dl indent="3" newline="false" spacing="normal" pn="section-4-2">
        <dt pn="section-4-2.1">ACL:</dt>
        <dd pn="section-4-2.2">Access Control List</dd>
        <dt pn="section-4-2.3">ECMP:</dt>
        <dd pn="section-4-2.4">Equal-Cost Multipath</dd>
        <dt pn="section-4-2.5">EVPN:</dt>
        <dd pn="section-4-2.6">Ethernet VPN <xref target="RFC8365" format="default" sectionFormat="of" derivedContent="RFC8365"/></dd>
        <dt pn="section-4-2.7">Geneve:</dt>
        <dd pn="section-4-2.8">Generic Network Virtualization Encapsulation <xref target="RFC8926" format="default" sectionFormat="of" derivedContent="RFC8926"/></dd>
        <dt pn="section-4-2.9">GPE:</dt>
        <dd pn="section-4-2.10">Generic Protocol Extension</dd>
        <dt pn="section-4-2.11">GUE:</dt>
        <dd pn="section-4-2.12">Generic UDP Encapsulation <xref target="I-D.ietf-intarea-gue" format="default" sectionFormat="of" derivedContent="GUE"/></dd>
        <dt pn="section-4-2.13">HMAC:</dt>
        <dd pn="section-4-2.14">Hash-Based Message Authentication Code <xref target="RFC2104" format="default" sectionFormat="of" derivedContent="RFC2104"/></dd>
        <dt pn="section-4-2.15">IEEE:</dt>
        <dd pn="section-4-2.16">Institute for Electrical and Electronic Engineers (<eref brackets="angle" target="https://www.ieee.org/"/>)</dd>
        <dt pn="section-4-2.17">NIC:</dt>
        <dd pn="section-4-2.18">Network Interface Card (refers to network interface
   hardware that is not necessarily a discrete "card")</dd>
        <dt pn="section-4-2.19">NSH:</dt>
        <dd pn="section-4-2.20">Network Service Header <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/></dd>
        <dt pn="section-4-2.21">NVA:</dt>
        <dd pn="section-4-2.22">Network Virtualization Authority</dd>
        <dt pn="section-4-2.23">NVE:</dt>
        <dd pn="section-4-2.24">Network Virtual Edge (refers to an NVE device)</dd>
        <dt pn="section-4-2.25">NVO3:</dt>
        <dd pn="section-4-2.26">Network Virtualization over Layer 3</dd>
        <dt pn="section-4-2.27">OAM:</dt>
        <dd pn="section-4-2.28">Operations, Administration, and Maintenance <xref target="RFC6291" format="default" sectionFormat="of" derivedContent="RFC6291"/></dd>
        <dt pn="section-4-2.29">PWE3:</dt>
        <dd pn="section-4-2.30">Pseudowire Emulation Edge-to-Edge</dd>
        <dt pn="section-4-2.31">TCAM:</dt>
        <dd pn="section-4-2.32">Ternary Content-Addressable Memory</dd>
        <dt pn="section-4-2.33">TLV:</dt>
        <dd pn="section-4-2.34">Type-Length-Value</dd>
        <dt pn="section-4-2.35">Transit device:</dt>
        <dd pn="section-4-2.36">Refers to underlay network devices between NVEs.</dd>
        <dt pn="section-4-2.37">UUID:</dt>
        <dd pn="section-4-2.38">Universally Unique Identifier</dd>
        <dt pn="section-4-2.39">VNI:</dt>
        <dd pn="section-4-2.40">Virtual Network Identifier</dd>
        <dt pn="section-4-2.41">VXLAN:</dt>
        <dd pn="section-4-2.42">Virtual eXtensible Local Area Network <xref target="RFC7348" format="default" sectionFormat="of" derivedContent="RFC7348"/></dd>
      </dl>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-encapsulation-issues-and-ba">Encapsulation Issues and Background</name>
      <t indent="0" pn="section-5-1">The following subsections describe issues with current
  encapsulations as discussed by the NVO3 WG. Numerous extensions and
  options have been designed for GUE and Geneve that may help resolve
  some of these issues, but these have not yet been validated by the WG.</t>
      <t indent="0" pn="section-5-2">Also included are diagrams and information on the candidate
  encapsulations. These are mostly copied from other documents. Since
  each protocol is assumed to be sent over UDP, an initial UDP header
  is shown that would be preceded by an IPv4 or IPv6 header.</t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-5.1">
        <name slugifiedName="name-geneve">Geneve</name>
        <t indent="0" pn="section-5.1-1">The Geneve packet format, taken from <xref target="RFC8926" format="default" sectionFormat="of" derivedContent="RFC8926"/>, is shown in
  <xref target="GeneveHeader" format="default" sectionFormat="of" derivedContent="Figure 1"/> below.</t>
        <figure anchor="GeneveHeader" align="left" suppress-title="false" pn="figure-1">
          <name slugifiedName="name-geneve-header">Geneve Header</name>
          <artwork type="ascii-art" align="center" pn="section-5.1-2.1">
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

Outer UDP Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |    Dest Port = 6081 Geneve    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          UDP Length           |        UDP Checksum           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Geneve Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Virtual Network Identifier (VNI)       |    Reserved   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                    Variable-Length Options                    ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <t indent="0" pn="section-5.1-3">The type of payload being carried is indicated by an Ethertype
  <xref target="RFC9542" format="default" sectionFormat="of" derivedContent="RFC9542"/> in the Protocol Type field in the Geneve
  header; Ethernet itself is represented by Ethertype 0x6558. See
  <xref target="RFC8926" format="default" sectionFormat="of" derivedContent="RFC8926"/> for details concerning UDP header
  fields. The O bit indicates an OAM packet. The Geneve C bit is the
  "Critical" bit, which means that the options must be processed or the
  packet discarded.</t>
        <t indent="0" pn="section-5.1-4">Issues with Geneve <xref target="RFC8926" format="default" sectionFormat="of" derivedContent="RFC8926"/> are as follows:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-5.1-5">
          <li pn="section-5.1-5.1">Geneve can't be implemented cost-effectively in all use cases because
    the variable-length header and order of the TLVs make it costly (in
    terms of number of gates) to implement in hardware.</li>
          <li pn="section-5.1-5.2">The header doesn't fit into the largest commonly available parse
    buffer (256 bytes in a NIC). Thus, doubling the buffer size can't be
    justified unless it is mandatory for hardware to process additional option
    fields.</li>
        </ul>
        <t indent="0" pn="section-5.1-6">The selection of Geneve despite these issues may be the result of the
  Geneve design effort, assuming that the Geneve header would typically
  be delivered to a server and parsed in software.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-5.2">
        <name slugifiedName="name-generic-udp-encapsulation-g">Generic UDP Encapsulation (GUE)</name>
        <figure anchor="GUEHeader" align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-gue-header">GUE Header</name>
          <artwork type="ascii-art" align="center" pn="section-5.2-1.1">
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

UDP Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Source Port            |     Dest Port = 6080 GUE      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        UDP Length             |          UDP Checksum         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

GUE Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0 |C|   Hlen  |  Proto/ctype  |             Flags             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                  Extensions Fields (optional)                 ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <t indent="0" pn="section-5.2-2">The type of payload being carried is indicated by an IANA protocol number in the Proto/ctype field. The GUE C bit (Control bit) indicates a
control packet.</t>
        <t indent="0" pn="section-5.2-3">Issues with GUE <xref target="I-D.ietf-intarea-gue" format="default" sectionFormat="of" derivedContent="GUE"/> are as
follows:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-5.2-4">
          <li pn="section-5.2-4.1">There were a significant number of objections to GUE related to
  the complexity of its implementation in hardware, similar to those noted
  for Geneve above, such as the variable length and
  possible high maximum length of the header.</li>
        </ul>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-5.3">
        <name slugifiedName="name-generic-protocol-extension-">Generic Protocol Extension (GPE) for VXLAN</name>
        <figure anchor="GPEHeader" align="left" suppress-title="false" pn="figure-3">
          <name slugifiedName="name-gpe-header">GPE Header</name>
          <artwork type="ascii-art" align="center" pn="section-5.3-1.1">
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

Outer UDP Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Source Port         |     Dest Port = 4790 GPE      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           UDP Length          |           UDP Checksum        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

VXLAN-GPE Header
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |R|R|Ver|I|P|B|O|       Reserved                | Next Protocol |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Virtual Network Identifier (VNI) |   Reserved    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <t indent="0" pn="section-5.3-2">The type of payload being carried is indicated by the Next Protocol
field using a registry specific to VXLAN-GPE. The I bit indicates that
the VNI is valid. The P bit indicates that the Next Protocol field is
valid. The B bit indicates that the packet is an ingress replicated
Broadcast, Unknown Unicast, or Multicast packet. The O bit indicates
an OAM packet.</t>
        <t indent="0" pn="section-5.3-3">Issues with VXLAN-GPE <xref target="I-D.ietf-nvo3-vxlan-gpe" format="default" sectionFormat="of" derivedContent="VXLAN-GPE"/> are as
follows:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-5.3-4">
          <li pn="section-5.3-4.1">GPE is not day one backwards compatible with VXLAN <xref target="RFC7348" format="default" sectionFormat="of" derivedContent="RFC7348"/>.  Although the frame format is similar, it uses a
  different UDP port, so it would require changes to existing
  implementations even if the rest of the GPE frame were the
  same.</li>
          <li pn="section-5.3-4.2">GPE is insufficiently extensible. It adds a Next Protocol field
  and some flag bits to the VXLAN header but is not otherwise
  extensible.</li>
          <li pn="section-5.3-4.3">As discussed in <xref target="SecExt" format="default" sectionFormat="of" derivedContent="Section 6.2.2"/>, security (e.g., of the VNI) has
  not been addressed by GPE.  Although a shim header could be added for
  security and to support other extensions, this has not been defined
  yet. More study would be needed to understand the implication of such a shim
  on offloading in NICs.</li>
        </ul>
      </section>
    </section>
    <section anchor="CommonEncapsulationConsiderations" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-common-encapsulation-consid">Common Encapsulation Considerations</name>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.1">
        <name slugifiedName="name-current-encapsulations">Current Encapsulations</name>
        <t indent="0" pn="section-6.1-1"><xref target="EncapsulationComparison" format="default" sectionFormat="of" derivedContent="Appendix A"/> includes a detailed comparison between the three
proposed encapsulations.  The comparison indicates several common
properties but also three major differences among the
encapsulations:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.1-2">
          <li pn="section-6.1-2.1">Extensibility: Geneve and GUE were defined with built-in
  extensibility, while VXLAN-GPE is not inherently extensible.  Note
  that any of the three encapsulations can be extended using the
  Network Service Header (NSH) <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/>.</li>
          <li pn="section-6.1-2.2">Extension method: Geneve is extensible using Type-Length-Value
  (TLV) fields, while GUE uses a small set of possible extensions and
  a set of flags that indicate which extensions are present.</li>
          <li pn="section-6.1-2.3">Length field: Geneve and GUE include a Length field, indicating
  the length of the encapsulation header, while VXLAN-GPE does not
  include such a field. Thus, it may be harder to skip the encapsulation
  header with VXLAN-GPE</li>
        </ul>
      </section>
      <section anchor="ExtensionsUseCases" numbered="true" removeInRFC="false" toc="include" pn="section-6.2">
        <name slugifiedName="name-useful-extensions-use-cases">Useful Extensions Use Cases</name>
        <t indent="0" pn="section-6.2-1">Extensions that are not vendor-specific, such as TLVs, <bcp14>MUST</bcp14> follow the
standardization process.  The following use cases for extensions show
that there is a strong requirement to support variable-length
extensions with possible different subtypes.</t>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-6.2.1">
          <name slugifiedName="name-telemetry-extensions">Telemetry Extensions</name>
          <t indent="0" pn="section-6.2.1-1">In several scenarios, it is beneficial to make information available to the
operator about the path a packet took through the network or through a network
device as well as information about associated telemetry.</t>
          <t indent="0" pn="section-6.2.1-2">This includes not only tasks like debugging, troubleshooting, and
network planning and optimization but also policy or service level
agreement compliance checks.</t>
          <t indent="0" pn="section-6.2.1-3">Packet scheduling algorithms, especially for balancing traffic
across equal-cost paths or links, often leverage information contained
within the packet, such as protocol number, IP address, or Message
Authentication Code (MAC) address.  Thus, probe packets would need to be either sent between the
exact same endpoints with the exact same parameters or artificially constructed as "fake" packets and
inserted along the path.  Both approaches are often not feasible from
an operational perspective because access to the end system is not
feasible or the diversity of parameters and associated probe packets
to be created is simply too large.  An extension providing an in-band
telemetry mechanism <xref target="RFC9197" format="default" sectionFormat="of" derivedContent="RFC9197"/> is an alternative in
those cases.</t>
        </section>
        <section anchor="SecExt" numbered="true" removeInRFC="false" toc="include" pn="section-6.2.2">
          <name slugifiedName="name-security-integrity-extensio">Security/Integrity Extensions</name>
          <t indent="0" pn="section-6.2.2-1">Since the currently proposed NVO3 encapsulations do not protect
their headers, a single bit corruption in the VNI field could deliver
a packet to the wrong tenant.  Extension headers are needed to use any
sophisticated security.</t>
          <t indent="0" pn="section-6.2.2-2">The possibility of VNI spoofing with an NVO3 protocol is
exacerbated by using UDP.  Systems typically have no restrictions on
applications being able to send to any UDP port, so an unprivileged
application can trivially spoof VXLAN <xref target="RFC7348" format="default" sectionFormat="of" derivedContent="RFC7348"/> packets,
using arbitrary VNIs, for instance.</t>
          <t indent="0" pn="section-6.2.2-3">One can envision support of an HMAC-like Message Authentication
Code (MAC) <xref target="RFC2104" format="default" sectionFormat="of" derivedContent="RFC2104"/> in an NVO3 extension to
authenticate the header and the outer IP addresses, thereby preventing
attackers from injecting packets with spoofed VNIs.</t>
          <t indent="0" pn="section-6.2.2-4">Another aspect of security is payload security.  Essentially, this
makes packets that look like the following:</t>
          <artwork align="left" pn="section-6.2.2-5">
  IP|UDP|NVO3 Encap|DTLS/IPsec-ESP Extension|payload.
</artwork>
          <t indent="0" pn="section-6.2.2-6">This is desirable because:</t>
          <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.2.2-7">
            <li pn="section-6.2.2-7.1">we still have the UDP header for ECMP,</li>
            <li pn="section-6.2.2-7.2">the NVO3 header is in plain text so it can be read by network elements, and</li>
            <li pn="section-6.2.2-7.3">different security or other payload transforms can be supported on
a single UDP port (we don't need a separate UDP port for DTLS/IPsec; see <xref target="RFC9147" format="default" sectionFormat="of" derivedContent="RFC9147"/> and <xref target="RFC6071" format="default" sectionFormat="of" derivedContent="RFC6071"/>, respectively).</li>
          </ul>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-6.2.3">
          <name slugifiedName="name-group-based-policy">Group-Based Policy</name>
          <t indent="0" pn="section-6.2.3-1">Another use case would be to carry the Group-Based Policy (GBP)
source group information within a NVO3 header extension in a similar
manner as has been implemented for VXLAN <xref target="I-D.smith-vxlan-group-policy" format="default" sectionFormat="of" derivedContent="VXLAN-GROUP"/>.
This allows various forms of policy such as access control and QoS to
be applied between abstract groups rather than coupled to specific
endpoint addresses.</t>
        </section>
      </section>
      <section anchor="HardwareConsiderations" numbered="true" removeInRFC="false" toc="include" pn="section-6.3">
        <name slugifiedName="name-hardware-considerations">Hardware Considerations</name>
        <t indent="0" pn="section-6.3-1">Hardware restrictions should be taken into consideration along with
future hardware enhancements that may provide more flexible metadata (MD)
processing.  However, the set of options that need to and will be
implemented in hardware will be a subset of what is implemented in
software. This is because software NVEs are likely to grow features, and hence
option support, at a more rapid rate.</t>
        <t indent="0" pn="section-6.3-2">It is hard to predict which options will be implemented in which
piece of hardware and when.  That depends on whether the hardware will
be in the form of:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.3-3">
          <li pn="section-6.3-3.1">a NIC providing increasing offload capabilities to software
  NVEs, or</li>
          <li pn="section-6.3-3.2">a switch chip being used as an NVE gateway towards
  non-NVO3 parts of the network, or even</li>
          <li pn="section-6.3-3.3">a transit device that participates in the NVO3
  data plane, e.g., for OAM purposes.</li>
        </ul>
        <t indent="0" pn="section-6.3-4">A result of this is that it doesn't look useful to prescribe some
order to the options so that the ones that are likely to be implemented
in hardware come first. We can't decide such an order when we define
the options; however, a control plane can enforce such an order for
some hardware implementations.</t>
        <t indent="0" pn="section-6.3-5">We do know that hardware initially needs to be able to efficiently
skip over the NVO3 header to find the inner payload.  That is needed
both for NICs implementing various TCP offload mechanisms and for
transit devices and NVEs applying policy or ACLs to the inner
payload.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.4">
        <name slugifiedName="name-extension-size">Extension Size</name>
        <t indent="0" pn="section-6.4-1">Extension header length has a significant impact on hardware and
software implementations.  A maximum total header length that is too
small will unnecessarily constrain software flexibility.  A maximum
total header length that is too large will place a nontrivial cost on
hardware implementations.  Thus, the DT recommends that there be a
minimum and maximum total available extension header length specified.
The maximum total header length is determined by the size of the bit
field allocated for the total extension header length field.  The risk
with this approach is that it may be difficult to extend the total
header size in the future.  The minimum total header length is
determined by a requirement in the specifications that all
implementations must meet.  The risk with this approach is that all
implementations will only implement support for the minimum total
header length, which would then become the de facto maximum total
header length.</t>
        <t indent="0" pn="section-6.4-2">The recommended minimum total available header length is 64
bytes.</t>
        <t indent="0" pn="section-6.4-3">The size of an extension header should always be 4-byte
aligned.</t>
        <t indent="0" pn="section-6.4-4">The maximum length of a single option should be large enough to
meet the different extension use case requirements, e.g., for in-band
telemetry and future use.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.5">
        <name slugifiedName="name-ordering-of-extension-heade">Ordering of Extension Headers</name>
        <t indent="0" pn="section-6.5-1">To support hardware nodes at the target NVE or at a transit device
that can process one or a few extension headers in TCAM, a control
plane in such a deployment could signal a capability to ensure that a
specific extension header will always appear in a specific order, for
example, that such a specific extension header appear first in the packet.</t>
        <t indent="0" pn="section-6.5-2">The order of the extension headers should be hardware friendly for
both the sender and the receiver and possibly some transit devices
as well. This may require that the extension headers and their order be
determined dynamically based on the hardware of those devices.</t>
        <t indent="0" pn="section-6.5-3">Transit devices don't participate in control plane communication
between the endpoints and are not required to process the extension
headers; however, if they do, they may need to process only a small
subset of the extension headers that will be consumed by target
NVEs.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.6">
        <name slugifiedName="name-tlv-versus-bit-fields">TLV versus Bit Fields</name>
        <t indent="0" pn="section-6.6-1">If there is a well-known initial set of options that is likely to
be implemented in software and in hardware, it can be efficient to use
the bit fields approach to indicate the presence of extensions as in
GUE.  However, as described in <xref target="HardwareConsiderations" format="default" sectionFormat="of" derivedContent="Section 6.3"/>, if options are added over
time and different subsets of options are likely to be implemented in
different pieces of hardware, then it would be hard for the IETF to
specify which options should get the early bit fields.  TLVs are a lot
more flexible, which avoids the need to determine the relative
importance of different options.  However, general TLVs of arbitrary
order, size, and repetition are difficult to implement in hardware.  A
middle ground is to use TLVs with restrictions on their size and
alignment, observing that individual TLVs can have a fixed length, and
to support via the control plane a method such that an NVE will only
receive options that it needs and implements.  The control plane
approach can potentially be used to control the order of the TLVs sent
to a particular NVE.  Note that transit devices are not likely to
participate in the control plane; hence, to the extent that they need
to participate in option processing, some other method must be
used. Transit devices would have issues with future GUE bit fields
being defined for future options as well.</t>
        <t indent="0" pn="section-6.6-2">A benefit of TLVs from a hardware perspective is that they are self describing,
i.e., all the information is in the TLV.  In a bit field
approach, the hardware needs to look up the bit to determine the
length of the data associated with the bit through some separate
table, which would add hardware complexity.</t>
        <t indent="0" pn="section-6.6-3">There are use cases where multiple modules of software are running
on an NVE.  These can be modules such as a diagnostic module by one
vendor that does packet sampling and another module from a different
vendor that implements a firewall.  Using a TLV format, it is easier
to have different software modules process different TLVs without conflicting with each other. Such TLVs could be standard extensions or vendor-specific extensions.  This can help
with hardware modularity as well. There are some implementations with
options that allow different software modules, like MAC learning and
security, to process different options.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.7">
        <name slugifiedName="name-control-plane-consideration">Control Plane Considerations</name>
        <t indent="0" pn="section-6.7-1">Given that we want to allow considerable flexibility and
extensibility (e.g., for software NVEs), yet want to be able to support
important extensions in less flexible contexts such as hardware NVEs,
it is useful to consider the control plane.  By control plane in this
section we mean protocols, such as EVPN <xref target="RFC8365" format="default" sectionFormat="of" derivedContent="RFC8365"/>
and others, and deployment-specific configurations.</t>
        <t indent="0" pn="section-6.7-2">If each NVE can express in the control plane that it only supports
certain extensions (which could be a single extension, or a few), and
the source NVEs only include supported extensions in the NVO3 packets,
then the target NVE can use a simpler parser (e.g., a TCAM might
be usable to look for a single NVO3 extension) and the depth of the
inner payload in the NVO3 packet will be minimized.  Furthermore, if
the target NVE cares about a few extensions and can express in the
control plane the desired order of those extensions in the NVO3
packets, then the deployment can provide useful functionality with
simplified hardware requirements for the target NVE.</t>
        <t indent="0" pn="section-6.7-3">Transit devices that are not aware of the NVO3 extensions somewhat
benefit from such an approach, since the inner payload is less deep in
the packet if no extraneous extension headers are included in the
packet.  In general, a transit device is not likely to participate in
the NVO3 control plane.  However, configuration mechanisms can take
into account limitations of the transit devices used in particular
deployments.</t>
        <t indent="0" pn="section-6.7-4">Note that with this approach, different NVEs could desire different
extensions or sets of extensions, which means that the source NVE
needs to be able to place different sets of extensions in different
NVO3 packets, and perhaps in a different order.  It also assumes that
underlay multicast or replication servers are not used together with
NVO3 extension headers.</t>
        <t indent="0" pn="section-6.7-5">There is a need to consider mandatory extensions versus optional
extensions.  Mandatory extensions require the receiver to drop the
packet if the extension is unknown.  A control plane mechanism can
prevent the need for dropping unknown extensions, since they would not
be included to target NVEs that do not support them.</t>
        <t indent="0" pn="section-6.7-6">The control planes defined today need to add the ability to
describe the different encapsulations.  Thus, perhaps EVPN <xref target="RFC8365" format="default" sectionFormat="of" derivedContent="RFC8365"/> and any other control plane protocol that the IETF
defines should have a way to indicate the supported NVO3 extensions
and their order for each of the encapsulations supported.</t>
        <t indent="0" pn="section-6.7-7">Developing a separate document on guidance for option processing and
control plane participation should be considered.  This should provide
examples and guidance on the range of usage models and deployment scenarios
for specific options. It should also provide examples of option ordering that are relevant for that specific
deployment.  This includes endpoints and middleboxes that are using the
options.  Having the control plane negotiate the constraints is the
most appropriate and flexible way to address these requirements.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.8">
        <name slugifiedName="name-split-nve">Split NVE</name>
        <t indent="0" pn="section-6.8-1">If there is a need for hosts to send and receive options in a split
NVE case <xref target="RFC8394" format="default" sectionFormat="of" derivedContent="RFC8394"/>, this is possible using any of the
existing extensible encapsulations (GPE with NSH, GUE, or Geneve) by defining
a way to carry those over other transports. An NSH can already be used
over different transports.</t>
        <t indent="0" pn="section-6.8-2">If this is needed with other encapsulations, it can be done by
defining an Ethertype so that it can be carried over Ethernet and
IEEE Std 802.1Q <xref target="IEEE802.1Q" format="default" sectionFormat="of" derivedContent="IEEE802.1Q"/>.</t>
        <t indent="0" pn="section-6.8-3">If there is a need to carry other encapsulations over MPLS, it
would require an EVPN control plane to signal that other encapsulation
headers and options will be present in front of the Layer 2 (L2) packet.  The VNI
can be ignored in the header, and the MPLS label will be the one used
to identify the EVPN L2 instance.</t>
      </section>
      <section anchor="LargerVNI" numbered="true" removeInRFC="false" toc="include" pn="section-6.9">
        <name slugifiedName="name-larger-vni-considerations">Larger VNI Considerations</name>
        <t indent="0" pn="section-6.9-1">Whether we should make the VNI 32 bits or larger was one of the
topics considered.  The benefit of a 24-bit VNI would be to avoid
unnecessary changes with existing proposals and implementations that
are almost all, if not all, using a 24-bit VNI.  If we need a larger
VNI, perhaps for a telemetry case, an extension can be used to support
that. </t>
      </section>
    </section>
    <section anchor="Recommendations" numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-recommendations">Recommendations</name>
      <t indent="0" pn="section-7-1">The Design Team reported that Geneve was most suitable as a
starting point for a proposed standard for network virtualization, for
the following reasons given below. This conclusion was supported by
the NVO3 Working Group.</t>
      <ol indent="adaptive" spacing="normal" start="1" type="1" pn="section-7-2">
  <li pn="section-7-2.1" derivedCounter="1.">On whether the VNI should be in the base header or in an extension
  header and whether it should be a 24-bit or 32-bit field (see <xref target="LargerVNI" format="default" sectionFormat="of" derivedContent="Section 6.9"/>), it was agreed that the VNI is critical
  information for network virtualization and <bcp14>MUST</bcp14> be present in all
  packets.  It was also agreed that a 24-bit VNI, which is supported
  by Geneve, matches the existing widely used encapsulation formats,
  i.e., VXLAN <xref target="RFC7348" format="default" sectionFormat="of" derivedContent="RFC7348"/> and Network Virtualization Using Generic Routing Encapsulation (NVGRE) <xref target="RFC7637" format="default" sectionFormat="of" derivedContent="RFC7637"/>, and hence is more suitable to use going
  forward.</li>
        <li pn="section-7-2.2" derivedCounter="2.">The Geneve header has the total options length, which allows
  skipping over the options for NIC offload operations and
  transit devices to view flow information in the inner payload.</li>
        <li pn="section-7-2.3" derivedCounter="3.">The option of using an NSH <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/> with VXLAN-GPE
  was considered, but given that an NSH is targeted at service chaining
  and contains service chaining information, it is less suitable for
  the network virtualization use case.  The other downside of
  VXLAN-GPE was the lack of a header length in VXLAN-GPE, which makes
  skipping over the headers to process inner payloads more difficult. A
  total options length is present in Geneve.  It is not possible to
  skip any options in the middle with VXLAN-GPE.  In principle, a split
  between a base header and a header with options is interesting
  (whether that options header is an NSH or some new header without ties
  to a service path).  Whether it would make sense to either use an NSH
  for this or define a new NVO3 options header was explored.
  However, this makes it slightly harder to find the inner payload
  since the Length field is not in the NVO3 header itself.  Thus, one
  more field would have to be extracted to compute the start of the
  inner payload.  Also, if the experience with IPv6 extension headers
  is a guide, there would be a risk that key pieces of hardware might
  not implement the options header, resulting in future calls to
  deprecate its use.  Making the options part of the base NVO3 header
  has less of those issues.  Even though the implementation of any
  particular option can't be predicted ahead of time, the option
  mechanism and ability to skip the options is likely to be broadly
  implemented.</li>
        <li pn="section-7-2.4" derivedCounter="4.">The TLV style and bit field style of extension mechanisms were compared. It
  was deemed that parsing either TLVs or bit fields is expensive, and
  while bit fields may be simpler to parse, they are also more
  restrictive and require guessing which extensions will be widely
  implemented in order to get early bit assignments. Given that half
  the bits are already assigned in GUE, a widely deployed extension
  may appear in a flag extension, and this will require extra
  processing to dig the flag from the flag extension and then look
  for the extension itself.  Also, bit fields are not flexible enough
  to address the requirements from OAM, telemetry, and security
  extensions for variable-length options and different subtypes of the
  same option.  While TLVs are more flexible, a control plane can
  restrict the number of option TLVs as well as the order and size of
  the TLVs to limit this flexibility and make the TLVs simpler for a
  data plane implementation to handle.</li>
        <li pn="section-7-2.5" derivedCounter="5.">The multi-vendor NVE case was briefly discussed, as was the need
  to allow vendors to put their own extensions in the NVE header.
  This is possible with TLVs.</li>
        <li pn="section-7-2.6" derivedCounter="6.">It was agreed that the C bit (Critical bit) in Geneve is
  helpful. This bit indicates that the header includes options that
  must be parsed, or else the packet must be discarded. The bit allows a receiver NVE to
  easily decide whether or not to process options (such as a UUID-based packet trace) and decide how an optional extension can be ignored. Thus, a Critical bit makes it easy for the NVE to skip over the options not marked with such a bit.  Thus, the C bit should remain as defined in
  Geneve.</li>
        <li pn="section-7-2.7" derivedCounter="7.">There are already some extensions of varying sizes that are being discussed  (see
  <xref target="ExtensionsUseCases" format="default" sectionFormat="of" derivedContent="Section 6.2"/>). By using Geneve options, it is
  possible to get in-band parameters like switch id, ingress port,
  egress port, internal delay, and queue size using TLV extensions for
  telemetry purposes from switches. It is also possible to add
  security extension TLVs like HMAC <xref target="RFC2104" format="default" sectionFormat="of" derivedContent="RFC2104"/> and 
  DTLS/IPsec (see <xref target="RFC9147" format="default" sectionFormat="of" derivedContent="RFC9147"/> and <xref target="RFC6071" format="default" sectionFormat="of" derivedContent="RFC6071"/>, respectively) to
  authenticate the Geneve packet header and secure the Geneve packet
  payload by software or hardware tunnel endpoints.  A Group-Based
  Policy extension TLV can be carried as well.</li>
        <li pn="section-7-2.8" derivedCounter="8.">There are already implementations of Geneve options deployed in
  production networks.  There is new hardware supporting
  Geneve TLV parsing as well.  In addition, an In-band Telemetry (INT) specification <xref target="INT" format="default" sectionFormat="of" derivedContent="INT"/> is being developed by P4.org that
  illustrates the option of INT metadata carried over Geneve. Open Virtual Network (OVN) and Open vSwitch (OVS) <xref target="OVN" format="default" sectionFormat="of" derivedContent="OVN"/> have also defined one or more option TLVs
  for Geneve.</li>
        <li pn="section-7-2.9" derivedCounter="9.">Usage requirements (see <xref target="CommonEncapsulationConsiderations" format="default" sectionFormat="of" derivedContent="Section 6"/>) have been addressed while also
considering requirements and implementations in general (including those for
software and hardware).</li>
      </ol>
      <t indent="0" pn="section-7-3">There seems to be interest in standardizing some well-known secure
option TLVs to secure the header and payload to guarantee
encapsulation header integrity and tenant data privacy.  The working
group should consider standardizing such option(s).</t>
      <t indent="0" pn="section-7-4">The following enhancements to Geneve are recommended to make it
more suitable to hardware and yet provide flexibility for
software:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-7-5">
        <li pn="section-7-5.1">The following sort of text is recommended in Geneve documents: while TLVs are more
  flexible, a control plane can restrict the number of option TLVs as
  well as the order and size of the TLVs to make it simpler for a data
  plane implementation in software or hardware to handle.  For
  example, there may be some critical information such as a secure
  hash that must be processed in a certain order at lowest
  latency.</li>
        <li pn="section-7-5.2">A control plane can negotiate a subset of option TLVs and
  certain TLV ordering, as well as limiting the total number of option
  TLVs present in the packet, for example, to allow for hardware
  capable of processing fewer options.  Hence, the control plane needs
  to have the ability to describe the supported TLVs subset and their
  order.</li>
        <li pn="section-7-5.3">The Geneve documents should specify that the subset and order of
  option TLVs <bcp14>SHOULD</bcp14> be configurable for each remote NVE in the
  absence of a protocol control plane.</li>
        <li pn="section-7-5.4">Geneve should follow fragmentation recommendations in overlay services
  like PWE3 and the L2/L3 VPN recommendations to guarantee larger MTUs for the
  tunnel overhead (<xref target="RFC3985" sectionFormat="comma" section="5.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3985#section-5.3" derivedContent="RFC3985"/>).</li>
        <li pn="section-7-5.5">The Geneve documents should provide a recommendation for C bit (Critical bit)
  processing. This text could specify how critical bits can be used with
  control planes and specify the critical options.</li>
        <li pn="section-7-5.6">Given that there is a telemetry option use case for a length of
  256 bytes, it is recommended that Geneve increase the single TLV
  option length to 256.</li>
        <li pn="section-7-5.7">Geneve address requirements for OAM considerations for alternate
  marking and for performance measurements that need a 2-bit field in
  the header should be considered and the need for the current OAM bit
  in the Geneve header should be clarified.</li>
        <li pn="section-7-5.8">The WG should work on security options for Geneve.</li>
      </ul>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-8-1">This document does not introduce any additional security constraints;
however, <xref target="SecExt" format="default" sectionFormat="of" derivedContent="Section 6.2.2"/> discusses security/integrity extensions and
this document suggests, in <xref target="Recommendations" format="default" sectionFormat="of" derivedContent="Section 7"/>, that the NVO3 WG
work on security options for Geneve.</t>
    </section>
    <section anchor="IANA" numbered="true" removeInRFC="false" toc="include" pn="section-9">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-9-1">This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-intarea-gue-extensions" to="GUE-EXTENSIONS"/>
    <displayreference target="I-D.ietf-intarea-gue" to="GUE"/>
    <displayreference target="I-D.ietf-nvo3-vxlan-gpe" to="VXLAN-GPE"/>
    <displayreference target="I-D.smith-vxlan-group-policy" to="VXLAN-GROUP"/>
    <displayreference target="I-D.hy-nvo3-gue-4-nvo" to="GUE-ENCAPSULATION"/>
    <references pn="section-10">
      <name slugifiedName="name-references">References</name>
      <references pn="section-10.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references pn="section-10.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-intarea-gue" target="https://datatracker.ietf.org/doc/html/draft-ietf-intarea-gue-09" quoteTitle="true" derivedAnchor="GUE">
          <front>
            <title>Generic UDP Encapsulation</title>
            <author fullname="Tom Herbert" initials="T." surname="Herbert">
              <organization showOnFrontPage="true">Quantonium</organization>
            </author>
            <author fullname="Lucy Yong" initials="L." surname="Yong">
              <organization showOnFrontPage="true">Independent</organization>
            </author>
            <author fullname="Osama Zia" initials="O." surname="Zia">
              <organization showOnFrontPage="true">Microsoft</organization>
            </author>
            <date day="26" month="October" year="2019"/>
            <abstract>
              <t indent="0">This specification describes Generic UDP Encapsulation (GUE), which is a scheme for using UDP to encapsulate packets of different IP protocols for transport across layer 3 networks. By encapsulating packets in UDP, specialized capabilities in networking hardware for efficient handling of UDP packets can be leveraged. GUE specifies basic encapsulation methods upon which higher level constructs, such as tunnels and overlay networks for network virtualization, can be constructed. GUE is extensible by allowing optional data fields as part of the encapsulation, and is generic in that it can encapsulate packets of various IP protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-gue-09"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.hy-nvo3-gue-4-nvo" target="https://datatracker.ietf.org/doc/html/draft-hy-nvo3-gue-4-nvo-04" quoteTitle="true" derivedAnchor="GUE-ENCAPSULATION">
          <front>
            <title>Generic UDP Encapsulation (GUE) for Network Virtualization Overlay</title>
            <author fullname="Lucy Yong" initials="L." surname="Yong">
              <organization showOnFrontPage="true">Huawei USA</organization>
            </author>
            <author fullname="Tom Herbert" initials="T." surname="Herbert">
              <organization showOnFrontPage="true">Facebook</organization>
            </author>
            <author fullname="Osama Zia" initials="O." surname="Zia">
              <organization showOnFrontPage="true">Microsoft</organization>
            </author>
            <date day="28" month="October" year="2016"/>
            <abstract>
              <t indent="0">This document describes network virtualization overlay encapsulation scheme by use of Generic UDP Encapsulation (GUE) [GUE]. It allocates one GUE optional flag and defines a 32 bit field for Virtual Network Identifier (VNID).</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hy-nvo3-gue-4-nvo-04"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-intarea-gue-extensions" target="https://datatracker.ietf.org/doc/html/draft-ietf-intarea-gue-extensions-06" quoteTitle="true" derivedAnchor="GUE-EXTENSIONS">
          <front>
            <title>Extensions for Generic UDP Encapsulation</title>
            <author fullname="Tom Herbert" initials="T." surname="Herbert">
              <organization showOnFrontPage="true">Quantonium</organization>
            </author>
            <author fullname="Lucy Yong" initials="L." surname="Yong">
              <organization showOnFrontPage="true">Independent</organization>
            </author>
            <author fullname="Fred Templin" initials="F." surname="Templin">
              <organization showOnFrontPage="true">Boeing</organization>
            </author>
            <date day="8" month="March" year="2019"/>
            <abstract>
              <t indent="0">This specification defines a set of the initial optional extensions for Generic UDP Encapsulation (GUE).</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-gue-extensions-06"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="IEEE802.1Q" quoteTitle="true" target="https://doi.org/10.1109/IEEESTD.2022.10004498" derivedAnchor="IEEE802.1Q">
          <front>
            <title>IEEE Standard for Local and Metropolitan Area Networks--Bridges and Bridged Networks</title>
            <author>
              <organization showOnFrontPage="true">IEEE</organization>
            </author>
            <date year="2022" month="December"/>
          </front>
          <seriesInfo name="IEEE Std" value="802.1Q-2022"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2022.10004498"/>
        </reference>
        <reference anchor="INT" target="https://p4.org/p4-spec/docs/INT_v2_1.pdf" quoteTitle="true" derivedAnchor="INT">
          <front>
            <title>In-band Network Telemetry (INT) Dataplane Specification</title>
            <author>
              <organization showOnFrontPage="true">P4.org Applications Working Group</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="OVN" target="https://www.openvswitch.org/" quoteTitle="true" derivedAnchor="OVN">
          <front>
            <title>Open vSwitch</title>
            <author>
              <organization showOnFrontPage="true">Linux Foundation</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2104" target="https://www.rfc-editor.org/info/rfc2104" quoteTitle="true" derivedAnchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <date month="February" year="1997"/>
            <abstract>
              <t indent="0">This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC2418" target="https://www.rfc-editor.org/info/rfc2418" quoteTitle="true" derivedAnchor="RFC2418">
          <front>
            <title>IETF Working Group Guidelines and Procedures</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="September" year="1998"/>
            <abstract>
              <t indent="0">This document describes the guidelines and procedures for formation and operation of IETF working groups. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="25"/>
          <seriesInfo name="RFC" value="2418"/>
          <seriesInfo name="DOI" value="10.17487/RFC2418"/>
        </reference>
        <reference anchor="RFC3985" target="https://www.rfc-editor.org/info/rfc3985" quoteTitle="true" derivedAnchor="RFC3985">
          <front>
            <title>Pseudo Wire Emulation Edge-to-Edge (PWE3) Architecture</title>
            <author fullname="S. Bryant" initials="S." role="editor" surname="Bryant"/>
            <author fullname="P. Pate" initials="P." role="editor" surname="Pate"/>
            <date month="March" year="2005"/>
            <abstract>
              <t indent="0">This document describes an architecture for Pseudo Wire Emulation Edge-to-Edge (PWE3). It discusses the emulation of services such as Frame Relay, ATM, Ethernet, TDM, and SONET/SDH over packet switched networks (PSNs) using IP or MPLS. It presents the architectural framework for pseudo wires (PWs), defines terminology, and specifies the various protocol elements and their functions. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3985"/>
          <seriesInfo name="DOI" value="10.17487/RFC3985"/>
        </reference>
        <reference anchor="RFC6071" target="https://www.rfc-editor.org/info/rfc6071" quoteTitle="true" derivedAnchor="RFC6071">
          <front>
            <title>IP Security (IPsec) and Internet Key Exchange (IKE) Document Roadmap</title>
            <author fullname="S. Frankel" initials="S." surname="Frankel"/>
            <author fullname="S. Krishnan" initials="S." surname="Krishnan"/>
            <date month="February" year="2011"/>
            <abstract>
              <t indent="0">Over the past few years, the number of RFCs that define and use IPsec and Internet Key Exchange (IKE) has greatly proliferated. This is complicated by the fact that these RFCs originate from numerous IETF working groups: the original IPsec WG, its various spin-offs, and other WGs that use IPsec and/or IKE to protect their protocols' traffic.</t>
              <t indent="0">This document is a snapshot of IPsec- and IKE-related RFCs. It includes a brief description of each RFC, along with background information explaining the motivation and context of IPsec's outgrowths and extensions. It obsoletes RFC 2411, the previous "IP Security Document Roadmap."</t>
              <t indent="0">The obsoleted IPsec roadmap (RFC 2411) briefly described the interrelationship of the various classes of base IPsec documents. The major focus of RFC 2411 was to specify the recommended contents of documents specifying additional encryption and authentication algorithms. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6071"/>
          <seriesInfo name="DOI" value="10.17487/RFC6071"/>
        </reference>
        <reference anchor="RFC6291" target="https://www.rfc-editor.org/info/rfc6291" quoteTitle="true" derivedAnchor="RFC6291">
          <front>
            <title>Guidelines for the Use of the "OAM" Acronym in the IETF</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="H. van Helvoort" initials="H." surname="van Helvoort"/>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu"/>
            <author fullname="S. Mansfield" initials="S." surname="Mansfield"/>
            <date month="June" year="2011"/>
            <abstract>
              <t indent="0">At first glance, the acronym "OAM" seems to be well-known and well-understood. Looking at the acronym a bit more closely reveals a set of recurring problems that are revisited time and again.</t>
              <t indent="0">This document provides a definition of the acronym "OAM" (Operations, Administration, and Maintenance) for use in all future IETF documents that refer to OAM. There are other definitions and acronyms that will be discussed while exploring the definition of the constituent parts of the "OAM" term. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="161"/>
          <seriesInfo name="RFC" value="6291"/>
          <seriesInfo name="DOI" value="10.17487/RFC6291"/>
        </reference>
        <reference anchor="RFC7348" target="https://www.rfc-editor.org/info/rfc7348" quoteTitle="true" derivedAnchor="RFC7348">
          <front>
            <title>Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks</title>
            <author fullname="M. Mahalingam" initials="M." surname="Mahalingam"/>
            <author fullname="D. Dutt" initials="D." surname="Dutt"/>
            <author fullname="K. Duda" initials="K." surname="Duda"/>
            <author fullname="P. Agarwal" initials="P." surname="Agarwal"/>
            <author fullname="L. Kreeger" initials="L." surname="Kreeger"/>
            <author fullname="T. Sridhar" initials="T." surname="Sridhar"/>
            <author fullname="M. Bursell" initials="M." surname="Bursell"/>
            <author fullname="C. Wright" initials="C." surname="Wright"/>
            <date month="August" year="2014"/>
            <abstract>
              <t indent="0">This document describes Virtual eXtensible Local Area Network (VXLAN), which is used to address the need for overlay networks within virtualized data centers accommodating multiple tenants. The scheme and the related protocols can be used in networks for cloud service providers and enterprise data centers. This memo documents the deployed VXLAN protocol for the benefit of the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7348"/>
          <seriesInfo name="DOI" value="10.17487/RFC7348"/>
        </reference>
        <reference anchor="RFC7637" target="https://www.rfc-editor.org/info/rfc7637" quoteTitle="true" derivedAnchor="RFC7637">
          <front>
            <title>NVGRE: Network Virtualization Using Generic Routing Encapsulation</title>
            <author fullname="P. Garg" initials="P." role="editor" surname="Garg"/>
            <author fullname="Y. Wang" initials="Y." role="editor" surname="Wang"/>
            <date month="September" year="2015"/>
            <abstract>
              <t indent="0">This document describes the usage of the Generic Routing Encapsulation (GRE) header for Network Virtualization (NVGRE) in multi-tenant data centers. Network Virtualization decouples virtual networks and addresses from physical network infrastructure, providing isolation and concurrency between multiple virtual networks on the same physical network infrastructure. This document also introduces a Network Virtualization framework to illustrate the use cases, but the focus is on specifying the data-plane aspect of NVGRE.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7637"/>
          <seriesInfo name="DOI" value="10.17487/RFC7637"/>
        </reference>
        <reference anchor="RFC8300" target="https://www.rfc-editor.org/info/rfc8300" quoteTitle="true" derivedAnchor="RFC8300">
          <front>
            <title>Network Service Header (NSH)</title>
            <author fullname="P. Quinn" initials="P." role="editor" surname="Quinn"/>
            <author fullname="U. Elzur" initials="U." role="editor" surname="Elzur"/>
            <author fullname="C. Pignataro" initials="C." role="editor" surname="Pignataro"/>
            <date month="January" year="2018"/>
            <abstract>
              <t indent="0">This document describes a Network Service Header (NSH) imposed on packets or frames to realize Service Function Paths (SFPs). The NSH also provides a mechanism for metadata exchange along the instantiated service paths. The NSH is the Service Function Chaining (SFC) encapsulation required to support the SFC architecture (defined in RFC 7665).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8300"/>
          <seriesInfo name="DOI" value="10.17487/RFC8300"/>
        </reference>
        <reference anchor="RFC8365" target="https://www.rfc-editor.org/info/rfc8365" quoteTitle="true" derivedAnchor="RFC8365">
          <front>
            <title>A Network Virtualization Overlay Solution Using Ethernet VPN (EVPN)</title>
            <author fullname="A. Sajassi" initials="A." role="editor" surname="Sajassi"/>
            <author fullname="J. Drake" initials="J." role="editor" surname="Drake"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="R. Shekhar" initials="R." surname="Shekhar"/>
            <author fullname="J. Uttaro" initials="J." surname="Uttaro"/>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx"/>
            <date month="March" year="2018"/>
            <abstract>
              <t indent="0">This document specifies how Ethernet VPN (EVPN) can be used as a Network Virtualization Overlay (NVO) solution and explores the various tunnel encapsulation options over IP and their impact on the EVPN control plane and procedures. In particular, the following encapsulation options are analyzed: Virtual Extensible LAN (VXLAN), Network Virtualization using Generic Routing Encapsulation (NVGRE), and MPLS over GRE. This specification is also applicable to Generic Network Virtualization Encapsulation (GENEVE); however, some incremental work is required, which will be covered in a separate document. This document also specifies new multihoming procedures for split-horizon filtering and mass withdrawal. It also specifies EVPN route constructions for VXLAN/NVGRE encapsulations and Autonomous System Border Router (ASBR) procedures for multihoming of Network Virtualization Edge (NVE) devices.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8365"/>
          <seriesInfo name="DOI" value="10.17487/RFC8365"/>
        </reference>
        <reference anchor="RFC8394" target="https://www.rfc-editor.org/info/rfc8394" quoteTitle="true" derivedAnchor="RFC8394">
          <front>
            <title>Split Network Virtualization Edge (Split-NVE) Control-Plane Requirements</title>
            <author fullname="Y. Li" initials="Y." surname="Li"/>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="L. Kreeger" initials="L." surname="Kreeger"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="May" year="2018"/>
            <abstract>
              <t indent="0">In the Split Network Virtualization Edge (Split-NVE) architecture, the functions of the NVE are split across a server and a piece of external network equipment that is called an "External NVE". The server-resident control-plane functionality resides in control software, which may be part of hypervisor or container-management software; for simplicity, this document refers to the hypervisor as the "location" of this software.</t>
              <t indent="0">One or more control-plane protocols between a hypervisor and its associated External NVE(s) are used by the hypervisor to distribute its virtual-machine networking state to the External NVE(s) for further handling. This document illustrates the functionality required by this type of control-plane signaling protocol and outlines the high-level requirements. Virtual-machine states as well as state transitioning are summarized to help clarify the protocol requirements.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8394"/>
          <seriesInfo name="DOI" value="10.17487/RFC8394"/>
        </reference>
        <reference anchor="RFC8926" target="https://www.rfc-editor.org/info/rfc8926" quoteTitle="true" derivedAnchor="RFC8926">
          <front>
            <title>Geneve: Generic Network Virtualization Encapsulation</title>
            <author fullname="J. Gross" initials="J." role="editor" surname="Gross"/>
            <author fullname="I. Ganga" initials="I." role="editor" surname="Ganga"/>
            <author fullname="T. Sridhar" initials="T." role="editor" surname="Sridhar"/>
            <date month="November" year="2020"/>
            <abstract>
              <t indent="0">Network virtualization involves the cooperation of devices with a wide variety of capabilities such as software and hardware tunnel endpoints, transit fabrics, and centralized control clusters. As a result of their role in tying together different elements of the system, the requirements on tunnels are influenced by all of these components. Therefore, flexibility is the most important aspect of a tunneling protocol if it is to keep pace with the evolution of technology. This document describes Geneve, an encapsulation protocol designed to recognize and accommodate these changing capabilities and needs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8926"/>
          <seriesInfo name="DOI" value="10.17487/RFC8926"/>
        </reference>
        <reference anchor="RFC9147" target="https://www.rfc-editor.org/info/rfc9147" quoteTitle="true" derivedAnchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t indent="0">This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9197" target="https://www.rfc-editor.org/info/rfc9197" quoteTitle="true" derivedAnchor="RFC9197">
          <front>
            <title>Data Fields for In Situ Operations, Administration, and Maintenance (IOAM)</title>
            <author fullname="F. Brockners" initials="F." role="editor" surname="Brockners"/>
            <author fullname="S. Bhandari" initials="S." role="editor" surname="Bhandari"/>
            <author fullname="T. Mizrahi" initials="T." role="editor" surname="Mizrahi"/>
            <date month="May" year="2022"/>
            <abstract>
              <t indent="0">In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in the packet while the packet traverses a path between two points in the network. This document discusses the data fields and associated data types for IOAM. IOAM-Data-Fields can be encapsulated into a variety of protocols, such as Network Service Header (NSH), Segment Routing, Generic Network Virtualization Encapsulation (Geneve), or IPv6. IOAM can be used to complement OAM mechanisms based on, e.g., ICMP or other types of probe packets.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9197"/>
          <seriesInfo name="DOI" value="10.17487/RFC9197"/>
        </reference>
        <reference anchor="RFC9542" target="https://www.rfc-editor.org/info/rfc9542" quoteTitle="true" derivedAnchor="RFC9542">
          <front>
            <title>IANA Considerations and IETF Protocol and Documentation Usage for IEEE 802 Parameters</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Abley" initials="J." surname="Abley"/>
            <author fullname="Y. Li" initials="Y." surname="Li"/>
            <date month="April" year="2024"/>
            <abstract>
              <t indent="0">Some IETF protocols make use of Ethernet frame formats and IEEE 802 parameters. This document discusses several aspects of such parameters and their use in IETF protocols, specifies IANA considerations for assignment of points under the IANA Organizationally Unique Identifier (OUI), and provides some values for use in documentation. This document obsoletes RFC 7042.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="141"/>
          <seriesInfo name="RFC" value="9542"/>
          <seriesInfo name="DOI" value="10.17487/RFC9542"/>
        </reference>
        <reference anchor="I-D.ietf-nvo3-vxlan-gpe" target="https://datatracker.ietf.org/doc/html/draft-ietf-nvo3-vxlan-gpe-13" quoteTitle="true" derivedAnchor="VXLAN-GPE">
          <front>
            <title>Generic Protocol Extension for VXLAN (VXLAN-GPE)</title>
            <author fullname="Fabio Maino" initials="F." surname="Maino" role="editor">
              <organization showOnFrontPage="true">Cisco Systems</organization>
            </author>
            <author fullname="Larry Kreeger" initials="L." surname="Kreeger" role="editor">
              <organization showOnFrontPage="true">Arrcus</organization>
            </author>
            <author fullname="Uri Elzur" initials="U." surname="Elzur" role="editor">
              <organization showOnFrontPage="true">Intel</organization>
            </author>
            <date day="4" month="November" year="2023"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nvo3-vxlan-gpe-13"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.smith-vxlan-group-policy" target="https://datatracker.ietf.org/doc/html/draft-smith-vxlan-group-policy-05" quoteTitle="true" derivedAnchor="VXLAN-GROUP">
          <front>
            <title>VXLAN Group Policy Option</title>
            <author fullname="Michael Smith" initials="M." surname="Smith">
              <organization showOnFrontPage="true">Cisco Systems</organization>
            </author>
            <author fullname="Larry Kreeger" initials="L." surname="Kreeger">
              <organization showOnFrontPage="true">Arrcus, Inc.</organization>
            </author>
            <date day="22" month="October" year="2018"/>
            <abstract>
              <t indent="0">This document defines a backward compatible extension to Virtual eXtensible Local Area Network (VXLAN) that allows a Tenant System Interface (TSI) Group Identifier to be carried for the purposes of policy enforcement.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-smith-vxlan-group-policy-05"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="EncapsulationComparison" numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-encapsulation-comparison">Encapsulation Comparison</name>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.1">
        <name slugifiedName="name-overview">Overview</name>
        <t indent="0" pn="section-appendix.a.1-1">This section presents a comparison of the three NVO3
    encapsulation proposals: Geneve <xref target="RFC8926" format="default" sectionFormat="of" derivedContent="RFC8926"/>, GUE
    <xref target="I-D.ietf-intarea-gue" format="default" sectionFormat="of" derivedContent="GUE"/>, and VXLAN-GPE <xref target="I-D.ietf-nvo3-vxlan-gpe" format="default" sectionFormat="of" derivedContent="VXLAN-GPE"/>.  The three encapsulations use an outer
    UDP/IP transport.  Geneve and VXLAN-GPE use an 8-octet header,
    while GUE uses a 4-octet header.  In addition to the base header,
    optional extensions may be included in the encapsulation, as
    discussed in <xref target="Extensibility" format="default" sectionFormat="of" derivedContent="Appendix A.2"/> below.</t>
      </section>
      <section anchor="Extensibility" numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.2">
        <name slugifiedName="name-extensibility">Extensibility</name>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.2.1">
          <name slugifiedName="name-innate-extensibility-suppor">Innate Extensibility Support</name>
          <t indent="0" pn="section-appendix.a.2.1-1">The Geneve and GUE encapsulations both enable optional headers to
be incorporated at the end of the base encapsulation header.</t>
          <t indent="0" pn="section-appendix.a.2.1-2">VXLAN-GPE does not provide innate support for header extensions.
However, as discussed in <xref target="I-D.ietf-nvo3-vxlan-gpe" format="default" sectionFormat="of" derivedContent="VXLAN-GPE"/>,
extensibility can be attained to some extent if the Network Service
Header (NSH) <xref target="RFC8300" format="default" sectionFormat="of" derivedContent="RFC8300"/> is used immediately following
the VXLAN-GPE header.  The NSH supports either a fixed-size extension (MD
Type 1) or a variable-size TLV-based extension (MD Type 2).  Note
that NSH-over-VXLAN-GPE implies an additional overhead of the 8-octet
NSH, in addition to the VXLAN-GPE header.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.2.2">
          <name slugifiedName="name-extension-parsing">Extension Parsing</name>
          <t indent="0" pn="section-appendix.a.2.2-1">The Geneve variable-length options are defined as Type-Length-Value
(TLV) extensions.  Similarly, VXLAN-GPE, when using an NSH, can include
NSH TLV-based extensions.  In contrast, GUE defines a small set of
possible extension fields (proposed in <xref target="I-D.ietf-intarea-gue-extensions" format="default" sectionFormat="of" derivedContent="GUE-EXTENSIONS"/> and <xref target="I-D.hy-nvo3-gue-4-nvo" format="default" sectionFormat="of" derivedContent="GUE-ENCAPSULATION"/>), and a set of flags in the GUE header
that indicate for each extension type whether it is present or
not.</t>
          <t indent="0" pn="section-appendix.a.2.2-2">TLV-based extensions, as defined in Geneve, provide the flexibility
for a large number of possible extension types.  Similar behavior can
be supported in NSH-over-VXLAN-GPE when using MD Type 2.  The
flag-based approach taken in GUE strives to simplify implementations
by defining a small number of possible extensions used in a fixed
order.</t>
          <t indent="0" pn="section-appendix.a.2.2-3">The Geneve and GUE headers both include a Length field that defines
the total length of the encapsulation, including the optional
extensions.  This Length field simplifies the parsing by transit
devices that skip the encapsulation header without parsing its
extensions.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.2.3">
          <name slugifiedName="name-critical-extensions">Critical Extensions</name>
          <t indent="0" pn="section-appendix.a.2.3-1">The Geneve encapsulation header includes the C field, which
indicates whether the current Geneve header includes critical options,
that is to say, options which must be parsed by the target NVE.  If
the endpoint is not able to process a critical option, the packet is
discarded.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.2.4">
          <name slugifiedName="name-maximal-header-length">Maximal Header Length</name>
          <t indent="0" pn="section-appendix.a.2.4-1">The maximal header length in Geneve, including options, is 260
octets.  GUE defines the maximal header to be 128 octets.  VXLAN-GPE
uses a fixed-length header of 8 octets, unless NSH-over-VXLAN-GPE is
used, yielding an encapsulation header of up to 264 octets.</t>
        </section>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.3">
        <name slugifiedName="name-encapsulation-header">Encapsulation Header</name>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.3.1">
          <name slugifiedName="name-virtual-network-identifier-">Virtual Network Identifier (VNI)</name>
          <t indent="0" pn="section-appendix.a.3.1-1">The Geneve and VXLAN-GPE headers both include a 24-bit VNI field.
GUE, on the other hand, enables the use of a 32-bit field called VNID;
this field is not included in the GUE header but was defined as an
optional extension in <xref target="I-D.hy-nvo3-gue-4-nvo" format="default" sectionFormat="of" derivedContent="GUE-ENCAPSULATION"/>.</t>
          <t indent="0" pn="section-appendix.a.3.1-2">The VXLAN-GPE header includes the I bit, indicating that the VNI
field is valid in the current header.  A similar indicator is defined
as a flag in the GUE header <xref target="I-D.ietf-intarea-gue-extensions" format="default" sectionFormat="of" derivedContent="GUE-EXTENSIONS"/>.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.3.2">
          <name slugifiedName="name-next-protocol">Next Protocol</name>
          <t indent="0" pn="section-appendix.a.3.2-1">All three encapsulation headers include a field that specifies the
type of the next protocol header, which resides after the NVO3
encapsulation header.  The Geneve header includes a 16-bit field that
uses the IEEE Ethertype convention.  GUE uses an 8-bit field, which
uses the IANA protocol numbering.  The VXLAN-GPE header
incorporates an 8-bit Next Protocol field, using a registry specific to VXLAN-GPE, defined in <xref target="I-D.ietf-nvo3-vxlan-gpe" format="default" sectionFormat="of" derivedContent="VXLAN-GPE"/>.</t>
          <t indent="0" pn="section-appendix.a.3.2-2">The VXLAN-GPE header also includes the P bit, which explicitly
indicates whether the Next Protocol field is present in the current
header.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.3.3">
          <name slugifiedName="name-other-header-fields">Other Header Fields</name>
          <t indent="0" pn="section-appendix.a.3.3-1">The OAM bit, which is defined in Geneve and in VXLAN-GPE, indicates
whether the current packet is an OAM packet.  The GUE header includes
a similar field but uses different terminology; the GUE C bit (Control bit)
specifies whether the current packet is a control packet.  Note that
the GUE C bit can potentially be used in a large set of
protocols that are not OAM protocols.  However, the control packet
examples discussed in <xref target="I-D.ietf-intarea-gue" format="default" sectionFormat="of" derivedContent="GUE"/> are
related to OAM.</t>
          <t indent="0" pn="section-appendix.a.3.3-2">Each of the three NVO3 encapsulation headers includes a 2-bit
Version field, which is currently defined to be zero.</t>
          <t indent="0" pn="section-appendix.a.3.3-3">The Geneve and VXLAN-GPE headers include reserved fields; 14 bits
in the Geneve header and 27 bits in the VXLAN-GPE header are
reserved.</t>
        </section>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a.4">
        <name slugifiedName="name-comparison-summary">Comparison Summary</name>
        <t indent="0" pn="section-appendix.a.4-1">The following table summarizes the comparison between the three
NVO3 encapsulations. In some cases, a plus sign ("+") or minus sign
("-") is used to indicate that the header is stronger or weaker in an
area, respectively.</t>
        <table anchor="EncapsulationsComparisonTable" align="center" pn="table-1">
          <name slugifiedName="name-encapsulations-comparison">Encapsulations Comparison</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1"/>
              <th align="left" colspan="1" rowspan="1">Geneve</th>
              <th align="left" colspan="1" rowspan="1">GUE</th>
              <th align="left" colspan="1" rowspan="1">VXLAN-GPE</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">Outer transport UDP Port Number</td>
              <td align="left" colspan="1" rowspan="1">UDP/IP 6081</td>
              <td align="left" colspan="1" rowspan="1">UDP/IP 6080</td>
              <td align="left" colspan="1" rowspan="1">UDP/IP 4790</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Base header length</td>
              <td align="left" colspan="1" rowspan="1">8 octets</td>
              <td align="left" colspan="1" rowspan="1">4 octets</td>
              <td align="left" colspan="1" rowspan="1">8 octets (16 octets using an NSH)</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Extensibility</td>
              <td align="left" colspan="1" rowspan="1">Variable-length options</td>
              <td align="left" colspan="1" rowspan="1">Extension fields</td>
              <td align="left" colspan="1" rowspan="1">No innate extensibility. Might use an NSH.</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Extension parsing method</td>
              <td align="left" colspan="1" rowspan="1">TLV-based</td>
              <td align="left" colspan="1" rowspan="1">Flag-based</td>
              <td align="left" colspan="1" rowspan="1">TLV-based (using an NSH with MD Type 2)</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Extension order</td>
              <td align="left" colspan="1" rowspan="1">Variable</td>
              <td align="left" colspan="1" rowspan="1">Fixed</td>
              <td align="left" colspan="1" rowspan="1">Variable (using an NSH)</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Length field</td>
              <td align="left" colspan="1" rowspan="1">+</td>
              <td align="left" colspan="1" rowspan="1">+</td>
              <td align="left" colspan="1" rowspan="1">-</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Max header length</td>
              <td align="left" colspan="1" rowspan="1">260 octets</td>
              <td align="left" colspan="1" rowspan="1">128 octets</td>
              <td align="left" colspan="1" rowspan="1">8 octets (264 using an NSH)</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Critical extension bit</td>
              <td align="left" colspan="1" rowspan="1">+</td>
              <td align="left" colspan="1" rowspan="1">-</td>
              <td align="left" colspan="1" rowspan="1">-</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">VNI field size</td>
              <td align="left" colspan="1" rowspan="1">24 bits</td>
              <td align="left" colspan="1" rowspan="1">32 bits (extension)</td>
              <td align="left" colspan="1" rowspan="1">24 bits</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Next Protocol field</td>
              <td align="left" colspan="1" rowspan="1">16 bits Ethertype registry</td>
              <td align="left" colspan="1" rowspan="1">8 bits Internet protocol registry</td>
              <td align="left" colspan="1" rowspan="1">8 bits New registry</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Next protocol indicator</td>
              <td align="left" colspan="1" rowspan="1">-</td>
              <td align="left" colspan="1" rowspan="1">-</td>
              <td align="left" colspan="1" rowspan="1">+</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">OAM / Control field</td>
              <td align="left" colspan="1" rowspan="1">OAM bit</td>
              <td align="left" colspan="1" rowspan="1">Control bit</td>
              <td align="left" colspan="1" rowspan="1">OAM bit</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Version field</td>
              <td align="left" colspan="1" rowspan="1">2 bits</td>
              <td align="left" colspan="1" rowspan="1">2 bits</td>
              <td align="left" colspan="1" rowspan="1">2 bits</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">Reserved bits</td>
              <td align="left" colspan="1" rowspan="1">14 bits</td>
              <td align="left" colspan="1" rowspan="1">none</td>
              <td align="left" colspan="1" rowspan="1">27 bits</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="Acknowledgements" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.b-1">The authors would like to thank <contact fullname="Tom Herbert"/> for
providing the motivation for the security/integrity extension and for his
valuable comments; <contact fullname="T. Sridhar"/> for his valuable comments
and feedback; <contact fullname="Anoop Ghanwani"/> for his extensive comments;
and <contact fullname="Ignas Bagdonas"/>.</t>
    </section>
    <section anchor="Contributors" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-contributors">Contributors</name>
      <t indent="0" pn="section-appendix.c-1">The following coauthors have contributed to this document:</t>
      <contact fullname="Ilango Ganga">
        <organization showOnFrontPage="true">Intel</organization>
        <address>
          <email>ilango.s.ganga@intel.com</email>
        </address>
      </contact>
      <contact fullname="Pankaj Garg">
        <organization showOnFrontPage="true">Microsoft</organization>
        <address>
          <email>pankajg@microsoft.com</email>
        </address>
      </contact>
      <contact fullname="Rajeev Manur">
        <organization showOnFrontPage="true">Broadcom</organization>
        <address>
          <email>rajeev.manur@broadcom.com</email>
        </address>
      </contact>
      <contact fullname="Tal Mizrahi">
        <organization showOnFrontPage="true">Huawei</organization>
        <address>
          <email>tal.mizrahi.phd@gmail.com</email>
        </address>
      </contact>
      <contact fullname="David Mozes">
        <address>
          <email>mosesster@gmail.com</email>
        </address>
      </contact>
      <contact fullname="Erik Nordmark">
        <organization showOnFrontPage="true">ZEDEDA</organization>
        <address>
          <email>nordmark@sonic.net</email>
        </address>
      </contact>
      <contact fullname="Michael Smith">
        <organization showOnFrontPage="true">Cisco</organization>
        <address>
          <email>michsmit@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Sam Aldrin">
        <organization showOnFrontPage="true">Google</organization>
        <address>
          <email>aldrin.ietf@gmail.com</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="S." surname="Boutros" fullname="Sami Boutros" role="editor">
        <organization showOnFrontPage="true">Ciena Corporation</organization>
        <address>
          <postal>
            <country>United States of America</country>
          </postal>
          <email>sboutros@ciena.com</email>
        </address>
      </author>
      <author fullname="Donald E. Eastlake 3rd" initials="D." surname="Eastlake 3rd" role="editor">
        <organization showOnFrontPage="true">Independent</organization>
        <address>
          <postal>
            <street>2386 Panoramic Circle</street>
            <city>Apopka</city>
            <region>FL</region>
            <code>32703</code>
            <country>United States of America</country>
          </postal>
          <phone>+1-508-333-2270</phone>
          <email>d3e3e3@gmail.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
