<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-ietf-nvo3-vxlan-gpe-13" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN"
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the
         full title is longer than 39 characters -->

    <title abbrev="VXLAN-GPE">Generic Protocol Extension for VXLAN
    (VXLAN-GPE)</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Fabio Maino (Editor)" initials="F." surname="Maino, Ed.">
      <organization>Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <code/>

          <city/>

          <region/>

          <country/>
        </postal>

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

    <author fullname="Larry Kreeger (editor)" initials="L."
            surname="Kreeger, Ed.">
      <organization>Arrcus</organization>

      <address>
        <postal>
          <street/>

          <code/>

          <city/>

          <region/>

          <country/>
        </postal>

        <email>lkreeger@gmail.com</email>
      </address>
    </author>

    <author fullname="Uri Elzur (editor)" initials="U." surname="Elzur, Ed.">
      <organization>Intel</organization>

      <address>
        <postal>
          <street/>

          <code/>

          <city/>

          <region/>

          <country/>
        </postal>

        <email>uri.elzur@intel.com</email>
      </address>
    </author>

    <date day="5" month="November" year="2023"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill
         in the current day for you. If only the current year is specified, xml2rfc will fill
	 in the current day and month for you. If the year is not the current one, it is
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>Internet</area>

    <workgroup>Network Working Group</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>LISP; L2 Overlay, L3 Overlay</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>This document describes extending Virtual eXtensible Local Area
      Network (VXLAN), via changes to the VXLAN header, with four new
      capabilities: support for multi-protocol encapsulation, support for
      operations, administration and maintenance (OAM) signaling, support for
      ingress-replicated BUM Traffic (i.e. Broadcast, Unknown unicast, or
      Multicast), and explicit versioning. New protocol capabilities can be
      introduced via shim headers.</t>
    </abstract>

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

  <middle>
    <section anchor="intro" title="Introduction">
      <t>Virtual eXtensible Local Area Network VXLAN <xref target="RFC7348"/>
      defines an encapsulation format that encapsulates Ethernet frames in an
      outer UDP/IP transport. As data centers evolve, the need to carry other
      protocols encapsulated in an IP packet is required, as well as the need
      to provide increased visibility and diagnostic capabilities within the
      overlay. The VXLAN header does not specify the protocol being
      encapsulated and therefore is currently limited to encapsulating only
      Ethernet frame payload, nor does it provide the ability to define OAM
      protocols. In addition, <xref target="RFC6335"/> requires that new
      transports not use transport layer port numbers to identify tunnel
      payload, rather it encourages encapsulations to use their own
      identifiers for this purpose. VXLAN-GPE is intended to extend the
      existing VXLAN protocol to provide protocol typing, OAM, and versioning
      capabilities.</t>

      <t>The Version and OAM bits are introduced in <xref
      target="vxlan-gpe"/>, and the choice of location for these fields is
      driven by minimizing the impact on existing deployed hardware.</t>

      <t>In order to facilitate deployments of VXLAN-GPE with hardware
      currently deployed to support VXLAN, changes from legacy VXLAN have been
      kept to a minimum. <xref target="compatibility"/> provides a detailed
      discussion about how VXLAN-GPE addresses the requirement for backward
      compatibility with VXLAN.</t>

      <t>The capabilities of the VXLAN-GPE protocol can be extended by
      defining next protocol "shim" headers that are used to implement new
      data plane functions. As an example In-situ Operations, Administration,
      and Maintenance (IOAM) metadata functionalities can be added as
      specified in <xref target="I-D.brockners-ippm-ioam-vxlan-gpe"/>.</t>
    </section>

    <section title="VXLAN Without Protocol Extension">
      <t>As described in <xref target="intro"/>, the VXLAN header has no
      protocol identifier that indicates the type of payload being carried.
      Because of this, VXLAN is limited to carrying ethernet payloads.</t>

      <t>The VXLAN header <xref target="RFC7348"/> contains a single flag 'I'
      that, when set, indicates the presence of a VXLAN Network Identifier
      (VNI).</t>

      <t><figure anchor="vxlan_header" title="VXLAN Header">
          <preamble/>

          <artwork><![CDATA[ 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|R|R|I|R|R|R|            Reserved                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VXLAN Network Identifier (VNI) |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>

          <postamble/>
        </figure></t>
    </section>

    <section anchor="vxlan-gpe"
             title="Generic Protocol Extension for VXLAN (VXLAN-GPE)">
      <section title="VXLAN-GPE Header">
        <t><figure anchor="vxlan_gpe" title="VXLAN-GPE Header">
            <preamble/>

            <artwork><![CDATA[ 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|Ver|I|P|B|O|       Reserved                |Next Protocol  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VXLAN Network Identifier (VNI) |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
          </figure></t>

        <t><list style="hanging">
            <t hangText="Flags (8 bits):">The first 8 bits of the header are
            the flag field. The bits designated "R" above are reserved flags.
            These MUST be set to zero on transmission and ignored on
            receipt.</t>

            <t hangText="Version (Ver):">Indicates VXLAN-GPE protocol version.
            The initial version is 0. If a receiver does not support the
            version indicated it MUST drop the packet.</t>

            <t hangText="Instance Bit (I bit):">The I bit MUST be set to
            indicate a valid VNI.</t>

            <t hangText="Next Protocol Bit (P bit):">The P bit is set to
            indicate that the Next Protocol field is present.</t>

            <t hangText="BUM Traffic Bit (B bit):">The B bit is set to
            indicate that this is ingress-replicated BUM Traffic (ie,
            Broadcast, Unknown unicast, or Multicast).</t>

            <t hangText="OAM Flag Bit (O bit):">The O bit is set to indicate
            that the packet is an OAM packet.</t>

            <t hangText="Next Protocol:">This 8 bit field indicates the
            protocol header immediately following the VXLAN-GPE header.</t>

            <t hangText="VNI:">This 24 bit field identifies the VXLAN overlay
            network the inner packet belongs to. Inner packets belonging to
            different VNIs cannot communicate with each other (unless
            explicitly allowed by policy).</t>

            <t hangText="Reserved:">Reserved fields MUST be set to zero on
            transmission and ignored on receipt.</t>
          </list></t>
      </section>

      <section title="Multi Protocol Support">
        <t>This draft defines the following two changes to the VXLAN header in
        order to support multi-protocol encapsulation:</t>

        <t><list style="hanging">
            <t hangText="P Bit:">Flag bit 5 is defined as the Next Protocol
            bit. The P bit MUST be set to 1 to indicate the presence of the 8
            bit next protocol field.</t>

            <t hangText="">When UDP dest port=4790, P = 0 the "Next Protocol"
            field must be set to zero and the payload MUST be ETHERNET(L2) as
            defined by <xref target="RFC7348"/>.</t>

            <t hangText="">Flag bit 5 was chosen as the P bit because this
            flag bit is currently reserved in VXLAN.</t>

            <t hangText="Next Protocol Field:">When the P-bit is set to 1, the
            lower 8 bits of the first word are used to carry a Next Protocol.
            This 'Next Protocol' field contains the protocol of the
            encapsulated payload packet. Values are tracked by the IANA
            "LISP-GPE Next Protocol" registry, defined in Section 6.1 of <xref
            target="RFC9305"/>, that VXLAN-GPE shares with the LISP-GPE
            protocol. At the time this document is edited the IANA "LISP-GPE
            Next Protocol" registry specifies the following Next Protocol
            values:</t>

            <t hangText=""><list style="hanging">
                <t hangText="0x00 :">Reserved</t>

                <t hangText="0x01 :">IPv4</t>

                <t hangText="0x02 :">IPv6</t>

                <t hangText="0x03 :">Ethernet</t>

                <t hangText="0x04 :">Network Service Header <xref
                target="RFC8300"/></t>

                <t hangText="0x05 to 0x7D:">Unassigned</t>

                <t hangText="0x7E, 0x7F:">Experimentation and testing</t>

                <t hangText="0x80 to 0xFD:">Unassigned (shim headers)</t>

                <t hangText="0xFE, 0xFF:">Experimentation and testing (shim
                headers)</t>
              </list></t>
          </list></t>

        <t>Next protocol values 0x7E, 0x7F and 0xFE, 0xFF are assigned for
        experimentation and testing as per <xref target="RFC3692"/>.</t>

        <t>Next protocol values from Ox80 to 0xFD are assigned to protocols
        encoded as generic shim headers. All shim protocols MUST use the
        header structure in <xref target="shim"/>, which includes a 'Next
        Protocol' field. When shim headers are used with other protocols
        identified by Next Protocol values from 0x0 to 0x7F, all the shim
        headers MUST come first.</t>

        <t>Shim headers can be used to incrementally deploy new GPE features,
        keeping the processing of shim headers known to a given VTEP
        implementation in the 'fast' path (typically an Application- Specific
        Integrated Circuit (ASIC)) while punting the processing of the
        remaining new GPE features to the 'slow' path.</t>

        <t>Shim protocols MUST have the first 32 bits defined as:</t>

        <t><figure anchor="shim" title="Shim Header">
            <preamble/>

            <artwork><![CDATA[ 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |    Length     |   Reserved    | Next Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~                    Protocol Specific Fields                   ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>

            <postamble/>
          </figure></t>

        <t>Where:</t>

        <t><list style="hanging">
            <t hangText="Type:">This field identifies the different messages
            of this protocol.</t>

            <t hangText="Length:">This field indicates the length, in in
            4-octet units, of this protocol message not including the first 4
            octets.</t>

            <t hangText="Reserved:">The use of this field is reserved to the
            protocol defined in this message.</t>

            <t hangText="Next Protocol Field:">This field contains the
            protocol of the encapsulated payload. The values are tracked in
            the IANA "LISP-GPE Next Protocol" registry, defined in Section 6.1
            of <xref target="RFC9305"/>.</t>
          </list></t>
      </section>

      <section title="Replicated BUM Traffic">
        <t>Flag bit 6 is defined as the B bit. When the B bit is set to 1, the
        packet is marked as an an ingress-replicated BUM Traffic (i.e.
        Broadcast, Unknown unicast, or Multicast) to help egress VTEP to
        differentiate between known and unknown unicast. The details of using
        the B bit are out of scope for this document, but please see <xref
        target="RFC8365"/> for an example in the EVPN context. As with the
        P-bit, bit 6 is currently a reserved flag in VXLAN.</t>
      </section>

      <section title="OAM Support">
        <t>Flag bit 7 is defined as the O bit. When the O bit is set to 1, the
        packet is an OAM packet and OAM processing MUST occur. Other header
        fields including Next Protocol MUST adhere to the definitions in <xref
        target="vxlan-gpe"/>. The OAM protocol details are out of scope for
        this document. As with the P-bit, bit 7 is currently a reserved flag
        in VXLAN.</t>
      </section>

      <section title="Version Bits">
        <t>VXLAN-GPE bits 2 and 3 are defined as version bits. These bits are
        reserved in VXLAN. The version field is used to ensure backward
        compatibility going forward with future VXLAN-GPE updates.</t>

        <t>The initial version for VXLAN-GPE is 0.</t>
      </section>
    </section>

    <section title="Outer Encapsulations">
      <t>In addition to the VXLAN-GPE header, the packet is further
      encapsulated in UDP and IP. Data centers based on Ethernet, will then
      send this IP packet over Ethernet.</t>

      <t>Outer UDP Header:</t>

      <t>Destination UDP Port: IANA has assigned the value 4790 for the
      VXLAN-GPE UDP port. This well-known destination port is used when
      sending VXLAN-GPE encapsulated packets.</t>

      <t>Source UDP Port: The source UDP port is used as entropy for devices
      forwarding encapsulated packets across the underlay (ECMP for IP
      routers, or load splitting for link aggregation by bridges). Tenant
      traffic flows should all use the same source UDP port to lower the
      chances of packet reordering by the underlay for a given flow. It is
      recommended for VTEPs to generate this port number using a hash of the
      inner packet headers. Implementations MAY use the entire 16 bit source
      UDP port for entropy.</t>

      <t>UDP Checksum: see <xref target="UDPChecksum"/> for considerations
      related to UDP Checksum processing.</t>

      <t>Outer IP Header:</t>

      <t>This is the header used by the underlay network to deliver packets
      between VTEPs. The destination IP address can be a unicast or a
      multicast IP address. The source IP address must be the source VTEP IP
      address which can be used to return tenant packets to the tenant system
      source address within the inner packet header.</t>

      <t>When the outer IP header is IPv4, VTEPs MUST set the DF bit.</t>

      <t>Outer Ethernet Header:</t>

      <t>Most data centers networks are built on Ethernet. Assuming the outer
      IP packet is being sent across Ethernet, there will be an Ethernet
      header used to deliver the IP packet to the next hop, which could be the
      destination VTEP or be a router used to forward the IP packet towards
      the destination VTEP. If VLANs are in use within the data center, then
      this Ethernet header would also contain a VLAN tag.</t>

      <t>The following figures show the entire stack of protocol headers that
      would be seen on an Ethernet link carrying encapsulated packets from a
      VTEP across the underlay network for both IPv4 and IPv6 based underlay
      networks.</t>

      <t><figure anchor="outer_header"
          title="Outer Headers for VXLAN-GPE over IPv4">
          <preamble/>

          <artwork><![CDATA[ 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

Outer Ethernet Header:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Outer Destination MAC Address                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Outer Destination MAC Address | Outer Source MAC Address      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Outer Source MAC Address                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Opt Ethertype = C-Tag 802.1Q  |     Outer VLAN Tag            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ethertype = 0x0800            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


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


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


VXLAN-GPE Header:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|Ver|I|P|R|O|       Reserved                |Next Protocol  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VXLAN Network Identifier (VNI) |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Payload:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Depends on VXLAN-GPE Next Protocol field above.          |
|    Note that if the payload is Ethernet, then the original    |
|    Ethernet Frame's FCS is not included.                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Frame Check Sequence:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   New FCS (Frame Check Sequence) for Outer Ethernet Frame     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwork>

          <postamble/>
        </figure></t>

      <t><figure anchor="outer_header_ipv6"
          title="Outer Headers for VXLAN-GPE over IPv6">
          <preamble/>

          <artwork><![CDATA[ 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

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

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         |       Dest Port = 4790        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           UDP Length          |        UDP Checksum           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

VXLAN-GPE Header:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|Ver|I|P|R|O|       Reserved                |Next Protocol  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VXLAN Network Identifier (VNI) |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Payload:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Depends on VXLAN-GPE Next Protocol field above.          |
|    Note that if the payload is Ethernet, then the original    |
|    Ethernet Frame's FCS is not included.                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Frame Check Sequence:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   New FCS (Frame Check Sequence) for Outer Ethernet Frame     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwork>

          <postamble/>
        </figure></t>

      <section title="Inner VLAN Tag Handling">
        <t>If the inner packet (as indicated by the VXLAN-GPE Next Protocol
        field) is an Ethernet frame, it is recommended that it does not
        contain a VLAN tag. In the most common scenarios, the tenant VLAN tag
        is translated into a VXLAN Network Identifier. In these scenarios,
        VTEPs should never send an inner Ethernet frame with a VLAN tag, and a
        VTEP performing decapsulation should discard any inner frames received
        with a VLAN tag. However, if the VTEPs are specifically configured to
        support it for a specific VXLAN Network Identifier, a VTEP may support
        transparent transport of the inner VLAN tag between all tenant systems
        on that VNI. The VTEP never looks at the value of the inner VLAN tag,
        but simply passes it across the underlay.</t>
      </section>

      <section title="Fragmentation Considerations">
        <t>VTEPs MUST never fragment an encapsulated VXLAN-GPE packet, and
        when the outer IP header is IPv4, VTEPs MUST set the DF bit in the
        outer IPv4 header. It is recommended that the underlay network be
        configured to carry an MTU at least large enough to accommodate the
        added encapsulation headers. It is recommended that VTEPs perform Path
        MTU discovery <xref target="RFC1191"/> <xref target="RFC1981"/> to
        determine if the underlay network can carry the encapsulated payload
        packet.</t>
      </section>
    </section>

    <section anchor="Deployments"
             title="Implementation and Deployment Considerations">
      <section anchor="Applicability" title="Applicability Statement">
        <t>VXLAN-GPE conforms, as an UDP-based encapsulation protocol, to the
        UDP usage guidelines as specified in <xref target="RFC8085"/>. The
        applicability of these guidelines are dependent on the underlay IP
        network and the nature of the encapsulated payload.</t>

        <t><xref target="RFC8085"/> outlines two applicability scenarios for
        UDP applications, 1) general Internet and 2) controlled environment.
        The controlled environment means a single administrative domain or
        adjacent set of cooperating domains. 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 tunnel protocol operating under a controlled
        environment can be less restrictive than the requirements of the
        general Internet.</t>

        <t>VXLAN-GPE is intended to be deployed in a data center network
        environment operated by a single operator or adjacent set of
        cooperating network operators that fits with the definition of
        controlled environments in [RFC8085].</t>

        <t>For the purpose of this document, a Traffic-Managed Controlled
        Environment (TMCE), outlined in <xref target="RFC8086"/>, 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.
        Significant portions of text in this Section are based on <xref
        target="RFC8086"/>.</t>

        <t>It is the responsibility of the network operators to ensure that
        the guidelines/requirements in this section are followed as applicable
        to their VXLAN-GPE deployments</t>
      </section>

      <section anchor="CongestionControl"
               title="Congestion Control Functionality">
        <t>VXLAN-GPE does not natively provide congestion control
        functionality and relies on the payload protocol traffic for
        congestion control. As such VXLAN-GPE MUST be used with congestion
        controlled traffic or within a network that is traffic managed to
        avoid congestion (TMCE). An operator of a traffic managed network
        (TMCE) may avoid congestion by careful provisioning of their networks,
        rate-limiting of user data traffic and traffic engineering according
        to path capacity.</t>

        <t>Keeping in mind the recommendation above, new encapsulated
        payloads, when registered, MUST be accompanied by a set of guidelines
        derived from Section 5 of <xref target="RFC9300"/>. Such new protocols
        should be designed for explicit congestion signals to propagate
        consistently from lower-layer protocols into IP. Then, the IP
        internetwork layer can act as a portability layer to carry congestion
        notifications from non-IP-aware congested nodes up to the transport
        layer (L4). By following the guidelines in <xref
        target="I-D.ietf-tsvwg-ecn-encap-guidelines"/>, subnetwork designers
        can enable a Layer 2 protocol to participate in congestion control
        without dropping packets, via propagation of Explicit Congestion
        Notification (ECN) data <xref target="RFC3168"/> to receivers.</t>
      </section>

      <section anchor="UDPChecksum" title="UDP Checksum">
        <t>For IP payloads, Section 5.3 of <xref target="RFC9300"/> specifies
        how to handle UDP checksums, encouraging implementors to consider UDP
        checksum usage guidelines in Section 3.4 of <xref target="RFC8085"/>
        when it is desirable to protect UDP and LISP headers against
        corruption.</t>

        <t>In order to protect the integrity of VXLAN-GPE headers, options,
        and payload (for example to avoid mis-delivery of payload to different
        tenant systems in case of data corruption), outer UDP checksum SHOULD
        be used with VXLAN-GPE when transported over IPv4. 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
        Section 3.4 of <xref target="RFC8085"/>). In deployments where such a
        risk exists, an operator SHOULD use additional data integrity
        mechanisms such as offered by IPSec.</t>

        <t>An operator MAY choose to disable UDP checksum and use zero
        checksum if VXLAN-GPE packet integrity is provided by other data
        integrity mechanisms, such as IPsec or additional checksums, or if one
        of the conditions in <xref target="IPv6Checksum"/> (a, b, or c) are
        met.</t>

        <section anchor="IPv6Checksum"
                 title="UDP Zero Checksum Handling with IPv6">
          <t>By default, UDP checksum MUST be used when VXLAN-GPE is
          transported over IPv6. A tunnel endpoint MAY be configured for use
          with a zero UDP checksum if additional requirements described in
          this section are met.</t>

          <t>When VXLAN-GPE is used over IPv6, UDP checksum is used to protect
          IPv6 headers, UDP headers and VXLAN-GPE headers and payload from
          potential data corruption. As such by default VXLAN-GPE MUST use UDP
          checksum when transported over IPv6. An operator MAY choose to
          configure to operate with zero UDP checksum if operating in a
          traffic managed controlled environment as stated in <xref
          target="Applicability"/> if one of the following conditions are
          met:</t>

          <t><list style="letters">
              <t>It is known that the packet corruption is exceptionally
              unlikely (perhaps based on knowledge of equipment types in their
              underlay network), and the operator is willing to take a risk of
              undetected packet corruption</t>

              <t>It is determined 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 where the operator is willing to take the risk of undetected
              corruption</t>

              <t>VXLAN-GPE payloads are carrying applications that are
              tolerant of misdelivered or corrupted packets (perhaps through
              higher-layer checksum validation and/or reliability through
              retransmission)</t>
            </list>In addition VXLAN-GPE tunnel implementations using Zero UDP
          checksum MUST meet the following requirements:</t>

          <t><list style="numbers">
              <t>Use of UDP checksum over IPv6 MUST be the default
              configuration for all VXLAN-GPE tunnels</t>

              <t>If VXLAN-GPE is used with zero UDP checksum over IPv6 then
              such VTEP implementation MUST meet all the requirements
              specified in section 4 of <xref target="RFC6936"/> and
              requirements 1 as specified in section 5 of <xref
              target="RFC6936"/></t>

              <t>The VTEP that decapsulates the packet SHOULD check the source
              and destination IPv6 addresses are valid for the VXLAN-GPE
              tunnel that is configured to receive Zero UDP checksum and
              discard other packets for which such check fails</t>

              <t>The VTEP that encapsulates the packet MAY use different IPv6
              source addresses for each VXLAN-GPE 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 RECOMMENDED
              to use each source address for as few VXLAN-GPE tunnels that use
              zero UDP checksum as is feasible</t>

              <t>Measures SHOULD be taken to prevent VXLAN-GPE 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 a VXLAN-GPE network, and/or
              keeping logical or physical separation of VXLAN network from
              networks carrying General Internet</t>
            </list>The above requirements do not change either the
          requirements specified in <xref target="RFC2460"/> as modified by
          <xref target="RFC6935"/> or the requirements specified in <xref
          target="RFC6936"/>.</t>

          <t>The requirement to check the source IPv6 address in addition to
          the destination IPv6 address, plus the recommendation against reuse
          of source IPv6 addresses among VXLAN-GPE 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 three conditions listed at the beginning
          of this section provides additional assurance.</t>
        </section>
      </section>

      <section anchor="DSCP" title="DSCP, ECN, TTL, and 802.1Q">
        <t>When encapsulating IP (including over Ethernet) packets, <xref
        target="RFC2983"/> provides guidance for mapping packets that contain
        Differentiated Services Code Point (DSCP) information between inner
        and outer IP headers. The Pipe model typically fits better with
        network virtualization. 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). Some
        aspects of the Uniform model (which treats the inner and outer DSCP
        value as a single field by copying on ingress and egress) may also
        apply, such as the ability to remark 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><xref target="RFC6040"/> describes the mechanism for exposing ECN
        capabilities on IP tunnels and propagating congestion markers to the
        inner packets. This behavior MUST be followed for IP packets
        encapsulated in VXLAN-GPE.</t>

        <t>Though the Uniform model or the Pipe model could be used for TTL
        (or Hop Limit in the case of IPv6) handling when tunneling IP packets,
        the Pipe model is more aligned with network virtualization. <xref
        target="RFC2003"/> provides guidance on handling TTL between inner IP
        headers and outer IP tunnels; this model is more aligned with the Pipe
        model and is recommended for use with VXLAN-GPE for
        network-virtualization applications.</t>

        <t>When a VXLAN-GPE VTEP performs Ethernet encapsulation, the inner
        802.1Q 3-bit Priority Code Point ('PCP') field [IEEE.802.1Q_2014] MAY
        be mapped from the encapsulated frame to the DSCP codepoint of the
        Differentiated Services ('DS') field defined in <xref
        target="RFC2474"/>.</t>

        <t>When a VXLAN-GPE VTEP performs Ethernet encapsulation, the inner-
        header 802.1Q VLAN Identifier (VID) [IEEE.802.1Q_2014] MAY be mapped
        to, or used to determine, the 'VXLAN Network Identifier' (VNI)
        field.</t>

        <t>Refer to <xref target="security"/> for considerations about the use
        of integrity protection for deployments, such as the public Internet,
        concerned with on-path attackers.</t>

        <t/>
      </section>
    </section>

    <section anchor="compatibility" title="Backward Compatibility">
      <section title="VXLAN VTEP to VXLAN-GPE VTEP">
        <t>A VXLAN VTEP conforms to VXLAN frame format and uses UDP
        destination port 4789 when sending traffic to VXLAN-GPE VTEP. As per
        VXLAN, reserved bits 5 and 7, VXLAN-GPE P and O-bits respectively must
        be set to zero. The remaining reserved bits must be zero, including
        the VXLAN-GPE version field, bits 2 and 3. The encapsulated payload
        MUST be Ethernet.</t>
      </section>

      <section title="VXLAN-GPE VTEP to VXLAN VTEP">
        <t>A VXLAN-GPE VTEP MUST NOT encapsulate non-Ethernet frames to a
        VXLAN VTEP. When encapsulating Ethernet frames to a VXLAN VTEP, the
        VXLAN-GPE VTEP MUST conform to VXLAN frame format and hence will set
        the P bit to 0, the Next Protocol to 0 and use UDP destination port
        4789. A VXLAN-GPE VTEP MUST also set O = 0 and Ver = 0 when
        encapsulating Ethernet frames to VXLAN VTEP. The receiving VXLAN VTEP
        will treat this packet as a VXLAN packet.</t>

        <t>A method for determining the capabilities of a VXLAN VTEP (GPE or
        non-GPE) is out of the scope of this draft.</t>
      </section>

      <section title="VXLAN-GPE UDP Ports">
        <t>VXLAN-GPE uses a IANA assigned UDP destination port, 4790, when
        sending traffic to VXLAN-GPE VTEPs.</t>
      </section>

      <section title="VXLAN-GPE and Encapsulated IP Header Fields">
        <t>When encapsulating IP (including over Ethernet) packets <xref
        target="RFC2983"> </xref> provides guidance for mapping DSCP between
        inner and outer IP headers. The Pipe model typically fits better
        Network virtualization. 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). Some
        aspects of the Uniform model (which treats the inner and outer DSCP
        value as a single field by copying on ingress and egress) may also
        apply, such as the ability to remark 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><xref target="RFC6040"/> describes the mechanism for exposing ECN
        capabilities on IP tunnels and propagating congestion markers to the
        inner packets. This behavior MUST be followed for IP packets
        encapsulated in VXLAN-GPE.</t>

        <t>Though Uniform or Pipe models could be used for TTL (or Hop Limit
        in case of IPv6) handling when tunneling IP packets, Pipe model is
        more aligned with network virtualization. <xref target="RFC2003"/>
        provides guidance on handling TTL between inner IP header and outer IP
        tunnels; this model is more aligned with the Pipe model and is
        recommended for use with VXLAN-GPE for network virtualization
        applications.</t>

        <t>When a VXLAN-GPE router performs Ethernet encapsulation, the inner
        802.1Q 3-bit priority code point (PCP) field MAY be mapped from the
        encapsulated frame to the DSCP codepoint of the DS field defined in
        <xref target="RFC2474"/>.</t>

        <t>When a VXLAN-GPE router performs Ethernet encapsulation, the inner
        header 802.1Q VLAN Identifier (VID) MAY be mapped to, or used to
        determine the VXLAN Network Identitifer (VNI) field.</t>
      </section>
    </section>

    <section anchor="examples" title="VXLAN-GPE Examples">
      <t>This section provides three examples of protocols encapsulated using
      the Generic Protocol Extension for VXLAN described in this document.</t>

      <t><figure anchor="ipv4_example" title="IPv4 and VXLAN-GPE">
          <preamble/>

          <artwork><![CDATA[ 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|0|0|I|1|R|0|       Reserved                |    NP = IPv4  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VXLAN Network Identifier (VNI) |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Original IPv4 Packet                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwork>

          <postamble/>
        </figure></t>

      <t><figure anchor="ipv6_example" title="IPv6 and VXLAN-GPE">
          <preamble/>

          <artwork><![CDATA[ 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|0|0|I|1|R|0|       Reserved                |  NP = IPv6    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VXLAN Network Identifier (VNI) |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Original IPv6 Packet                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>

          <postamble/>
        </figure></t>

      <t><figure anchor="ethernet_example" title="Ethernet and VXLAN-GPE">
          <preamble/>

          <artwork><![CDATA[ 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|R|0|0|I|1|R|0|       Reserved                |NP = Ethernet  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                VXLAN Network Identifier (VNI) |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Original Ethernet Frame                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>

          <postamble/>
        </figure></t>

      <t/>
    </section>

    <section anchor="security" title="Security Considerations">
      <t>The security considerations for VXLAN applies to VXLAN-GPE, see <xref
      target="RFC7348"/>.</t>

      <t>As is the case for many encapsulations that use optional extensions,
      VXLAN-GPE is subject to on-path adversaries that can make arbitrary
      modifications to the packet (including the P-bit) to change or remove
      any part of the payload, or claim to encapsulate any protocol payload
      type. Typical integrity protection mechanisms (such as IPsec) SHOULD be
      used in combination with VXLAN-GPE by those protocol extensions that
      want to protect against on-path attackers.</t>

      <t>With VXLAN-GPE, issues such as data plane spoofing, flooding, and
      traffic redirection may depend on the particular protocol payload
      encapsulated.</t>

      <t>Operators have to make an assessment based on their network
      environment and determine the risks that are applicable to their
      specific environment and use appropriate mitigation approaches, as
      applicable.</t>
    </section>

    <section anchor="contributors" title="Contributors">
      <t><figure>
          <artwork><![CDATA[Paul Quinn 
Cisco Systems 
paulq@cisco.com 

Rajeev Manur 
Broadcom 
rmanur@broadcom.com 

Michael Smith 
Cisco Systems 
michsmit@cisco.com 

Darrel Lewis 
Cisco Systems 
darlewis@cisco.com 

Puneet Agarwal 
Innovium, Inc 
puneet@acm.org 

Lucy Yong 
Huawei USA 
lucy.yong@huawei.com 

Xiaohu Xu 
Alibaba Inc
xiaohu.xxh@alibaba-inc.com 

Pankaj Garg 
Microsoft 
pankajg@microsoft.com 

David Melman 
Marvell 
davidme@marvell.com

Jennifer Lemon 
Broadcom Limited
jennifer.lemon@broadcom.com

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

    <section anchor="Acknowledgements" title="Acknowledgments">
      <t>A special thank you goes to Dino Farinacci for his guidance and
      detailed review. Thanks to Tom Herbert for the suggestion to assign
      codepoints for experimentations and testing.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <section title="UDP Port">
        <t>UDP 4790 port has been assigned by IANA for VXLAN-GPE in the
        "Service Name and Transport Protocol Port Number" registry.</t>
      </section>

      <section title="VXLAN-GPE Next Protocol">
        <t>VXLAN-GPE 'Next Protocol' values are tracked by the IANA "LISP-GPE
        Next Protocol" registry, defined in Section 6.1 of <xref
        target="RFC9305"/> that VXLAN-GPE shares with LISP-GPE. New values are
        assigned under the Specification Required policy <xref
        target="RFC8126"/>. The protocols that are being assigned values do
        not themselves need to be IETF Standards Track protocols.</t>

        <t>At the time this document is edited the IANA "LISP-GPE Next
        Protocol" registry specifies the following Next Protocol values:</t>

        <t/>

        <texttable>
          <ttcol>Next Protocol</ttcol>

          <ttcol>Description</ttcol>

          <ttcol>Reference</ttcol>

          <c>0x00</c>

          <c>Reserved</c>

          <c>RFC 9305</c>

          <c>0x01</c>

          <c>IPv4</c>

          <c>RFC 9305</c>

          <c>0x02</c>

          <c>IPv6</c>

          <c>RFC 9305</c>

          <c>0x03</c>

          <c>Ethernet</c>

          <c>RFC 9305</c>

          <c>0x04</c>

          <c>NSH</c>

          <c>RFC 9305</c>

          <c>0x05..0x7D</c>

          <c>Unassigned</c>

          <c/>

          <c>0x7E, 0x7F</c>

          <c>Experimentation and testing</c>

          <c>RFC 9305</c>

          <c>0x80..0xFD</c>

          <c>Unassigned (shim headers)</c>

          <c/>

          <c>0xFE, 0xFF</c>

          <c>Experimentation and testing (shim headers)</c>

          <c>RFC 9305</c>
        </texttable>

        <t/>
      </section>

      <section title="VXLAN-GPE Flag and Reserved Bits">
        <t>There are ten flag bits at the beginning of the VXLAN-GPE header,
        followed by 16 reserved bits and an 8-bit reserved field at the end of
        the header. New bits are assigned via Standards Action <xref
        target="RFC5226"/>.</t>

        <t><list style="empty">
            <t>Bits 0-1 - Reserve6</t>

            <t>Bits 2-3 - Version</t>

            <t>Bit 4 - Instance ID (I bit)</t>

            <t>Bit 5 - Next Protocol (P bit)</t>

            <t>Bit 6 - Reserved</t>

            <t>Bit 7 - OAM (O bit)</t>

            <t>Bit 8-23 - Reserved</t>

            <t>Bits 24-31 in the 2nd Word -- Reserved</t>
          </list></t>

        <t>Reserved bits/fields MUST be set to 0 by the sender and ignored by
        the receiver.</t>
      </section>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2003"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2460"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2474"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2983"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.3168"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.3692"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.7348.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6335.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.1191.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.1981.xml"
?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml"
?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6040"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6935.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6936.xml"
?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8085.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8086.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8126.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8300.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8365.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.9300.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.9305.xml"?>

      <?rfc ?>
    </references>

    <references title="Informative References">
      <?rfc include="reference.I-D.ietf-tsvwg-ecn-encap-guidelines"?>

      <?rfc include="reference.I-D.brockners-ippm-ioam-vxlan-gpe"?>

      <?rfc ?>
    </references>
  </back>
</rfc>
