<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-nvo3-geneve-16" indexInclude="true" ipr="trust200902" number="8926" prepTime="2020-11-06T14:56:49" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-nvo3-geneve-16" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8926" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Geneve Protocol">Geneve: Generic Network Virtualization Encapsulation</title>
    <seriesInfo name="RFC" value="8926" stream="IETF"/>
    <author fullname="Jesse Gross" initials="J." role="editor" surname="Gross">
      <organization showOnFrontPage="true"/>
      <address>
        <email>jesse@kernel.org</email>
      </address>
    </author>
    <author fullname="Ilango Ganga" initials="I." role="editor" surname="Ganga">
      <organization abbrev="Intel" showOnFrontPage="true">Intel Corporation</organization>
      <address>
        <postal>
          <street>2200 Mission College Blvd.</street>
          <city>Santa Clara</city>
          <region>CA</region>
          <code>95054</code>
          <country>United States of America</country>
        </postal>
        <email>ilango.s.ganga@intel.com</email>
      </address>
    </author>
    <author fullname="T. Sridhar" initials="T." role="editor" surname="Sridhar">
      <organization abbrev="VMware" showOnFrontPage="true">VMware, Inc.</organization>
      <address>
        <postal>
          <street>3401 Hillview Ave.</street>
          <city>Palo Alto</city>
          <region>CA</region>
          <code>94304</code>
          <country>United States of America</country>
        </postal>
        <email>tsridhar@utexas.edu</email>
      </address>
    </author>
    <date month="11" year="2020"/>
    <keyword>overlay</keyword>
    <keyword>tunnel</keyword>
    <keyword>extensible</keyword>
    <keyword>variable</keyword>
    <keyword>metadata</keyword>
    <keyword>options</keyword>
    <keyword>endpoint</keyword>
    <keyword>transit</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
   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>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8926" 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) 2020 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 Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified 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>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" 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-requirements">Design Requirements</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-control-plane-independence">Control Plane Independence</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-data-plane-extensibility">Data Plane Extensibility</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.2.2">
                  <li pn="section-toc.1-1.2.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.2.2.2.2.1.1"><xref derivedContent="2.2.1" format="counter" sectionFormat="of" target="section-2.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-efficient-implementation">Efficient Implementation</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-standard-ip-fabrics">Use of Standard IP Fabrics</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" 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-geneve-encapsulation-detail">Geneve Encapsulation Details</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-geneve-packet-format-over-i">Geneve Packet Format over IPv4</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-geneve-packet-format-over-ipv">Geneve Packet Format over IPv6</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-udp-header">UDP Header</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tunnel-header-fields">Tunnel Header Fields</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.5">
                <t indent="0" pn="section-toc.1-1.3.2.5.1"><xref derivedContent="3.5" format="counter" sectionFormat="of" target="section-3.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tunnel-options">Tunnel Options</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.5.2">
                  <li pn="section-toc.1-1.3.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.5.2.1.1"><xref derivedContent="3.5.1" format="counter" sectionFormat="of" target="section-3.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-options-processing">Options Processing</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </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-implementation-and-deployme">Implementation and Deployment Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-applicability-statement">Applicability Statement</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-congestion-control-function">Congestion-Control Functionality</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-udp-checksum">UDP Checksum</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.3.2">
                  <li pn="section-toc.1-1.4.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.1.1"><xref derivedContent="4.3.1" format="counter" sectionFormat="of" target="section-4.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-zero-udp-checksum-handling-">Zero UDP Checksum Handling with IPv6</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-encapsulation-of-geneve-in-">Encapsulation of Geneve in IP</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.4.2">
                  <li pn="section-toc.1-1.4.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.1.1"><xref derivedContent="4.4.1" format="counter" sectionFormat="of" target="section-4.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ip-fragmentation">IP Fragmentation</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.2">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.2.1"><xref derivedContent="4.4.2" format="counter" sectionFormat="of" target="section-4.4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dscp-ecn-and-ttl">DSCP, ECN, and TTL</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.3">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.3.1"><xref derivedContent="4.4.3" format="counter" sectionFormat="of" target="section-4.4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-broadcast-and-multicast">Broadcast and Multicast</xref></t>
                  </li>
                  <li pn="section-toc.1-1.4.2.4.2.4">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.4.1"><xref derivedContent="4.4.4" format="counter" sectionFormat="of" target="section-4.4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-unidirectional-tunnels">Unidirectional Tunnels</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.5">
                <t indent="0" pn="section-toc.1-1.4.2.5.1"><xref derivedContent="4.5" format="counter" sectionFormat="of" target="section-4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-constraints-on-protocol-fea">Constraints on Protocol Features</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.5.2">
                  <li pn="section-toc.1-1.4.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.5.2.1.1"><xref derivedContent="4.5.1" format="counter" sectionFormat="of" target="section-4.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-constraints-on-options">Constraints on Options</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.6">
                <t indent="0" pn="section-toc.1-1.4.2.6.1"><xref derivedContent="4.6" format="counter" sectionFormat="of" target="section-4.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-nic-offloads">NIC Offloads</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.7">
                <t indent="0" pn="section-toc.1-1.4.2.7.1"><xref derivedContent="4.7" format="counter" sectionFormat="of" target="section-4.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-inner-vlan-handling">Inner VLAN Handling</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-transition-considerations">Transition Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security 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-data-confidentiality">Data Confidentiality</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.1.2">
                  <li pn="section-toc.1-1.6.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.1.2.1.1"><xref derivedContent="6.1.1" format="counter" sectionFormat="of" target="section-6.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-inter-data-center-traffic">Inter-Data Center Traffic</xref></t>
                  </li>
                </ul>
              </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-data-integrity">Data Integrity</xref></t>
              </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-authentication-of-nve-peers">Authentication of NVE Peers</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-options-interpretation-by-t">Options Interpretation by Transit Devices</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-multicast-broadcast">Multicast/Broadcast</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-control-plane-communication">Control Plane Communications</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-iana-considerations">IANA Considerations</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-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="sec-1" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">
   Networking has long featured a variety of tunneling, tagging, and
   other encapsulation mechanisms.  However, the advent of network
   virtualization has caused a surge of renewed interest and a
   corresponding increase in the introduction of new protocols.  The
   large number of protocols in this space -- for example, ranging all the way from
   VLANs <xref target="IEEE.802.1Q_2018" format="default" sectionFormat="of" derivedContent="IEEE.802.1Q_2018"/> and MPLS <xref target="RFC3031" format="default" sectionFormat="of" derivedContent="RFC3031"/> through the more recent
   VXLAN (Virtual eXtensible Local Area Network)  <xref target="RFC7348" format="default" sectionFormat="of" derivedContent="RFC7348"/>
   and NVGRE (Network Virtualization
   Using Generic Routing Encapsulation) <xref target="RFC7637" format="default" sectionFormat="of" derivedContent="RFC7637"/> -- often
   leads to questions about the need for new encapsulation formats and
   what it is about network virtualization in particular that leads to
   their proliferation. Note that the list of protocols presented above is non-exhaustive.</t>
      <t indent="0" pn="section-1-2">
   While many encapsulation protocols seek to simply partition the
   underlay network or bridge two domains, network
   virtualization views the transit network as providing connectivity
   between multiple components of a distributed system.  In many ways,
   this system is similar to a chassis switch with the IP underlay
   network playing the role of the backplane and tunnel endpoints on the
   edge as line cards.  When viewed in this light, the requirements
   placed on the tunneling protocol are significantly different in terms of
   the quantity of metadata necessary and the role of transit nodes.</t>
      <t indent="0" pn="section-1-3">
   Work such as "VL2: A Scalable and Flexible Data Center Network" <xref target="VL2" format="default" sectionFormat="of" derivedContent="VL2"/> and "NVO3 Data Plane Requirements" <xref target="I-D.ietf-nvo3-dataplane-requirements" format="default" sectionFormat="of" derivedContent="NVO3-DATAPLANE"/> 
   have described some of the properties that the data plane must have to support network
   virtualization.  However, one additional defining requirement is the
   need to carry metadata (e.g., system state) along with the packet data; 
   example use cases of metadata are noted below. The use of
   some metadata is certainly not a foreign concept -- nearly all
   protocols used for network virtualization have at least 24 bits of identifier
   space as a way to partition between tenants.  This is often described
   as overcoming the limits of 12-bit VLANs; when seen in that
   context or any context where it is a true tenant identifier, 16
   million possible entries is a large number.  However, the reality is
   that the metadata is not exclusively used to identify tenants, and
   encoding other information quickly starts to crowd the space.  In
   fact, when compared to the tags used to exchange metadata between
   line cards on a chassis switch, 24-bit identifiers start to look
   quite small.  There are nearly endless uses for this metadata,
   ranging from storing input port identifiers for simple security policies to
   sending service-based context for advanced middlebox applications 
   that terminate and re-encapsulate Geneve traffic.</t>
      <t indent="0" pn="section-1-4">
   Existing tunneling protocols have each attempted to solve different
   aspects of these new requirements only to be quickly rendered out of
   date by changing control plane implementations and advancements.
   Furthermore, software and hardware components and controllers all
   have different advantages and rates of evolution -- a fact that should
   be viewed as a benefit, not a liability or limitation.  This document describes Geneve, a protocol that seeks to avoid these problems by
   providing a framework for tunneling for network virtualization rather
   than being prescriptive about the entire system.</t>
      <section anchor="sec-1.1" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.1-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 anchor="sec-1.2" numbered="true" toc="include" removeInRFC="false" pn="section-1.2">
        <name slugifiedName="name-terminology">Terminology</name>
        <t indent="0" pn="section-1.2-1">
   The Network
   Virtualization over Layer 3 (NVO3) Framework <xref target="RFC7365" format="default" sectionFormat="of" derivedContent="RFC7365"/> defines many of the concepts commonly
   used in network virtualization.  In addition, the following terms are
   specifically meaningful in this document:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-1.2-2">
          <dt pn="section-1.2-2.1">Checksum offload:</dt>
          <dd pn="section-1.2-2.2">An optimization implemented by many NICs (Network Interface Controllers)
that enables computation and verification of upper-layer protocol
   checksums in hardware on transmit and receive, respectively.  This
   typically includes IP and TCP/UDP checksums that would otherwise be
   computed by the protocol stack in software.</dd>
          <dt pn="section-1.2-2.3">Clos network:</dt>
          <dd pn="section-1.2-2.4">A technique for composing network fabrics larger than
   a single switch while maintaining non-blocking bandwidth across
   connection points.  ECMP is used to divide traffic across the
   multiple links and switches that constitute the fabric.  Sometimes
   termed "leaf and spine" or "fat tree" topologies.</dd>
          <dt pn="section-1.2-2.5">ECMP:</dt>
          <dd pn="section-1.2-2.6">Equal Cost Multipath. A routing mechanism for selecting from
   among multiple best next-hop paths by hashing packet headers in order
   to better utilize network bandwidth while avoiding reordering of packets 
   within a flow.</dd>
          <dt pn="section-1.2-2.7">Geneve:</dt>
          <dd pn="section-1.2-2.8">Generic Network Virtualization Encapsulation. The tunneling
   protocol described in this document.</dd>
          <dt pn="section-1.2-2.9">LRO:</dt>
          <dd pn="section-1.2-2.10">Large Receive Offload. The receiver-side equivalent function
