<?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-ext-hdr-update-00"
     ipr="trust200902" updates="RFC 8200">
  <front>
    <title abbrev="IPv6 Extension Headers">Inserting, Processing And Deleting
    IPv6 Extension Headers</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>

    <date day="6" month="March" year="2020"/>

    <area>INT Area</area>

    <workgroup>6man</workgroup>

    <keyword>Extension Header</keyword>

    <abstract>
      <t>This document provides guidance regarding the processing, insertion
      and deletion of IPv6 extension headers. It updates RFC 8200.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="sectIntro" title="Introduction">
      <t>In <xref target="RFC8200">IPv6</xref> optional internet-layer
      information is encoded in extension headers. As specified by <xref
      target="RFC8200"/>, "extension headers (except for the Hop-by-Hop
      Options header) are not processed, inserted, or deleted by any node
      along a packet's delivery path, until the packet reaches the node (or
      each of the set of nodes, in the case of multicast) identified in the
      Destination Address field of the IPv6 header".</t>

      <t>The statement quoted above identifies nodes upon which extension
      headers are not processed, inserted or deleted. It does not imply that
      extension headers can be processed, inserted or deleted on any other
      node along a packet's delivery path.</t>

      <t>This document provides guidance regarding the processing, insertion
      and deletion of IPv6 extension headers. It clarifies the statement
      quoted above and updates <xref target="RFC8200"/>.</t>
    </section>

    <section anchor="sectTerm" title="Terminology">
      <t>The following terms are used in this document:</t>

      <t><list style="symbols">
          <t>Source node - An IPv6 source node accepts data from an
          upper-layer protocol, encapsulates it in an IPv6 header, and sends
          the resulting IPv6 packet to a destination node.</t>

          <t>Destination node - An IPv6 destination node receives an IPv6
          packet and delivers its payload to an upper-layer protocol.</t>

          <t>Delivery path - A packet's delivery path is a series of nodes
          that a packet traverses on route to its destination. The delivery
          path includes the destination node.</t>

          <t>Segment - A segment is a series of links and nodes in a packet's
          delivery path. The IPv6 Routing header steers packets from segment
          to segment along the delivery path. If a packet contains a Routing
          header, its delivery path can contain multiple segments. If a packet
          does not contain a Routing header, its delivery path contains only
          one segment.</t>

          <t>Segment egress node - A segment egress node terminates a segment.
          When a packet arrives at a segment egress node, its IPv6 Destination
          Address identifies a resource that belongs to the node. All
          destination nodes are also segment egress nodes.</t>
        </list></t>
    </section>

    <section title="Updates To RFC 8200">
      <t>The terms defined in <xref target="sectTerm"/> of this document
      should be added to Section 2 of <xref target="RFC8200"/>.</t>

      <t><xref target="sectOrg"/> of this document quotes text from <xref
      target="RFC8200"/>. That text should be replaced with the text contained
      by <xref target="sectUpdate"/> of this document.</t>

      <section anchor="sectOrg" title="Original Text">
        <t>"Extension headers (except for the Hop-by-Hop Options header) are
        not processed, inserted, or deleted by any node along a packet's
        delivery path, until the packet reaches the node (or each of the set
        of nodes, in the case of multicast) identified in the Destination
        Address field of the IPv6 header.</t>

        <t>The Hop-by-Hop Options header is not inserted or deleted, but may
        be examined or processed by any node along a packet's delivery path,
        until the packet reaches the node (or each of the set of nodes, in the
        case of multicast) identified in the Destination Address field of the
        IPv6 header. The Hop-by-Hop Options header, when present, must
        immediately follow the IPv6 header. Its presence is indicated by the
        value zero in the Next Header field of the IPv6 header."</t>
      </section>

      <section anchor="sectUpdate" title="Updated Text">
        <t>Source nodes can send packets that include extension headers.
        Extension headers are not inserted by subsequent nodes along a
        packet's delivery path.</t>

        <t>The Hop-by-Hop Options header can be processed by any node in a
        packet&rsquo;s delivery path. The Destination Options header and
        Routing header can be processed by any segment egress node, including
        the destination node. The Fragment header can be processed by the
        destination node only.</t>

        <t>If a packet includes a Fragment header, the Authentication header
        and Encapsulating Security Payload header can be processed by the
        destination node only. However, if the packet does not include a
        Fragment header, the Authentication header and Encapsulating Security
        Payload header can be processed by any segment egress node, including
        the destination node.</t>

        <t>Except for the following fields, extension headers are not modified
        by nodes along a packet's delivery path:</t>

        <t><list style="symbols">
            <t>The Segments Left field in the Routing header.</t>

            <t>Type-specific data in the Routing header.</t>

            <t>Option Data in the Destination Options header.</t>
          </list></t>

        <t>Extension headers are not deleted by any node along a packet's
        delivery path, until the packet reaches the destination node (or each
        of the set of destination nodes, in the case of multicast).</t>
      </section>
    </section>

    <section anchor="sectRat" title="Discussion">
      <t>The following are reasons why extension headers are not inserted by
      nodes along a packet's delivery path:</t>

      <t><list style="symbols">
          <t>MTU black holing - Many IPv6 nodes dynamically discover <xref
          target="RFC8201">Path MTU (PMTU)</xref>. Having discovered the PMTU,
          they send packets whose size approaches, but does not exceed the
          PMTU. Adding an extension header to such a packet can cause MTU
          black holing.</t>

          <t>Incompatibility with the <xref target="RFC4302">IPv6
          Authentication Header</xref> - IPv6 Authentication header processing
          relies on the immutability of the Payload Length field in the IPv6
          header. When a node along a packet's delivery path inserts an
          extension header, it updates the Payload Length field in the IPv6
          header. This causes Authentication header processing to fail.</t>

          <t>Semantic corruption - Insertion of an extension header can change
          the meaning of a packet.</t>
        </list></t>

      <t>The following are reasons why extension headers are not deleted by
      any node along a packet's delivery path, until the packet reaches the
      destination node:</t>

      <t><list style="symbols">
          <t>Incompatibility with the IPv6 Authentication Header - IPv6
          Authentication header processing relies on the immutability of the
          Payload Length field in the IPv6 header. When a node along a
          packet's delivery path deletes an extension header, it updates the
          Payload Length field in the IPv6 header. This causes Authentication
          header processing to fail.</t>

          <t>Semantic corruption - Deletion of an extension header can change
          the meaning of a packet.</t>
        </list></t>
    </section>

    <section title="Security Considerations">
      <t>This document does not introduce any new security considerations.</t>
    </section>

    <section title="IANA Considerations">
      <t>This document does not request any IANA actions.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Thanks to Bob Hinden, Brian Carpenter, and Jinmei Tatuya for their
      comments and review.</t>
    </section>
  </middle>

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

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

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