<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema
      validation and schema-aware editing --> 
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> --> 
<!-- This third-party XSLT can be enabled for direct transformations
in XML processors, including most browsers --> 

<!DOCTYPE rfc [
  <!ENTITY filename "draft-ietf-nvo3-encap-10">
  <!ENTITY nbsp   "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be
added to the DOCTYPE above. Use of an external entity file is not
recommended. --> 
<?rfc strict="yes" ?>
<?rfc toc="yes"?>

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="info"
  docName="&filename;"
  ipr="trust200902"
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">
<!-- 
    * docName should be the name of your draft * category should be
    one of std, bcp, info, exp, historic * ipr should be one of
    trust200902, noModificationTrust200902, noDerivativesTrust200902,
    pre5378Trust200902 * updates can be an RFC number as NNNN *
    obsoletes can be an RFC number as NNNN
-->


<!-- ____________________FRONT_MATTER____________________ -->
<front>
  <title abbrev="NVO3 Encapsulation Considerations">Network
  Virtualization Overlays (NVO3) Encapsulation Considerations</title>
   <!--  The abbreviated title is required if the full title is
        longer than 39 characters --> 

   <seriesInfo name="Internet-Draft"
               value="&filename;"/>

   <author initials="S." surname="Boutros"
           fullname="Sami Boutros" role="editor">
     <organization>Ciena Corporation</organization>
     <address>
       <postal>
         <country>USA</country>
       </postal>
       <email>sboutros@ciena.com</email>
     </address>
   </author>

   <author fullname="Donald E. Eastlake 3rd" initials="D."
           surname="Eastlake" role="editor">
     <organization>Futurewei Technologies</organization>
     <address>
       <postal>
         <street>2386 Panoramic Circle</street>
         <city>Apopka</city>
         <region>Florida</region>
         <code>32703</code>
         <country>USA</country>
       </postal>        
       <phone>+1-508-333-2270</phone>
       <email>d3e3e3@gmail.com</email>
     </address>
   </author>

   <date year="2023" month="11" day="6"/>

   <area>Routing</area>
   <workgroup>NVO3 Working Group</workgroup>
   <!-- "Internet Engineering Task Force" 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 RFC Series. --> 

   <keyword></keyword>
   <!-- Multiple keywords are allowed.  Keywords are incorporated
        into HTML output files for use by search engines. --> 

<abstract>
  <t>The IETF Network Virtualization Overlays (NVO3) Working Group
  Chairs and Routing Area Director chartered a design team to take
  forward the encapsulation discussion and see if there was potential
  to design a common encapsulation that addresses the various
  technical concerns.  This document provides a record, for the
  benefit of the IETF community, of the considerations arrived at by
  the NVO3 encapsulation design team, which may be helpful with future
  deliberations by working groups over the choice of encapsulation
  formats.</t>

  <t>There are implications of having different encapsulations in real
  environments consisting of both software and hardware
  implementations and within and spanning multiple data centers.  For
  example, OAM functions such as path MTU discovery become challenging
  with multiple encapsulations along the data path.</t>

  <t>The design team recommended Geneve with a few modifications as
  the common encapsulation. This document provides more details,
  particularly in Section 7.</t>
</abstract>
 
</front>


<!-- ____________________MIDDLE_MATTER____________________ -->
<middle>
    
<section>  <!-- 1. -->
  <name>Introduction</name>

<t>The NVO3 Working Group is chartered to gather requirements and develop
solutions for network virtualization data planes based on
encapsulation of virtual network traffic over an IP-based underlay
data plane.  Requirements include due consideration for OAM and
security.  Based on these requirements the WG was to select, extend,
and/or develop one or more data plane encapsulation format(s).</t>

<t>This led to WG drafts and an RFC describing three encapsulations as
follows:</t>

<ul>
  <li><xref target="RFC8926"/> Geneve: Generic Network Virtualization
Encapsulation</li>

<li><xref target="ietf_intarea_gue"/> Generic UDP Encapsulation</li>

<li><xref target="nvo3_vxlan_gpe"/> Generic Protocol Extension for
VXLAN (VXLAN-GPE)</li>
</ul>

<t>Discussion on the list and in face-to-face meetings identified a
number of technical problems with each of these encapsulations.
Furthermore, there was clear consensus at the 96th IETF meeting in
Berlin that, to maximize interoperability, the working group should
progress only one data plane encapsulation. In order to overcome a
deadlock on the encapsulation decision, the WG consensus was to form a
Design Team <xref target="RFC2418"/> to resolve this issue. </t>

</section>
<section>  <!-- 2. -->
  <name>Design Team Goals</name>

  <t>The Design Team (DT) formed as described above was to take one of
  the proposed encapsulations and enhance it to address the technical
  concerns.  The simple evolution of deployed networks as well as
  applicability to all locations in the NVO3 architecture are goals.
  The DT was to specifically avoid a design that is burdensome on
  hardware implementations but should allow future extensibility.  The
  chosen design also needs to operate well with ICMP and in Equal Cost
  Multi-Path (ECMP) environments.  If further extensibility is
  required, then it should be done in such a manner that it does not
  require the consent of an entity outside of the IETF.</t>

</section>
<section>  <!-- 3. -->
  <name>Terminology</name>
  
 <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
 NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
 "MAY", and "OPTIONAL" in this document are to be interpreted as
 described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
 when, and only when, they appear in all capitals, as shown here.</t>

</section>
<section>  <!-- 4. -->
  <name>Abbreviations and Acronyms</name>
  
 <t>The following abbreviations and acronyms are used in this
 document:</t>

<dl>
<dt>ACL </dt><dd>- Access Control List</dd>

<dt>DT</dt><dd>- NVO3 encapsulation Design Team</dd>

<dt>ECMP</dt><dd>- Equal Cost Multi-Path</dd>

<dt>EVPN</dt><dd>- Ethernet VPN <xref target="RFC8365"/></dd>

<dt>Geneve</dt><dd>- Generic Network Virtualization Encapsulation <xref
target="RFC8926"/></dd>

<dt>GPE </dt><dd>- Generic Protocol Extension</dd>

<dt>GUE </dt><dd>- Generic UDP Encapsulation <xref
target="ietf_intarea_gue"/></dd>

<dt>HMAC</dt><dd>- Hash based keyed Message Authentication Code <xref
target="RFC2104"/></dd>

<dt>IEEE</dt><dd>- Institute for Electrical and Electronic Engineers
(www.ieee.org)</dd>

<dt>NIC</dt><dd>- Network Interface Card (refers to network interface
hardware which is not necessarily a discrete "card")</dd>

<dt>NSH </dt><dd>- Network Service Header <xref target="RFC8300"/></dd>

<dt>NVA </dt><dd>- Network Virtualization Authority</dd>

<dt>NVE </dt><dd>- Network Virtual Edge (device)</dd>

<dt>NVO3</dt><dd>- Network Virtualization Overlays over Layer 3</dd>

<dt>OAM </dt><dd>- Operations, Administration, and Maintenance <xref target="RFC6291"/></dd>

<dt>PWE3</dt><dd>- Pseudowire Emulation Edge to Edge</dd>

<dt>TCAM</dt><dd>- Ternary Content-Addressable Memory</dd>

<dt>TLV </dt><dd>- Type, Length, and Value</dd>

<dt>Transit device</dt><dd>- Underlay network devices between NVE(s).</dd>

<dt>UUID</dt><dd>- Universally Unique Identifier</dd>

<dt>VNI </dt><dd>- Virtual Network Identifier</dd>

<dt>VXLAN</dt><dd>- Virtual eXtensible LAN <xref target="RFC7348"/></dd>
</dl>
  
</section>

<section>  <!-- 5. -->
  <name>Encapsulation Issues and Background</name>

  <t>The following subsections describe issues with current
  encapsulations as discussed by the NVO3 WG. Numerous extensions and
  options have been designed for GUE and Geneve but these have not yet
  been validated by the WG.</t>

  <t>Also included are diagrams and information on the candidate
  encapsulations. These are mostly copied from other documents. Since
  each protocol is assumed to be sent over UDP, an initial UDP Header
  is shown which would be preceded by an IPv4 or IPv6 Header.</t>
  
<section>  <!-- 5.1 -->
  <name>Geneve</name>

  <t>The Geneve packet format, taken from <xref target="RFC8926"/>, is shown in
  <xref target="GeneveHeader"/> below.</t>

<figure anchor="GeneveHeader">
  <name>Geneve Header</name>
    <artwork type="ascii-art" align="center">
      <![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 UDP Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |    Dest Port = 6081 Geneve    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          UDP Length           |        UDP Checksum           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Geneve Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Virtual Network Identifier (VNI)       |    Reserved   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                    Variable-Length Options                    ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ]]>
    </artwork>