of LSO, in which multiple protocol segments (primarily TCP) are coalesced into
 larger data units.</dd>
          <dt pn="section-1.2-2.11">LSO:</dt>
          <dd pn="section-1.2-2.12"> Large Segmentation Offload. A function provided by many
   commercial NICs that allows data units larger than the MTU to be
   passed to the NIC to improve performance, the NIC being responsible
   for creating smaller segments of a size less than or equal to the MTU
   with correct protocol headers.  When referring specifically to TCP/IP, this
   feature is often known as TSO (TCP Segmentation Offload).</dd>
          <dt pn="section-1.2-2.13">
   Middlebox:</dt>
          <dd pn="section-1.2-2.14">  In the context of this document, the term "middlebox" refers to network 
   service functions or service interposition appliances that typically implement tunnel endpoint functionality, terminating and re-encapsulating Geneve traffic.</dd>
          <dt pn="section-1.2-2.15">NIC:</dt>
          <dd pn="section-1.2-2.16">Network Interface Controller. Also called "Network Interface Card" or "Network Adapter".
   A NIC could be part of a tunnel endpoint or transit device and can either
   process or aid in the processing of Geneve packets.</dd>
          <dt pn="section-1.2-2.17">
   Transit device:</dt>
          <dd pn="section-1.2-2.18"> A forwarding element (e.g., router or switch) along the path of the tunnel
   making up part of the underlay network.  A transit device may be
   capable of understanding the Geneve packet format but does not
   originate or terminate Geneve packets.</dd>
          <dt pn="section-1.2-2.19">
   Tunnel endpoint:</dt>
          <dd pn="section-1.2-2.20">  A component performing encapsulation and
   decapsulation of packets, such as Ethernet frames or IP datagrams, in
   Geneve headers.  As the ultimate consumer of any tunnel metadata,
   tunnel endpoints have the highest level of requirements for parsing and
   interpreting tunnel headers.  Tunnel endpoints may consist of either
   software or hardware implementations or a combination of the two.
   Tunnel endpoints are frequently a component of a Network Virtualization Edge (NVE)
   but may also be found in middleboxes or other elements making up an NVO3 network.</dd>
          <dt pn="section-1.2-2.21">VM:</dt>
          <dd pn="section-1.2-2.22">Virtual Machine.</dd>
        </dl>
      </section>
    </section>
    <section anchor="sec-2" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-design-requirements">Design Requirements</name>
      <t indent="0" pn="section-2-1">
   Geneve is designed to support network virtualization use cases for data center environments.  In these situations,
   tunnels are typically established to act as a backplane between the
   virtual switches residing in hypervisors, physical switches, or
   middleboxes or other appliances.  An arbitrary IP network can be used
   as an underlay, although Clos networks composed using ECMP links are a
   common choice to provide consistent bisectional bandwidth across all
   connection points. Many of the concepts of network virtualization overlays 
   over IP networks are described in the NVO3 Framework <xref target="RFC7365" format="default" sectionFormat="of" derivedContent="RFC7365"/>.
   <xref target="ref-sample-geneve-deployment" format="default" sectionFormat="of" derivedContent="Figure 1"/> shows an example of a
   hypervisor, a top-of-rack switch for connectivity to physical servers, and a WAN uplink
   connected using Geneve tunnels over a simplified Clos network.  These
   tunnels are used to encapsulate and forward frames from the attached
   components, such as VMs or physical links.</t>
      <figure anchor="ref-sample-geneve-deployment" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-sample-geneve-deployment">Sample Geneve Deployment</name>
        <artwork name="" type="" align="left" alt="" pn="section-2-2.1">
  +---------------------+           +-------+  +------+
  | +--+  +-------+---+ |           |Transit|--|Top of|==Physical
  | |VM|--|       |   | | +------+ /|Router |  | Rack |==Servers
  | +--+  |Virtual|NIC|---|Top of|/ +-------+\/+------+
  | +--+  |Switch |   | | | Rack |\ +-------+/\+------+
  | |VM|--|       |   | | +------+ \|Transit|  |Uplink|   WAN
  | +--+  +-------+---+ |           |Router |--|      |=========&gt;
  +---------------------+           +-------+  +------+
         Hypervisor

              ()===================================()
                      Switch-Switch Geneve Tunnels
</artwork>
      </figure>
      <t indent="0" pn="section-2-3">
   To support the needs of network virtualization, the tunneling protocol
   should be able to take advantage of the differing (and evolving)
   capabilities of each type of device in both the underlay and overlay
   networks.  This results in the following requirements being placed on
   the data plane tunneling protocol:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-2-4">
        <li pn="section-2-4.1">The data plane is generic and extensible enough to support current
      and future control planes.</li>
        <li pn="section-2-4.2">Tunnel components are efficiently implementable in both hardware
      and software without restricting capabilities to the lowest common
      denominator.</li>
        <li pn="section-2-4.3">High performance over existing IP fabrics is maintained.</li>
      </ul>
      <t indent="0" pn="section-2-5">
   These requirements are described further in the following
   subsections.</t>
      <section anchor="sec-2.1" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-control-plane-independence">Control Plane Independence</name>
        <t indent="0" pn="section-2.1-1">
   Although some protocols for network virtualization have included a
   control plane as part of the tunnel format specification (most
   notably, VXLAN <xref target="RFC7348" format="default" sectionFormat="of" derivedContent="RFC7348"/> prescribed a multicast-learning-based control plane), these specifications have largely been treated
   as describing only the data format.  The VXLAN packet format has
   actually seen a wide variety of control planes built on top of it.</t>
        <t indent="0" pn="section-2.1-2">
   There is a clear advantage in settling on a data format: most of the
   protocols are only superficially different and there is little
   advantage in duplicating effort.  However, the same cannot be said of
   control planes, which are diverse in very fundamental ways.  The case
   for standardization is also less clear given the wide variety in
   requirements, goals, and deployment scenarios.</t>
        <t indent="0" pn="section-2.1-3">
   As a result of this reality, Geneve is a pure tunnel format
   specification that is capable of fulfilling the needs of many control
   planes by explicitly not selecting any one of them.  This
   simultaneously promotes a shared data format and reduces the
   chance of obsolescence by future control plane
   enhancements.</t>
      </section>
      <section anchor="sec-2.2" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-data-plane-extensibility">Data Plane Extensibility</name>
        <t indent="0" pn="section-2.2-1">
   Achieving the level of flexibility needed to support current and
   future control planes effectively requires an options infrastructure
   to allow new metadata types to be defined, deployed, and either
   finalized or retired.  Options also allow for differentiation of
   products by encouraging independent development in each vendor's core
   specialty, leading to an overall faster pace of advancement.  By far,
   the most common mechanism for implementing options is the Type-Length-Value (TLV) format.</t>
        <t indent="0" pn="section-2.2-2">
   It should be noted that, while options can be used to support non-wirespeed
   control packets, they are equally important in data packets
   as well for segregating and directing forwarding. (For instance, the
   examples given before regarding input-port-based security policies and
   terminating/re-encapsulating service interposition both require tags
   to be placed on data packets.)  Therefore, while it would be desirable to limit the
   extensibility to only control packets for the purposes of simplifying
   the datapath, that would not satisfy the design requirements.</t>
        <section anchor="sec-2.2.1" numbered="true" toc="include" removeInRFC="false" pn="section-2.2.1">
          <name slugifiedName="name-efficient-implementation">Efficient Implementation</name>
          <t indent="0" pn="section-2.2.1-1">
   There is often a conflict between software flexibility and hardware
   performance that is difficult to resolve.  For a given set of
   functionality, it is obviously desirable to maximize performance.
   However, that does not mean new features that cannot be run at a desired
   speed today should be disallowed.  Therefore, for a protocol to be considered
   efficiently implementable, it is expected to have a set of common capabilities that can
   be reasonably handled across platforms as well as a graceful
   mechanism to handle more advanced features in the appropriate
   situations.</t>
          <t indent="0" pn="section-2.2.1-2">
   The use of a variable-length header and options in a protocol often
   raises questions about whether the protocol is truly efficiently
   implementable in hardware.  To answer this question in the context of Geneve, it is
   important to first divide "hardware" into two categories: tunnel
   endpoints and transit devices.</t>
          <t indent="0" pn="section-2.2.1-3">
   Tunnel endpoints must be able to parse the variable-length header, including any
   options, and take action.  Since these devices are actively
   participating in the protocol, they are the most affected by Geneve.
   However, as tunnel endpoints are the ultimate consumers of the data,
   transmitters can tailor their output to the capabilities of the
   recipient.</t>
          <t indent="0" pn="section-2.2.1-4">
   Transit devices may be able to interpret the options; however, 
   as non-terminating devices, transit devices
   do not originate or terminate the Geneve packet. Hence, they <bcp14>MUST NOT</bcp14> modify Geneve headers and 
   <bcp14>MUST NOT</bcp14> insert or delete options, as that is the responsibility of tunnel endpoints.
   Options, if present in the packet, <bcp14>MUST</bcp14> only be generated and terminated by tunnel endpoints.
   The participation of transit devices in interpreting options is
   <bcp14>OPTIONAL</bcp14>.</t>
          <t indent="0" pn="section-2.2.1-5">
   Further, either tunnel endpoints or transit devices <bcp14>MAY</bcp14> use offload
   capabilities of NICs, such as checksum offload, to improve the
   performance of Geneve packet processing.  The presence of a Geneve
   variable-length header should not prevent the tunnel endpoints and
   transit devices from using such offload capabilities.</t>
        </section>
      </section>
      <section anchor="sec-2.3" numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-use-of-standard-ip-fabrics">Use of Standard IP Fabrics</name>
        <t indent="0" pn="section-2.3-1">
   IP has clearly cemented its place as the dominant transport mechanism,
   and many techniques have evolved over time to make it robust,
   efficient, and inexpensive.  As a result, it is natural to use IP
   fabrics as a transit network for Geneve.  Fortunately, the use of IP
   encapsulation and addressing is enough to achieve the primary goal of
   delivering packets to the correct point in the network through
   standard switching and routing.</t>
        <t indent="0" pn="section-2.3-2">
   In addition, nearly all underlay fabrics are designed to exploit
   parallelism in traffic to spread load across multiple links without
   introducing reordering in individual flows.  These ECMP techniques typically involve parsing and hashing
   the addresses and port numbers from the packet to select an outgoing
   link.  However, the use of tunnels often results in poor ECMP
   performance, as without additional knowledge of the protocol, the
   encapsulated traffic is hidden from the fabric by design, and only
   tunnel endpoint addresses are available for hashing.</t>
        <t indent="0" pn="section-2.3-3">
   Since it is desirable for Geneve to perform well on these existing
   fabrics, it is necessary for entropy from encapsulated packets to be
   exposed in the tunnel header.  The most common technique for this is
   to use the UDP source port, which is discussed further in
   <xref target="sec-3.3" format="default" sectionFormat="of" derivedContent="Section 3.3"/>.</t>
      </section>
    </section>
    <section anchor="sec-3" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-geneve-encapsulation-detail">Geneve Encapsulation Details</name>
      <t indent="0" pn="section-3-1">
   The Geneve packet format consists of a compact tunnel header
   encapsulated in UDP over either IPv4 or IPv6.  A small fixed tunnel
   header provides control information plus a base level of
   functionality and interoperability with a focus on simplicity.  This
   header is then followed by a set of variable-length options to allow for
   future innovation.  Finally, the payload consists of a protocol data
   unit of the indicated type, such as an Ethernet frame. Sections <xref target="sec-3.1" format="counter" sectionFormat="of" derivedContent="3.1"/>
   and <xref target="sec-3.2" format="counter" sectionFormat="of" derivedContent="3.2"/> illustrate the Geneve packet format transported (for
   example) over Ethernet along with an Ethernet payload.</t>
      <section anchor="sec-3.1" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-geneve-packet-format-over-i">Geneve Packet Format over IPv4</name>
        <figure align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-geneve-packet-format-over-ip">Geneve Packet Format over IPv4</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.1-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 Ethernet Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Outer Destination MAC Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Outer Destination MAC Address |   Outer Source MAC Address    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Outer Source MAC Address                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Optional Ethertype=C-Tag 802.1Q|  Outer VLAN Tag Information   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Ethertype = 0x0800 IPv4    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Outer IPv4 Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version|  IHL  |Type of Service|          Total Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identification        |Flags|      Fragment Offset    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Time to Live |Protocol=17 UDP|         Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Outer Source IPv4 Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Outer Destination IPv4 Address              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Outer UDP Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Source Port = xxxx      |    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                    ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Inner Ethernet Header (example payload):
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Inner Destination MAC Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Inner Destination MAC Address |   Inner Source MAC Address    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Inner Source MAC Address                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Optional Ethertype=C-Tag 802.1Q|  Inner VLAN Tag Information   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Payload:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Ethertype of Original Payload |                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
   |                                  Original Ethernet Payload    |
   |                                                               |
   ~ (Note that the original Ethernet frame's preamble, start      ~
   | frame delimiter (SFD), and frame check sequence (FCS) are not |
   | included, and the Ethernet payload need not be 4-byte aligned)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Frame Check Sequence:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   New Frame Check Sequence (FCS) for Outer Ethernet Frame     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
      </section>
      <section anchor="sec-3.2" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-geneve-packet-format-over-ipv">Geneve Packet Format over IPv6</name>
        <figure align="left" suppress-title="false" pn="figure-3">
          <name slugifiedName="name-geneve-packet-format-over-ipv6">Geneve Packet Format over IPv6</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.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

