<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
<!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" ipr="trust200902" docName="draft-ietf-nvo3-geneve-oam-08" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.7.0 -->
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<front>
    <title abbrev="OAM in GENEVE">OAM for use in GENEVE</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nvo3-geneve-oam-08"/>
    <author initials="G." surname="Mirsky" fullname="Greg Mirsky">
      <organization>Ericsson</organization>
      <address>
        <email>gregimirsky@gmail.com</email>
      </address>
    </author>
    <!--
	    <author fullname="Xiao Min" initials="X." surname="Min">
      <organization>ZTE Corp.</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country/>
        </postal>

        <email>xiao.min2@zte.com.cn</email>
      </address>
    </author>
	-->
	<author initials="S" surname="Boutros" fullname="Sami Boutros">
      <organization>Ciena</organization>
      <address>
        <email>sboutros@ciena.com</email>
      </address>
    </author>
    
    <author initials="D" surname="Black" fullname="David Black">
      <organization>Dell EMC</organization>
      <address>
        <postal>
          <street>176 South Street</street>
          <city>Hopkinton, MA</city>
          <code>01748</code>
          <country>United States of America</country>
        </postal>
        <email>david.black@dell.com</email>
      </address>
    </author>
    
    <author fullname="Santosh Pallagatti" initials="S." surname="Pallagatti">
      <organization>VMware</organization>
      <address>
        <email>santosh.pallagatti@gmail.com</email>
      </address>
    </author>
    <date year="2023"/>
    
    <area>Routing</area>
    <workgroup>NVO3  Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>OAM</keyword>
    <abstract>
      <t>
          This document lists a set of general requirements for active OAM protocols in
   the Geneve overlay network. Based on the requirements, IP encapsulation for active  Operations, Administration, and Maintenance 
          protocols in Geneve protocol is defined. Considerations for using ICMP and UDP-based protocols are discussed.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>
 Geneve <xref target="RFC8926" format="default"/> is intended to support
 various scenarios of network virtualization. In addition to carrying multi-protocol
payload, e.g., Ethernet, IPv4/IPv6, the Geneve message  includes metadata.
Operations, Administration, and Maintenance (OAM) protocols support
fault management and performance monitoring
functions necessary for comprehensive network operation. Active  OAM protocols, as defined in <xref target="RFC7799" format="default"/>,
use specially constructed packets that are injected into the network. To ensure
that the measured performance metric or the detected failure of the transport layer
are related to a particular Geneve flow, it is critical that these test packets 
share fate with overlay data packets for that flow when traversing the underlay network.
</t>
      <t>
A set of general requirements for active OAM protocols in the Geneve overlay network is listed in <xref target="requirements" format="default"/>.
 IP encapsulation conforms to these requirements and is a suitable encapsulation
 of active OAM protocols in a Geneve overlay network. Active OAM in a Geneve overlay network
 are exchanged between two Geneve tunnel endpoints, which may be an NVE (Network
   Virtualization Edge) or another device acting as a Geneve tunnel
   endpoint. For simplicity, NVE is used to represent the Geneve tunnel endpoint.
   <!-- A tenant is a physical or virtual device
   attached to a Geneve tunnel endpoint from the outside.  VAP (Virtual
   Access Point) is the NVE side of the interface between the NVE and
   the tenant, and a VAP is a logical network port (virtual or physical)
   into a specific virtual network.-->
    Please refer to <xref target="RFC7365"/>and <xref target="RFC8014"/>
    for detailed definitions and descriptions of NVE.
Also, note that  the IP encapsulation of OAM applies to those Virtual Network Identifiers (VNIs) that support
 the use of the necessary values of the Protocol Type field in the Geneve header, i.e., Ethertypes for IPv4 or IPv6.
 It does not apply to VNIs that lack that support, e.g., VNIs that only support Ethernet Ethertypes.
 Analysis and definition of other types of OAM encapsulation in Geneve are outside the scope of this document.
</t>
      <section numbered="true" toc="default">
        <name>Conventions used in this document</name>
        <section numbered="true" toc="default">
          <name>Acronyms</name>
         <!-- <t>VAP              Virtual Access Point</t> -->
          <!--<t>FM                 Fault Management </t>-->
          <t>Geneve        Generic Network Virtualization Encapsulation </t>
          <t>NVO3            Network Virtualization Overlays </t>
          <t>OAM                Operations, Administration, and Maintenance</t>
          <t>VNI                 Virtual Network Identifier</t>