</figure>
  
  <t>The type of payload being carried is indicated by an Ethertype
  <xref target="RFC7042"/> in the Protocol Type field in the Geneve
  Header; Ethernet itself is represented by Ethertype 0x6558. See
  <xref target="RFC8926"/> for details concerning UDP header
  fields. The O bit indicates an OAM packet. The C bit is the
  "Critical" bit which means that the options must be processed or the
  packet discarded.</t>
  
  <t>Issues with Geneve <xref target="RFC8926"/> are as follows:</t>
  
  <ul>
    <li>Can't be implemented cost-effectively in all use cases because
    variable length header and order of the TLVs makes it costly (in
    terms of number of gates) to implement in hardware.</li>

    <li>Header doesn't fit into largest commonly available parse
    buffer (256 bytes in NIC).  Cannot justify doubling buffer size
    unless it is mandatory for hardware to process additional option
    fields.</li>
  </ul>

  <t>Selection of Geneve despite these issues may be the result of the
  Geneve design effort assuming that the Geneve header would typically
  be delivered to a server and parsed in software.</t>
  
</section>
<section>  <!-- 5.2 -->
  <name>Generic UDP Encapsulation (GUE)</name>
  
<figure anchor="GUEHeader">
  <name>GUE Header</name>
    <artwork type="ascii-art" align="center">
      <![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

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

GUE Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0 |C|   Hlen  |  Proto/ctype  |             Flags             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                  Extensions Fields (optional)                 ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ]]>
    </artwork>
</figure>

<t>The type of payload being carried is indicated by an IANA Internet
protocol number in the Proto/ctype field. The C bit indicates a
Control packet.</t>

<t>Issues with GUE <xref target="ietf_intarea_gue"/> are as
follows:</t>

<ul>
  <li>There were a significant number of objections to GUE related to
  the complexity of implementation in hardware, similar to those noted
  for Geneve above.</li>
</ul>

</section>
<section>  <!-- 5.3 -->
  <name>Generic Protocol Extension (GPE) for VXLAN</name>

<figure anchor="GPEHeader">
  <name>GPE Header</name>
    <artwork type="ascii-art" align="center">
      <![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 UDP Header:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Source Port         |     Dest Port = 4790 GPE      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           UDP Length          |        UDP Checksum           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

VXLAN-GPE Header
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |R|R|Ver|I|P|B|O|       Reserved                | Next Protocol |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                VXLAN Network Identifier (VNI) |   Reserved    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ]]>
    </artwork>
</figure>