Outer Ethernet Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Outer Destination MAC Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Outer Destination MAC Address |   Outer Source MAC Address    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Outer Source MAC Address                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Optional Ethertype=C-Tag 802.1Q|  Outer VLAN Tag Information   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Ethertype = 0x86DD IPv6    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Outer IPv6 Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version| Traffic Class |           Flow Label                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Payload Length        | NxtHdr=17 UDP |   Hop Limit   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                     Outer Source IPv6 Address                 +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                  Outer Destination IPv6 Address               +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Outer UDP Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Source Port = xxxx      |    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                    ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Inner Ethernet Header (example payload):
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Inner Destination MAC Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Inner Destination MAC Address |   Inner Source MAC Address    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Inner Source MAC Address                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Optional Ethertype=C-Tag 802.1Q|  Inner VLAN Tag Information   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Payload:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Ethertype of Original Payload |                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
   |                                  Original Ethernet Payload    |
   |                                                               |
   ~ (Note that the original Ethernet frame's preamble, start      ~
   | frame delimiter (SFD), and frame check sequence (FCS) are not |
   | included, and the Ethernet payload need not be 4-byte aligned)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Frame Check Sequence:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   New Frame Check Sequence (FCS) for Outer Ethernet Frame     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
      </section>
      <section anchor="sec-3.3" numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-udp-header">UDP Header</name>
        <t indent="0" pn="section-3.3-1">
   The use of an encapsulating UDP <xref target="RFC0768" format="default" sectionFormat="of" derivedContent="RFC0768"/> header follows the
   connectionless semantics of Ethernet and IP in addition to providing
   entropy to routers performing ECMP.  Therefore, header fields are 
   interpreted as follows:</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-3.3-2">
          <dt pn="section-3.3-2.1">Source Port:</dt>
          <dd pn="section-3.3-2.2">
            <t indent="0" pn="section-3.3-2.2.1">
	A source port selected by the originating tunnel endpoint.  This source port <bcp14>SHOULD</bcp14> be the same for all packets
      belonging to a single encapsulated flow to prevent reordering due
      to the use of different paths.  To encourage an even distribution
      of flows across multiple links, the source port <bcp14>SHOULD</bcp14> be
      calculated using a hash of the encapsulated packet headers using,
      for example, a traditional 5-tuple.  Since the port represents a
      flow identifier rather than a true UDP connection, the entire
      16-bit range <bcp14>MAY</bcp14> be used to maximize entropy. In addition to setting the source port, 
      for IPv6, the flow label <bcp14>MAY</bcp14> also be used for providing entropy. For an example of 
      using the IPv6 flow label for tunnel use cases, see <xref target="RFC6438" format="default" sectionFormat="of" derivedContent="RFC6438"/>. 
            </t>
            <t indent="0" pn="section-3.3-2.2.2">
	If Geneve traffic is shared with other UDP listeners 
	on the same IP address, tunnel endpoints <bcp14>SHOULD</bcp14> implement a mechanism 
	to ensure ICMP return traffic arising from network errors is directed 
	to the correct listener. The definition of such a mechanism is beyond 
	the scope of this document.
            </t>
          </dd>
          <dt pn="section-3.3-2.3">Dest Port:</dt>
          <dd pn="section-3.3-2.4">
            <t indent="0" pn="section-3.3-2.4.1">
	IANA has assigned port 6081 as the fixed well-known destination port
	for Geneve.  Although the well-known value should be used by default, it is <bcp14>RECOMMENDED</bcp14> that implementations make
      this configurable.  The chosen port is used for identification of
      Geneve packets and <bcp14>MUST NOT</bcp14> be reversed for different ends of a
      connection as is done with TCP. It is the responsibility of the control plane to manage any reconfiguration of the assigned port and its interpretation by respective devices.
      The definition of the control plane is beyond the scope of this document.
            </t>
          </dd>
          <dt pn="section-3.3-2.5">UDP Length:</dt>
          <dd pn="section-3.3-2.6">
            <t indent="0" pn="section-3.3-2.6.1">
	The length of the UDP packet including the UDP header.</t>
          </dd>
          <dt pn="section-3.3-2.7">UDP Checksum:</dt>
          <dd pn="section-3.3-2.8">
            <t indent="0" pn="section-3.3-2.8.1">
	In order to protect the Geneve header, options, and payload from
	potential data corruption, the UDP checksum <bcp14>SHOULD</bcp14> be generated as 
	specified in <xref target="RFC0768" format="default" sectionFormat="of" derivedContent="RFC0768"/> and <xref target="RFC1122" format="default" sectionFormat="of" derivedContent="RFC1122"/> when 
	Geneve is encapsulated in IPv4. To protect the IP header, Geneve header, 
	options, and payload from potential data corruption, the UDP checksum <bcp14>MUST</bcp14> 
	be generated by default as specified in <xref target="RFC0768" format="default" sectionFormat="of" derivedContent="RFC0768"/> 
	and <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/> when Geneve
	is encapsulated in IPv6, except under certain conditions, which are outlined in the next paragraph. 
	Upon receiving such packets with a non-zero UDP checksum, 
	the receiving tunnel endpoints <bcp14>MUST</bcp14> validate the checksum.
	If the checksum is not correct, the packet <bcp14>MUST</bcp14> be dropped; otherwise, 
	the packet <bcp14>MUST</bcp14> be accepted for decapsulation.
            </t>
            <t indent="0" pn="section-3.3-2.8.2">
	Under certain conditions, the UDP checksum <bcp14>MAY</bcp14> be set to zero on transmit
	for packets encapsulated in both IPv4 and IPv6 <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/>.
	See <xref target="sec-4.3" format="default" sectionFormat="of" derivedContent="Section 4.3"/> for additional
	requirements that apply when using zero 
	UDP checksum with IPv4 and IPv6. Disabling the use of UDP checksums is 
	an operational consideration that should take into account the risks
       	and effects of packet corruption.
            </t>
          </dd>
        </dl>
      </section>
      <section anchor="sec-3.4" numbered="true" toc="include" removeInRFC="false" pn="section-3.4">
        <name slugifiedName="name-tunnel-header-fields">Tunnel Header Fields</name>
        <dl newline="false" spacing="normal" indent="3" pn="section-3.4-1">
          <dt pn="section-3.4-1.1">Ver (2 bits):</dt>
          <dd pn="section-3.4-1.2">
            <t indent="0" pn="section-3.4-1.2.1">
	The current version number is 0.  Packets received by a tunnel endpoint with an unknown version <bcp14>MUST</bcp14> be dropped. Transit 
      devices interpreting Geneve packets with an unknown
      version number <bcp14>MUST</bcp14> treat them as UDP packets with an unknown
      payload.
            </t>
          </dd>
          <dt pn="section-3.4-1.3">Opt Len (6 bits):</dt>
          <dd pn="section-3.4-1.4">
            <t indent="0" pn="section-3.4-1.4.1">
	The length of the option fields, expressed in 4-byte multiples, not including the 8-byte fixed tunnel
      header.  This results in a minimum total Geneve header size of 8
      bytes and a maximum of 260 bytes.  The start of the payload
      headers can be found using this offset from the end of the base
      Geneve header.
            </t>
            <t indent="0" pn="section-3.4-1.4.2">
   Transit devices <bcp14>MUST</bcp14> maintain consistent forwarding behavior
   irrespective of the value of 'Opt Len', including ECMP link
   selection.
            </t>
          </dd>
          <dt pn="section-3.4-1.5">O (1 bit):</dt>
          <dd pn="section-3.4-1.6">
            <t indent="0" pn="section-3.4-1.6.1">
	Control packet.  This packet contains a control message. Control messages are sent between tunnel endpoints.
      Tunnel endpoints <bcp14>MUST NOT</bcp14> forward the payload,
      and transit devices <bcp14>MUST NOT</bcp14> attempt to interpret it.
      Since control messages are less frequent, it is <bcp14>RECOMMENDED</bcp14>
      that tunnel endpoints direct these packets to a high-priority control
      queue (for example, to direct the packet to a general purpose CPU
      from a forwarding Application-Specific Integrated Circuit (ASIC) or to separate out control traffic on a
      NIC).  Transit devices <bcp14>MUST NOT</bcp14> alter forwarding behavior on the
      basis of this bit, such as ECMP link selection.
            </t>
          </dd>
          <dt pn="section-3.4-1.7">C (1 bit):</dt>
          <dd pn="section-3.4-1.8">
            <t indent="0" pn="section-3.4-1.8.1">
	Critical options present.  One or more options has the critical bit set (see <xref target="sec-3.5" format="default" sectionFormat="of" derivedContent="Section 3.5"/>).  If this bit is set, then
      tunnel endpoints <bcp14>MUST</bcp14> parse the options list to interpret any
      critical options.  On tunnel endpoints where option parsing is not
      supported, the packet <bcp14>MUST</bcp14> be dropped on the basis of the 'C' bit
      in the base header.  If the bit is not set, tunnel endpoints <bcp14>MAY</bcp14>
      strip all options using 'Opt Len' and forward the decapsulated
      packet.  Transit devices <bcp14>MUST NOT</bcp14> drop packets on the
      basis of this bit.
            </t>
          </dd>
          <dt pn="section-3.4-1.9">Rsvd. (6 bits):</dt>
          <dd pn="section-3.4-1.10">
            <t indent="0" pn="section-3.4-1.10.1">
	Reserved field, which <bcp14>MUST</bcp14> be zero on transmission and <bcp14>MUST</bcp14> be ignored on receipt.
            </t>
          </dd>
          <dt pn="section-3.4-1.11">Protocol Type (16 bits):</dt>
          <dd pn="section-3.4-1.12">
            <t indent="0" pn="section-3.4-1.12.1">
	The type of protocol data unit appearing after the Geneve header.  This follows the Ethertype
      <xref target="ETYPES" format="default" sectionFormat="of" derivedContent="ETYPES"/> convention, with Ethernet itself being represented by the
      value 0x6558.
            </t>
          </dd>
          <dt pn="section-3.4-1.13">Virtual Network Identifier (VNI) (24 bits):</dt>
          <dd pn="section-3.4-1.14">
            <t indent="0" pn="section-3.4-1.14.1">
	An identifier for a unique element of a virtual network.  In many situations, this may
      represent an L2 segment; however, the control plane defines the
      forwarding semantics of decapsulated packets.  The VNI <bcp14>MAY</bcp14> be used
      as part of ECMP forwarding decisions or <bcp14>MAY</bcp14> be used as a mechanism
      to distinguish between overlapping address spaces contained in the
      encapsulated packet when load balancing across CPUs.
            </t>
          </dd>
          <dt pn="section-3.4-1.15">Reserved (8 bits):</dt>
          <dd pn="section-3.4-1.16">
            <t indent="0" pn="section-3.4-1.16.1">
	Reserved field, which <bcp14>MUST</bcp14> be zero on transmission and ignored on receipt.
            </t>
          </dd>
        </dl>
      </section>
      <section anchor="sec-3.5" numbered="true" toc="include" removeInRFC="false" pn="section-3.5">
        <name slugifiedName="name-tunnel-options">Tunnel Options</name>
        <figure anchor="geneve-options" align="left" suppress-title="false" pn="figure-4">
          <name slugifiedName="name-geneve-option">Geneve Option</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.5-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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Option Class         |      Type     |R|R|R| Length  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                  Variable-Length Option Data                  ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <t indent="0" pn="section-3.5-2">
   The base Geneve header is followed by zero or more options in Type-Length-Value format.  Each option consists of a 4-byte option
   header and a variable amount of option data interpreted according to
   the type.</t>
        <dl newline="false" spacing="normal" indent="3" pn="section-3.5-3">
          <dt pn="section-3.5-3.1">Option Class (16 bits):</dt>
          <dd pn="section-3.5-3.2">
            <t indent="0" pn="section-3.5-3.2.1">
	Namespace for the 'Type' field.  IANA has created a "Geneve Option Class" registry to
      allocate identifiers for organizations, technologies, and vendors
      that have an interest in creating types for options.  Each
      organization may allocate types independently to allow
      experimentation and rapid innovation.  It is expected that, over
      time, certain options will become well known, and a given
      implementation may use option types from a variety of sources.  In
      addition, IANA has reserved specific ranges for
      allocation by IETF Review and for Experimental Use (see <xref target="sec-7" format="default" sectionFormat="of" derivedContent="Section 7"/>).
            </t>
          </dd>
          <dt pn="section-3.5-3.3">Type (8 bits):</dt>
          <dd pn="section-3.5-3.4">
            <t indent="0" pn="section-3.5-3.4.1">
	Type indicating the format of the data contained in this option.  Options are primarily designed to encourage future
      extensibility and innovation, and standardized forms of these
      options will be defined in separate documents.
            </t>
            <t indent="0" pn="section-3.5-3.4.2">
	The high-order bit of the option type indicates that this is a
      critical option.  If the receiving tunnel endpoint does not recognize
      the option and this bit is set, then the packet <bcp14>MUST</bcp14> be dropped.
      If this bit is set in any option, then the 'C' bit in the
      Geneve base header <bcp14>MUST</bcp14> also be set.  Transit devices <bcp14>MUST NOT</bcp14>
      drop packets on the basis of this bit.  The following figure shows
      the location of the 'C' bit in the 'Type' field:
            </t>
          </dd>
        </dl>
        <figure align="left" suppress-title="false" pn="figure-5">
          <name slugifiedName="name-c-bit-in-the-type-field">'C' Bit in the 'Type' Field</name>
          <artwork name="" type="" align="left" alt="" pn="section-3.5-4.1">
   0 1 2 3 4 5 6 7 8
   +-+-+-+-+-+-+-+-+
   |C|    Type     |
   +-+-+-+-+-+-+-+-+