</section>
        <section numbered="true" toc="default">
          <name>Requirements Language</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" format="default"/> <xref target="RFC8174" format="default"/> 
   when, and only when, they appear in all capitals, as shown here.
          </t>
        </section>
      </section>
    </section>
    <section anchor="requirements" numbered="true" toc="default">
      <name>Active OAM Protocols in Geneve Networks</name>
      <t>
OAM protocols, whether part of fault management or performance monitoring, are intended to provide
reliable information that can be used to detect a failure,
identify the defect and localize it, thus helping to identify and apply corrective actions to minimize the negative impact on service.
Several OAM protocols are used to perform these functions;
these protocols require demultiplexing at the receiving instance of Geneve.
To improve the accuracy of
the correlation between the condition experienced by the monitored Geneve tunnel and
the state of the OAM protocol the OAM encapsulation is required
to comply with the following requirements:
</t>
      <ul empty="true" spacing="normal">
        <li>
   REQ#1:    Geneve OAM test packets MUST share the
   fate with data traffic of the monitored Geneve tunnel, i.e., be in-band with the monitored traffic, follow
   the same overlay and transport path as packets with data payload, in the forward direction,
   i.e. from ingress toward egress endpoint(s) of the OAM test.
</li>
      </ul>
      <t>
An OAM protocol MAY be used to monitor the particular Geneve tunnel as a whole. In that case, test packets could be fate-sharing
with a sub-set of tenant flows transported over the Geneve tunnel.
If the goal is to monitor the condition experienced by the flow of a particular tenant,
the test packets MUST be fate-sharing with that specific flow in the Geneve tunnel. In the latter case,
the test packet MUST use the same Geneve encapsulation as the data packet
(except for the value in the Protocol Type field <xref target="RFC8926" format="default"/>),
including the value in the Virtual Network Identifier (VNI) field. Both scenarios
are discussed in detail in <xref target="control-channel-sec" format="default"/>.
</t>
      <ul empty="true" spacing="normal">
        <li>
   REQ#2:   Encapsulation of OAM control message and data packets in
   underlay network MUST be indistinguishable from the underlay network IP forwarding point of view.
</li>
        <li>
   REQ#3:   Presence of OAM control message in Geneve packet MUST be unambiguously
   identifiable to Geneve functionality, e.g., at endpoints of Geneve tunnels.
</li>
        <li>
REQ#4:   OAM test packets MUST NOT be forwarded to a tenant system.
</li>
      </ul>
      <t>
A test packet generated by an active OAM protocol, either for a defect detection
or performance measurement, according to REQ#1,
MUST be fate-sharing with the tunnel or data flow being monitored.
In an environment where multiple paths through the domain are available, underlay transport nodes
can be programmed to use characteristic information to balance the load across known paths.
It is essential that test packets follow the same route, i.e., traverses the same set of nodes
and links, as a data packet of the monitored flow.  Thus, the following requirement to
support OAM packet fate-sharing with the data flow:
</t>
      <ul empty="true" spacing="normal">
        <li>
   REQ#5:   It MUST be possible to express entropy for underlay Equal Cost Multipath
   in the Geneve encapsulation of OAM packets.
</li>
      </ul>
      <section anchor="control-channel-sec" numbered="true" toc="default">
        <name>Defect Detection and Troubleshooting in Geneve Network with Active OAM</name>
        <t>
<xref target="geneve-model-fig" format="default"/> presents an example of a Geneve domain.
In this section, we consider two scenarios
of active OAM being used to detect and localize defects in the Geneve network.

        </t>
        <figure anchor="geneve-model-fig">
          <name>An example of a Geneve domain</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
       +--------+                                             +--------+
       | Tenant +--+                                     +----| Tenant |
       | VNI 28 |  |                                     |    | VNI 35 |
       +--------+  |          ................           |    +--------+
                   |  +----+  .              .  +----+   |
                   |  | NVE|--.              .--| NVE|   |
                   +--| A  |  .              .  | B  |---+
                      +----+  .              .  +----+
                      /       .              .
                     /        .     Geneve   .   
       +--------+   /         .    Network   .   
       | Tenant +--+          .              .
       | VNI 35 |             .              .
       +--------+             ................
                                     |
                                   +----+
                                   | NVE|
                                   | C  |
                                   +----+
                                     |
                                     |
                           =====================
                             |               |
                         +--------+      +--------+
                         | Tenant |      | Tenant |
                         | VNI 28 |      | VNI 35 |
                         +--------+      +--------+

          ]]></artwork>
        </figure>
        <t>