<t>The type of payload being carried is indicated by the Next Protocol
field using a VXLAN-GPE-specific registry. The I bit indicates that
the VNI is valid. The P bit indicates that the Next Protocol field is
valid. The B bit indicates the packet is an ingress replicated
Broadcase, Unknown Unicast, or Multicast packet. The O bit indicates
an OAM packet.</t>

<t>Issues with VXLAN-GPE <xref target="nvo3_vxlan_gpe"/> are as
follows:</t>

<ul>
  <li>GPE is not day-1 backwards compatible with VXLAN <xref target="RFC7348"/>.
  Although the frame format is similar, it uses a different UDP port,
  so would require changes to existing implementations even if the
  rest of the GPE frame were the same.</li>

  <li>GPE is insufficiently extensible. It adds a Next Protocol field
  and some flag bits to the VXLAN header but is not otherwise
  extensible.</li>

  <li>Security, e.g., of the VNI, has not been addressed by GPE.
  Although a shim header could be used for security and other
  extensions, this has not been defined yet and its implications on
  offloading in NICs are not understood.</li>
</ul>

</section>
</section>

<section>  <!-- 6. -->
  <name>Common Encapsulation Considerations</name>

  <section>  <!-- 6.1 -->
    <name>Current Encapsulations</name>
    
<t>Appendix A includes a detailed comparison between the three
proposed encapsulations.  The comparison indicates several common
properties but also three major differences among the
encapsulations:</t>

<ul>
  <li>Extensibility: Geneve and GUE were defined with built-in
  extensibility, while VXLAN-GPE is not inherently extensible.  Note
  that any of the three encapsulations can be extended using the
  Network Service Header (NSH <xref target="RFC8300"/>).</li>

  <li>Extension method: Geneve is extensible using Type/Length/Value
  (TLV) fields, while GUE uses a small set of possible extensions, and
  a set of flags that indicate which extensions are present.</li>

  <li>Length field: Geneve and GUE include a Length field, indicating
  the length of the encapsulation header, while VXLAN-GPE does not
  include such a field.</li>
</ul>

  </section>
  <section>  <!-- 6.2 -->
    <name>Useful Extensions Use Cases</name>

    <t>Non-vendor specific TLVs MUST follow the standardization
    process.  The following use cases for extensions shows that there
    is a strong requirement to support variable length extensions with
    possible different subtypes.</t>

    <section>  <!--6.2.1 -->
      <name>Telemetry Extensions</name>

      <t>In several scenarios it is beneficial to make information
      about the path a packet took through the network or through a
      network device as well as associated telemetry information
      available to the operator.</t>

      <t>This includes not only tasks like debugging, troubleshooting,
      and network planning and optimization but also policy or service
      level agreement compliance checks.</t>

      <t>Packet scheduling algorithms, especially for balancing
      traffic across equal cost paths or links, often leverage
      information contained within the packet, such as protocol
      number, IP address, or MAC address.  Probe packets would thus
      either need to be sent between the exact same endpoints with the
      exact same parameters, or probe packets would need to be
      artificially constructed as "fake" packets and inserted along
      the path.  Both approaches are often not feasible from an
      operational perspective because access to the end-system is not
      feasible or the diversity of parameters and associated probe
      packets to be created is simply too large.  An extension
      providing an in-band telemetry mechanism <xref
      target="RFC9197"/> is an alternative in those cases.</t>

    </section>
    <section> <!-- 6.2.2 -->
      <name>Security/Integrity Extensions</name>

      <t>Since the currently proposed NVO3 encapsulations do not
      protect their headers, a single bit corruption in the VNI field
      could deliver a packet to the wrong tenant.  Extension headers
      are needed to use any sophisticated security.</t>

<t>The possibility of VNI spoofing with an NVO3 protocol is
exacerbated by using UDP.  Systems typically have no restrictions on
applications being able to send to any UDP port so an unprivileged
application can trivially spoof VXLAN <xref target="RFC7348"/> packets for instance,
including using arbitrary VNIs.</t>

<t>One can envision support of an HMAC-like Message Authentication
Code (MAC) <xref target="RFC2104"/> in an NVO3 extension to authenticate the header
and the outer IP addresses, thereby preventing attackers from
injecting packets with spoofed VNIs.</t>

<t>Another aspect of security is payload security.  Essentially this
makes packets that look like the following:</t>

<sourcecode>
  IP|UDP|NVO3 Encap|DTLS/IPSEC-ESP Extension|payload.
</sourcecode>

<t>This is desirable since we still have the UDP header for ECMP, the
NVO3 header is in plain text so it can be read by network elements,
and different security or other payload transforms can be supported on
a single UDP port (we don't need a separate UDP port for DTLS/IPSEC
<xref target="RFC9147"/>/<xref target="RFC6071"/>).</t>

    </section>
    <section>  <!-- 6.2.3 -->
      <name>Group Based Policy</name>

      <t>Another use case would be to carry the Group Based Policy
      (GBP) source group information within a NVO3 header extension in
      a similar manner as has been implemented for VXLAN
      <xref target="VXLANgroup"/>.  This allows various forms of
      policy such as access control and QoS to be applied between
      abstract groups rather than coupled to specific endpoint
      addresses.</t>

    </section>
  </section>
  <section>  <!-- 6.3 -->
    <name>Hardware Considerations</name>

    <t>Hardware restrictions should be taken into consideration along
    with future hardware enhancements that may provide more flexible
    metadata processing.  However, the set of options that need to and
    will be implemented in hardware will be a subset of what is
    implemented in software, since software NVEs are likely to grow
    features, and hence option support, at a more rapid rate.</t>

