<?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 strict='yes'?>
<?rfc iprnotified='no'?>
<rfc category="std" docName="draft-templin-intarea-parcels2-08"
     ipr="trust200902" updates="">
  <front>
    <title abbrev="IP Parcels">IPv4 Parcels and Advanced Jumbos (AJs)</title>

    <author fullname="Fred L. Templin" initials="F. L." role="editor"
            surname="Templin">
      <organization>Boeing Research &amp; Technology</organization>

      <address>
        <postal>
          <street>P.O. Box 3707</street>

          <city>Seattle</city>

          <region>WA</region>

          <code>98124</code>

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

        <email>fltemplin@acm.org</email>
      </address>
    </author>

    <date day="24" month="September" year="2024"/>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>IPv6 Parcels and Advanced Jumbos (AJs) present new data packaging
      constructs and a new link model for Internetworking. As is often the
      case, technologies developed in the IPv6 space can also be applied in
      IPv4 and vice-versa. This document presents the adaptations necessary
      to support Parcels and AJs in IPv4.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>IPv6 Parcels and Advanced Jumbos (AJs) <xref target=
      "I-D.templin-6man-parcels2"/> present new data packaging
      constructs and a new link model for Internetworking. As is often the
      case, technologies developed in the IPv6 space <xref target="RFC8200"/>
      can also be applied in IPv4 <xref target="RFC0791"/> and vice-versa.
      This document presents the differences that need to be addressed to
      adapt IPv6 Parcels and AJs to IPv4.</t>

      <t>All aspects of IPv6 Parcels and AJs, including the use of IP
      extension headers and control messaging, apply also to IPv4. Only
      differences in the IP header format and some control option
      encapsulations need to be accounted for. The same as for IPv6,
      IPv4 parcels represent a network encapsulation for the
      multi-segment buffers managed by Generic Segment Offload (GSO)
      and Generic Receive Offload (GRO); these buffers are now known
      as "parcel buffers". This document specifies IPv4 parcels and AJs.</t>
    </section>

    <section anchor="reqs" title="Requirements">
      <t>IPv4 parcels and AJs observe all requirements established for
      IPv6 <xref target="I-D.templin-6man-parcels2"/> including the use
      of IPv6 Hop-by-Hop Options headers. This means that nodes that
      recognize IPv4 parcels/AJs MUST recognize and correctly process
      IP protocol 0 (Hop-by-Hop) extension headers the same as for IPv6
      when they occur in an extension header chain following the IPv4
      header but before the upper layer payload.</t>

      <t>When an IPv4 router or destination end system processes a
      parcel probe for which the IPv4 Protocol field encodes an
      unrecognized value (such as 0 for Hop-by-Hop Options), it drops
      the probe and returns an ICMPv4 "Destination Unreachable -
      Protocol Unreachable" message <xref target="RFC0792"/>. The
      source should regard any such messages as an advisory indication
      that OMNI protocol UDP encapsulation may be necessary in future
      probes.</t>

      <t>The use of IPv4 extension headers is specified in <xref target=
      "I-D.herbert-ipv4-eh"/>. The same as for IPv6, IPv4 Parcels and AJs
      are closely related to the AERO <xref target="I-D.templin-6man-aero3"/>
      and OMNI <xref target="I-D.templin-6man-omni3"/> specifications.</t>

      <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 anchor="parcels" title="IPv4 Parcels and Advanced Jumbos (AJs)">
      <t>All aspects of <xref target="I-D.templin-6man-parcels2"/> are
      imported as normative specifications for IPv4 parcels and AJs,
      with the exception of the following differences:</t>

    <section anchor="hdr-len" title="IPv4 Total Length">
      <t>The IPv6 header includes a "Payload Length" field defined
      as the: "Length of the IPv6 payload, i.e., the rest of the packet
      following this IPv6 header, in octets". The IPv4 header instead
      includes a "Total Length" field defined as: "the length of the
      datagram, measured in octets, including internet header and
      data".</t>

      <t>IPv4 parcels/AJs must set the Total Length to a size that
      includes at least the IP headers plus optionally a leading portion
      of the payload up to as much as the entire length. This length
      value determines the hop-by-hop integrity checking threshold
      for parcel/AJ-capable links.</t>
    </section>

    <section anchor="ttl-hl" title="IPv4 Time To Live (TTL)">
      <t>The IPv4 "Time To Live (TTL)" and IPv6 "Hop Limit" values
      are treated in exactly the same way in both protocol versions.
      In particular, the source sets the TTL/Hop Limit to an initial
      value and each router in the path to the destination decrements
      the TTL/Hop Limit by 1 when it forwards a parcel/AJ/probe. (Note
      that this represents a parcel/AJ-specific requirement for IPv4
      routers, since <xref target="RFC1812"/> permits routers to
      decrement TTL by values other than 1.)</t>
    </section>

    <section anchor="ppl-jpl" title="IPv4 Parcel/Jumbo Payload Length">
      <t>The same as for IPv6, the Parcel/Jumbo Payload Length field in
      the Parcel Payload Option of IPv4 parcels/AJs encodes the length
      of the IPv6 extension headers plus the length of the {TCP,UDP}
      header plus the combined length of all concatenated segments
      with their per-segment headers/trailers.</t>

      <t>Therefore, the length of the IPv4 header itself is not
      included in the Parcel/Jumbo Payload Length field the same as
      for IPv6. The IPv4 header length for IPv4 parcels and AJs is
      instead determined by the Internet Header Length (IHL) field.</t>
    </section>

    <section anchor="v4addr" title="IPv4-Compatible IPv6 Addresses">
      <t>Whenever an IPv4 address needs to be coded in an IPv6 address
      field, the address is coded as an IPv4-compatible IPv6 address as
      specified in <xref target="RFC4291"/>.</t>
    </section>

    <section anchor="packetize" title="IPv4 Parcel Packetization/Restoration">
      <t>When a node performs packetization on a {TCP,UDP}/IPv4 parcel,
      it inserts a {TCP,UDP} Parcel Parameters Option the same as for
      IPv6 <xref target="I-D.templin-6man-parcels2"/>. Packetization
      of IPv4 parcels is equivalent to Generic Segment Offload (GSO).</t>

      <t>The IPv4 destination then performs restoration by gathering
      up IPv4 packets that arrive with the same upper layer 5-tuple
      and with Parcel Parameters information including the same
      Identification. The Parcel Parameters Identification and Index
      then determine the ordinal position of each packet segment to
      be concatenated into the restoration buffer, i.e., the same as
      for IPv6. (Note: if the IPv4 destination does not recognize the
      {TCP,UDP} Parcel Parameters Option, it simply processes the
      packet as a singleton IPv4 packet. This would result in
      correct behavior, but with restoration disabled. Restoration
      of IPv4 parcels is equivalent to Generic Receive Offload (GRO).)</t>
    </section>

    <section anchor="mtu-frag" title="Parcel Probing">
      <t>When an IPv4 router or destination receives an intact
      IPv4 packet with a Parcel Probe Option, it processes the
      probe the same as specified for IPv6 <xref target=
      "I-D.templin-6man-parcels2"/>.</t>

      <t>When an IPv4 router forwards the probe, it MUST decrement
      the TTL by exactly 1 the same as specified for the IPv6 Hop
      Limit <xref target="RFC8200"/>.</t>

      <t>When an IPv4 destination receives a parcel probe,
      it should return a Parcel Parameters Option in any
      {TCP,UDP}/IPv4 packet to be returned to the source the same
      as for IPv6.</t>

      <t>When the IPv4 source receives a {TCP,UDP} packet that
      includes a Parcel Parameters Option it matches the
      Identification value with its recently-transmitted probes.
      If there is a match, the source accepts the MTU and Parcel
      Limit values found in the Parcel Parameters Option.</t>
    </section>

    <section anchor="parcel-jumbo-rep" title="Parcel/Jumbo Replys">
      <t>When an IPv4 router returns a Parcel/Jumbo Reply, it prepares
      an ICMPv4 message according to <xref target="RFC0792"/> with
      Type set to TBD1 and with Code set to TBD2 for a Parcel Reply
      or TBD3 for a Jumbo Reply (see: IANA Considerations).</t>

      <t>The router populates the ICMPv4 message header fields, then
      copies up to 576 octets from the parcel/AJ into the ICMPv4
      message body. The router then calculates and sets the ICMPv4
      Checksum and returns the message to the parcel/AJ source.</t>
    </section>

    <section anchor="adv-jumbos" title="Advanced Jumbos (AJs)">
       <t>All aspects of IPv4 Advanced Jumbos (AJ) are processed the same
       as for IPv6 AJs.</t>
    </section>

    <section anchor="jij-encaps" title="Jumbo-in-Jumbo Encapsulation">
       <t>Original IPv4 parcels/AJs can follow the "e(X)treme" forwarding
       paths across successive OMNI links in the path using "jumbo-in-jumbo"
       encapsulation the same as for IPv6. The OMNI link ingress encapsulates
       each IPv4 parcel/AJ in an OMNI IPv6 header plus any outer L2
       encapsulations which may include an IPv4 header with a Parcel
       Payload Option with Advanced Jumbo Type 0. All aspects of this
       "jumbo-in-jumbo" encapsulation are the same as for IPv6.</t> 
    </section>

    <section anchor="integrity" title="Integrity">
      <t>To support the IPv4 parcel/AJ header checksum calculation,
      the network layer uses modified versions of the {TCP,UDP}/IPv4
      pseudo-header found in <xref target="RFC9293"/>. Note that while
      the contents of the two IP protocol version-specific pseudo-headers
      beyond the address fields are the same, the order in which the
      contents are arranged differs and must be honored according to
      the specific IP protocol version.</t>

      <t>The IPv6 pseudo-header is found in <xref target=
      "I-D.templin-6man-parcels2"/>, while the IPv4 pseudo-header is
      shown in <xref target="pseudo"/>. The similarities between the
      two pseudo-headers allows for maximal reuse of widely deployed
      code while ensuring interoperability.</t>

      <t><figure anchor="pseudo"
              title="{TCP,UDP}/IPv4 Parcel/AJ Pseudo-Header Format">
        <artwork><![CDATA[   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv4 Source Address                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    IPv4 Destination Address                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      zero     |  Next Header  |        Parcel Control         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Parcel/Jumbo Payload Length (4 octets)             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure></t>

      <t>For parcels, the 4-octets of the Parcel/Jumbo Payload Length
      encode the Index/X/S preamble and 24-bit Parcel Payload Length
      as they appear in the Parcel Payload Option fields of the same
      name. For AJs, the Jumbo Payload Length encodes the 4-octet
      Jumbo Payload Length value found in the Parcel Payload Option.</t>
    </section>
    </section>

    <section anchor="implement" title="Implementation Status">
      <t>An early prototype of UDP/IPv4 parcels (draft version -15) has
      been implemented relative to the linux-5.10.67 kernel and ION-DTN
      ion-open-source-4.1.0 source distributions. Patch distribution
      found at: "https://github.com/fltemplin/ip-parcels.git".</t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>The IANA is instructed to assign a new Type number TBD1
      in the 'icmp-parameters' registry "ICMP Type Numbers" table
      (registration procedures IESG Approval or Standards Action).
      The entry should set "Type" to TBD1, "Name" to "Packet Too
      Big (PTB)" and "Reference" to [RFCXXXX] (i.e., this document).</t>

      <t>The IANA is further instructed to create a new table titled:
      "Type TBD1 - Packet Too Big (PTB)" in the 'icmp-parameters' Code
      tables, with registration procedures IESG Approval or Standards
      Action. The table should have the following initial format:
      <figure anchor="pmtu-code"
            title="Type TBD1 - Packet Too Big (PTB)">
            <artwork><![CDATA[
   Code                   Name                         Reference
   ----                   ----                         ---------
   0-2                    Reserved                     [RFCXXXX]
   TBD2 (3 suggested)     Parcel Report                [RFCXXXX]
   TBD3 (4 suggested)     Jumbo Report                 [RFCXXXX]
]]></artwork></figure></t>
    </section>

    <section anchor="secure" title="Security Considerations">
      <t>Security Considerations are the same as for IPv6 as found in
      <xref target="I-D.templin-6man-parcels2"/>.</t>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>This work was inspired by ongoing AERO/OMNI/DTN investigations. The
      concepts were further motivated through discussions with colleagues.</t>

      <t>Honoring life, liberty and the pursuit of happiness.</t>
    </section>
  </middle>

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

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

      <?rfc include="reference.RFC.0768"?>

      <?rfc include="reference.RFC.0791"?>

      <?rfc include="reference.RFC.0792"?>

      <?rfc include="reference.RFC.1812" ?>

      <?rfc include="reference.RFC.9293"?>

      <?rfc include="reference.RFC.4291"?>

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

      <?rfc include="reference.I-D.templin-6man-parcels2"?>

      <?rfc include="reference.I-D.templin-6man-aero3"?>

      <?rfc include="reference.I-D.templin-6man-omni3"?>

      <?rfc include="reference.I-D.herbert-ipv4-eh"?>
    </references>

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

    <section anchor="changes" title="Change Log">
      <t>&lt;&lt; RFC Editor - remove prior to publication &gt;&gt;</t>

      <t>Changes from version -07 to -08:<list style="symbols">
          <t>Add terminology and general cleanup.</t>
        </list></t>

      <t>Changes from version -06 to -07:<list style="symbols">
          <t>Removed defunct text on parcel probe responses.</t>
        </list></t>

      <t>Changes from version -05 to -06:<list style="symbols">
          <t>Moved all per-segment integrity checks into Parcel Integrity
          Block header. This allows hop-by-hop integrity checking of the
          end-to-end integrity check values.</t>
        </list></t>

      <t>Changes from earlier versions:<list style="symbols">
          <t>Submit for review.</t>
        </list></t>
    </section>
  </back>
</rfc>