In the first case, a communication problem between Network Virtualization Edge (NVE) device A and NVE C was observed.
The underlay, e.g., IP network, forwarding is working well but the Geneve connection is unstable for all tenants of NVE A and NVE C.
Troubleshooting and localization of the problem can be done irrespective of the VNI value.
</t>
        <t>
In the second case, traffic on VNI 35 between NVE A and NVE B has no problems,
as on VNI 28 between NVE A and NVE C. But traffic on VNI 35 between NVE A
and NVE C experiences problems, for example, excessive packet loss.
</t>
<t>
   The first case can be detected and investigated using any VNI
   value, whether it connects tenant systems or not; however, to
   conform to REQ#4 (<xref target="requirements"/>) OAM test packets SHOULD be transmitted
   on a VNI that doesn't have any tenants.  Such a Geneve tunnel is
   dedicated to carrying only control and management data between the
   tunnel endpoints, hence it is referred to as a Geneve control
   channel and that VNI is referred to as the Management VNI. A
   configured VNI MAY be used to identify the control channel, but it
   is RECOMMENDED that the default value 1 be used as the Management
   VNI. Encapsulation of test packets using the Management VNI is discussed in <xref target="oam-encap-section"/>.
</t>
<t>
The control channel of a Geneve tunnel MUST NOT carry tenant data.
   As no tenants are connected using the control channel, a system
   that supports this specification, MUST NOT forward a packet
   received over the control channel to any tenant.  A packet received
   over the control channel MAY be forwarded if and only if it is sent
   onto the control channel of the a concatenated Geneve tunnel. The
   Management VNI SHOULD be terminated on the tenant-facing side of
   the Geneve encap/decap functionality, not the DC-network-facing
   side (per definitions in Section 4 of <xref target="RFC8014"/>) so that Geneve
   encap/decap functionality is included in its scope.  This approach
   causes an active OAM packet, e.g., an ICMP echo request, to be
   decapsulated in the same fashion as any other received Geneve
   packet.  In this example, the resulting ICMP packet is handed to
   NVE's local management functionality for the processing which
   generates an ICMP echo reply.  The ICMP echo reply is encapsulated
   in Geneve as specified in <xref target="oam-encap-section"/>. for forwarding back to the
   NVE that sent the echo request.  One advantage of this approach is
   that a repeated ping test could detect an intermittent problem in
   Geneve encap/decap hardware, which would not be tested if the
   Management VNI were handled as a "special case" at the
   DC-network-facing interface.
</t>
        <t>
The second case requires that a test packet be transmitted using
the VNI value for the traffic that is encountering problems and the test packet
experiences network treatment as the tenant's packets.
Detail of that use case are outside the scope of this specification.
</t>
      </section>
      <section anchor="oam-encap-section" numbered="true" toc="default">
        <name>OAM Encapsulation in Geneve</name>
        <t>