<t>It is hard to predict which options will be implemented in which
piece of hardware and when.  That depends on whether the hardware will
be in the form of a NIC providing increasing offload capabilities to
software NVEs, or a switch chip being used as an NVE gateway towards
non-NVO3 parts of the network, or even a transit device that
participates in the NVO3 dataplane, e.g., for OAM purposes.</t>

<t>A result of this is that it doesn't look useful to prescribe some
order of the option so that the ones that are likely to be implemented
in hardware come first; we can't decide such an order when we define
the options, however a control plane can enforce such an order for
some hardware implementation.</t>

<t>We do know that hardware needs to initially be able to efficiently
skip over the NVO3 header to find the inner payload.  That is needed
both for NICs implementing various TCP offload mechanisms and for
transit devices and NVEs applying policy or ACLs to the inner
payload.</t>

  </section>
  <section>  <!-- 6.4 -->
    <name>Extension Size</name>

    <t>Extension header length has a significant impact on hardware
    and software implementations.  A maximum total header length that
    is too small will unnecessarily constrain software flexibility.  A
    maximum total header length that is too large will place a
    nontrivial cost on hardware implementations.  Thus, the DT
    recommends that there be a minimum and maximum total available
    extension header length specified.  The maximum total header
    length is determined by the size of the bit field allocated for
    the total extension header length field.  The risk with this
    approach is that it may be difficult to extend the total header
    size in the future.  The minimum total header length is determined
    by a requirement in the specifications that all implementations
    must meet.  The risk with this approach is that all
    implementations will only implement support for the minimum total
    header length which would then become the de facto maximum total
    header length.</t>

<t>The recommended minimum total svailable header length is 64
bytes.</t>

<t>The size of an extension header should always be 4 byte
aligned.</t>

<t>The maximum length of a single option should be large enough to
meet the different extension use case requirements, e.g., in-band
telemetry and future use.</t>

  </section>
  <section>  <!-- 6.5 -->
    <name>Ordering of Extension Headers</name>

    <t>To support hardware nodes at the target NVE or at a transit
    device that can process one or a few extension headers in TCAM, a
    control plane in such a deployment can signal a capability to
    ensure a specific extension header will always appear in a
    specific order, for example the first one in the packet.</t>

<t>The order of the extension headers should be hardware friendly for
both the sender and the receiver and possibly some transit devices
also.</t>

<t>Transit devices don't participate in control plane communication
between the end points and are not required to process the extension
headers; however, if they do, they may need to process only a small
subset of the extension headers that will be consumed by target
NVEs.</t>

  </section>
  <section>  <!-- 6.6 -->
    <name>TLV versus Bit Fields</name>

    <t>If there is a well-known initial set of options that are likely
    to be implemented in software and in hardware, it can be efficient
    to use the bit fields approach to indicate the presence of
    extensions as in GUE.  However, as described in section 6.3, if
    options are added over time and different subsets of options are
    likely to be implemented in different pieces of hardware, then it
    would be hard for the IETF to specify which options should get the
    early bit fields.  TLVs are a lot more flexible, which avoids the
    need to determine the relative importance different options.
    However, general TLVs of arbitrary order, size, and repetition are
    difficult to implement in hardware.  A middle ground is to use
    TLVs with restrictions on their size and alignment, observing that
    individual TLVs can have a fixed length, and support via the
    control plane a method such that an NVE will only receive options
    that it needs and implements.  The control plane approach can
    potentially be used to control the order of the TLVs sent to a
    particular NVE.  Note that transit devices are not likely to
    participate in the control plane; hence, to the extent that they
    need to participate in option processing, some other method must
    be used. Transit devices would have issues with future GUE bit
    fields being defined for future options as well.</t>

<t>A benefit of TLVs from a hardware perspective is that they are self
describing, i.e., all the information is in the TLV.  In a bit field
approach, the hardware needs to look up the bit to determine the
length of the data associated with the bit through some separate
table, which would add hardware complexity.</t>

<t>There are use cases where multiple modules of software are running
on an NVE.  These can be modules such as a diagnostic module by one
vendor that does packet sampling and another module from a different
vendor that implements a firewall.  Using a TLV format, it is easier
to have different software modules process different TLVs, which could
be standard extensions or vendor specific extensions defined by the
different vendors, without conflicting with each other.  This can help
with hardware modularity as well.  There are some implementations with
options that allows different software modules, like MAC learning and
security, to process different options.</t>

  </section>
  <section>  <!-- 6.7 -->
    <name>Control Plane Considerations</name>

    <t>Given that we want to allow considerable flexibility and
    extensibility, e.g., for software NVEs, yet be able to support
    important extensions in less flexible contexts such as hardware
    NVEs, it is useful to consider the control plane.  By control
    plane in this section we mean both protocols, such as EVPN
    <xref target="RFC8365"/> and others, and deployment specific configuration.</t>

<t>If each NVE can express in the control plane that it only supports
certain extensions (which could be a single extension, or a few), and
the source NVEs only include supported extensions in the NVO3 packets,
then the target NVE can both use a simpler parser (e.g., a TCAM might
be usable to look for a single NVO3 extension) and the depth of the
inner payload in the NVO3 packet will be minimized.  Furthermore, if
the target NVE cares about a few extensions and can express in the
control plane the desired order of those extensions in the NVO3
packets, then the deployment can provide useful functionality with
simplified hardware requirements for the target NVE.</t>

<t>Transit devices that are not aware of the NVO3 extensions somewhat
benefit from such an approach, since the inner payload is less deep in
the packet if no extraneous extension headers are included in the
packet.  In general, a transit device is not likely to participate in
the NVO3 control plane.  However, configuration mechanisms can take
into account limitations of the transit devices used in particular
deployments.</t>

