<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?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 category="std" docName="draft-bonica-6man-vpn-dest-opt-14"
     ipr="trust200902">
  <front>
    <title abbrev="IPv6 TPF Option">The IPv6 Tunnel Payload Forwarding (TPF)
    Option</title>

    <author fullname="Ron Bonica" initials="R." surname="Bonica">
      <organization>Juniper Networks</organization>

      <address>
        <postal>
          <street>2251 Corporate Park Drive</street>

          <city>Herndon</city>

          <code>20171</code>

          <region>Virginia</region>

          <country>USA</country>
        </postal>

        <email>rbonica@juniper.net</email>
      </address>
    </author>

    <author fullname="Yuji Kamite" initials="Y. " surname="Kamite">
      <organization>NTT Communications Corporation</organization>

      <address>
        <postal>
          <street>3-4-1 Shibaura, Minato-ku</street>

          <city>Tokyo</city>

          <code>108-8118</code>

          <country>Japan</country>
        </postal>

        <email>y.kamite@ntt.com</email>
      </address>
    </author>

    <author fullname="Luay Jalil" initials="L. " surname="Jalil">
      <organization>Verizon</organization>

      <address>
        <postal>
          <street/>

          <city>Richardson</city>

          <region>Texas</region>

          <country>USA</country>
        </postal>

        <email>luay.jalil@one.verizon.com</email>
      </address>
    </author>

    <author fullname="Yifeng Zhou" initials="Y. " surname="Zhou">
      <organization>ByteDance</organization>

      <address>
        <postal>
          <street>Building 1, AVIC Plaza, 43 N 3rd Ring W Rd Haidian
          District</street>

          <city>Beijing</city>

          <code>100000</code>

          <country>P.R. China</country>
        </postal>

        <email>yifeng.zhou@bytedance.com</email>
      </address>
    </author>

    <author fullname="Gang Chen" initials="G." surname="Chen">
      <organization>Baidu</organization>

      <address>
        <postal>
          <street>No.10 Xibeiwang East Road Haidian District</street>

          <city>Beijing</city>

          <code>100193</code>

          <country>P.R. China</country>
        </postal>

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

    <date day="2" month="February" year="2021"/>

    <area>INT Area</area>

    <workgroup>6man</workgroup>

    <keyword>IPv6</keyword>

    <keyword>VPN</keyword>

    <keyword>Destination Option</keyword>

    <abstract>
      <t>This document explains how IPv6 options can be used in IPv6 tunnels.
      It also defines the IPv6 Tunnel Payload Forwarding (TPF) option.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="sectIntro" title="Introduction">
      <t>This document explains how <xref target="RFC8200">IPv6 options
      </xref> can be used in IPv6 tunnels. It also defines the IPv6 Tunnel
      Payload Forwarding (TPF) option.</t>

      <t>An <xref target="RFC2473">IPv6 tunnel</xref> connects two nodes,
      called the entry-point and the exit-point. The entry-point receives a
      packet and encapsulates it in a Tunnel IPv6 Header. <xref
      target="Encaps"/> depicts the encapsulation.</t>

      <t/>

      <figure align="center" anchor="Encaps" title="IPv6 Tunnel Encapsulation">
        <artwork><![CDATA[                            +----------------------------------//-----+
                            | Original |                              |
                            |          |   Original Packet Payload    |
                            | Header   |                              |
                            +----------------------------------//-----+
                             <            Original Packet            >
                                              |
                                              v
       <Tunnel IPv6 Headers> <       Original Packet                 >

      +---------+ - - - - - +-------------------------//--------------+
      | IPv6    | IPv6      |                                         |
      |         | Extension |        Original Packet                  |
      | Header  | Headers   |                                         |
      +---------+ - - - - - +-------------------------//--------------+
       <                          Tunnel IPv6 Packet                 >]]></artwork>
      </figure>

      <t>The original packet can be any layer-2 or layer-3 packet (e.g.,
      Ethernet, IPv4, IPv6). The Tunnel Header is an IPv6 header followed by
      zero or more extension headers. The resulting packet is a Tunnel IPv6
      Packet.</t>

      <t>The entry-point sends the Tunnel IPv6 Packet to the exit-point which
      then executes the following procedure:</t>

      <t><list style="symbols">
          <t>Process the Tunnel IPv6 Header.</t>

          <t>Remove the Tunnel IPv6 Header, exposing the original packet.</t>

          <t>Submit the original packet to the next-protocol engine.</t>
        </list>The exit-point node processes the Tunnel IPv6 Header in strict
      left-to-right order. It processes the IPv6 header first and then
      processes extension headers in the order that they appear in the packet.
      The IPv6 header, and each extension header, includes a Next Header
      field. The last Next Header field processed identifies the next-protocol
      engine.</t>

      <t>Entry-point nodes can send optional information to the next-protocol
      engine on the exit-point node. For example, the entry-point can
      indicate:</t>

      <t><list style="symbols">
          <t>The interface through which the next-protocol engine should send
          the packet.</t>

          <t>The routing table that the next-protocol engine should use to
          process the packet.</t>
        </list>To send this information, the entry-point node includes an IPv6
      Destination Option header in the Tunnel IPv6 Header. The IPv6
      Destination Options header includes an IPv6 TPF option and the IPv6 TPF
      option includes TPF information. The next-protocol engine on the
      exit-point node uses TPF information when it forwards the original
      packet.</t>
    </section>

    <section anchor="ReqLang" title="Requirements Language">
      <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 <xref
      target="RFC2119">BCP 14</xref> <xref target="RFC8174"/> when, and only
      when, they appear in all capitals, as shown here.</t>
    </section>

    <section anchor="VPNContextOption"
             title="The IPv6 Tunnel Payload Forwarding (TPF) Option">
      <t>The TPF Option contains the following fields:</t>

      <t><list style="symbols">
          <t>Option Type: 8-bit selector. TPF option. Value TBD by IANA.
          (Suggested value: 0x12). See Note below.</t>

          <t>Opt Data Len - 8-bit unsigned integer. Length of the option, in
          octets, excluding the Option Type and Option Length fields. This
          field MUST be set to 4.</t>

          <t>Option Data - 32-bits. Tunnel Payload Forwarding (TPF)
          Information.</t>
        </list></t>

      <t>The TPF option MAY appear in a Destination Options header that
      precedes an upper-layer header. It MUST NOT appear in a Hop-by-hop
      Options header or in a Destination Options header that precedes a
      Routing header.</t>

      <t>NOTE : The highest-order two bits of the Option Type (i.e., the "act"
      bits) are 01. These bits specify the action taken by a destination node
      that does not recognize the option. The required action is to discard
      the packet. The third highest-order bit of the Option Type (i.e., the
      "chg" bit) is 0. This indicates that Option Data cannot be modified
      along the path between the packet's source and its destination.</t>
    </section>

    <section title="TPF Information Determines Next-Protocol Engine Behavior">
      <t>An exit-point node supports one or more next-protocol engines (e.g.,
      Ethernet, IPv4, IPv6). Each next-protocol engine supports a default
      forwarding procedure and zero or more special forwarding procedures.</t>

      <t>When an exit-point node submits a packet to a next-protocol engine
      without TPF information, the next-protocol engine executes its default
      forwarding procedure. For example, assume that the exit-point node
      receives the following Tunnel IPv6 Packet:</t>

      <t><list style="symbols">
          <t>The Tunnel IPv6 Packet does not contain TPF information.</t>

          <t>The original packet is IPv4.</t>
        </list>In this case, the exit-point node processes and removes the
      Tunnel IPv6 Header. It then submits the original packet, without any TPF
      information, to the IPv4 protocol engine.</t>

      <t>The IPv4 protocol engine executes its default forwarding procedure.
      It searches its Forwarding Information Base (FIB) for and entry that
      matches the original packet's destination address. If the search returns
      a FIB entry, the protocol engine forwards the packet through an
      interface that the FIB entry identifies.</t>

      <t>When an exit-point node submits a packet to a next-protocol engine
      with TPF information, the next-protocol engine executes a special
      forwarding procedure. For example, assume that the exit-point node
      receives the following Tunnel IPv6 packet:</t>

      <t><list style="symbols">
          <t>The Tunnel IPv6 Packet contains TPF information that identifies
          an interface.</t>

          <t>The original packet is IPv4.</t>
        </list>In this case, the exit-point node processes and removes the
      Tunnel IPv6 Header. It then submits the original packet, along with TPF
      information, to the IPv4 protocol engine.</t>

      <t>The IPv4 protocol engine executes a special forwarding procedure. It
      forwards the packet through the interface identified by TPF information,
      without searching the FIB.</t>
    </section>

    <section title="TPF Information Semantics">
      <t>TPF information is opaque. While it must be understood by the
      entry-point node and the exit-point node, it does not need to be
      understood by any other node.</t>
    </section>

    <section title="Virtual Private Networking (VPN) Applications">
      <t>The IPv6 TPF option is useful in deployments where IPv6 tunnels
      carry:</t>

      <t><list style="symbols">
          <t><xref target="RFC4364">Layer 3 Virtual Private Network (L3VPN)
          </xref> traffic.</t>

          <t><xref target="RFC7432">Ethernet Virtual Private Network (EVPN)
          </xref> traffic.</t>
        </list>When an IPv6 tunnel carries L3VPN traffic, VPN context
      information can be encoded in an IPv6 TPF option. Therefore, the MPLS
      service label that is normally present in an L3VPN packet can be
      eliminated.</t>

      <t>When an IPv6 tunnel carries EVPN traffic, VPN context information can
      be encoded in an IPv6 TPF option. Therefore, the UDP and VXLAN headers
      that might otherwise be present can be eliminated.</t>
    </section>

    <section title="Security Considerations">
      <t>TPF information MUST NOT be accepted from untrusted sources. The
      following are acceptable methods of risk mitigation:</t>

      <t><list style="symbols">
          <t>Authenticate the IPv6 TPF option using the <xref
          target="RFC4302">IPv6 Authentication Header (AH)</xref> or the <xref
          target="RFC4303">IPv6 Encapsulating Security Payload (ESP) Header
          </xref>.</t>

          <t>Maintain a secure TPF domain.</t>
        </list>All nodes at the edge of a secure TPF domain discard packets
      that satisfy the following criteria:</t>

      <t><list style="symbols">
          <t>Contain an IPv6 TPF option.</t>

          <t>Contain an IPv6 Destination Address that represents an interface
          inside of the secure TPF domain.</t>
        </list></t>
    </section>

    <section title="IANA Considerations">
      <t>IANA is requested to allocate a code point from the Destination
      Options and Hop-by-hop Options registry
      (https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-2).
      This option is called "Tunnel Payload Forwarding Option". The "act" bits
      are 01 and the "chg" bit is 0. The suggested value is 0x12.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Thanks to Dr. Vanessa Ameen, Brian Carpenter, Adrian Farrel, Ishaan
      Gandhi, Tom Herbert, John Leddy, Srihari Sangli and Tony Li for their
      comments.</t>
    </section>

    <section title="Contributors">
      <t><list style="empty">
          <t>Chris Lenart</t>

          <t>Verizon</t>

          <t>22001 Loudoun County Parkway</t>

          <t>Ashburn, Virginia 20147 USA</t>

          <t>Email: chris.lenart@verizon.com</t>
        </list><list style="empty">
          <t/>
        </list><list style="empty">
          <t>Greg Presbury</t>

          <t>Hughes Network Systems</t>

          <t>11717 Exploration Lane</t>

          <t>Germantown, Maryland 20876 USA</t>

          <t>Email: greg.presbury@hughes.com</t>
        </list></t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.8174'?>

      <?rfc include='reference.RFC.8200'?>

      <?rfc include='reference.RFC.2473'?>

      <?rfc include='reference.RFC.4302'?>

      <?rfc include='reference.RFC.4303'?>
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.4364"?>

      <?rfc include='reference.RFC.7432'?>
    </references>
  </back>
</rfc>