Active OAM in Geneve network uses an IP encapsulation.
Protocols such as BFD <xref target="RFC5880" format="default"/> or STAMP <xref target="RFC8762" format="default"/> use UDP transport.
The destination UDP port number in the inner UDP header (<xref target="oam-geneve-encap-fig" format="default"/>) identifies the OAM protocol.
This approach is well-known and has been used, for example, in MPLS networks <xref target="RFC8029" format="default"/>.
The UDP source port can be used to provide entropy, e.g., to explore different paths for Equal Cost Multipath.
To use IP encapsulation for an active OAM protocol the Protocol Type field of the Geneve header
MUST be set to the IPv4 (0x0800) or IPv6 (0x86DD) value.
</t>
        <figure anchor="oam-geneve-encap-fig">
          <name>Geneve IP/UDP Encapsulation of an Active OAM Packet</name>
          <artwork name="" type="" align="left" alt=""><![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 IPvX Header                      ~
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 ~                        Outer UDP Header                       ~
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 ~                          Geneve Header                        ~
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 ~                        Inner IPvX Header                      ~
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 ~                        Inner UDP Header                       ~
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 ~                        Active OAM Packet                      ~
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <t>
  
  Inner IP header:
        </t>
        <dl newline="false" spacing="normal">
          <dt/>
          <dd>Destination IP: IP address MUST NOT be of one of tenant's IP addresses.
					   The IP address MUST be set to the loopback address 127.0.0.1/32 for IPv4,
					   or the loopback address ::1/128 for IPv6 <xref target="RFC4291" format="default"/>.
					   <!--Alternatively, the destination IP address MAY be set to VAP's IP address.--></dd>
          <dt/>
          <dd>Source IP: IP address of the NVE.</dd>
          <dt/>
          <dd>TTL or Hop Limit: MUST be set to 255 per <xref target="RFC5082" format="default"/>.
					   </dd>
          <!--
					   <t>[Ed.Note]:Use of inner source and destination IP 
					   addresses needs more discussion by the WG.</t>
					   -->
				   </dl>
      </section>
    </section>
    <section anchor="geneve-echo-sec" numbered="true" toc="default">
      <name>Echo Request and Echo Reply in Geneve Tunnel</name>
      <t>
 ICMP and ICMPv6 (<xref target="RFC0792" format="default"/> and <xref target="RFC4443" format="default"/> respectively)
 provide required on-demand defect detection and failure localization. ICMP control messages
 immediately follow the inner IP header encapsulated in Geneve.
 ICMP extensions for Geneve networks use mechanisms defined in <xref target="RFC4884" format="default"/>.
</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no requirements for IANA. This section can be removed before the publication.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
   As part of a Geneve network, active OAM inherits the security considerations discussed in
   <xref target="RFC8926" format="default"/>. Additionally, a system MUST provide control to limit
   the rate of Geneve OAM packets punted to the Geneve control plane for processing
   in order to avoid overloading that control plane.
      </t>
      <t>
      OAM in GENEVE packets uses the  General TTL Security Mechanism <xref target="RFC5082"/>
      and any packet received with an inner TTL / Hop Count other than 255 MUST be discarded.
      </t>
    </section>
    <section anchor="ack" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>
  The authors express their appreciation to Donald E. Eastlake 3rd for his suggestions that improved the readability of the document.
      </t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8926.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5586.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4385.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7799.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5082.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.0792.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4443.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4884.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5880.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8762.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8029.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8014.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7365.xml"/>
      </references>
    </references>
    <section anchor="historical" numbered="true" toc="default">
      <name>Additional Considerations for OAM Encapsulation Method in Geneve</name>
      <t>
  Several other options for OAM encapsulation were considered.
  Those are listed in the Appendix solely for informational purposes.
  These options were discarded in favor of the approach described in the main body of this document.
      </t>
      <t>
A Protocol Type field might be used to demultiplex active OAM protocols directly. Such method
avoids the use of additional intermediate header but requires that each active OAM protocol be
assigned unique identifier from the Ether Types registry maintained by IANA.
</t>
      <t>
The alternative to using the Protocol Type directly is to use a shim that, in turn, identifies
the OAM Protocol and, optionally, includes additional information. <xref target="RFC5586" format="default"/>
defines how the Generic Associated Channel Label (GAL) can be used to identify that the
Associated Channel Header (ACH), defined in <xref target="RFC4385" format="default"/>, immediately follows the
Bottom-of-the-Stack label. Thus, the MPLS Generic Associated Channel can be identified,
and protocols are demultiplexed based on the Channel Type field's value.
Number of channel types, e.g., for
continuity check and performance monitoring, already
have been defined and are listed in IANA MPLS Generalized Associated Channel
Types (including Pseudowire Associated Channel Types) registry.
The value of the Protocol Type field in the Geneve header MUST be set to MPLS to use this approach.
The Geneve
header MUST be immediately followed by the GAL label with the S flag set to indicate that GAL is the
Bottom-of-the-stack label. Then ACH MUST follow the GAL label and the value of the Channel Type
identifies which of active OAM protocols being encapsulated in the packet.
</t>

    </section>
  </back>
</rfc>