<t>Note that with this approach different NVEs could desire different
extensions or sets of extensions, which means that the source NVE
needs to be able to place different sets of extensions in different
NVO3 packets, and perhaps in different order.  It also assumes that
underlay multicast or replication servers are not used together with
NVO3 extension headers.</t>

<t>There is a need to consider mandatory extensions versus optional
extensions.  Mandatory extensions require the receiver to drop the
packet if the extension is unknown.  A control plane mechanism can
prevent the need for dropping unknown extensions, since they would not
be included to target NVEs that do not support them.</t>

<t>The control planes defined today need to add the ability to
describe the different encapsulations.  Thus, perhaps EVPN <xref target="RFC8365"/>
and any other control plane protocol that the IETF defines should have
a way to indicate the supported NVO3 extensions and their order, for
each of the encapsulations supported.</t>

<t>The WG should consider developing a separate draft on guidance for
option processing and control plane participation.  This should
provide examples/guidance on range of usage models and deployments
scenarios for specific options and ordering that are relevant for that
specific deployment.  This includes end points and middle boxes using
the options.  Having the control plane negotiate the constraints is
the most appropriate and flexible way to address these
requirements.</t>
    
  </section>
  <section>  <!-- 6.8 -->
    <name>Split NVE</name>

    <t>If the working group sees a need for having the hosts send and
    receive options in a split NVE case <xref target="RFC8394"/>, this is possible
    using any of the existing extensible encapsulations (Geneve, GUE,
    GPE+NSH) by defining a way to carry those over other transports.
    NSH can already be used over different transports.</t>

<t>If we need to do this with other encapsulations it can be done by
defining an Ethertype so that it can be carried over Ethernet and
<xref target="IEEE802.1Q"/>.</t>

<t>If we need to carry other encapsulations over MPLS, it would
require an EVPN control plane to signal that other encapsulation
header + options will be present in front of the L2 packet.  The VNI
can be ignored in the header, and the MPLS label will be the one used
to identify the EVPN L2 instance.</t>

  </section>
  <section> <!-- 6.9 -->
    <name>Larger VNI Considerations</name>

    <t>The DT discussed whether we should make the VNI 32-bits or
    larger.  The benefit of a 24-bit VNI would be to avoid unnecessary
    changes with existing proposals and implementations that are
    almost all, if not all, using 24-bit VNI.  If we need a larger
    VNI, an extension can be used to support that. </t>

  </section>
</section>
<section>  <!-- 7. -->
  <name>Design Team Recommendations</name>
  
<t>The Design Team (DT) concluded that Geneve is most suitable as a
starting point for a proposed standard for network virtualization, for
the following reasons:</t>

<ol>
<li>The DT studied whether VNI should be in the base header or in an
extension header and whether it should be a 24-bit or 32-bit field.
The Design Team agreed that VNI is critical information for network
virtualization and MUST be present in all packets.  The DT also agreed
that a 24-bit VNI, which is supported by Geneve, matches the existing
widely used encapsulation formats, i.e., VXLAN <xref target="RFC7348"/> and NVGRE
<xref target="RFC7637"/>, and hence is more suitable to use going forward.</li>

<li>The Geneve header has the total options length which allows
skipping over the options for NIC offload operations and will allow
transit devices to view flow information in the inner payload.</li>

<li>The DT considered the option of using NSH <xref target="RFC8300"/>
with VXLAN-GPE but given that NSH is targeted at service chaining and
contains service chaining information, it is less suitable for the
network virtualization use case.  The other downside for VXLAN-GPE was
lack of a header length in VXLAN-GPE which makes skipping over the
headers to process inner payload more difficult.  Total Option Length
is present in Geneve.  It is not possible to skip any options in the
middle with VXLAN-GPE.  In principle a split between a base header and
a header with options is interesting (whether that options header is
NSH or some new header without ties to a service path).  We explored
whether it would make sense to either use NSH for this, or define a
new NVO3 options header.  However, we observed that this makes it
slightly harder to find the inner payload since the length field is
not in the NVO3 header itself.  Thus, one more field would have to be
extracted to compute the start of the inner payload.  Also, if the
experience with IPv6 extension headers is a guide, there would be a
risk that key pieces of hardware might not implement the options
header, resulting in future calls to deprecate its use.  Making the
options part of the base NVO3 header has less of those issues.  Even
though the implementation of any particular option can not be
predicted ahead of time, the option mechanism and ability to skip the
options is likely to be broadly implemented.</li>

<li>The DT compared the TLV vs bit fields style extension. It was
deemed that parsing both TLV and bit fields is expensive and, while
bit fields may be simpler to parse, it is also more restrictive and
requires guessing which extensions will be widely implemented so they
can get early bit assignments. Given that half the bits are already
assigned in GUE, a widely deployed extension may appear in a flag
extension, and this will require extra processing, to dig the flag
from the flag extension and then look for the extension itself.  Also
bit fields are not flexible enough to address the requirements from
OAM, Telemetry, and security extensions, for variable length option
and different subtypes of the same option.  While TLVs are more
flexible, a control plane can restrict the number of option TLVs as
well as the order and size of the TLVs to make it simpler for a
dataplane implementation to handle.</li>

<li>The DT briefly discussed the multi-vendor NVE case, and the need to
allow vendors to put their own extensions in the NVE header.  This is
possible with TLVs.</li>

<li>The DT also agreed that the C (Critical) bit in Geneve is
helpful. It indicates that the header includes options which must be
parsed or the packet discarded. It allows a receiver NVE to easily
decide whether to process options or not, for example a UUID based
packet trace, and how an optional extension such as that can be
ignored by a receiver NVE and thus make it easy for NVE to skip over
the options.  Thus, the C bit remains as defined in Geneve.</li>