</artwork>
        </figure>
        <dl newline="false" spacing="normal" indent="3" pn="section-3.5-5">
          <dt pn="section-3.5-5.1"/>
          <dd pn="section-3.5-5.2">
      The requirement to drop a packet with an unknown option with the 'C' bit set
      applies to the entire tunnel endpoint system and not a particular
      component of the implementation.  For example, in a system
      comprised of a forwarding ASIC and a general purpose CPU, this
      does not mean that the packet must be dropped in the ASIC.  An
      implementation may send the packet to the CPU using a rate-limited
      control channel for slow-path exception handling.</dd>
        </dl>
        <dl newline="false" spacing="normal" indent="3" pn="section-3.5-6">
          <dt pn="section-3.5-6.1">R (3 bits):</dt>
          <dd pn="section-3.5-6.2">
	Option control flags reserved for future use.  These bits <bcp14>MUST</bcp14> be
	zero on transmission and <bcp14>MUST</bcp14> be ignored on receipt.
	</dd>
          <dt pn="section-3.5-6.3">Length (5 bits):</dt>
          <dd pn="section-3.5-6.4">
            <t indent="0" pn="section-3.5-6.4.1">
	Length of the option, expressed in 4-byte
	multiples, excluding the option header.  The total length of each
	option may be between 4 and 128 bytes. A value of 0 in the 'Length' field implies
       	an option with only an option header and no option data. Packets in which the total
      length of all options is not equal to the 'Opt Len' in the base
      header are invalid and <bcp14>MUST</bcp14> be silently dropped if received by a
      tunnel endpoint that processes the options.
            </t>
          </dd>
          <dt pn="section-3.5-6.5">Variable-Length Option Data:</dt>
          <dd pn="section-3.5-6.6">
            <t indent="0" pn="section-3.5-6.6.1">
	Option data interpreted according to 'Type'.
            </t>
          </dd>
        </dl>
        <section anchor="sec-3.5.1" numbered="true" toc="include" removeInRFC="false" pn="section-3.5.1">
          <name slugifiedName="name-options-processing">Options Processing</name>
          <t indent="0" pn="section-3.5.1-1">
   Geneve options are intended to be originated and processed
   by tunnel endpoints.  However, options <bcp14>MAY</bcp14> be interpreted by transit
   devices along the tunnel path.  Transit devices not
   interpreting Geneve headers (which may or may not include options) <bcp14>MUST</bcp14> handle
   Geneve packets as any other UDP packet and maintain consistent forwarding behavior.</t>
          <t indent="0" pn="section-3.5.1-2">
   In tunnel endpoints, the generation and interpretation of options is
   determined by the control plane, which is beyond the scope of this
   document.  However, to ensure interoperability between heterogeneous
   devices, some requirements are imposed on options and the devices that
   process them:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.5.1-3">
            <li pn="section-3.5.1-3.1">Receiving tunnel endpoints <bcp14>MUST</bcp14> drop packets containing unknown options
      with the 'C' bit set in the option type.  Conversely, transit
      devices <bcp14>MUST NOT</bcp14> drop packets as a result of encountering unknown
      options, including those with the 'C' bit set.</li>
            <li pn="section-3.5.1-3.2">The contents of the options and their ordering <bcp14>MUST NOT</bcp14> be
      modified by transit devices.</li>
            <li pn="section-3.5.1-3.3">If a tunnel endpoint receives a Geneve packet with an 'Opt Len' (the total length of all options) 
	that exceeds the options-processing capability of the tunnel endpoint, then 
	the tunnel endpoint <bcp14>MUST</bcp14> drop such packets. An implementation may raise an 
	exception to the control plane in such an event. It is the responsibility 
	of the control plane to ensure the communicating peer tunnel endpoints 
	have the processing capability to handle the total length of options. 
	The definition of the control plane is beyond the scope of this document.</li>
          </ul>
          <t indent="0" pn="section-3.5.1-4">
   When designing a Geneve option, it is important to consider how the
   option will evolve in the future.  Once an option is defined, it is
   reasonable to expect that implementations may come to depend on a
   specific behavior.  As a result, the scope of any future changes must
   be carefully described upfront.</t>
          <t indent="0" pn="section-3.5.1-5">
   Architecturally, options are intended to be self descriptive and independent. 
   This enables parallelism in options processing and reduces implementation complexity.
   However, the control plane may impose certain ordering restrictions, as 
   described in <xref target="sec-4.5.1" format="default" sectionFormat="of" derivedContent="Section 4.5.1"/>.</t>
          <t indent="0" pn="section-3.5.1-6">
   Unexpectedly significant interoperability issues may result from
   changing the length of an option that was defined to be a certain
   size.  A particular option is specified to have either a fixed
   length, which is constant, or a variable length, which may change
   over time or for different use cases.  This property is part of the
   definition of the option and is conveyed by the 'Type'.  For fixed-length options, some implementations may choose to ignore the 'Length'
   field in the option header and instead parse based on the well-known
   length associated with the type.  In this case, redefining the length
   will impact not only the parsing of the option in question but also any
   options that follow.  Therefore, options that are defined to be a fixed
   length in size <bcp14>MUST NOT</bcp14> be redefined to a different length.  Instead,
   a new 'Type' should be allocated. Actual definition of the option type is beyond 
   the scope of this document.  The option type and its interpretation should be 
   defined by the entity that owns the option class.</t>
          <t indent="0" pn="section-3.5.1-7">
   Options may be processed by NIC hardware utilizing offloads (e.g., LSO and LRO) 
   as described in <xref target="sec-4.6" format="default" sectionFormat="of" derivedContent="Section 4.6"/>. Careful consideration should be 
   given to how the offload capabilities outlined in <xref target="sec-4.6" format="default" sectionFormat="of" derivedContent="Section 4.6"/> 
   impact an option's design.
          </t>
        </section>
      </section>
    </section>
    <section anchor="sec-4" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-implementation-and-deployme">Implementation and Deployment Considerations</name>
      <section anchor="sec-4.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-applicability-statement">Applicability Statement</name>
        <t indent="0" pn="section-4.1-1">
	Geneve is a UDP-based network virtualization overlay encapsulation protocol
	designed to establish tunnels between NVEs over an existing IP network.
	It is intended for use in public or private data center environments, 
	for deploying multi-tenant overlay networks over an existing IP underlay network.</t>
        <t indent="0" pn="section-4.1-2">
	As a UDP-based protocol, Geneve adheres 
	to the UDP usage guidelines as specified in <xref target="RFC8085" format="default" sectionFormat="of" derivedContent="RFC8085"/>. 
	The applicability of these guidelines is dependent on the underlay
	IP network and the nature of the Geneve payload protocol
	(for example, TCP/IP, IP/Ethernet).</t>
        <t indent="0" pn="section-4.1-3">
	Geneve is intended to be deployed in a data center network environment 
	operated by a single operator or an adjacent set of cooperating network 
	operators that fits with the definition of controlled environments
       	in <xref target="RFC8085" format="default" sectionFormat="of" derivedContent="RFC8085"/>. A network in a controlled environment can be
	managed to operate under certain conditions, whereas in the general
   	Internet, this cannot be done.  Hence, requirements for a tunneling
   	protocol operating under a controlled environment can be less
   	restrictive than the requirements of the general Internet.
        </t>
        <t indent="0" pn="section-4.1-4">
	For the purpose of this document, a traffic-managed controlled environment
	(TMCE) is defined as an IP network that is traffic engineered and/or otherwise
	managed (e.g., via use of traffic rate limiters) to avoid congestion. The concept
	of a TMCE is outlined in <xref target="RFC8086" format="default" sectionFormat="of" derivedContent="RFC8086"/>. Significant portions of the text 
	in <xref target="sec-4.1" format="default" sectionFormat="of" derivedContent="Section 4.1"/> through <xref target="sec-4.3" format="default" sectionFormat="of" derivedContent="Section 4.3"/> are based 
	on <xref target="RFC8086" format="default" sectionFormat="of" derivedContent="RFC8086"/> as applicable to Geneve.</t>
        <t indent="0" pn="section-4.1-5">
	It is the responsibility of the operator to ensure that the guidelines/requirements
	in this section are followed as applicable to their Geneve deployment(s).</t>
      </section>
      <section anchor="sec-4.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-congestion-control-function">Congestion-Control Functionality</name>
        <t indent="0" pn="section-4.2-1">
	Geneve does not natively provide congestion-control functionality and relies
	on the payload protocol traffic for congestion control. As such, Geneve <bcp14>MUST</bcp14>
	be used with congestion-controlled traffic or within a TMCE to avoid congestion. An operator of a TMCE may avoid congestion through careful provisioning
	of their networks, rate-limiting user data traffic, and managing traffic 
	engineering according to path capacity.</t>
      </section>
      <section anchor="sec-4.3" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-udp-checksum">UDP Checksum</name>
        <t indent="0" pn="section-4.3-1">
	The outer UDP checksum <bcp14>SHOULD</bcp14> be used with Geneve when transported
   over IPv4; this is to provide integrity for the Geneve headers,
   options, and payload in case of data corruption (for example, to
   avoid misdelivery of the payload to different tenant systems).  The UDP checksum provides a statistical guarantee 
	that a payload was not corrupted in transit. These integrity checks are not 
	strong from a coding or cryptographic perspective and are not designed to 
	detect physical-layer errors or malicious modification of the datagram 
	(see <xref target="RFC8085" sectionFormat="of" section="3.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8085#section-3.4" derivedContent="RFC8085"/>). In deployments where such a risk exists, 
	an operator <bcp14>SHOULD</bcp14> use additional data integrity
	mechanisms such as those offered 
	by IPsec (see <xref target="sec-6.2" format="default" sectionFormat="of" derivedContent="Section 6.2"/>).</t>
        <t indent="0" pn="section-4.3-2">
	An operator <bcp14>MAY</bcp14> choose to disable UDP checksums
	and use zero UDP checksum if Geneve packet integrity is provided by other data
	integrity mechanisms, such as IPsec or additional checksums, or if one of
	the conditions (a, b, or c) in <xref target="sec-4.3.1" format="default" sectionFormat="of" derivedContent="Section 4.3.1"/> is met.</t>
        <t indent="0" pn="section-4.3-3">
	By default, UDP checksums <bcp14>MUST</bcp14> be used when Geneve is transported over IPv6.
	A tunnel endpoint <bcp14>MAY</bcp14> be configured for use with zero UDP checksum if 
	additional requirements in <xref target="sec-4.3.1" format="default" sectionFormat="of" derivedContent="Section 4.3.1"/> are met.</t>
        <section anchor="sec-4.3.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.3.1">
          <name slugifiedName="name-zero-udp-checksum-handling-">Zero UDP Checksum Handling with IPv6</name>
          <t indent="0" pn="section-4.3.1-1">
	When Geneve is used over IPv6, the UDP checksum is used to protect IPv6 headers, 
	UDP headers, and Geneve headers, options, and payload from potential data corruption.
	As such, by default, Geneve <bcp14>MUST</bcp14> use UDP checksums when transported over IPv6.
	An operator <bcp14>MAY</bcp14> choose to configure zero UDP checksum if 
	operating in a TMCE as stated in 
	<xref target="sec-4.1" format="default" sectionFormat="of" derivedContent="Section 4.1"/> if one of the following conditions is met.</t>
          <ol spacing="normal" type="a" indent="adaptive" start="1" pn="section-4.3.1-2">
            <li pn="section-4.3.1-2.1" derivedCounter="a.">It is known that packet corruption is exceptionally
	unlikely (perhaps based on knowledge of equipment types in their underlay 
	network) and the operator is willing to risk undetected packet
	    corruption.</li>
            <li pn="section-4.3.1-2.2" derivedCounter="b.">It is judged through observational measurements (perhaps through historic
	or current traffic flows that use non-zero checksum) that the level of packet
	corruption is tolerably low and is where the operator is willing to risk undetected corruption.</li>
            <li pn="section-4.3.1-2.3" derivedCounter="c.">The Geneve payload is carrying applications that are tolerant of misdelivered 
	or corrupted packets (perhaps through higher-layer checksum validation
	and/or reliability through retransmission). </li>
          </ol>
          <t indent="0" pn="section-4.3.1-3"> In addition, Geneve tunnel implementations using zero UDP checksum <bcp14>MUST</bcp14> meet
		the following requirements:</t>
          <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-4.3.1-4">
            <li pn="section-4.3.1-4.1" derivedCounter="1.">Use of UDP checksum over IPv6 <bcp14>MUST</bcp14> be the default 
	configuration for all Geneve tunnels.</li>
            <li pn="section-4.3.1-4.2" derivedCounter="2.">If Geneve is used with zero UDP checksum over IPv6, then such
	    a tunnel
	endpoint implementation <bcp14>MUST</bcp14> meet all the requirements specified
	in <xref target="RFC6936" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6936#section-4" derivedContent="RFC6936"/> and requirement 1 as specified in <xref target="RFC6936" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6936#section-5" derivedContent="RFC6936"/> since it is relevant to Geneve.</li>
            <li pn="section-4.3.1-4.3" derivedCounter="3.">The Geneve tunnel endpoint that decapsulates the tunnel
	    <bcp14>SHOULD</bcp14> check that the 
	source and destination IPv6 addresses are valid for the Geneve tunnel that
	is configured to receive zero UDP checksum and discard other packets 
	for which such a check fails.</li>
            <li pn="section-4.3.1-4.4" derivedCounter="4.">
              <t indent="0" pn="section-4.3.1-4.4.1">The Geneve tunnel endpoint that encapsulates the tunnel <bcp14>MAY</bcp14> use different
	IPv6 source addresses for each Geneve tunnel that uses zero UDP checksum mode
	in order to strengthen the decapsulator's check of the IPv6 source address
	(i.e., the same IPv6 source address is not to be used with more than one IPv6
	destination address, irrespective of whether that destination address is
	a unicast or multicast address). When this is not possible, it is <bcp14>RECOMMENDED</bcp14>
	to use each source address for as few Geneve tunnels that use zero UDP
	checksum as is feasible.
              </t>
              <t indent="0" pn="section-4.3.1-4.4.2">
	Note that for requirements 3 and 4, the receiving tunnel endpoint can apply 
	these checks only if it has out-of-band knowledge that the encapsulating tunnel 
	endpoint is applying the indicated behavior. One possibility to obtain this out-of-band 
	knowledge is through signaling by the control plane. The definition of 
	the control plane is beyond the scope of this document.</t>
            </li>
            <li pn="section-4.3.1-4.5" derivedCounter="5.">Measures <bcp14>SHOULD</bcp14> be taken to prevent Geneve traffic over IPv6 with zero UDP 
	checksum from escaping into the general Internet. Examples of such measures include
	employing packet filters at the gateways or edge of the Geneve network and/or 
	keeping logical or physical separation of the Geneve network from networks 
	carrying general Internet traffic.</li>
          </ol>
          <t indent="0" pn="section-4.3.1-5"> The above requirements do not change the requirements
	specified in either <xref target="RFC8200" format="default" sectionFormat="of" derivedContent="RFC8200"/> or
	<xref target="RFC6936" format="default" sectionFormat="of" derivedContent="RFC6936"/>.
          </t>
          <t indent="0" pn="section-4.3.1-6">The use of the source IPv6 address in addition to the
	destination IPv6 address, plus the recommendation against
 	reuse of source IPv6 addresses among Geneve tunnels, collectively
	provide some mitigation for the absence of UDP checksum coverage of
	the IPv6 header. A traffic-managed controlled environment that satisfies
       	at least one of the three conditions listed at the beginning of
	this section provides additional assurance.
          </t>
        </section>
      </section>
      <section anchor="sec-4.4" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-encapsulation-of-geneve-in-">Encapsulation of Geneve in IP</name>
        <t indent="0" pn="section-4.4-1">
   As an IP-based tunneling protocol, Geneve shares many properties and
   techniques with existing protocols.  The application of some of these
   are described in further detail, although, in general, most concepts
   applicable to the IP layer or to IP tunnels generally also function
   in the context of Geneve.</t>
        <section anchor="sec-4.4.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.1">
          <name slugifiedName="name-ip-fragmentation">IP Fragmentation</name>
          <t indent="0" pn="section-4.4.1-1">
   It is <bcp14>RECOMMENDED</bcp14> that Path MTU Discovery (see <xref target="RFC1191" format="default" sectionFormat="of" derivedContent="RFC1191"/> and <xref target="RFC8201" format="default" sectionFormat="of" derivedContent="RFC8201"/>) be used to prevent or minimize fragmentation.
   The use of Path MTU Discovery on the transit network provides the
   encapsulating tunnel endpoint with soft-state information about the link that it may use
   to prevent or minimize fragmentation depending on its role in the
   virtualized network. The NVE can maintain this state (the MTU size of
   the tunnel link(s) associated with the tunnel endpoint), so if a
   tenant system sends large packets that, when encapsulated, exceed the
   MTU size of the tunnel link, the tunnel endpoint can discard such
   packets and send exception messages to the tenant system(s). If the
   tunnel endpoint is associated with a routing or forwarding function and/or has the capability
   to send ICMP messages, the encapsulating tunnel endpoint <bcp14>MAY</bcp14> send ICMP fragmentation 
   needed <xref target="RFC0792" format="default" sectionFormat="of" derivedContent="RFC0792"/> or Packet Too Big <xref target="RFC4443" format="default" sectionFormat="of" derivedContent="RFC4443"/> messages to the tenant system(s).
   When determining the MTU size of a tunnel link, the maximum length of options <bcp14>MUST</bcp14> be assumed as options may vary 
   on a per-packet basis. Recommendations and guidance for handling fragmentation in
   similar overlay encapsulation services like Pseudowire Emulation
	  Edge-to-Edge (PWE3) are provided in <xref target="RFC3985" sectionFormat="of" section="5.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3985#section-5.3" derivedContent="RFC3985"/>.</t>
          <t indent="0" pn="section-4.4.1-2">
   Note that some implementations may not be capable of supporting
   fragmentation or other less common features of the IP header, such as
   options and extension headers. Some of the issues associated 
   with MTU size and fragmentation in IP tunneling and use of ICMP messages are
   outlined in <xref target="I-D.ietf-intarea-tunnels" sectionFormat="of" section="4.2" format="default" derivedLink="https://tools.ietf.org/html/draft-ietf-intarea-tunnels-10#section-4.2" derivedContent="INTAREA-TUNNELS"/>.</t>
        </section>
        <section anchor="sec-4.4.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.2">
          <name slugifiedName="name-dscp-ecn-and-ttl">DSCP, ECN, and TTL</name>
          <t indent="0" pn="section-4.4.2-1">
   When encapsulating IP (including over Ethernet) packets in Geneve,
   there are several considerations for propagating Differentiated Services
   Code Point (DSCP) and Explicit Congestion Notification (ECN) bits
   from the inner header to the tunnel on transmission and the reverse
   on reception.</t>
          <t indent="0" pn="section-4.4.2-2">
   <xref target="RFC2983" format="default" sectionFormat="of" derivedContent="RFC2983"/> provides guidance for mapping DSCP between inner and outer
   IP headers.  Network virtualization is typically more closely aligned
   with the Pipe model described, where the DSCP value on the tunnel
   header is set based on a policy (which may be a fixed value, one
   based on the inner traffic class or some other mechanism for
   grouping traffic).  Aspects of the Uniform model (which treats the
   inner and outer DSCP values as a single field by copying on ingress
   and egress) may also apply, such as the ability to re-mark the inner
   header on tunnel egress based on transit marking.  However, the
   Uniform model is not conceptually consistent with network
   virtualization, which seeks to provide strong isolation between
   encapsulated traffic and the physical network.</t>
          <t indent="0" pn="section-4.4.2-3">
   <xref target="RFC6040" format="default" sectionFormat="of" derivedContent="RFC6040"/> describes the mechanism for exposing ECN capabilities on IP
   tunnels and propagating congestion markers to the inner packets.
   This behavior <bcp14>MUST</bcp14> be followed for IP packets encapsulated in Geneve.</t>
          <t indent="0" pn="section-4.4.2-4">
   Though either the Uniform or Pipe models could be used for handling TTL (or Hop Limit in case of IPv6) when tunneling IP packets, the Pipe model is more consistent with network virtualization.
   <xref target="RFC2003" format="default" sectionFormat="of" derivedContent="RFC2003"/> provides guidance on handling TTL between inner IP header and outer IP tunnels;
   this model is similar to the Pipe model and is <bcp14>RECOMMENDED</bcp14> for 
   use with Geneve for network virtualization applications.</t>
        </section>
        <section anchor="sec-4.4.3" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.3">
          <name slugifiedName="name-broadcast-and-multicast">Broadcast and Multicast</name>
          <t indent="0" pn="section-4.4.3-1">
   Geneve tunnels may either be point-to-point unicast between two
   tunnel endpoints or utilize broadcast or multicast addressing.  It is
   not required that inner and outer addressing match in this respect.
   For example, in physical networks that do not support multicast,
   encapsulated multicast traffic may be replicated into multiple
   unicast tunnels or forwarded by policy to a unicast location
   (possibly to be replicated there).</t>
          <t indent="0" pn="section-4.4.3-2">
   With physical networks that do support multicast, it may be desirable
   to use this capability to take advantage of hardware replication for
   encapsulated packets.  In this case, multicast addresses may be
   allocated in the physical network corresponding to tenants,
   encapsulated multicast groups, or some other factor.  The allocation
   of these groups is a component of the control plane and, therefore,
   is beyond the scope of this document.</t>
          <t indent="0" pn="section-4.4.3-3"> 
   When physical multicast is in
   use, devices with heterogeneous capabilities may be present in the same group. 
   Some options may only be interpretable by a subset of the devices in the group. 
   Other devices can safely ignore such options unless the 'C' bit is set to 
   mark the unknown option as critical.  The requirements outlined in <xref target="sec-3.4" format="default" sectionFormat="of" derivedContent="Section 3.4"/> 
   apply for critical options.</t>
          <t indent="0" pn="section-4.4.3-4">
   In addition, <xref target="RFC8293" format="default" sectionFormat="of" derivedContent="RFC8293"/> provides examples of various mechanisms that can 
   be used for multicast handling in network virtualization overlay networks.</t>
        </section>
        <section anchor="sec-4.4.4" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.4">
          <name slugifiedName="name-unidirectional-tunnels">Unidirectional Tunnels</name>
          <t indent="0" pn="section-4.4.4-1">
   Generally speaking, a Geneve tunnel is a unidirectional concept.  IP
   is not a connection-oriented protocol, and it is possible for two
   tunnel endpoints to communicate with each other using different paths or to
   have one side not transmit anything at all.  As Geneve is an IP-based
   protocol, the tunnel layer inherits these same characteristics.</t>
          <t indent="0" pn="section-4.4.4-2">
   It is possible for a tunnel to encapsulate a protocol, such as TCP,
   that is connection oriented and maintains session state at that
   layer.  In addition, implementations <bcp14>MAY</bcp14> model Geneve tunnels as
   connected, bidirectional links, for example, to provide the abstraction of
   a virtual port.  In both of these cases, bidirectionality of the
   tunnel is handled at a higher layer and does not affect the operation
   of Geneve itself.</t>
        </section>
      </section>
      <section anchor="sec-4.5" numbered="true" toc="include" removeInRFC="false" pn="section-4.5">
        <name slugifiedName="name-constraints-on-protocol-fea">Constraints on Protocol Features</name>
        <t indent="0" pn="section-4.5-1">
   Geneve is intended to be flexible for use with a wide range of current and
   future applications.  As a result, certain constraints may be placed
   on the use of metadata or other aspects of the protocol in order to
   optimize for a particular use case.  For example, some applications
   may limit the types of options that are supported or enforce a
   maximum number or length of options.  Other applications may only
   handle certain encapsulated payload types, such as Ethernet or IP.
   These optimizations can be implemented either globally (throughout
   the system) or locally (for example, restricted to certain classes
   of devices or network paths).</t>
        <t indent="0" pn="section-4.5-2">
   These constraints may be communicated to tunnel endpoints either
   explicitly through a control plane or implicitly by the nature of the
   application.  As Geneve is defined as a data plane protocol that is
   control plane agnostic, definition of such mechanisms is beyond the scope of this
   document.</t>
        <section anchor="sec-4.5.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.5.1">
          <name slugifiedName="name-constraints-on-options">Constraints on Options</name>
          <t indent="0" pn="section-4.5.1-1">
   While Geneve options are flexible, a control plane may restrict
   the number of option TLVs as well as the order and size of the TLVs
   between tunnel endpoints to make it simpler for a data plane
   implementation in software or hardware to handle (see <xref target="I-D.ietf-nvo3-encap" format="default" sectionFormat="of" derivedContent="NVO3-ENCAP"/>).
   For example, there may be some critical information, such as a secure
   hash, that must be processed in a certain order to provide the lowest
   latency, or there may be other scenarios where the options must be
	  processed in a given order due to protocol semantics.</t>
          <t indent="0" pn="section-4.5.1-2">
   A control plane may negotiate a subset of option TLVs and certain TLV
   ordering; it may also limit the total number of option TLVs present
   in the packet, for example, to accommodate hardware capable of
   processing fewer options.  Hence, a control plane
   needs to have the ability to describe the supported TLV subset and
   its ordering to the tunnel endpoints.  In the absence of a control
   plane, alternative configuration mechanisms may be used for this
   purpose.  Such mechanisms are beyond the scope of this document.</t>
        </section>
      </section>
      <section anchor="sec-4.6" numbered="true" toc="include" removeInRFC="false" pn="section-4.6">
        <name slugifiedName="name-nic-offloads">NIC Offloads</name>
        <t indent="0" pn="section-4.6-1">
   Modern NICs currently provide a variety of offloads to enable the
   efficient processing of packets.  The implementation of many of these
   offloads requires only that the encapsulated packet be easily parsed
   (for example, checksum offload).  However, optimizations such as LSO
   and LRO involve some processing of the options themselves since they
   must be replicated/merged across multiple packets.  In these
   situations, it is desirable not to require changes to the offload
   logic to handle the introduction of new options.  To enable this,
   some constraints are placed on the definitions of options to allow
   for simple processing rules:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.6-2">
          <li pn="section-4.6-2.1">When performing LSO, a NIC <bcp14>MUST</bcp14> replicate the entire Geneve header
      and all options, including those unknown to the device, onto each
      resulting segment unless an option allows an exception.  
      Conversely, when performing LRO, a NIC may assume that a
      binary comparison of the options (including unknown options) is
      sufficient to ensure equality and <bcp14>MAY</bcp14> merge packets with equal
      Geneve headers.</li>
          <li pn="section-4.6-2.2">Options <bcp14>MUST NOT</bcp14> be reordered during the course of offload
      processing, including when merging packets for the purpose of LRO.</li>
          <li pn="section-4.6-2.3">NICs performing offloads <bcp14>MUST NOT</bcp14> drop packets with unknown
      options, including those marked as critical, unless explicitly configured to do so.</li>
        </ul>
        <t indent="0" pn="section-4.6-3">
   There is no requirement that a given implementation of Geneve employ
   the offloads listed as examples above.  However, as these offloads
   are currently widely deployed in commercially available NICs, the
   rules described here are intended to enable efficient handling of
   current and future options across a variety of devices.</t>
      </section>
      <section anchor="sec-4.7" numbered="true" toc="include" removeInRFC="false" pn="section-4.7">
        <name slugifiedName="name-inner-vlan-handling">Inner VLAN Handling</name>
        <t indent="0" pn="section-4.7-1">
   Geneve is capable of encapsulating a wide range of protocols; therefore, a given implementation is likely to support only a small
   subset of the possibilities.  However, as Ethernet is expected to be
   widely deployed, it is useful to describe the behavior of VLANs
   inside encapsulated Ethernet frames.</t>
        <t indent="0" pn="section-4.7-2">
   As with any protocol, support for inner VLAN headers is <bcp14>OPTIONAL</bcp14>.  In
   many cases, the use of encapsulated VLANs may be disallowed due to
   security or implementation considerations.  However, in other cases, the trunking of VLAN frames across a Geneve tunnel can prove useful.  As
   a result, the processing of inner VLAN tags upon ingress or egress
   from a tunnel endpoint is based upon the configuration of the tunnel
   endpoint and/or control plane and is not explicitly defined as part of
   the data format.</t>
      </section>
    </section>
    <section anchor="sec-5" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-transition-considerations">Transition Considerations</name>
      <t indent="0" pn="section-5-1">
   Viewed exclusively from the data plane, Geneve is compatible with existing IP networks 
   as it appears to most devices as UDP packets.
   However, as there are already a number of tunneling protocols deployed
   in network virtualization environments, there is a practical question
   of transition and coexistence.</t>
      <t indent="0" pn="section-5-2">
   Since Geneve builds on the base data plane functionality provided by the most
   common protocols used for network virtualization (VXLAN and NVGRE),
   it should be straightforward to port an existing control plane
   to run on top of it with minimal effort.  With both the old and new
   packet formats supporting the same set of capabilities, there is no
   need for a hard transition; tunnel endpoints directly communicating with
   each other can use any common protocol, which may be different even
   within a single overall system.

   As transit devices are primarily
   forwarding packets on the basis of the IP header, all protocols
   appear to be similar, and these devices do not introduce additional
   interoperability concerns.</t>
      <t indent="0" pn="section-5-3">
   To assist with this transition, it is strongly suggested that
   implementations support simultaneous operation of both Geneve and
   existing tunneling protocols, as it is expected to be common for a single
   node to communicate with a mixture of other nodes. Eventually, older
   protocols may be phased out as they are no longer in use.</t>
    </section>
    <section anchor="sec-6" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">
   As it is encapsulated within a UDP/IP packet, Geneve does not have any inherent security
   mechanisms.
   As a result, an attacker with access to the underlay
   network transporting the IP packets has the ability to snoop on, alter, or
   inject packets.  Compromised tunnel endpoints or transit devices may also
   spoof identifiers in the tunnel header to gain access to networks
   owned by other tenants.</t>
      <t indent="0" pn="section-6-2">
   Within a particular security domain, such as a data center operated
   by a single service provider, the most common and highest-performing security
   mechanism is isolation of trusted components.  Tunnel traffic can be
   carried over a separate VLAN and filtered at any untrusted
   boundaries.</t>
      <t indent="0" pn="section-6-3">
   When crossing an untrusted link, such as the general Internet, VPN technologies such as IPsec
   <xref target="RFC4301" format="default" sectionFormat="of" derivedContent="RFC4301"/> should be used to provide authentication and/or encryption of
   the IP packets formed as part of Geneve encapsulation (see <xref target="sec-6.1.1" format="default" sectionFormat="of" derivedContent="Section 6.1.1"/>).</t>
      <t indent="0" pn="section-6-4">
   Geneve does not otherwise affect the security of the encapsulated
   packets. As per the guidelines of BCP 72 <xref target="RFC3552" format="default" sectionFormat="of" derivedContent="RFC3552"/>, the following sections 
   describe potential security risks that may be applicable to Geneve deployments 
   and approaches to mitigate such risks. It is also noted that not all such risks are applicable
   to all Geneve deployment scenarios, i.e., only a subset may be applicable to certain deployments. 
   An operator has to make an assessment based on their network
   environment, determine the risks that are applicable to their specific environment, and use appropriate mitigation approaches as applicable. </t>
      <section anchor="sec-6.1" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-data-confidentiality">Data Confidentiality</name>
        <t indent="0" pn="section-6.1-1">
	Geneve is a network virtualization overlay encapsulation protocol 
	designed to establish tunnels between NVEs
	over an existing IP network. It can be used to deploy multi-tenant overlay networks
       	over an existing IP underlay network in a public or private data center. 

	The overlay service is typically provided by a service provider, such as a 
	cloud service provider or a private data center operator. This may or not may be 
	the same provider as an underlay service provider. Due to the nature of multi-tenancy in such environments, 
	a tenant system may expect data confidentiality to ensure its packet data is not tampered with
	(i.e., active attack) in transit or is a target of unauthorized
	monitoring (i.e., passive attack), for example, by other tenant systems or underlay service provider.
	A compromised network node or a transit device within a
	data center may passively monitor Geneve packet data between NVEs or route
	traffic for further inspection. A tenant may
	expect the overlay service provider to provide data confidentiality as part of the service, or
	a tenant may bring its own data confidentiality mechanisms like IPsec or TLS to protect the data
	end to end between its tenant systems. The overlay provider is expected to provide 
   	cryptographic protection in cases where the underlay provider is not the 
   	same as the overlay provider to ensure the payload is not exposed to the underlay.</t>
        <t indent="0" pn="section-6.1-2">
	If an operator determines data confidentiality is necessary in their environment 
	based on their risk analysis -- for example, in multi-tenant
	environments -- then an encryption mechanism <bcp14>SHOULD</bcp14> be used to encrypt the tenant
	data end to end between the NVEs. The NVEs may use existing well-established 
	encryption mechanisms, such as IPsec, DTLS, etc.</t>
        <section anchor="sec-6.1.1" numbered="true" toc="include" removeInRFC="false" pn="section-6.1.1">
          <name slugifiedName="name-inter-data-center-traffic">Inter-Data Center Traffic</name>
          <t indent="0" pn="section-6.1.1-1">
	A tenant system in a customer premises (private data center) may want to connect
	to tenant systems on their tenant overlay network in a public cloud data center, or a tenant may want to have its tenant systems located in multiple geographically
	separated data centers for high availability. Geneve data traffic between tenant systems
	across such separated networks should be protected from threats when traversing public networks.
	Any Geneve overlay data leaving the data center network beyond the operator's security domain
	<bcp14>SHOULD</bcp14> be secured by encryption mechanisms, such as 
	IPsec or other VPN technologies, to protect the communications between the NVEs 
	when they are geographically separated over untrusted network links. Specification of 
	data protection mechanisms employed between data centers is beyond the scope of this document.</t>
          <t indent="0" pn="section-6.1.1-2">
	The principles described in <xref target="sec-4" format="default" sectionFormat="of" derivedContent="Section 4"/> regarding controlled environments still apply to 
	the geographically separated data center usage outlined in this section.</t>
        </section>
      </section>
      <section anchor="sec-6.2" numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-data-integrity">Data Integrity</name>
        <t indent="0" pn="section-6.2-1">
	Geneve encapsulation is used between NVEs to establish overlay tunnels over an existing
	IP underlay network. In a multi-tenant data center,  a rogue or compromised tenant system
	may try to launch a passive attack, such as monitoring the traffic of other tenants, or an
	active attack, such as trying to inject unauthorized Geneve encapsulated traffic such 
	as spoofing, replay, etc., into the network. To prevent such attacks, an NVE <bcp14>MUST NOT</bcp14> 
	propagate Geneve packets beyond the NVE to tenant systems and <bcp14>SHOULD</bcp14> employ packet-filtering
	mechanisms so as not to forward unauthorized traffic between tenant systems in different tenant networks.
	An NVE <bcp14>MUST NOT</bcp14> interpret Geneve packets from tenant systems other than as frames to be encapsulated.</t>
        <t indent="0" pn="section-6.2-2">
	A compromised network node or a transit device within a data center may launch an active
	attack trying to tamper with the Geneve packet data between NVEs. Malicious tampering of
	Geneve header fields may cause the packet from one tenant to be forwarded to a different 
	tenant network. If an operator determines there is a possibility of such a threat in their environment,
	the operator may choose to employ data integrity mechanisms between NVEs. In order to prevent
	such risks, a data integrity mechanism <bcp14>SHOULD</bcp14> be used in such environments to protect the
	integrity of Geneve packets, including packet headers, options, and payload on communications
	between NVE pairs. A cryptographic data protection mechanism, such as IPsec, may be used to
	provide data integrity protection. A data center operator may choose to deploy any other 
	data integrity mechanisms as applicable and supported in their underlay networks,
	although non-cryptographic mechanisms may not protect the Geneve portion of the packet from tampering. </t>
      </section>
      <section anchor="sec-6.3" numbered="true" toc="include" removeInRFC="false" pn="section-6.3">
        <name slugifiedName="name-authentication-of-nve-peers">Authentication of NVE Peers</name>
        <t indent="0" pn="section-6.3-1">
	A rogue network device or a compromised NVE in a data center environment might be able to
	spoof Geneve packets as if it came from a legitimate NVE. In order to mitigate such a risk,
	an operator <bcp14>SHOULD</bcp14> use an authentication mechanism, such as IPsec, to ensure that the 
	Geneve packet originated from the intended NVE peer in environments where the operator
	determines spoofing or rogue devices are potential threats. Other simpler source checks,
	such as ingress filtering for VLAN/MAC/IP addresses, reverse path forwarding checks, etc.,
	may be used in certain trusted environments to ensure Geneve packets originated
       	from the intended NVE peer.</t>
      </section>
      <section anchor="sec-6.4" numbered="true" toc="include" removeInRFC="false" pn="section-6.4">
        <name slugifiedName="name-options-interpretation-by-t">Options Interpretation by Transit Devices</name>
        <t indent="0" pn="section-6.4-1">
	Options, if present in the packet, are generated and terminated by tunnel endpoints. As indicated
	in <xref target="sec-2.2.1" format="default" sectionFormat="of" derivedContent="Section 2.2.1"/>, transit devices may interpret the options. However, 
	if the packet is protected by encryption from tunnel endpoint
	to tunnel endpoint (for example, through IPsec), transit devices will not have visibility into the Geneve header or options
	in the packet.  In such cases, transit devices <bcp14>MUST</bcp14> handle Geneve packets as any other IP packet 
	and maintain consistent forwarding behavior. In cases where options are interpreted by transit devices, the operator
	<bcp14>MUST</bcp14> ensure that transit devices are trusted and not compromised. The definition of 
	a mechanism to ensure this trust is beyond the scope of this document.</t>
      </section>
      <section anchor="sec-6.5" numbered="true" toc="include" removeInRFC="false" pn="section-6.5">
        <name slugifiedName="name-multicast-broadcast">Multicast/Broadcast</name>
        <t indent="0" pn="section-6.5-1">
	In typical data center networks where IP multicasting is not supported in the underlay 
	network, multicasting may be supported using multiple unicast tunnels. The same security
	requirements as described in the above sections can be used to protect Geneve communications
	between NVE peers. If IP multicasting is supported in the underlay network and the operator
	chooses to use it for multicast traffic among tunnel endpoints, then the operator in such
	environments may use data protection mechanisms, such as IPsec with multicast 
	extensions <xref target="RFC5374" format="default" sectionFormat="of" derivedContent="RFC5374"/>, to protect multicast traffic among Geneve NVE groups.</t>
      </section>
      <section anchor="sec-6.6" numbered="true" toc="include" removeInRFC="false" pn="section-6.6">
        <name slugifiedName="name-control-plane-communication">Control Plane Communications</name>
        <t indent="0" pn="section-6.6-1">
	A Network Virtualization Authority (NVA) as outlined in <xref target="RFC8014" format="default" sectionFormat="of" derivedContent="RFC8014"/> may
	be used as a control plane for configuring and managing the Geneve NVEs. The data center
	operator is expected to use security mechanisms to protect the communications between
	the NVA and NVEs and to use authentication mechanisms to detect any rogue or compromised 
	NVEs within their administrative domain.  Data protection mechanisms for control plane 
	communication or authentication mechanisms between the NVA and NVEs are beyond 
	the scope of this document.</t>
      </section>
    </section>
    <section anchor="sec-7" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-7-1">
	IANA has allocated UDP port 6081 in the "Service Name and Transport Protocol 
	Port Number Registry" <xref target="IANA-SN" format="default" sectionFormat="of" derivedContent="IANA-SN"/> as the well-known destination port
       	for Geneve:</t>
      <dl newline="false" spacing="compact" indent="3" pn="section-7-2">
        <dt pn="section-7-2.1">Service Name:</dt>
        <dd pn="section-7-2.2">geneve</dd>
        <dt pn="section-7-2.3">Transport Protocol(s):</dt>
        <dd pn="section-7-2.4">UDP</dd>
        <dt pn="section-7-2.5">Assignee:</dt>
        <dd pn="section-7-2.6">IESG &lt;iesg@ietf.org&gt;</dd>
        <dt pn="section-7-2.7">Contact:</dt>
        <dd pn="section-7-2.8">IETF Chair &lt;chair@ietf.org&gt;</dd>
        <dt pn="section-7-2.9">Description:</dt>
        <dd pn="section-7-2.10">Generic Network Virtualization Encapsulation (Geneve)</dd>
        <dt pn="section-7-2.11">Reference:</dt>
        <dd pn="section-7-2.12">[RFC8926]</dd>
        <dt pn="section-7-2.13">Port Number:</dt>
        <dd pn="section-7-2.14">6081</dd>
      </dl>
      <t indent="0" pn="section-7-3">
   In addition, IANA has created a new subregistry titled "Geneve Option Class"
   for option classes. This registry has been placed under  
   a new "Network Virtualization Overlay (NVO3)" heading in the IANA protocol registries <xref target="IANA-PR" format="default" sectionFormat="of" derivedContent="IANA-PR"/>. 
   The "Geneve Option Class" registry consists of
   16-bit hexadecimal values along with descriptive strings, assignee/contact information, and references.  
   The registration rules for the new registry are (as defined by <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>):</t>
      <table align="center" pn="table-1">
        <name slugifiedName="name-geneve-option-class-registr">Geneve Option Class Registry Ranges</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1"> Range</th>
            <th align="left" colspan="1" rowspan="1"> Registration Procedures</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x0000-0x00FF</td>
            <td align="left" colspan="1" rowspan="1">IETF Review</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0x0100-0xFEFF</td>
            <td align="left" colspan="1" rowspan="1">First Come First Served</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">0xFF00-0xFFFF</td>
            <td align="left" colspan="1" rowspan="1">Experimental Use</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-nvo3-encap" to="NVO3-ENCAP"/>
    <displayreference target="I-D.ietf-nvo3-dataplane-requirements" to="NVO3-DATAPLANE"/>
    <displayreference target="I-D.ietf-intarea-tunnels" to="INTAREA-TUNNELS"/>
    <references pn="section-8">
      <name slugifiedName="name-references">References</name>
      <references pn="section-8.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC0768" target="https://www.rfc-editor.org/info/rfc768" quoteTitle="true" derivedAnchor="RFC0768">
          <front>
            <title>User Datagram Protocol</title>
            <author initials="J." surname="Postel" fullname="J. Postel">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1980" month="August"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="RFC0792" target="https://www.rfc-editor.org/info/rfc792" quoteTitle="true" derivedAnchor="RFC0792">
          <front>
            <title>Internet Control Message Protocol</title>
            <author initials="J." surname="Postel" fullname="J. Postel">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1981" month="September"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC0792"/>
        </reference>
        <reference anchor="RFC1122" target="https://www.rfc-editor.org/info/rfc1122" quoteTitle="true" derivedAnchor="RFC1122">
          <front>
            <title>Requirements for Internet Hosts - Communication Layers</title>
            <author initials="R." surname="Braden" fullname="R. Braden" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1989" month="October"/>
            <abstract>
              <t indent="0">This RFC is an official specification for the Internet community.  It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1122"/>
          <seriesInfo name="DOI" value="10.17487/RFC1122"/>
        </reference>
        <reference anchor="RFC1191" target="https://www.rfc-editor.org/info/rfc1191" quoteTitle="true" derivedAnchor="RFC1191">
          <front>
            <title>Path MTU discovery</title>
            <author initials="J.C." surname="Mogul" fullname="J.C. Mogul">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S.E." surname="Deering" fullname="S.E. Deering">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1990" month="November"/>
            <abstract>
              <t indent="0">This memo describes a technique for dynamically discovering the maximum transmission unit (MTU) of an arbitrary internet path.  It specifies a small change to the way routers generate one type of ICMP message.  For a path that passes through a router that has not been so changed, this technique might not discover the correct Path MTU, but it will always choose a Path MTU as accurate as, and in many cases more accurate than, the Path MTU that would be chosen by current practice.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1191"/>
          <seriesInfo name="DOI" value="10.17487/RFC1191"/>
        </reference>
        <reference anchor="RFC2003" target="https://www.rfc-editor.org/info/rfc2003" quoteTitle="true" derivedAnchor="RFC2003">
          <front>
            <title>IP Encapsulation within IP</title>
            <author initials="C." surname="Perkins" fullname="C. Perkins">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1996" month="October"/>
            <abstract>
              <t indent="0">This document specifies a method by which an IP datagram may be encapsulated (carried as payload) within an IP datagram.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2003"/>
          <seriesInfo name="DOI" value="10.17487/RFC2003"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC4443" target="https://www.rfc-editor.org/info/rfc4443" quoteTitle="true" derivedAnchor="RFC4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author initials="A." surname="Conta" fullname="A. Conta">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Deering" fullname="S. Deering">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Gupta" fullname="M. Gupta" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="March"/>
            <abstract>
              <t indent="0">This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol).  ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC6040" target="https://www.rfc-editor.org/info/rfc6040" quoteTitle="true" derivedAnchor="RFC6040">
          <front>
            <title>Tunnelling of Explicit Congestion Notification</title>
            <author initials="B." surname="Briscoe" fullname="B. Briscoe">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2010" month="November"/>
            <abstract>
              <t indent="0">This document redefines how the explicit congestion notification (ECN) field of the IP header should be constructed on entry to and exit from any IP-in-IP tunnel.  On encapsulation, it updates RFC 3168 to bring all IP-in-IP tunnels (v4 or v6) into line with RFC 4301 IPsec ECN processing.  On decapsulation, it updates both RFC 3168 and RFC 4301 to add new behaviours for previously unused combinations of inner and outer headers.  The new rules ensure the ECN field is correctly propagated across a tunnel whether it is used to signal one or two severity levels of congestion; whereas before, only one severity level was supported.  Tunnel endpoints can be updated in any order without affecting pre-existing uses of the ECN field, thus ensuring backward compatibility.  Nonetheless, operators wanting to support two severity levels (e.g., for pre-congestion notification -- PCN) can require compliance with this new specification.  A thorough analysis of the reasoning for these changes and the implications is included.  In the unlikely event that the new rules do not meet a specific need, RFC 4774 gives guidance on designing alternate ECN semantics, and this document extends that to include tunnelling issues.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6040"/>
          <seriesInfo name="DOI" value="10.17487/RFC6040"/>
        </reference>
        <reference anchor="RFC6936" target="https://www.rfc-editor.org/info/rfc6936" quoteTitle="true" derivedAnchor="RFC6936">
          <front>
            <title>Applicability Statement for the Use of IPv6 UDP Datagrams with Zero Checksums</title>
            <author initials="G." surname="Fairhurst" fullname="G. Fairhurst">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Westerlund" fullname="M. Westerlund">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="April"/>
            <abstract>
              <t indent="0">This document provides an applicability statement for the use of UDP transport checksums with IPv6.  It defines recommendations and requirements for the use of IPv6 UDP datagrams with a zero UDP checksum.  It describes the issues and design principles that need to be considered when UDP is used with IPv6 to support tunnel encapsulations, and it examines the role of the IPv6 UDP transport checksum.  The document also identifies issues and constraints for deployment on network paths that include middleboxes.  An appendix presents a summary of the trade-offs that were considered in evaluating the safety of the update to RFC 2460 that changes the use of the UDP checksum with IPv6.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6936"/>
          <seriesInfo name="DOI" value="10.17487/RFC6936"/>
        </reference>
        <reference anchor="RFC7365" target="https://www.rfc-editor.org/info/rfc7365" quoteTitle="true" derivedAnchor="RFC7365">
          <front>
            <title>Framework for Data Center (DC) Network Virtualization</title>
            <author initials="M." surname="Lasserre" fullname="M. Lasserre">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="F." surname="Balus" fullname="F. Balus">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Morin" fullname="T. Morin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Bitar" fullname="N. Bitar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Rekhter" fullname="Y. Rekhter">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="October"/>
            <abstract>
              <t indent="0">This document provides a framework for Data Center (DC) Network Virtualization over Layer 3 (NVO3) and defines a reference model along with logical components required to design a solution.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7365"/>
          <seriesInfo name="DOI" value="10.17487/RFC7365"/>
        </reference>
        <reference anchor="RFC8085" target="https://www.rfc-editor.org/info/rfc8085" quoteTitle="true" derivedAnchor="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author initials="L." surname="Eggert" fullname="L. Eggert">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Fairhurst" fullname="G. Fairhurst">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Shepherd" fullname="G. Shepherd">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="March"/>
            <abstract>
              <t indent="0">The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms.  This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP.  Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t indent="0">Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic.  They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t indent="0">Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t indent="0">This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8200" target="https://www.rfc-editor.org/info/rfc8200" quoteTitle="true" derivedAnchor="RFC8200">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author initials="S." surname="Deering" fullname="S. Deering">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Hinden" fullname="R. Hinden">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="July"/>
            <abstract>
              <t indent="0">This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="RFC8201" target="https://www.rfc-editor.org/info/rfc8201" quoteTitle="true" derivedAnchor="RFC8201">
          <front>
            <title>Path MTU Discovery for IP version 6</title>
            <author initials="J." surname="McCann" fullname="J. McCann">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Deering" fullname="S. Deering">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Mogul" fullname="J. Mogul">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Hinden" fullname="R. Hinden" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="July"/>
            <abstract>
              <t indent="0">This document describes Path MTU Discovery (PMTUD) for IP version 6. It is largely derived from RFC 1191, which describes Path MTU Discovery for IP version 4.  It obsoletes RFC 1981.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="87"/>
          <seriesInfo name="RFC" value="8201"/>
          <seriesInfo name="DOI" value="10.17487/RFC8201"/>
        </reference>
      </references>
      <references pn="section-8.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="ETYPES" target="https://www.iana.org/assignments/ieee-802-numbers" quoteTitle="true" derivedAnchor="ETYPES">
          <front>
            <title>IEEE 802 Numbers</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA-PR" target="https://www.iana.org/protocols" quoteTitle="true" derivedAnchor="IANA-PR">
          <front>
            <title>Protocol Registries</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA-SN" target="https://www.iana.org/assignments/service-names-port-numbers" quoteTitle="true" derivedAnchor="IANA-SN">
          <front>
            <title>Service Name and Transport Protocol Port Number Registry</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IEEE.802.1Q_2018" target="http://ieeexplore.ieee.org/servlet/opac?punumber=8403925" quoteTitle="true" derivedAnchor="IEEE.802.1Q_2018">
          <front>
            <title>IEEE Standard for Local and Metropolitan Area Networks--Bridges and Bridged Networks</title>
            <seriesInfo name="DOI" value="10.1109/IEEESTD.2018.8403927"/>
            <seriesInfo name="IEEE" value="802.1Q-2018"/>
            <author>
              <organization showOnFrontPage="true">IEEE</organization>
            </author>
            <date month="July" year="2018"/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-intarea-tunnels" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-intarea-tunnels-10" derivedAnchor="INTAREA-TUNNELS">
          <front>
            <title>IP Tunnels in the Internet Architecture</title>
            <author initials="J" surname="Touch" fullname="Joseph Touch">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Townsley" fullname="Mark Townsley">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="September" day="12" year="2019"/>
            <abstract>
              <t indent="0">This document discusses the role of IP tunnels in the Internet architecture. An IP tunnel transits IP datagrams as payloads in non- link layer protocols. This document explains the relationship of IP tunnels to existing protocol layers and the challenges in supporting IP tunneling, based on the equivalence of tunnels to links. The implications of this document are used to derive recommendations that update MTU and fragment issues in RFC 4459.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-tunnels-10"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-intarea-tunnels-10.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-nvo3-dataplane-requirements" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-nvo3-dataplane-requirements-03" derivedAnchor="NVO3-DATAPLANE">
          <front>
            <title>NVO3 Data Plane Requirements</title>
            <author initials="N" surname="Bitar" fullname="Nabil Bitar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Lasserre" fullname="Marc Lasserre">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="F" surname="Balus" fullname="Florin Balus">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T" surname="Morin" fullname="Thomas Morin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L" surname="Jin" fullname="Lizhong Jin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B" surname="Khasnabish" fullname="Bhumip Khasnabish">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="April" day="15" year="2014"/>
            <abstract>
              <t indent="0">Several IETF drafts relate to the use of overlay networks to support large scale virtual data centers. This draft provides a list of data plane requirements for Network Virtualization over L3 (NVO3) that have to be addressed in solutions documents.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nvo3-dataplane-requirements-03"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-nvo3-dataplane-requirements-03.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-nvo3-encap" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-nvo3-encap-05" derivedAnchor="NVO3-ENCAP">
          <front>
            <title>NVO3 Encapsulation Considerations</title>
            <author initials="S" surname="Boutros" fullname="Sami Boutros">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="February" day="17" year="2020"/>
            <abstract>
              <t indent="0">As communicated by WG Chairs, the IETF NVO3 chairs and Routing Area director have chartered a design team to take forward the encapsulation discussion and see if there is potential to design a common encapsulation that addresses the various technical concerns.  There are implications of different encapsulations in real environments consisting of both software and hardware implementations and spanning multiple data centers.  For example, OAM functions such as path MTU discovery become challenging with multiple encapsulations along the data path.  The design team recommend Geneve with few modifications as the common encapsulation, more details are described in section 7.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nvo3-encap-05"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-nvo3-encap-05.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC2983" target="https://www.rfc-editor.org/info/rfc2983" quoteTitle="true" derivedAnchor="RFC2983">
          <front>
            <title>Differentiated Services and Tunnels</title>
            <author initials="D." surname="Black" fullname="D. Black">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2000" month="October"/>
            <abstract>
              <t indent="0">This document considers the interaction of Differentiated Services (diffserv) with IP tunnels of various forms.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2983"/>
          <seriesInfo name="DOI" value="10.17487/RFC2983"/>
        </reference>
        <reference anchor="RFC3031" target="https://www.rfc-editor.org/info/rfc3031" quoteTitle="true" derivedAnchor="RFC3031">
          <front>
            <title>Multiprotocol Label Switching Architecture</title>
            <author initials="E." surname="Rosen" fullname="E. Rosen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Viswanathan" fullname="A. Viswanathan">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Callon" fullname="R. Callon">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2001" month="January"/>
            <abstract>
              <t indent="0">This document specifies the architecture for Multiprotocol Label Switching (MPLS).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3031"/>
          <seriesInfo name="DOI" value="10.17487/RFC3031"/>
        </reference>
        <reference anchor="RFC3552" target="https://www.rfc-editor.org/info/rfc3552" quoteTitle="true" derivedAnchor="RFC3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Korver" fullname="B. Korver">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2003" month="July"/>
            <abstract>
              <t indent="0">All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak.  This document provides guidelines to RFC authors on how to write a good Security Considerations section.   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="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </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 initials="S." surname="Bryant" fullname="S. Bryant" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Pate" fullname="P. Pate" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="March"/>
            <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="RFC4301" target="https://www.rfc-editor.org/info/rfc4301" quoteTitle="true" derivedAnchor="RFC4301">
          <front>
            <title>Security Architecture for the Internet Protocol</title>
            <author initials="S." surname="Kent" fullname="S. Kent">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Seo" fullname="K. Seo">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="December"/>
            <abstract>
              <t indent="0">This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer.  This document obsoletes RFC 2401 (November 1998).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4301"/>
          <seriesInfo name="DOI" value="10.17487/RFC4301"/>
        </reference>
        <reference anchor="RFC5374" target="https://www.rfc-editor.org/info/rfc5374" quoteTitle="true" derivedAnchor="RFC5374">
          <front>
            <title>Multicast Extensions to the Security Architecture for the Internet Protocol</title>
            <author initials="B." surname="Weis" fullname="B. Weis">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="G." surname="Gross" fullname="G. Gross">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Ignjatic" fullname="D. Ignjatic">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="November"/>
            <abstract>
              <t indent="0">The Security Architecture for the Internet Protocol describes security services for traffic at the IP layer.  That architecture primarily defines services for Internet Protocol (IP) unicast packets.  This document describes how the IPsec security services are applied to IP multicast packets.  These extensions are relevant only for an IPsec implementation that supports multicast.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5374"/>
          <seriesInfo name="DOI" value="10.17487/RFC5374"/>
        </reference>
        <reference anchor="RFC6438" target="https://www.rfc-editor.org/info/rfc6438" quoteTitle="true" derivedAnchor="RFC6438">
          <front>
            <title>Using the IPv6 Flow Label for Equal Cost Multipath Routing and Link Aggregation in Tunnels</title>
            <author initials="B." surname="Carpenter" fullname="B. Carpenter">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Amante" fullname="S. Amante">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="November"/>
            <abstract>
              <t indent="0">The IPv6 flow label has certain restrictions on its use.  This document describes how those restrictions apply when using the flow label for load balancing by equal cost multipath routing and for link aggregation, particularly for IP-in-IPv6 tunneled traffic.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6438"/>
          <seriesInfo name="DOI" value="10.17487/RFC6438"/>
        </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 initials="M." surname="Mahalingam" fullname="M. Mahalingam">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Dutt" fullname="D. Dutt">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Duda" fullname="K. Duda">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Agarwal" fullname="P. Agarwal">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Kreeger" fullname="L. Kreeger">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Sridhar" fullname="T. Sridhar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Bursell" fullname="M. Bursell">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Wright" fullname="C. Wright">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="August"/>
            <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 initials="P." surname="Garg" fullname="P. Garg" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Wang" fullname="Y. Wang" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="September"/>
            <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="RFC8014" target="https://www.rfc-editor.org/info/rfc8014" quoteTitle="true" derivedAnchor="RFC8014">
          <front>
            <title>An Architecture for Data-Center Network Virtualization over Layer 3 (NVO3)</title>
            <author initials="D." surname="Black" fullname="D. Black">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Hudson" fullname="J. Hudson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Kreeger" fullname="L. Kreeger">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Lasserre" fullname="M. Lasserre">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="December"/>
            <abstract>
              <t indent="0">This document presents a high-level overview architecture for building data-center Network Virtualization over Layer 3 (NVO3) networks.  The architecture is given at a high level, showing the major components of an overall system.  An important goal is to divide the space into individual smaller components that can be implemented independently with clear inter-component interfaces and interactions.  It should be possible to build and implement individual components in isolation and have them interoperate with other independently implemented components.  That way, implementers have flexibility in implementing individual components and can optimize and innovate within their respective components without requiring changes to other components.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8014"/>
          <seriesInfo name="DOI" value="10.17487/RFC8014"/>
        </reference>
        <reference anchor="RFC8086" target="https://www.rfc-editor.org/info/rfc8086" quoteTitle="true" derivedAnchor="RFC8086">
          <front>
            <title>GRE-in-UDP Encapsulation</title>
            <author initials="L." surname="Yong" fullname="L. Yong" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Crabbe" fullname="E. Crabbe">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="X." surname="Xu" fullname="X. Xu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Herbert" fullname="T. Herbert">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="March"/>
            <abstract>
              <t indent="0">This document specifies a method of encapsulating network protocol packets within GRE and UDP headers.  This GRE-in-UDP encapsulation allows the UDP source port field to be used as an entropy field. This may be used for load-balancing of GRE traffic in transit networks using existing Equal-Cost Multipath (ECMP) mechanisms. There are two applicability scenarios for GRE-in-UDP with different requirements: (1) general Internet and (2) a traffic-managed controlled environment.  The controlled environment has less restrictive requirements than the general Internet.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8086"/>
          <seriesInfo name="DOI" value="10.17487/RFC8086"/>
        </reference>
        <reference anchor="RFC8293" target="https://www.rfc-editor.org/info/rfc8293" quoteTitle="true" derivedAnchor="RFC8293">
          <front>
            <title>A Framework for Multicast in Network Virtualization over Layer 3</title>
            <author initials="A." surname="Ghanwani" fullname="A. Ghanwani">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Dunbar" fullname="L. Dunbar">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="McBride" fullname="M. McBride">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Bannai" fullname="V. Bannai">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Krishnan" fullname="R. Krishnan">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="January"/>
            <abstract>
              <t indent="0">This document provides a framework for supporting multicast traffic in a network that uses Network Virtualization over Layer 3 (NVO3). Both infrastructure multicast and application-specific multicast are discussed.  It describes the various mechanisms that can be used for delivering such traffic as well as the data plane and control plane considerations for each of the mechanisms.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8293"/>
          <seriesInfo name="DOI" value="10.17487/RFC8293"/>
        </reference>
        <reference anchor="VL2" target="https://dl.acm.org/doi/10.1145/1594977.1592576" quoteTitle="true" derivedAnchor="VL2">
          <front>
            <title>VL2: A Scalable and Flexible Data Center Network</title>
            <seriesInfo name="DOI" value="10.1145/1594977.1592576"/>
            <author surname="Greenberg, A., et al.">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="August" year="2009"/>
          </front>
          <refcontent>ACM SIGCOMM Computer Communication Review</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="sec-9" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1"> 
	The authors wish to acknowledge <contact fullname="Puneet Agarwal"/>,
	<contact fullname="David Black"/>, <contact fullname="Sami Boutros"/>,
	  <contact fullname="Scott Bradner"/>, 
	<contact fullname="Martín Casado"/>, <contact fullname="Alissa Cooper"/>,
	  <contact fullname="Roman Danyliw"/>, <contact fullname="Bruce Davie"/>,
	    <contact fullname="Anoop Ghanwani"/>, <contact fullname="Benjamin        Kaduk"/>, <contact fullname="Suresh Krishnan"/>, <contact fullname="Mirja Kühlewind"/>, <contact fullname="Barry Leiba"/>,
	      <contact fullname="Daniel Migault"/>, <contact fullname="Greg   Mirksy"/>, <contact fullname="Tal Mizrahi"/>, 
	<contact fullname="Kathleen Moriarty"/>, <contact fullname="Magnus    Nyström"/>, <contact fullname="Adam Roach"/>, <contact fullname="Sabrina    Tanamal"/>, <contact fullname="Dave Thaler"/>, <contact fullname="Éric Vyncke"/>, 
	<contact fullname="Magnus Westerlund"/>, and many other members of the NVO3 Working Group for their reviews, comments, and suggestions.</t>
      <t indent="0" pn="section-appendix.a-2"> 
	The authors would like to thank <contact fullname="Sam Aldrin"/>,
	<contact fullname="Alia Atlas"/>, <contact fullname="Matthew Bocci"/>,
	  <contact fullname="Benson Schliesser"/>, and <contact fullname="Martin Vigoureux"/> 
	for their guidance throughout the process.</t>
    </section>
    <section anchor="sec-8" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-contributors">Contributors</name>
      <t indent="0" pn="section-appendix.b-1">
   The following individuals were authors of an earlier version of this
   document and made significant contributions:</t>
      <contact fullname="Pankaj Garg">
        <organization showOnFrontPage="true">Microsoft Corporation</organization>
        <address>
          <postal>
            <street>1 Microsoft Way</street>
            <city>Redmond</city>
            <region>WA</region>
            <code>98052</code>
            <country>United States of America</country>
          </postal>
          <email>pankajg@microsoft.com</email>
        </address>
      </contact>
      <contact fullname="Chris Wright">
        <organization showOnFrontPage="true">Red Hat Inc.</organization>
        <address>
          <postal>
            <street>1801 Varsity Drive</street>
            <city>Raleigh</city>
            <region>NC</region>
            <code>27606</code>
            <country>United States of America</country>
          </postal>
          <email>chrisw@redhat.com</email>
        </address>
      </contact>
      <contact fullname="Kenneth Duda">
        <organization showOnFrontPage="true">Arista Networks</organization>
        <address>
          <postal>
            <street>5453 Great America Parkway</street>
            <city>Santa Clara</city>
            <region>CA</region>
            <code>95054</code>
            <country>United States of America</country>
          </postal>
          <email>kduda@arista.com</email>
        </address>
      </contact>
      <contact fullname="Dinesh G. Dutt">
        <organization showOnFrontPage="true">Independent</organization>
        <address>
          <postal>
            <street/>
            <city/>
            <region/>
            <code/>
            <country/>
          </postal>
          <email>didutt@gmail.com</email>
        </address>
      </contact>
      <contact fullname="Jon Hudson">
        <organization showOnFrontPage="true">Independent</organization>
        <address>
          <postal>
            <street/>
            <city/>
            <region/>
            <code/>
            <country/>
          </postal>
          <email>jon.hudson@gmail.com</email>
        </address>
      </contact>
      <contact fullname="Ariel Hendel">
        <organization showOnFrontPage="true">Facebook, Inc.</organization>
        <address>
          <postal>
            <street>1 Hacker Way</street>
            <city>Menlo Park</city>
            <region>CA</region>
            <code>94025</code>
            <country>United States of America</country>
          </postal>
          <email>ahendel@fb.com</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Jesse Gross" initials="J." role="editor" surname="Gross">
        <organization showOnFrontPage="true"/>
        <address>
          <email>jesse@kernel.org</email>
        </address>
      </author>
      <author fullname="Ilango Ganga" initials="I." role="editor" surname="Ganga">
        <organization abbrev="Intel" showOnFrontPage="true">Intel Corporation</organization>
        <address>
          <postal>
            <street>2200 Mission College Blvd.</street>
            <city>Santa Clara</city>
            <region>CA</region>
            <code>95054</code>
            <country>United States of America</country>
          </postal>
          <email>ilango.s.ganga@intel.com</email>
        </address>
      </author>
      <author fullname="T. Sridhar" initials="T." role="editor" surname="Sridhar">
        <organization abbrev="VMware" showOnFrontPage="true">VMware, Inc.</organization>
        <address>
          <postal>
            <street>3401 Hillview Ave.</street>
            <city>Palo Alto</city>
            <region>CA</region>
            <code>94304</code>
            <country>United States of America</country>
          </postal>
          <email>tsridhar@utexas.edu</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