<li>There are already some extensions that are being discussed (see
section 6.2) of varying sizes. By using Geneve options it is possible
to get in band parameters like switch id, ingress port, egress port,
internal delay, and queue in telemetry defined extension TLV from
switches.  It is also possible to add security extension TLVs like
HMAC <xref target="RFC2104"/> and DTLS/IPSEC <xref
target="RFC9147"/>/<xref target="RFC6071"/> to authenticate the Geneve
packet header and secure the Geneve packet payload by software or
hardware tunnel endpoints.  A Group Based Policy extension TLV can be
carried as well.</li>

<li>There are already implementations of Geneve options deployed in
production networks as of this writing.  There is as well new hardware
supporting Geneve TLV parsing.  In addition, an In-band Telemetry
<xref target="INT"/> specification is being developed by P4.org that
illustrates the option of INT meta data carried over Geneve.  OVN/OVS
<xref target="OVN"/> have also defined some option TLV(s) for
Geneve.</li>

<li>The DT has addressed the usage models while considering the
requirements and implementations in general including software and
hardware.</li>
</ol>

<t>There seems to be interest in standardizing some well-known secure
option TLVs to secure the header and payload to guarantee
encapsulation header integrity and tenant data privacy.  The Design
Team recommends that the working group consider standardizing such
option(s).</t>

<t>The DT recommends the following enhancements to Geneve to make it
more suitable to hardware and yet provide the flexibility for
software:</t>

<ul>
  <li>The DT proposes a text such as, while TLVs are more flexible, a
  control plane can restrict the number of option TLVs as well the
  order and size of the TLVs to make it simpler for a data plane
  implementation in software or hardware to handle.  For example,
  there may be some critical information such as a secure hash that
  must be processed in a certain order at lowest latency.</li>

  <li>A control plane can negotiate a subset of option TLVs and
  certain TLV ordering, as well as limiting the total number of option
  TLVs present in the packet, for example, to allow for hardware
  capable of processing fewer options.  Hence, the control plane needs
  to have the ability to describe the supported TLVs subset and their
  order.</li>

  <li>The Geneve documents should specify that the subset and order of
  option TLVs SHOULD be configurable for each remote NVE in the
  absence of a protocol control plane.</li>

  <li>The DT recommends that Geneve follow fragmentation
  recommendations in overlay services like PWE3 and the L2/L3 VPN
  recommendations to guarantee larger MTU for the tunnel overhead
  (<xref target="RFC3985"/> Section 5.3).</li>

  <li>The DT requests that Geneve provide a recommendation for
  critical bit processing - text could specify how critical bits can
  be used with control plane specifying the critical options.</li>

  <li>Given that there is a telemetry option use case for a length of
  256 bytes, we recommend that Geneve increase the Single TLV option
  length to 256.</li>

  <li>The DT requests that Geneve address Requirements for OAM
  considerations for alternate marking and for performance
  measurements that need a 2 bit field in the header and clarify the
  need for the current OAM bit in the Geneve Header.</li>

  <li>The DT recommends that the WG work on security options for
  Geneve.</li>
</ul>

</section>
<section anchor="Acknowledgements">  <!-- 8. -->
  <name>Acknowledgements</name>

<t>The authors would like to thank Tom Herbert for providing the
motivation for the Security/Integrity extension, and for his valuable
comments, T. Sridhar for his valuable comments and feedback, Anoop
Ghanwani for his extensive comments, and Ignas Bagdonas.</t>
    
</section>
<section>  <!-- 9. -->
  <name>Security Considerations</name>

<t>This document does not introduce any additional security
constraints.</t>

</section> <!-- end Security Considerations -->
<section anchor="IANA">
  <name>IANA Considerations</name>
  
<t>This document requires no IANA actions.</t>

</section>
        
</middle>


<!-- ____________________BACK_MATTER____________________ -->
<back>

<references>
  <name>Normative References</name>
        
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>

</references>
 
<references>
  <name>Informative References</name>

<reference anchor="ietf_gue_extensions"
	   target="https://datatracker.ietf.org/doc/draft-ietf-intarea-gue-extensions/">
  <front>
    <title>Extensions for Generic UDP Encapsulation</title>
    <author initials="T." surname="Herbert"/>
    <author initials="L." surname="Yong"/>
    <author initials="F." surname="Templin"/>
    <date year="2019" month="March" day="8"/>
  </front>
  <seriesInfo name="work in" value="progress"/>
</reference>

<reference anchor="ietf_intarea_gue"
	   target="">
  <front>
    <title>Generic UDP Encapsulation</title>
    <author initials="T." surname="Herbert"/>
    <author initials="L." surname="Yong"/>
    <author initials="O." surname="Zia"/>
    <date year="2019" month="October" day="26"/>
  </front>
  <seriesInfo name="work in" value="progress"/>
</reference>

<reference anchor="IEEE802.1Q">
  <front>
  <title>Bridges and Bridged Networks</title>
  <author initials="IEEE" surname="802.1 WG"
          fullname="IEEE 802.1 Working Group"> 
      <organization>Institute for Electrical and Electronic
      Engineers</organization>
  </author>
  <date year="2014" month="November" day="3"/>
  </front>
  <seriesInfo name="IEEE Std" value="802.1Q-2014"/>
</reference>

<reference anchor="INT"
	   target="https://p4.org/p4-spec/docs/INT_v2_1.pdf">
  <front>
    <title>In-band Network Telemetry (INT) Dataplane
    Specification</title>
    <author fullname="P4.org"/>
    <date year="2020" month="November"/>
  </front>
</reference>

<reference anchor="nvo3_vxlan_gpe"
	   target="https://datatracker.ietf.org/doc/draft-ietf-nvo3-vxlan-gpe/">
  <front>
    <title>Generic Protocol Extension for VXLAN (VXLAN-GPE)</title>
    <author initials="F." surname="Maino"/>
    <author initials="L." surname="Kreeger"/>
    <author initials="U." surname="Elzur"/>
    <date year="2023" month="November" day="04"/>
  </front>
  <seriesInfo name="work in" value="progress"/>
</reference>

<reference anchor="OVN"
	   target="https://www.openvswitch.org/">
  <front>
    <title></title>
    <author fullname="Open Virtual Network"/>
  </front>
</reference>

<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2104.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2418.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.3985.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6071.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6291.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7042.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7348.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7637.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8300.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8365.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8394.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8926.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9147.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9197.xml"/>

<reference anchor="VXLANgroup"
	   target="https://datatracker.ietf.org/doc/html/draft-smith-vxlan-group-policy-05">
  <front>
    <title>VXLAN Group Policy Option</title>
    <author initials="M." surname="Smith"/>
    <author initials="L." surname="Kreeger"/>
    <date year="2018" month="October" day="22"/>
  </front>
  <seriesInfo name="work in" value="progress"/>
</reference>

</references>

<section>  <!-- Appendix A -->
  <name>Encapsulation Comparison</name>

   <section> <!-- A.1 -->
    <name>Overview</name>

    <t>This section presents a comparison of the three NVO3
    encapsulation proposals, Geneve <xref target="RFC8926"/>, GUE
    <xref target="ietf_intarea_gue"/>, and VXLAN-GPE <xref
    target="nvo3_vxlan_gpe"/>.  The three encapsulations use an outer
    UDP/IP transport.  Geneve and VXLAN-GPE use an 8-octet header,
    while GUE uses a 4-octet header.  In addition to the base header,
    optional extensions may be included in the encapsulation, as
    discussed in Section A.2 below.</t>
  </section>
  <section>  <!-- A.2 -->
    <name>Extensibility</name>

    <section>  <!-- A.2.1 -->
      <name>Native Extensibility Support</name>

      <t>The Geneve and GUE encapsulations both enable optional
      headers to be incorporated at the end of the base encapsulation
      header.</t>

      <t>VXLAN-GPE does not provide native support for header
      extensions.  However, as discussed in <xref
      target="nvo3_vxlan_gpe"/>, extensibility can be attained to some
      extent if the Network Service Header (NSH) <xref
      target="RFC8300"/> is used immediately following the VXLAN-GPE
      header.  NSH supports either a fixed-size extension (MD Type 1),
      or a variable-size TLV-based extension (MD Type 2).  Note that
      NSH-over-VXLAN-GPE implies an additional overhead of the
      8-octets NSH header, in addition to the VXLAN-GPE header.</t>

    </section>
    <section>  <!-- A.2.2 -->
      <name>Extension Parsing</name>

      <t>The Geneve Variable Length Options are defined as
      Type/Length/Value (TLV) extensions.  Similarly, VXLAN-GPE, when
      using NSH, can include NSH TLV-based extensions.  In contrast,
      GUE defines a small set of possible extension fields (proposed
      in <xref target="ietf_gue_extensions"/>), and a set of flags in the GUE
      header that indicate for each extension type whether it is
      present or not.</t>

<t>TLV-based extensions, as defined in Geneve, provide the flexibility
for a large number of possible extension types.  Similar behavior can
be supported in NSH-over-VXLAN-GPE when using MD Type 2.  The
flag-based approach taken in GUE strives to simplify implementations
by defining a small number of possible extensions used in a fixed
order.</t>

<t>The Geneve and GUE headers both include a length field, defining
the total length of the encapsulation, including the optional
extensions.  This length field simplifies the parsing by transit
devices that skip the encapsulation header without parsing its
extensions.</t>

    </section>
    <section>  <!-- A.2.3 -->
      <name>Critical Extensions</name>

      <t>The Geneve encapsulation header includes the 'C' field, which
      indicates whether the current Geneve header includes critical
      options, that is to say, options which must be parsed by the
      target NVE.  If the endpoint is not able to process a critical
      option, the packet is discarded.</t>

    </section>
    <section>  <!-- A.2.4 -->
      <name>Maximal Header Length</name>

      <t>The maximal header length in Geneve, including options, is
      260 octets.  GUE defines the maximal header to be 128 octets.
      VXLAN-GPE uses a fixed-length header of 8 octets, unless
      NSH-over-VXLAN-GPE is used, yielding an encapsulation header of
      up to 264 octets.</t>

    </section>
  </section>
  <section>  <!-- A.3 -->
    <name>Encapsulation Header</name>

    <section>  <!-- A.3.1 -->
      <name>Virtual Network Identifier (VNI)</name>

      <t>The Geneve and VXLAN-GPE headers both include a 24-bit VNI
      field.  GUE, on the other hand, enables the use of a 32-bit
      field called VNID; this field is not included in the GUE header,
      but was defined as an optional extension in
      <xref target="ietf_gue_extensions"/>.</t>

      <t>The VXLAN-GPE header includes the 'I' bit, indicating that
      the VNI field is valid in the current header.  A similar
      indicator is defined as a flag in the GUE header
      <xref target="ietf_gue_extensions"/>.</t>

    </section>
    <section> <!-- A.3.2 -->
      <name>Next Protocol</name>

      <t>All three encapsulation headers include a field that
      specifies the type of the next protocol header, which resides
      after the NVO3 encapsulation header.  The Geneve header includes
      a 16-bit field that uses the IEEE Ethertype convention.  GUE
      uses an 8-bit field, which uses the IANA Internet protocol
      numbering.  The VXLAN-GPE header incorporates an 8-bit Next
      Protocol field, using a VXLAN-GPE-specific registry, defined in
      <xref target="nvo3_vxlan_gpe"/>.</t>

      <t>The VXLAN-GPE header also includes the 'P' bit, which
      explicitly indicates whether the Next Protocol field is present
      in the current header.</t>

    </section>
    <section>  <!-- A.3.3 -->
      <name>Other Header Fields</name>

      <t>The OAM bit, which is defined in Geneve and in VXLAN-GPE,
      indicates whether the current packet is an OAM packet.  The GUE
      header includes a similar field, but uses different terminology;
      the GUE 'C-bit' specifies whether the current packet is a
      control packet.  Note that the GUE control bit can potentially
      be used in a large set of protocols that are not OAM protocols.
      However, the control packet examples discussed in <xref
      target="ietf_intarea_gue"/> are OAM-related.</t>

<t>Each of the three NVO3 encapsulation headers includes a 2-bit
Version field, which is currently defined to be zero.</t>

<t>The Geneve and VXLAN-GPE headers include reserved fields; 14 bits
in the Geneve header, and 27 bits in the VXLAN-GPE header are
reserved.</t>

    </section>
  </section>
  <section>  <!-- A.4 -->
    <name>Comparison Summary</name>

    <t>The following table summarizes the comparison between the three
    NVO3 encapsulations. In some cases a plus sign ("+") or minus sign
    ("-") is used to indicate that the header is stronger or weaker in
    an area respectively.</t>

<figure anchor="ComparisonChart">
  <name>NVO3 Encapsulations Comparison</name>
    <artwork type="ascii-art" align="center">
      <![CDATA[
+----------------+----------------+----------------+----------------+
|                |     Geneve     |      GUE       |   VXLAN-GPE    |
+----------------+----------------+----------------+----------------+
| Outer transport|     UDP/IP     |     UDP/IP     |     UDP/IP     |
| UDP Port Number|     6081       |     6080       |     4790       |
+----------------+----------------+----------------+----------------+
| Base header    |    8 octets    |    4 octets    |    8 octets    |
| length         |                |                |  (16 octets    |
|                |                |                |   using NSH)   |
+----------------+----------------+----------------+----------------+
| Extensibility  |Variable length |Extension fields| No native ext- |
|                |    options     |                | ensibility.    |
|                |                |                | Might use NSH. |
+----------------+----------------+----------------+----------------+
| Extension      |   TLV-based    |   Flag-based   |   TLV-based    |
| parsing method |                |                |(using NSH with |
|                |                |                |   MD Type 2)   |
+----------------+----------------+----------------+----------------+
| Extension      |    Variable    |     Fixed      |    Variable    |
| order          |                |                |  (using NSH)   |
+----------------+----------------+----------------+----------------+
| Length field   |       +        |       +        |       -        |
+----------------+----------------+----------------+----------------+
| Max Header     |   260 octets   |   128 octets   |    8 octets    |
| Length         |                |                |(264 using NSH) |
+----------------+----------------+----------------+----------------+
| Critical exte- |       +        |       -        |       -        |
| nsion bit      |                |                |                |
+----------------+----------------+----------------+----------------+
| VNI field size |    24 bits     |    32 bits     |    24 bits     |
|                |                |  (extension)   |                |
+----------------+----------------+----------------+----------------+
| Next protocol  |    16 bits     |     8 bits     |     8 bits     |
| field          |   Ethertype    | Internet prot- |  New registry  |
|                |   registry     | ocol registry  |                |
+----------------+----------------+----------------+----------------+
| Next protocol  |       -        |       -        |       +        |
| indicator      |                |                |                |
+----------------+----------------+----------------+----------------+
| OAM / control  |    OAM bit     |  Control bit   |    OAM bit     |
| field          |                |                |                |
+----------------+----------------+----------------+----------------+
| Version field  |    2 bits      |    2 bits      |    2 bits      |
+----------------+----------------+----------------+----------------+
| Reserved bits  |   14 bits      |     none       |   27 bits      |
+----------------+----------------+----------------+----------------+
      ]]>
    </artwork>
</figure>
    
  </section>
</section>

<section anchor="Contributors" numbered="false">
  <name>Contributors</name>

  <t>The following co-authors have contributed to this document:.</t>

  <contact fullname="Ilango Ganga">
    <organization>Intel</organization>
    <address>
      <email>ilango.s.ganga@intel.com</email>
    </address>
  </contact>
  <contact fullname="Pankaj Garg">
    <organization>Microsoft</organization>
    <address>
      <email> pankajg@microsoft.com</email>
    </address>
  </contact>
  <contact fullname="Rajeev Manur">
    <organization>Broadcom</organization>
    <address>
      <email>rajeev.manur@broadcom.com</email>
    </address>
  </contact>
  <contact fullname="Tal Mizrahi">
    <organization>Huawei</organization>
    <address>
      <email>tal.mizrahi.phd@gmail.com</email>
    </address>
  </contact>
  <contact fullname="David Mozes">
    <address>
      <email>mosesster@gmail.com</email>
    </address>
  </contact>
  <contact fullname="Erik Nordmark">
    <organization>ZEDEDA</organization>
    <address>
      <email>nordmark@sonic.net</email>
    </address>
  </contact>
  <contact fullname="Michael Smith">
    <organization>Cisco</organization>
    <address>
      <email>michsmit@cisco.com</email>
    </address>
  </contact>
  <contact fullname="Sam Aldrin">
    <organization>Google</organization>
    <address>
      <email>aldrin.ietf@gmail.com</email>
    </address>
  </contact>

</section>

</back>

</rfc>
