<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-http-datagram-compression-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="HTTP Datagram Compression">Extensions to Compress and Derive Fields in HTTP Datagrams</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-http-datagram-compression-02"/>
    <author fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <author fullname="Tommy Pauly">
      <organization>Apple</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="28"/>
    <area>Web and Internet Transport</area>
    <workgroup>Multiplexed Application Substrate over QUIC Encryption</workgroup>
    <keyword>template</keyword>
    <keyword>checksum</keyword>
    <keyword>connect-ip</keyword>
    <abstract>
      <?line 52?>

<t>This document defines extensions for HTTP Datagram-based protocols that improve transmission efficiency by introducing templates for compressing or deriving datagram fields.</t>
      <t>These templates allow endpoints to define parts of datagrams that are static and can be removed, and other parts that can be derived (such as packet lengths and checksum values).</t>
      <t>Additionally, this document defines a checksum offload procedure enabling receivers to complete Internet checksums using sender-provided partial values.</t>
      <t>These optimisations reduce per-packet overhead and processing cost. Compression can allow larger original packets to fit in QUIC DATAGRAM frames, depending on the applicable processing context and path maximum transmission unit (MTU).</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-masque.github.io/draft-ietf-masque-http-datagram-compression/draft-ietf-masque-http-datagram-compression.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-http-datagram-compression/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Multiplexed Application Substrate over QUIC Encryption Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-masque/draft-ietf-masque-http-datagram-compression"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The CONNECT-IP method <xref target="CONNECT-IP"/> allows an HTTP client to establish an IP tunnel through an HTTP proxy and exchange IP packets using either HTTP/3 Datagrams (<xref section="2.1" sectionFormat="of" target="HTTP-DATAGRAMS"/>) or DATAGRAM capsules (<xref section="3.5" sectionFormat="of" target="HTTP-DATAGRAMS"/>). Similarly, CONNECT-ETHERNET <xref target="CONNECT-ETHERNET"/> allows sending Ethernet frames over HTTP Datagrams. These protocols send complete packets or frames by default, including all transport and network headers. This is a simple approach, but incurs per-packet overhead due to the repeated transmission of largely invariant header fields.</t>
      <t>Other HTTP Datagram-based protocols share similar properties: datagrams often contain structured packets where many header fields remain constant across a flow while only a subset of bytes change between packets. Transmitting complete packets therefore wastes bandwidth and processing resources.</t>
      <t>This document introduces a set of optional extensions that define Processing Contexts for HTTP Datagram payloads. A Processing Context describes transformations applied to a received datagram payload prior to delivery to the target protocol and may reference a parent context, forming a processing chain.</t>
      <t>The processing context framework is extensible and intended for use with HTTP Datagram-based protocols in general. Reusable templates operate on byte regions without requiring the receiver to identify the protocol carried in the payload. For example, templates can compress application protocol fields that remain constant across UDP payloads carried by CONNECT-UDP <xref target="CONNECT-UDP"/>.</t>
      <t>Reusable templates allow endpoints to associate a Context Identifier with a reusable packet layout consisting of static and variable byte regions. Once a template has been installed using reliable Capsules, datagrams referencing the same Context Identifier carry only the variable portions of the packet. This reduces the size of transmitted datagrams and processing overhead, while remaining compatibile with intermediaries that are unaware of these optimisations.</t>
      <t>Derived field processing allows the receiver to reconstruct certain header fields (for example packet length fields and complete checksums) based on the size and structure of the reconstructed packet. This eliminates the need for the sender to transmit such fields for every packet.</t>
      <t>Unlike reusable templates, Derived Field Types depend on the payload format. The initial types defined in <xref target="derived-field-definitions"/> apply to CONNECT-IP and CONNECT-ETHERNET. Additional types can be registered in <xref target="iana-derived-fields"/> to support other payload formats and HTTP Datagram-based protocols, with specifications defining how the relevant fields are located and reconstructed.</t>
      <t>In addition, this document defines a checksum offload procedure enabling endpoints to cooperatively compute Internet checksums, where the sender provides a partial checksum and the receiver completes the computation after reconstruction. This mirrors hardware checksum-offload behavior used on network interfaces and tunnel devices, reducing per-packet CPU cost for encapsulating or decapsulating CONNECT-IP and CONNECT-ETHERNET traffic.</t>
      <t>When HTTP Datagrams are encapsulated in QUIC DATAGRAM frames, compression can allow larger original packets to fit within the same path maximum transmission unit (MTU). The benefit depends on the processing context applicable to each packet and might not provide a uniform increase in tunnel MTU; see <xref target="mtu-considerations"/>.</t>
      <t>All extensions are negotiated during the HTTP request/response handshake and signalled using Capsules on the reliable control stream. Endpoints can fall back to transmitting datagrams without these optimisations using the Context Identifier appropriate to the underlying HTTP Datagram protocol or extension. This is Context Identifier 0 for protocols that use it to carry unoptimised datagrams, but can also be a Context Identifier defined by another mechanism.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

<t>Where this document defines capsule formats, it uses the notation from <xref section="1.3" sectionFormat="of" target="QUIC"/>. Where fields within capsules are integers, they are encoded using the variable-length integer encoding from <xref section="16" sectionFormat="of" target="QUIC"/>. Integer values do not need to be encoded on the minimum number of bytes necessary.</t>
      <t>The following terms are used in this document:</t>
      <dl>
        <dt>Context Identifier (Context ID):</dt>
        <dd>
          <t>A numeric identifier that determines how an HTTP Datagram payload is interpreted. Context ID encoding and allocation follow the rules defined in <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>. A Context ID can identify a Processing Context or a context defined by the underlying HTTP Datagram protocol or another extension.</t>
        </dd>
        <dt>Processing Context:</dt>
        <dd>
          <t>A set of rules describing how an HTTP Datagram payload is transformed before delivery to the target protocol. A Processing Context may reference a parent context, forming a processing chain. Processing Contexts are immutable once created.</t>
        </dd>
        <dt>Terminal Context:</dt>
        <dd>
          <t>The context at which a processing chain ends. It is either Context ID 0 or a context defined by another mechanism, rather than by an *_ASSIGN capsule defined in this specification. The reconstructed payload is interpreted according to the semantics of this context.</t>
        </dd>
        <dt>Template:</dt>
        <dd>
          <t>A reusable packet layout consisting of a sequence of static and variable segments. Static segments contain bytes removed from optimized datagrams, while variable segments correspond to bytes still carried in the datagram payload.</t>
        </dd>
        <dt>Derived Field:</dt>
        <dd>
          <t>A header field whose value is generated by the receiver during reconstruction and written into the reconstructed packet rather than being transmitted in the datagram payload. Derived fields include length fields and complete checksums.</t>
        </dd>
        <dt>Checksum Offload:</dt>
        <dd>
          <t>A capability allowing the receiver to complete the Internet checksum according to <xref target="INTERNET-CHECKSUM"/> using a sender-provided partial checksum after reconstruction of the packet.</t>
        </dd>
        <dt>Capsule:</dt>
        <dd>
          <t>A reliable control-stream message, as defined in <xref section="3" sectionFormat="of" target="HTTP-DATAGRAMS"/>, used in this specification to signal creation, acknowledgement, or deletion of Processing Contexts.</t>
        </dd>
      </dl>
    </section>
    <section anchor="negotiation">
      <name>Negotiation of Capabilities</name>
      <t>Endpoints negotiate support for HTTP Datagram processing contexts during the HTTP request/response handshake by using the <tt>http-datagram-contexts</tt> HTTP header field, whose value is a Structured Field Dictionary as defined in <xref section="3.2" sectionFormat="of" target="STRUCTURED-HTTP"/>.</t>
      <section anchor="header-definition">
        <name>Header Definition</name>
        <figure anchor="fig-http-datagram-contexts-header">
          <name>http-datagram-contexts header field</name>
          <artwork><![CDATA[
http-datagram-contexts = sf-dictionary
]]></artwork>
        </figure>
        <t>This document defines the following optional dictionary keys:</t>
        <dl>
          <dt><tt>max-templates</tt> (Integer):</dt>
          <dd>
            <t>Maximum number of concurrently active template contexts the sender is willing to maintain for templates created by the peer. Absence of this key or value of 0 indicates that the sender does not support reusable templates.</t>
          </dd>
          <dt><tt>max-templates-segments</tt> (Integer):</dt>
          <dd>
            <t>Maximum number of static segments accepted within a single template. Absence of this key or value of 0 indicates that the sender does not impose a limit on number of static segments in a single template.</t>
          </dd>
          <dt><tt>derived</tt> (Inner List):</dt>
          <dd>
            <t>A list of supported Derived Field Types as defined in <xref target="iana-derived-fields"/>. Initial field definitions and reconstruction procedures are specified in <xref target="derived-field-definitions"/>.</t>
          </dd>
          <dt><tt>checksum</tt> (Boolean):</dt>
          <dd>
            <t>Indicates support for the checksum offload procedure defined in this document. A value of ?1 means the endpoint is willing to complete checksums using sender-provided partial values. If omitted or set to ?0, checksum offload is not supported.</t>
          </dd>
          <dt><tt>mtu</tt> (Integer):</dt>
          <dd>
            <t>Upper limit on reconstructed packet size the receiver is willing to accept, in bytes. This is a receiver limit, not a measurement of the path MTU or a guarantee that a packet of this size can be carried in a QUIC DATAGRAM frame.</t>
          </dd>
        </dl>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown dictionary members. The absence of a member implies that the corresponding capability is not supported for contexts created by the peer.</t>
      </section>
      <section anchor="negotiation-behavior">
        <name>Negotiation Behavior</name>
        <t>Capabilities are directional. Each endpoint advertises the processing contexts it is willing to receive and maintain for datagrams sent by the peer. An endpoint <bcp14>MAY</bcp14> create a context only if the peer advertised support for the corresponding capability.</t>
        <section anchor="templates">
          <name>Templates</name>
          <t>If the peer advertises the <tt>max-templates</tt>  value greater than 0, the endpoint <bcp14>MAY</bcp14> create template contexts up to that limit using capsules defined in <xref target="capsules"/>.</t>
          <t>An endpoint <bcp14>MUST NOT</bcp14> create templates exceeding the peer's advertised <tt>max-template-segments</tt> limit when that parameter is present.</t>
          <t>If the peer advertises an <tt>mtu</tt> limit, the sender <bcp14>MUST NOT</bcp14> transmit a datagram that would reconstruct into a packet larger than the advertised limit after all processing contexts have been applied.</t>
          <t>This limit applies whether the datagram is carried in a QUIC DATAGRAM frame or a DATAGRAM Capsule, including when no processing context is used.</t>
        </section>
        <section anchor="derived-fields">
          <name>Derived Fields</name>
          <t>An endpoint <bcp14>MAY</bcp14> create a derived context only if every operation in the capsule appears in the peer's <tt>derived</tt> list.</t>
        </section>
        <section anchor="checksum-offload">
          <name>Checksum Offload</name>
          <t>An endpoint <bcp14>MAY</bcp14> create a checksum offload context only if the peer advertised <tt>checksum=?1</tt>.</t>
        </section>
      </section>
      <section anchor="example">
        <name> Example</name>
        <t>HTTP/3 sample request (client to proxy):</t>
        <figure anchor="fig-connect-ip-http-datagram-contexts-request-example">
          <name>CONNECT-IP with http-datagram-contexts request example</name>
          <artwork><![CDATA[
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /.well-known/masque/ip/*/*/
:authority = proxy.example.net
capsule-protocol = ?1
http-datagram-contexts = max-templates=20000, max-templates-segments=32, derived=(0 2 4), checksum=?1, mtu=1500
]]></artwork>
        </figure>
        <t>HTTP/3 sample response (proxy to client):</t>
        <figure anchor="fig-connect-ip-http-datagram-contexts-response-example">
          <name>CONNECT-IP with http-datagram-contexts response example</name>
          <artwork><![CDATA[
:status = 200
capsule-protocol = ?1
http-datagram-contexts = max-templates=65535, derived=(0 1), checksum=?0, mtu=1500
]]></artwork>
        </figure>
        <t>In this example, both peers support reusable templates. The proxy supports a subset of derived fields (ipv4-total-length, ipv4-udp-length and ipv4-header-checksum) and the checksum offload. The client supports a different subset of derived fields (ipv4-total-length and ipv6-payload-length) without the checksum offload. Both endpoints indicate that the maximum packet size after reconstruction must not exceed 1500 bytes.</t>
      </section>
    </section>
    <section anchor="capsules">
      <name>Processing Context Capsules</name>
      <t>This specification defines multiple capsule types to construct, acknowledge, and delete processing contexts.</t>
      <section anchor="processing-context-overview">
        <name>Processing Context Overview</name>
        <section anchor="assign">
          <name>Processing Context Construction</name>
          <t>Processing contexts are created using capsules that define a new unique non-zero <tt>Context ID</tt> encoded as a variable-length integer. A Context ID <bcp14>MUST NOT</bcp14> be reused, including one allocated by another mechanism on the same HTTP request. As specified in <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>, even-numbered Context IDs are allocated by the client and odd-numbered by the proxy.</t>
          <t>Each processing context references a next context using <tt>Next Context ID</tt> encoded as a variable-length integer. This <bcp14>MUST</bcp14> identify Context ID 0, a previously defined Processing Context, or a context already established by another mechanism. The referenced context <bcp14>MUST</bcp14> be available for use in the same sending direction. Forward references are not permitted. If <tt>Next Context ID</tt> identifies a Processing Context, the chain continues through that context. Otherwise, it identifies the Terminal Context and ends the processing chain.</t>
          <t>A processing chain <bcp14>MUST</bcp14> contain at most one Template context (created by TEMPLATE_ASSIGN), at most one Derived Field context (created by DERIVED_ASSIGN), and at most one Checksum Offload context (created by CHECKSUM_ASSIGN). Other processing context chains can also have invalid combinations, if they include contradictory or mutually exclusive steps. Any capsule definition used for these contexts needs to define such cases if they are possible (such as for checksum offload contexts, <xref target="checksum"/>). A receiver that detects such an invalid processing chain condition <bcp14>MUST</bcp14> treat the context as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
          <t>A receiver of an *_ASSIGN capsule with an invalid <tt>Context ID</tt> or unknown <tt>Next Context ID</tt> <bcp14>MUST</bcp14> treat it as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
        </section>
        <section anchor="ack">
          <name>Processing Context Acknowledgement</name>
          <t>For each *_ASSIGN capsule received, the receiver <bcp14>MUST</bcp14> transmit the corresponding *_ACK capsule after successfully installing the context.</t>
          <t>Endpoints <bcp14>MAY</bcp14> transmit datagrams referencing contexts prior to receiving the *_ACK. A receiver <bcp14>MAY</bcp14> buffer datagrams referencing unknown Context IDs but <bcp14>MUST</bcp14> bound buffering by time and memory.</t>
          <t>A receiver of an *_ACK capsule with an unknown Context ID, a Context ID not assigned by the corresponding *_ASSIGN capsule, or any data after Context ID <bcp14>MUST</bcp14> treat it as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
        </section>
        <section anchor="close">
          <name>Processing Context Closure</name>
          <t>Processing Contexts are retired by sending corresponding *_CLOSE capsule. Closing a context implicitly closes all contexts that reference it directly or transitively.</t>
          <t>Closing a Terminal Context defined by another mechanism also closes all Processing Contexts that reference it directly or transitively. The closure and any retention of the Terminal Context are governed by the mechanism that defined it. Closing a Processing Context does not close its Terminal Context.</t>
          <t>A receiver of a *_CLOSE capsule <bcp14>SHOULD</bcp14> retain the closed context and its descendants for a short period to allow in-flight datagrams to arrive, but <bcp14>MUST</bcp14> bound the retention time and memory usage.</t>
          <t>*_CLOSE capsules with an unknown Context ID, a Context ID not assigned by the corresponding *_ASSIGN capsule, or any data after Context ID <bcp14>MUST</bcp14> be treated as malformed. Receiver of such capsules <bcp14>MUST</bcp14> follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
        </section>
      </section>
      <section anchor="template-capsules">
        <name>Template Capsules</name>
        <section anchor="template-assign">
          <name>TEMPLATE_ASSIGN Capsule</name>
          <figure anchor="fig-template-assign-capsule">
            <name>TEMPLATE_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
TEMPLATE_ASSIGN Capsule {
  Type (i) = 0x3ee3143f,
  Length (i),
  Context ID (i),
  Next Context ID (i),
  Static Segment (..) ...
}
]]></artwork>
          </figure>
          <t>The TEMPLATE_ASSIGN capsule contains a sequence of one or more Static Segments.</t>
          <figure anchor="fig-static-segment">
            <name>Static Segment Format</name>
            <artwork><![CDATA[
Static Segment {
  Segment Offset (i),
  Segment Length (i),
  Segment Payload (..),
}
]]></artwork>
          </figure>
          <t>Each Static Segment contains following fields:</t>
          <dl>
            <dt>Segment Offset:</dt>
            <dd>
              <t>Byte offset from the start of the reconstructed packet, encoded as a variable-length integer</t>
            </dd>
            <dt>Segment Length:</dt>
            <dd>
              <t>Length of the Segement Payload field, encoded as a variable-length integer</t>
            </dd>
            <dt>Segment Payload:</dt>
            <dd>
              <t>Static bytes to insert at the Segment Offset</t>
            </dd>
          </dl>
          <section anchor="parsing-and-validation">
            <name>Parsing and validation</name>
            <t>The receiver parses a TEMPLATE_ASSIGN capsule by reading, in order: the Context ID, the Next Context ID, and one or more static segments whose encodings consume exactly the remaining length of the capsule. Context ID and Next Context ID processing is described in <xref target="assign"/>.</t>
            <t>Each Static Segment consists of a Segment Offset, a Segment Length, and exactly Segment Length octets of Segment Payload. Static segments <bcp14>MUST</bcp14> appear in strictly increasing Segment Offset order and <bcp14>MUST NOT</bcp14> overlap. There <bcp14>MUST</bcp14> be at least 1 byte between consecutive segments.</t>
            <t>A receiver that advertised a <tt>max-templates-segments</tt> limit <bcp14>MUST</bcp14> ensure that the template does not contain more static segments. A receiver that advertised a <tt>mtu</tt> limit in <tt>http-datagram-contexts</tt> <bcp14>MUST</bcp14> ensure that the sum of Segment Offset and Segment Length of the final segment does not exceed the MTU limit. Final reconstructed packet size validation is performed during packet reconstruction (<xref target="reconstruction"/>). The capsule <bcp14>MUST</bcp14> end immediately after the last static segment.</t>
            <t>If any of the capsule fields are malformed upon reception, the receiver of the capsule <bcp14>MUST</bcp14> follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
            <t>A receiver that has already accepted the maximum number of templates it advertised via the <tt>max-templates</tt> member in <tt>http-datagram-contexts</tt> <bcp14>MUST</bcp14> treat any additional TEMPLATE_ASSIGN capsule an error and <bcp14>MUST</bcp14> follow the same error-handling procedure.</t>
            <t>Per-packet validation uses the reconstruction procedure described in <xref target="reconstruction"/>.</t>
          </section>
        </section>
        <section anchor="templateack-capsule">
          <name>TEMPLATE_ACK Capsule</name>
          <figure anchor="fig-template-ack-capsule">
            <name>TEMPLATE_ACK Capsule Format</name>
            <artwork><![CDATA[
TEMPLATE_ACK Capsule {
  Type (i) = 0x3ee31440,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the TEMPLATE_ACK capsule is described in <xref target="ack"/></t>
        </section>
        <section anchor="templateclose-capsule">
          <name>TEMPLATE_CLOSE Capsule</name>
          <figure anchor="fig-template-close-capsule">
            <name>TEMPLATE_CLOSE Capsule Format</name>
            <artwork><![CDATA[
TEMPLATE_CLOSE Capsule {
  Type (i) = 0x3ee31441,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the TEMPLATE_CLOSE capsule is described in <xref target="close"/></t>
        </section>
      </section>
      <section anchor="derived-field-capsules">
        <name>Derived Field Capsules</name>
        <section anchor="derivedassign-capsule">
          <name>DERIVED_ASSIGN Capsule</name>
          <figure anchor="fig-derived-assign-capsule">
            <name>DERIVED_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
DERIVED_ASSIGN Capsule {
  Type (i) = 0x3ee31442,
  Length (i),
  Context ID (i),
  Next Context ID (i),
  Derived Field Type (i) ...
}
]]></artwork>
          </figure>
          <t>The DERIVED_ASSIGN capsule defines a processing context that generates and inserts one or more derived fields into the reconstructed packet. The sender does not transmit these fields in the datagram payload.</t>
          <t>The Derived Field Types defined by this document and their reconstruction procedures are specified in <xref target="derived-field-definitions"/>. The numeric code points for these field types are registered in <xref target="iana-derived-fields"/>.</t>
          <section anchor="parsing-and-validation-1">
            <name>Parsing and validation</name>
            <t>The receiver parses a DERIVED_ASSIGN capsule by reading, in order: the Context ID, the Next Context ID, and one or more Derived Field Type values encoded as variable-length integers. Context ID and Next Context ID processing is described in <xref target="assign"/>.</t>
            <t>If a Derived Field Type is not present in the receiver's advertised <tt>derived</tt> capability list in <tt>http-datagram-contexts</tt> or if any Derived Field Type appears more than once in the capsule, the receiver <bcp14>MUST</bcp14> treat the capsule as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
            <t>Per-packet validation uses the reconstruction procedure described in <xref target="reconstruction"/>.</t>
          </section>
        </section>
        <section anchor="derivedack-capsule">
          <name>DERIVED_ACK Capsule</name>
          <figure anchor="fig-derived-ack-capsule">
            <name>DERIVED_ACK Capsule Format</name>
            <artwork><![CDATA[
DERIVED_ACK Capsule {
  Type (i) = 0x3ee31443,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the DERIVED_ACK capsule is described in <xref target="ack"/></t>
        </section>
        <section anchor="derivedclose-capsule">
          <name>DERIVED_CLOSE Capsule</name>
          <figure anchor="fig-derived-close-capsule">
            <name>DERIVED_CLOSE Capsule Format</name>
            <artwork><![CDATA[
DERIVED_CLOSE Capsule {
  Type (i) = 0x3ee31444,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the DERIVED_CLOSE capsule is described in <xref target="close"/></t>
        </section>
      </section>
      <section anchor="checksum">
        <name>Checksum Offload Capsules</name>
        <section anchor="checksumassign-capsule">
          <name>CHECKSUM_ASSIGN Capsule</name>
          <figure anchor="fig-checksum-assign-capsule">
            <name>CHECKSUM_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
CHECKSUM_ASSIGN Capsule {
  Type (i) = 0x3ee31445,
  Length (i),
  Context ID (i),
  Next Context ID (i),
  Checksum Field Offset (i),
  Checksum Start Offset (i),
}
]]></artwork>
          </figure>
          <t>The CHECKSUM_ASSIGN capsule defines a processing context that completes an Internet checksum for the reconstructed packet using a sender-provided partial checksum.</t>
          <t>In addition to <tt>Context ID</tt> and <tt>Next Context ID</tt> CHECKSUM_ASSIGN capsule contains following fields encoded as variable-length integers:</t>
          <dl>
            <dt><tt>Checksum Field Offset</tt>:</dt>
            <dd>
              <t>Byte offset of the 16-bit Internet checksum field within the reconstructed packet</t>
            </dd>
            <dt><tt>Checksum Start Offset</tt>:</dt>
            <dd>
              <t>Byte offset where checksum coverage begins.  Coverage runs from this offset to the end of the reconstructed packet.</t>
            </dd>
          </dl>
          <section anchor="parsing-and-validation-2">
            <name>Parsing and validation</name>
            <t>The receiver parses a CHECKSUM_ASSIGN capsule by reading, in order: the Context ID, the Next Context ID, Checksum Field Offset and Checksum Start Offset. Context ID and Next Context ID processing is described in <xref target="assign"/>.</t>
            <t>If the peer did not advertise <tt>checksum=?1</tt> in <tt>http-datagram-contexts</tt>, the receiver <bcp14>MUST</bcp14> treat the capsule as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
            <t>If <tt>Checksum Start Offset</tt> is 0, the receiver <bcp14>MUST</bcp14> treat the capsule as malformed and follow the same error-handling procedure.</t>
            <t>Per-packet validation uses the reconstruction procedure described in <xref target="reconstruction"/>.</t>
            <t>Chaining a CHECKSUM_ASSIGN capsule with a DERIVED_ASSIGN capsule that defines derivation for a UDP or TCP checksum (<xref target="iana-derived-fields"/>) would create an invalid processing chain, as described in <xref target="assign"/>. Such chains <bcp14>MUST NOT</bcp14> be defined by senders, and <bcp14>MUST</bcp14> be treated as an error by receivers.</t>
          </section>
        </section>
        <section anchor="checksumack-capsule">
          <name>CHECKSUM_ACK Capsule</name>
          <figure anchor="fig-checksum-ack-capsule">
            <name>CHECKSUM_ACK Capsule Format</name>
            <artwork><![CDATA[
CHECKSUM_ACK Capsule {
  Type (i) = 0x3ee31446,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the CHECKSUM_ACK capsule is described in <xref target="ack"/></t>
        </section>
        <section anchor="checksumclose-capsule">
          <name>CHECKSUM_CLOSE Capsule</name>
          <figure anchor="fig-checksum-close-capsule">
            <name>CHECKSUM_CLOSE Capsule Format</name>
            <artwork><![CDATA[
CHECKSUM_CLOSE Capsule {
  Type (i) = 0x3ee31447,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the CHECKSUM_CLOSE capsule is described in <xref target="close"/></t>
        </section>
      </section>
    </section>
    <section anchor="processing-context-operation">
      <name>Processing Context Operation</name>
      <t>This section defines how endpoints construct and consume HTTP Datagram payloads using Processing Contexts.</t>
      <t>A datagram carries a Context Identifier that selects either a Processing Context or a Terminal Context. A processing chain is resolved by following Next Context ID through contexts defined by the *_ASSIGN capsules in this specification until a Terminal Context is reached.</t>
      <t>After applying the Processing Contexts, the reconstructed payload is delivered using the Terminal Context ID and its associated semantics. A datagram that directly selects a Terminal Context is handled according to those semantics without applying the transformations defined in this specification.</t>
      <t>For example, if another extension has established Context ID 2, a TEMPLATE_ASSIGN capsule can define Context ID 4 with Next Context ID 2. A datagram received with Context ID 4 is reconstructed using that template and then handled as a datagram with Context ID 2.</t>
      <section anchor="sender-behavior">
        <name>Sender behavior</name>
        <t>When sending a datagram using a Processing Context, the sender constructs the payload so that the receiver can reconstruct the payload expected by the Terminal Context after applying the processing chain. The Terminal Context ID is conveyed through the chain's final Next Context ID and is not included in the payload being transformed.</t>
        <t>The sender <bcp14>MUST</bcp14> use a Processing Context ID only after the corresponding *_ASSIGN capsule has been transmitted.</t>
        <section anchor="template-contexts">
          <name>Template Contexts</name>
          <t>If the selected context chain contains a Template context, the sender constructs the datagram payload as the concatenation of all variable byte regions not covered by static segments.</t>
          <t>Variable regions are emitted in strictly increasing offset order starting at offset 0.</t>
          <t>If the context chain contains no Template context, the payload <bcp14>MUST</bcp14> be the complete packet.</t>
        </section>
        <section anchor="derived-field-contexts">
          <name>Derived Field Contexts</name>
          <t>Derived fields are not transmitted by the sender. When a derived context is in use, the sender <bcp14>MUST</bcp14> remove the octets corresponding to derived fields from the datagram payload. These octets are supplied by the receiver during reconstruction.</t>
          <t>The sender <bcp14>MUST</bcp14> construct the payload as if the derived field octets were not part of the variable regions. That is, the payload <bcp14>MUST</bcp14> contain only the remaining variable octets in strictly increasing offset order.</t>
        </section>
        <section anchor="checksum-offload-contexts">
          <name>Checksum Offload Contexts</name>
          <t>If the context chain contains a checksum offload context, the sender <bcp14>MUST</bcp14> place a precomputed partial Internet checksum value into the checksum field at Checksum Field Offset in the reconstructed packet image prior to transmission. This value is combined with the receiver computation as described in <xref target="reconstruction"/>.</t>
          <t>The partial value <bcp14>MUST</bcp14> be the 16-bit one's-complement sum of the checksum contributions not included in the receiver's checksum coverage, such as the pseudo-header. The sender <bcp14>MUST</bcp14> fold any carries into the low 16 bits without complementing the sum and store the value in network byte order.</t>
          <t>Checksum offload reduces per-packet CPU cost by allowing the sender to preserve a packet's partial checksum instead of completing the checksum before encapsulation. The partial value includes the pseudo-header contribution and is carried in the variable portion of the datagram, with Checksum Start Offset pointing to the transport header. After any template reconstruction and derived field processing, the receiver can delegate checksum completion to a capable NIC <xref target="LINUX-CHECKSUM-OFFLOAD"/> or pass the reconstructed packet with checksum-offload metadata through an operating-system interface, such as Linux TUN/TAP <xref target="LINUX-TUN-TAP"/>.</t>
        </section>
        <section anchor="context-selection">
          <name>Context Selection</name>
          <t>If a packet does not match any available Processing Context, the sender <bcp14>MUST</bcp14> use the appropriate Terminal Context ID and transmit the complete payload required by that context, subject to the size limits and oversized-packet handling described in <xref target="mtu-considerations"/>.</t>
          <t>To reduce variation in compression across packets, senders <bcp14>SHOULD</bcp14> define broad contexts that will be able to handle most or all expected traffic.</t>
        </section>
        <section anchor="mtu-considerations">
          <name>MTU Considerations</name>
          <t>The advertised <tt>mtu</tt> bounds the reconstructed packet size. A packet that would not fit in a QUIC DATAGRAM frame without compression can still be sent if compression makes it fit. The transport size checks apply after compression: the resulting QUIC DATAGRAM frame <bcp14>MUST</bcp14> respect the peer's frame size limit, and the outer IP packet, including HTTP/3, QUIC, UDP, and IP overhead, <bcp14>MUST</bcp14> fit within the current path MTU. Even packets below the advertised <tt>mtu</tt> can exceed these transport limits when compression is insufficient or no matching context is available.</t>
          <t>Compression can differ between packets of the same size, including between PMTU probes and other traffic. A successful probe therefore does not establish that all packets of that original size will fit. PMTU information can also be shared across flows that use different contexts; see the discussion of shared PLPMTU state in item 9 of <xref section="3" sectionFormat="of" target="DPLPMTUD"/>. When choosing a tunnel MTU or reporting a PMTU to carried traffic, endpoints <bcp14>SHOULD</bcp14> account for the least compression available to the traffic sharing that MTU, including packets sent without compression, rather than assuming the savings of a particular context.</t>
          <t>Oversized packets are handled according to the underlying HTTP Datagram protocol's MTU and error-signalling rules. In particular, <xref section="10.1" sectionFormat="of" target="CONNECT-IP"/> and <xref section="6.1" sectionFormat="of" target="CONNECT-UDP"/> recommend dropping oversized packets and sending ICMP Packet Too Big feedback instead of switching to DATAGRAM Capsules. Where permitted by the underlying protocol, DATAGRAM Capsules can carry larger datagrams across multiple transport packets, but introduce reliable delivery, head-of-line blocking, additional buffering and retransmission costs, and possible reordering relative to QUIC DATAGRAM frames. Such delivery can hide size limitations from PMTU discovery for the carried traffic; it does not increase the path MTU or relax the advertised <tt>mtu</tt> limit.</t>
        </section>
        <section anchor="template-composition">
          <name>Conservative Template Composition</name>
          <t>Reusable templates are most effective when they remain valid for many datagrams. This guidance applies to the packets using a particular template. A template can be used for a subset of the HTTP Datagrams associated with an HTTP request. Senders <bcp14>SHOULD</bcp14> construct templates conservatively by including only fields that are expected to remain stable across applicable packets for the lifetime of the Processing Context. Fields whose values can change across packets <bcp14>SHOULD</bcp14> remain in the variable portion of the datagram unless the sender has specific knowledge that those fields will remain constant or be particularly frequent for some period of time.</t>
          <t>Fields that are commonly suitable for static segments include:</t>
          <ul spacing="normal">
            <li>
              <t>Ethernet source and destination addresses, when stable for the frame sequence</t>
            </li>
            <li>
              <t>EtherType</t>
            </li>
            <li>
              <t>802.1Q tag</t>
            </li>
            <li>
              <t>IP version</t>
            </li>
            <li>
              <t>Source and destination IP addresses</t>
            </li>
            <li>
              <t>IPv4 TTL / IPv6 Hop Limit</t>
            </li>
            <li>
              <t>IPv4 Protocol / IPv6 Next Header</t>
            </li>
            <li>
              <t>Source and destination transport ports</t>
            </li>
          </ul>
          <t>Fields that commonly vary between packets, or that can be modified by endpoints or network devices, are generally poor candidates for static segments. Examples include:</t>
          <ul spacing="normal">
            <li>
              <t>IPv4 DSCP and ECN bits, and IPv6 Traffic Class</t>
            </li>
            <li>
              <t>IPv4 Identification</t>
            </li>
            <li>
              <t>IPv4 Flags and Fragment Offset, unless packets using the template are known not to be fragmented</t>
            </li>
            <li>
              <t>IPv6 Flow Label, unless the sender knows it has the same value in all packets using the template</t>
            </li>
            <li>
              <t>TCP Sequence Number</t>
            </li>
            <li>
              <t>TCP Acknowledgement Number</t>
            </li>
            <li>
              <t>TCP Flags</t>
            </li>
            <li>
              <t>TCP Window</t>
            </li>
            <li>
              <t>TCP Timestamp values</t>
            </li>
            <li>
              <t>Packet length fields</t>
            </li>
            <li>
              <t>Checksum fields</t>
            </li>
          </ul>
          <t>When a field can be represented as a Derived Field defined by this specification, implementations <bcp14>SHOULD</bcp14> prefer using the corresponding Derived Field instead of including that field in a static segment or transmitting it as part of the variable payload. Packet length fields and complete checksums are examples of fields that are generally better represented using Derived Fields when supported by the peer.</t>
          <t>The suitability of a field for inclusion in a static segment depends on the deployment and the traffic being carried. For example, some deployments might preserve DSCP values while others rewrite them, and some applications might intentionally vary the IPv6 Flow Label. Implementations are encouraged to prefer templates that remain valid across many datagrams, even if those templates omit fewer bytes than a more aggressive template.</t>
        </section>
      </section>
      <section anchor="reconstruction">
        <name>Receiver behavior</name>
        <t>Upon receiving an HTTP Datagram whose Context ID identifies a Processing Context, the receiver retrieves that context and follows Next Context ID through any further Processing Contexts. The receiver <bcp14>MUST</bcp14> stop resolving the processing chain when it reaches Context ID 0 or a context known to have been defined by another mechanism. The receiver <bcp14>MUST</bcp14> retain this Terminal Context ID for delivery of the reconstructed payload.</t>
        <t>If any referenced context is unknown, the receiver <bcp14>MAY</bcp14> buffer the datagram as described in <xref target="ack"/> or drop it. An unknown Context ID <bcp14>MUST NOT</bcp14> be treated as a valid Terminal Context merely because it does not identify an installed Processing Context.</t>
        <t>If multiple processing contexts are present in a chain, the receiver <bcp14>MUST</bcp14> apply them in the following order:</t>
        <ol spacing="normal" type="1"><li>
            <t>Template reconstruction (if present)</t>
          </li>
          <li>
            <t>Derived field processing (if present)</t>
          </li>
          <li>
            <t>Checksum offload processing (if present)</t>
          </li>
        </ol>
        <t>After reconstruction, the receiver <bcp14>MUST</bcp14> handle the resulting payload according to the Terminal Context's semantics, including any validation required by the underlying protocol or extension.</t>
        <section anchor="template-reconstruction">
          <name>Template Reconstruction</name>
          <t>If a Template context is present, the receiver reconstructs the packet as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Allocate a buffer large enough to contain the reconstructed packet.</t>
            </li>
            <li>
              <t>Insert static segment bytes at their specified offsets.</t>
            </li>
            <li>
              <t>Fill all remaining gaps using bytes from the datagram payload in strictly increasing offset order.</t>
            </li>
          </ol>
          <t>If payload bytes are exhausted before all gaps have been filled the datagram <bcp14>MUST</bcp14> be dropped.</t>
          <t>Packets larger than the advertised <tt>mtu</tt> in <tt>http-datagram-contexts</tt> <bcp14>MUST</bcp14> be dropped.</t>
        </section>
        <section anchor="derived-field-processing">
          <name>Derived Field Processing</name>
          <t>For each derived field present in the context chain, the receiver computes the field value and inserts it into the reconstructed packet at the location defined by the derived field type.</t>
          <t>Derived fields are inserted into the packet image and therefore increase the reconstructed packet size. The receiver <bcp14>MUST</bcp14> compute derived field values based on the final reconstructed packet size and structure.</t>
          <t>Initial field definitions and reconstruction procedures are specified in <xref target="derived-field-definitions"/>.</t>
          <t>If the required header cannot be located, the packet <bcp14>MUST</bcp14> be dropped.</t>
        </section>
        <section anchor="checksum-offload-processing">
          <name>Checksum Offload Processing</name>
          <t>If a checksum offload context is present, the receiver completes the Internet checksum after all derived fields have been inserted.</t>
          <t>The receiver <bcp14>MUST</bcp14> complete the checksum as follows, using one's-complement arithmetic as described in <xref target="INTERNET-CHECKSUM"/>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Read and retain the 16-bit partial sum from the checksum field in network byte order.</t>
            </li>
            <li>
              <t>Compute the one's-complement sum of the octets from Checksum Start Offset to the end of the reconstructed packet, treating the checksum field as zero for this computation. Pair octets into 16-bit words in network byte order; if the number of octets is odd, pad the final octet with a zero octet for the computation only.</t>
            </li>
            <li>
              <t>Add the retained partial sum to this sum using end-around carry: repeatedly add any bits above the low 16 bits back into the low 16 bits until no carry remains.</t>
            </li>
            <li>
              <t>Take the bitwise one's complement of the resulting 16-bit sum and write it to the checksum field in network byte order. For a UDP checksum, encode a zero result as 0xffff.</t>
            </li>
          </ol>
          <t>If any offset exceeds the reconstructed packet length, the packet <bcp14>MUST</bcp14> be dropped.</t>
        </section>
      </section>
    </section>
    <section anchor="derived-field-definitions">
      <name>Derived Field Definitions</name>
      <t>This section defines the initial Derived Field Types registered in <xref target="iana-derived-fields"/>. The common processing rules and header checks below apply together with each field's definition. The IPv4 and IPv6 variants of UDP Length, TCP Checksum, and UDP Checksum share their respective field locations and computation procedures.</t>
      <t>All offsets and lengths in this section are expressed in octets. Field tables specify offsets relative to the indicated header or frame in the reconstructed packet. All multi-octet integer fields are encoded in network byte order.</t>
      <section anchor="derived-common-processing">
        <name>Common Processing Rules</name>
        <section anchor="sender-behavior-1">
          <name>Sender Behavior</name>
          <t>Before using a Derived Field Type, the sender <bcp14>MUST</bcp14> perform the applicable header checks in <xref target="derived-header-validation"/> and any additional checks in the field's definition. If a required header or field cannot be located, or an applicability check fails, the sender <bcp14>MUST NOT</bcp14> use that Derived Field Type for the packet.</t>
          <t>The sender <bcp14>MUST</bcp14> verify that the original field value equals the value that the receiver would generate using the computation in the field's definition for the reconstructed packet. This comparison includes any specified encoding of special values, such as encoding a zero UDP checksum as 0xffff. If the values differ, the sender <bcp14>MUST NOT</bcp14> use that Derived Field Type for the packet.</t>
          <t>When using a Derived Field Type, the sender removes the corresponding field octets from the datagram payload.</t>
        </section>
        <section anchor="receiver-behavior">
          <name>Receiver Behavior</name>
          <t>The receiver <bcp14>MUST</bcp14> perform the applicable header checks in <xref target="derived-header-validation"/> and the field-specific checks below. If the packet is too short to contain a required header or field, a required header cannot be located, a validation check fails, or the computed value is outside the range specified for the field, the receiver <bcp14>MUST</bcp14> drop the packet.</t>
          <t>The receiver computes and inserts length fields before checksum fields, using the final reconstructed packet size and structure as described in <xref target="reconstruction"/>. In particular, IPv4 Total Length, IPv6 Payload Length, and UDP Length are computed before IPv4 header, TCP, or UDP checksums. The receiver writes each computed value at the location specified in the field's definition.</t>
        </section>
      </section>
      <section anchor="derived-header-validation">
        <name>Header Location and Validation</name>
        <t>Unless a check explicitly applies only to the sender or receiver, the checks in this section apply to both endpoints. The sender applies them to the original packet and the receiver to the reconstructed packet, with failure handled as specified in <xref target="derived-common-processing"/>.</t>
        <section anchor="derived-ip-headers">
          <name>IP Headers</name>
          <t>For CONNECT-IP, the IP header starts at offset 0. For CONNECT-ETHERNET, the IP- and transport-layer Derived Field Types apply to Ethernet II frames carrying IPv4 or IPv6, including frames with a single IEEE 802.1Q VLAN tag:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Encapsulation</th>
                <th align="left">EtherType offset</th>
                <th align="left">IP header offset</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Ethernet II, untagged <xref target="IEEE802.3"/></td>
                <td align="left">12</td>
                <td align="left">14</td>
              </tr>
              <tr>
                <td align="left">Ethernet II, single IEEE 802.1Q VLAN tag <xref target="IEEE802.1Q"/></td>
                <td align="left">16</td>
                <td align="left">18</td>
              </tr>
            </tbody>
          </table>
          <t>These offsets are measured from the beginning of the Ethernet frame. For the tagged form, the Tag Protocol Identifier (TPID) at offset 12 has value 0x8100. Frames with multiple VLAN tags or other link-layer encapsulations are not processed by these Derived Field Types unless a future specification defines how the relevant network-layer header is located.</t>
          <t>The sender and receiver <bcp14>MUST</bcp14> locate the IP header and verify that its first four bits contain the version required by the Derived Field Type: 4 for IPv4 <xref target="IPv4"/> or 6 for IPv6 <xref target="IPv6"/>. For CONNECT-ETHERNET, the EtherType <bcp14>MUST</bcp14> also identify that version: 0x0800 for IPv4 or 0x86dd for IPv6.</t>
          <t>For all IPv4 Derived Field Types, the receiver <bcp14>MUST</bcp14> verify that the Internet Header Length (IHL) field indicates a header length of at least 20 octets and no larger than the reconstructed IPv4 packet. The sender's IHL check for IPv4 Header Checksum is specified in <xref target="derived-ipv4-header-checksum"/>.</t>
        </section>
        <section anchor="derived-transport-headers">
          <name>Transport Headers</name>
          <t>The following checks apply to UDP Length, TCP Checksum, and UDP Checksum. The required transport protocol and minimum header size are:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Derived field</th>
                <th align="left">Transport protocol number</th>
                <th align="left">Minimum header size</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">UDP Length or UDP Checksum</td>
                <td align="left">17 (UDP)</td>
                <td align="left">8</td>
              </tr>
              <tr>
                <td align="left">TCP Checksum</td>
                <td align="left">6 (TCP)</td>
                <td align="left">20</td>
              </tr>
            </tbody>
          </table>
          <t>For an IPv4 variant, the IPv4 Protocol field <bcp14>MUST</bcp14> identify the required transport protocol. The packet <bcp14>MUST NOT</bcp14> be fragmented: the More Fragments flag and Fragment Offset field <bcp14>MUST</bcp14> both be zero. The transport header starts immediately after the IPv4 header, whose length is determined by IHL.</t>
          <t>For an IPv6 variant, the sender and receiver <bcp14>MUST</bcp14> locate the required transport header by traversing the IPv6 Next Header chain from the fixed 40-octet IPv6 header. The traversal follows extension headers that identify the following header using a Next Header field and whose length can be determined from the packet contents. If traversal encounters an IPv6 Fragment header before the required transport header, or a header whose following header cannot be determined, the required header is considered not located.</t>
          <t>The IP packet <bcp14>MUST</bcp14> contain at least the minimum header size at the resulting transport header offset. For TCP, the Data Offset field <bcp14>MUST</bcp14> indicate a header length of at least 20 octets and no larger than the TCP segment contained in the IP packet. The TCP header length is the Data Offset value multiplied by 4.</t>
        </section>
      </section>
      <section anchor="derived-ipv4-total-length">
        <name>IPv4 Total Length</name>
        <t>The <tt>ipv4-total-length</tt> field corresponds to the Total Length field of the IPv4 header defined in <xref section="3.1" sectionFormat="of" target="IPv4"/>. It uses the IPv4 header checks in <xref target="derived-ip-headers"/>.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Offset from start of IPv4 header</th>
              <th align="left">Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Total Length</td>
              <td align="left">2</td>
              <td align="left">2</td>
            </tr>
          </tbody>
        </table>
        <t>The value is the number of octets from the start of the IPv4 header to the end of the reconstructed IPv4 packet. It cannot exceed 65535.</t>
      </section>
      <section anchor="derived-ipv6-payload-length">
        <name>IPv6 Payload Length</name>
        <t>The <tt>ipv6-payload-length</tt> field corresponds to the Payload Length field of the IPv6 header defined in <xref section="3" sectionFormat="of" target="IPv6"/>. It uses the IPv6 header checks in <xref target="derived-ip-headers"/>.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Offset from start of IPv6 header</th>
              <th align="left">Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Payload Length</td>
              <td align="left">4</td>
              <td align="left">2</td>
            </tr>
          </tbody>
        </table>
        <t>The value is the number of octets following the fixed 40-octet IPv6 header in the reconstructed IPv6 packet. Its permitted range is 1 to 65535.</t>
        <t>This Derived Field Type does not support IPv6 jumbograms (<xref target="IPv6-JUMBO"/>). If the IPv6 Payload Length field in the original packet is zero, the sender <bcp14>MUST NOT</bcp14> use this Derived Field Type.</t>
      </section>
      <section anchor="derived-udp-length">
        <name>UDP Length</name>
        <t>The two UDP Length types derive the Length field of the UDP header defined in <xref target="UDP"/>. Both use the IP header checks in <xref target="derived-ip-headers"/> and the UDP header checks in <xref target="derived-transport-headers"/> for their respective IP version.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Offset from start of UDP header</th>
              <th align="left">Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Length</td>
              <td align="left">4</td>
              <td align="left">2</td>
            </tr>
          </tbody>
        </table>
        <t>The value is the number of octets from the start of the UDP header to the end of the reconstructed IP packet. Its permitted range is 8 to 65535. The sender's comparison in <xref target="derived-common-processing"/> therefore requires the original UDP Length to cover all of these octets; otherwise, this derivation cannot be used.</t>
        <t>UDP Options (<xref section="7" sectionFormat="of" target="UDP-OPTIONS"/>) occupy a surplus area after the UDP payload but within the IP packet. This check prevents length derivation from incorrectly treating that area as part of the UDP payload.</t>
        <section anchor="derived-ipv4-udp-length">
          <name>UDP Length over IPv4</name>
          <t>The <tt>ipv4-udp-length</tt> type applies this procedure to UDP carried over IPv4.</t>
        </section>
        <section anchor="derived-ipv6-udp-length">
          <name>UDP Length over IPv6</name>
          <t>The <tt>ipv6-udp-length</tt> type applies this procedure to UDP carried over IPv6. Octets preceding the UDP header, including IPv6 extension headers, are not included in the derived length.</t>
        </section>
      </section>
      <section anchor="derived-ipv4-header-checksum">
        <name>IPv4 Header Checksum</name>
        <t>The <tt>ipv4-header-checksum</tt> field corresponds to the Header Checksum field of the IPv4 header defined in <xref section="3.1" sectionFormat="of" target="IPv4"/>. It uses the IPv4 header checks in <xref target="derived-ip-headers"/>.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Offset from start of IPv4 header</th>
              <th align="left">Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Header Checksum</td>
              <td align="left">10</td>
              <td align="left">2</td>
            </tr>
          </tbody>
        </table>
        <t>The sender <bcp14>MUST</bcp14> verify that IHL indicates an IPv4 header length of at least 20 octets and no larger than the original IPv4 packet.</t>
        <t>The value is the Internet checksum computed over the IPv4 header, whose length is determined by IHL, with the Header Checksum field treated as zero for the computation.</t>
      </section>
      <section anchor="derived-tcp-checksum">
        <name>TCP Checksum</name>
        <t>The two TCP Checksum types derive the Checksum field of the TCP header defined in <xref section="3.1" sectionFormat="of" target="TCP"/>. Both use the IP header checks in <xref target="derived-ip-headers"/> and the TCP header checks in <xref target="derived-transport-headers"/> for their respective IP version.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Offset from start of TCP header</th>
              <th align="left">Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Checksum</td>
              <td align="left">16</td>
              <td align="left">2</td>
            </tr>
          </tbody>
        </table>
        <t>The value is the Internet checksum computed over the appropriate IP pseudo-header, the TCP header, and the TCP payload, with the TCP Checksum field treated as zero for the computation.</t>
        <section anchor="derived-ipv4-tcp-checksum">
          <name>TCP Checksum over IPv4</name>
          <t>The <tt>ipv4-tcp-checksum</tt> type applies this procedure to TCP carried over IPv4, using the IPv4 pseudo-header.</t>
        </section>
        <section anchor="derived-ipv6-tcp-checksum">
          <name>TCP Checksum over IPv6</name>
          <t>The <tt>ipv6-tcp-checksum</tt> type applies this procedure to TCP carried over IPv6, using the IPv6 pseudo-header.</t>
        </section>
      </section>
      <section anchor="derived-udp-checksum">
        <name>UDP Checksum</name>
        <t>The two UDP Checksum types derive the Checksum field of the UDP header defined in <xref target="UDP"/>. Both use the IP header checks in <xref target="derived-ip-headers"/> and the UDP header checks in <xref target="derived-transport-headers"/> for their respective IP version.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Offset from start of UDP header</th>
              <th align="left">Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Checksum</td>
              <td align="left">6</td>
              <td align="left">2</td>
            </tr>
          </tbody>
        </table>
        <t>The sender and receiver <bcp14>MUST</bcp14> verify that UDP Length is at least 8 and no larger than the number of octets from the start of the UDP header to the end of the IP packet. If UDP Length is also derived, the receiver uses its reconstructed value.</t>
        <t>The value is the Internet checksum computed over the appropriate IP pseudo-header, the UDP header, and the UDP payload, with the UDP Checksum field treated as zero for the computation. UDP Length determines the extent of the UDP header and payload covered by this computation. If the computed checksum is zero, the field value is 0xffff; this encoding applies both to the sender's comparison and to the value written by the receiver.</t>
        <section anchor="derived-ipv4-udp-checksum">
          <name>UDP Checksum over IPv4</name>
          <t>The <tt>ipv4-udp-checksum</tt> type applies this procedure to UDP carried over IPv4, using the IPv4 pseudo-header. It always generates a UDP checksum. The sender <bcp14>MUST NOT</bcp14> use this Derived Field Type for IPv4 UDP packets that use a UDP Checksum field value of zero to indicate that no checksum is present.</t>
        </section>
        <section anchor="derived-ipv6-udp-checksum">
          <name>UDP Checksum over IPv6</name>
          <t>The <tt>ipv6-udp-checksum</tt> type applies this procedure to UDP carried over IPv6, using the IPv6 pseudo-header.</t>
        </section>
      </section>
      <section anchor="derived-ethernet-fcs">
        <name>Ethernet Frame Check Sequence</name>
        <t>The <tt>ethernet-fcs</tt> field corresponds to the Frame Check Sequence (FCS) field of the Ethernet frame defined in <xref target="IEEE802.3"/>. This Derived Field Type applies only to CONNECT-ETHERNET and uses the common processing rules in <xref target="derived-common-processing"/>; the IP and transport header checks do not apply.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Offset from start of Ethernet frame</th>
              <th align="left">Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Frame Check Sequence</td>
              <td align="left">Final 4 octets of frame</td>
              <td align="left">4</td>
            </tr>
          </tbody>
        </table>
        <t>The sender <bcp14>MUST</bcp14> only use this Derived Field Type for Ethernet frames that contain an FCS field. The sender and receiver <bcp14>MUST</bcp14> verify that the frame is long enough to contain the Destination MAC Address, Source MAC Address, EtherType or length field, and FCS field.</t>
        <t>The value is the Ethernet Frame Check Sequence computed over the frame starting at the Destination MAC Address field and ending immediately before the FCS field.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section illustrates how contexts are created and how senders form compact payloads. All offsets and lengths are in bits in the packet diagrams and field tables. All offsets and lengths are in bytes in segment tables and sample capsules.</t>
      <t>The examples below are illustrative. Implementations are expected to follow <xref target="template-composition"/> and select static and variable fields based on the traffic being carried and the stability of those fields in the relevant deployment.</t>
      <section anchor="connect-ip-tcp-over-ipv6-with-template-derived-fields-and-checksum-offload">
        <name>CONNECT-IP: TCP over IPv6 with template, derived fields and checksum offload</name>
        <t>Original sample <xref target="TCP"/> over <xref target="IPv6"/> packet layout is illustrated below. In addition to basic IPv6 and TCP headers it contains Timestamp option as defined in <xref section="3" sectionFormat="of" target="TCP-PERF"/>.</t>
        <t>This packet is to be transmitted from the client to the proxy over CONNECT-IP.</t>
        <figure anchor="original-tcp-ipv6">
          <name>Example TCP over IPv6 packet before optimization</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="704" width="576" viewBox="0 0 576 704" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,688" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,96" fill="none" stroke="black"/>
                <path d="M 80,448 L 80,496" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,48" fill="none" stroke="black"/>
                <path d="M 144,544 L 144,592" fill="none" stroke="black"/>
                <path d="M 208,48 L 208,96" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,48" fill="none" stroke="black"/>
                <path d="M 280,96 L 280,144" fill="none" stroke="black"/>
                <path d="M 280,304 L 280,352" fill="none" stroke="black"/>
                <path d="M 280,448 L 280,592" fill="none" stroke="black"/>
                <path d="M 416,32 L 416,48" fill="none" stroke="black"/>
                <path d="M 416,96 L 416,144" fill="none" stroke="black"/>
                <path d="M 416,544 L 416,592" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,688" fill="none" stroke="black"/>
                <path d="M 568,64 L 568,96" fill="none" stroke="black"/>
                <path d="M 568,256 L 568,288" fill="none" stroke="black"/>
                <path d="M 568,320 L 568,400" fill="none" stroke="black"/>
                <path d="M 568,576 L 568,672" fill="none" stroke="black"/>
                <path d="M 8,48 L 552,48" fill="none" stroke="black"/>
                <path d="M 8,96 L 552,96" fill="none" stroke="black"/>
                <path d="M 8,144 L 552,144" fill="none" stroke="black"/>
                <path d="M 8,224 L 552,224" fill="none" stroke="black"/>
                <path d="M 8,304 L 552,304" fill="none" stroke="black"/>
                <path d="M 8,352 L 552,352" fill="none" stroke="black"/>
                <path d="M 8,400 L 552,400" fill="none" stroke="black"/>
                <path d="M 8,448 L 552,448" fill="none" stroke="black"/>
                <path d="M 8,496 L 552,496" fill="none" stroke="black"/>
                <path d="M 8,544 L 552,544" fill="none" stroke="black"/>
                <path d="M 8,592 L 552,592" fill="none" stroke="black"/>
                <path d="M 8,640 L 552,640" fill="none" stroke="black"/>
                <path d="M 8,688 L 552,688" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="576,672 564,666.4 564,677.6" fill="black" transform="rotate(90,568,672)"/>
                <polygon class="arrowhead" points="576,320 564,314.4 564,325.6" fill="black" transform="rotate(270,568,320)"/>
                <polygon class="arrowhead" points="576,288 564,282.4 564,293.6" fill="black" transform="rotate(90,568,288)"/>
                <polygon class="arrowhead" points="576,64 564,58.4 564,69.6" fill="black" transform="rotate(270,568,64)"/>
                <g class="text">
                  <text x="16" y="36">0</text>
                  <text x="136" y="36">7</text>
                  <text x="152" y="36">8</text>
                  <text x="268" y="36">15</text>
                  <text x="292" y="36">16</text>
                  <text x="404" y="36">23</text>
                  <text x="428" y="36">16</text>
                  <text x="540" y="36">31</text>
                  <text x="16" y="68">0</text>
                  <text x="32" y="68">1</text>
                  <text x="48" y="68">1</text>
                  <text x="64" y="68">0</text>
                  <text x="140" y="68">0x00</text>
                  <text x="376" y="68">0x4bcde</text>
                  <text x="40" y="84">Version</text>
                  <text x="120" y="84">Traffic</text>
                  <text x="176" y="84">Class</text>
                  <text x="348" y="84">Flow</text>
                  <text x="392" y="84">Label</text>
                  <text x="140" y="116">0x0020</text>
                  <text x="348" y="116">0x06</text>
                  <text x="484" y="116">0x79</text>
                  <text x="568" y="116">I</text>
                  <text x="112" y="132">Payload</text>
                  <text x="172" y="132">length</text>
                  <text x="316" y="132">Next</text>
                  <text x="364" y="132">header</text>
                  <text x="456" y="132">Hop</text>
                  <text x="496" y="132">limit</text>
                  <text x="568" y="132">P</text>
                  <text x="568" y="164">H</text>
                  <text x="280" y="180">2001:0db8:85a3:0000:0000:8a2e:0370:7334</text>
                  <text x="568" y="180">E</text>
                  <text x="244" y="196">Source</text>
                  <text x="304" y="196">Address</text>
                  <text x="568" y="196">A</text>
                  <text x="568" y="212">D</text>
                  <text x="568" y="228">E</text>
                  <text x="568" y="244">R</text>
                  <text x="280" y="260">2001:0db8:a42b:0000:0000:7c3a:143a:1529</text>
                  <text x="240" y="276">Destination</text>
                  <text x="320" y="276">Address</text>
                  <text x="140" y="324">0x0050</text>
                  <text x="412" y="324">0xd475</text>
                  <text x="124" y="340">Source</text>
                  <text x="172" y="340">port</text>
                  <text x="392" y="340">Destination</text>
                  <text x="460" y="340">port</text>
                  <text x="276" y="372">0x6caa4bd7</text>
                  <text x="252" y="388">Sequence</text>
                  <text x="316" y="388">number</text>
                  <text x="276" y="420">0x9b16794e</text>
                  <text x="568" y="420">T</text>
                  <text x="252" y="436">Acknowledgment</text>
                  <text x="340" y="436">number</text>
                  <text x="568" y="436">C</text>
                  <text x="568" y="452">P</text>
                  <text x="16" y="468">1</text>
                  <text x="32" y="468">0</text>
                  <text x="48" y="468">0</text>
                  <text x="64" y="468">0</text>
                  <text x="88" y="468">0</text>
                  <text x="104" y="468">0</text>
                  <text x="120" y="468">0</text>
                  <text x="136" y="468">0</text>
                  <text x="152" y="468">0</text>
                  <text x="168" y="468">0</text>
                  <text x="184" y="468">0</text>
                  <text x="200" y="468">1</text>
                  <text x="216" y="468">0</text>
                  <text x="232" y="468">0</text>
                  <text x="248" y="468">0</text>
                  <text x="264" y="468">0</text>
                  <text x="412" y="468">0x041e</text>
                  <text x="24" y="484">Hdr</text>
                  <text x="56" y="484">Len</text>
                  <text x="152" y="484">TCP</text>
                  <text x="192" y="484">Flags</text>
                  <text x="412" y="484">Window</text>
                  <text x="568" y="484">H</text>
                  <text x="568" y="500">E</text>
                  <text x="140" y="516">0x8f6b</text>
                  <text x="412" y="516">0x0000</text>
                  <text x="568" y="516">A</text>
                  <text x="140" y="532">Checksum</text>
                  <text x="380" y="532">Urgent</text>
                  <text x="440" y="532">Pointer</text>
                  <text x="568" y="532">D</text>
                  <text x="568" y="548">E</text>
                  <text x="76" y="564">0x01</text>
                  <text x="212" y="564">0x01</text>
                  <text x="348" y="564">0x08</text>
                  <text x="484" y="564">0x0a</text>
                  <text x="568" y="564">R</text>
                  <text x="48" y="580">No-Op</text>
                  <text x="100" y="580">Option</text>
                  <text x="184" y="580">No-Op</text>
                  <text x="236" y="580">Option</text>
                  <text x="320" y="580">TimeStamp</text>
                  <text x="388" y="580">Option</text>
                  <text x="484" y="580">Length</text>
                  <text x="276" y="612">0x119a5db3</text>
                  <text x="256" y="628">Timestamp</text>
                  <text x="320" y="628">value</text>
                  <text x="276" y="660">0xd9b4d48d</text>
                  <text x="232" y="676">Timestamp</text>
                  <text x="292" y="676">echo</text>
                  <text x="336" y="676">reply</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
|0              7|8             15|16            23|16            31|
+--------+-------+-------+--------+----------------+----------------+
|0 1 1 0 |     0x00      |                 0x4bcde                  | ^
|Version | Traffic Class |               Flow Label                 | |
+--------+---------------+--------+----------------+----------------+ |
|             0x0020              |      0x06      |      0x79      | I
|         Payload length          |  Next header   |   Hop limit    | P
+---------------------------------+----------------+----------------+
|                                                                   | H
|              2001:0db8:85a3:0000:0000:8a2e:0370:7334              | E
|                          Source Address                           | A
|                                                                   | D
+-------------------------------------------------------------------+ E
|                                                                   | R
|              2001:0db8:a42b:0000:0000:7c3a:143a:1529              | |
|                       Destination Address                         | |
|                                                                   | v
+---------------------------------+---------------------------------+
|             0x0050              |             0xd475              | ^
|           Source port           |        Destination port         | |
+---------------------------------+---------------------------------+ |
|                            0x6caa4bd7                             | |
|                          Sequence number                          | |
+-------------------------------------------------------------------+ |
|                            0x9b16794e                             | T
|                       Acknowledgment number                       | C
+--------+------------------------+---------------------------------+ P
|1 0 0 0 |0 0 0 0 0 0 0 1 0 0 0 0 |             0x041e              |
|Hdr Len |       TCP Flags        |             Window              | H
+--------+------------------------+---------------------------------+ E
|             0x8f6b              |             0x0000              | A
|            Checksum             |         Urgent Pointer          | D
+----------------+----------------+----------------+----------------+ E
|      0x01      |      0x01      |      0x08      |      0x0a      | R
|  No-Op Option  |  No-Op Option  |TimeStamp Option|     Length     | |
+----------------+----------------+----------------+----------------+ |
|                            0x119a5db3                             | |
|                          Timestamp value                          | |
+-------------------------------------------------------------------+ |
|                            0xd9b4d48d                             | |
|                       Timestamp echo reply                        | v
+-------------------------------------------------------------------+
]]></artwork>
          </artset>
        </figure>
        <t>This example assumes that the peer supports templates with at least two segments per template, IPv6 payload length derived field and checksum offloading. These capabilities were communicated using the following <tt>http-datagram-contexts</tt> HTTP field in proxy response confirming CONNECT-IP extended CONNECT.</t>
        <figure anchor="fig-http-datagram-contexts-example-1">
          <name>http-datagram-contexts response example</name>
          <artwork><![CDATA[
http-datagram-contexts = max-templates=1, max-templates-segments=2, derived=(1), checksum=?1, mtu=1500
]]></artwork>
        </figure>
        <t>Since the proxy does not support TCP checksum derivation, but it supports checksum offloading, the client calculates the folded, uncomplemented one's-complement sum of the IPv6 pseudo-header and places it in the TCP checksum field. Context for the offloaded checksum is defined using the CHECKSUM_ASSIGN capsule:</t>
        <figure anchor="ipv6-tcp-checksum-assign">
          <name>CHECKSUM_ASSIGN Capsule for example IPv6/TCP packet</name>
          <artwork><![CDATA[
CHECKSUM_ASSIGN Capsule {
  Type (i) = 0x3ee31445,
  Length (i) = 4,
  Context ID (i) = 2,
  Next Context ID (i) = 0,
  Checksum Field Offset (i) = 56,
  Checksum Start Offset (i) = 40,
}
]]></artwork>
        </figure>
        <t>Payload length field in IPv6 header can derived by the peer, so it is removed before calculating static segments. Resulting context for the derived field is defined using DERIVED_ASSIGN capsule:</t>
        <figure anchor="ipv6-tcp-derived-assign">
          <name>DERIVED_ASSIGN Capsule for example IPv6/TCP packet</name>
          <artwork><![CDATA[
DERIVED_ASSIGN Capsule {
  Type (i) = 0x3ee31442,
  Length (i) = 3,
  Context ID (i) = 4,
  Next Context ID (i) = 2,
  Derived Field Type (i) = 1
}
]]></artwork>
        </figure>
        <t>The table below illustrates fields present in IPv6 and TCP headers after derived field was removed, their offsets in bits from the beginning of the packet and whether they are likely to be static for most packets of a given traffic flow</t>
        <table anchor="ipv6-tcp-fields">
          <name>IPv6 and TCP header fields in example packet</name>
          <thead>
            <tr>
              <th align="left">Offset</th>
              <th align="left">Field name</th>
              <th align="left">Length</th>
              <th align="left">Value</th>
              <th align="left">Static</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Version</td>
              <td align="left">4</td>
              <td align="left">0110b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Traffic Class</td>
              <td align="left">8</td>
              <td align="left">0x00</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">Flow label</td>
              <td align="left">20</td>
              <td align="left">0x4bcde</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">32</td>
              <td align="left">Next header</td>
              <td align="left">8</td>
              <td align="left">0x06</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">40</td>
              <td align="left">Hop limit</td>
              <td align="left">8</td>
              <td align="left">0x79</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Source address</td>
              <td align="left">128</td>
              <td align="left">2001:0db8:85a3::8a2e:0370:7334</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">176</td>
              <td align="left">Destination address</td>
              <td align="left">128</td>
              <td align="left">2001:0db8:a42b::7c3a:143a:1529</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">304</td>
              <td align="left">Source port</td>
              <td align="left">16</td>
              <td align="left">0x0050</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">320</td>
              <td align="left">Destination port</td>
              <td align="left">16</td>
              <td align="left">0xd475</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">336</td>
              <td align="left">Sequence number</td>
              <td align="left">32</td>
              <td align="left">0x6caa4bd7</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">368</td>
              <td align="left">Acknowledgement number</td>
              <td align="left">32</td>
              <td align="left">0x9b16794e</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">400</td>
              <td align="left">TCP header length</td>
              <td align="left">4</td>
              <td align="left">1000b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">404</td>
              <td align="left">TCP Flags</td>
              <td align="left">12</td>
              <td align="left">000000010000b</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">416</td>
              <td align="left">Window</td>
              <td align="left">16</td>
              <td align="left">0x041e</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">432</td>
              <td align="left">Checksum</td>
              <td align="left">16</td>
              <td align="left">0x8f6b</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">448</td>
              <td align="left">Urgent pointer</td>
              <td align="left">16</td>
              <td align="left">0x0000</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">464</td>
              <td align="left">No-Op option</td>
              <td align="left">8</td>
              <td align="left">0x01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">472</td>
              <td align="left">No-Op option</td>
              <td align="left">8</td>
              <td align="left">0x01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">480</td>
              <td align="left">Timestamp option</td>
              <td align="left">8</td>
              <td align="left">0x08</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">488</td>
              <td align="left">Timestamp option length</td>
              <td align="left">8</td>
              <td align="left">0x0a</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">496</td>
              <td align="left">Timestamp value</td>
              <td align="left">32</td>
              <td align="left">0x119a5db3</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">528</td>
              <td align="left">Timestamp echo reply</td>
              <td align="left">32</td>
              <td align="left">0xd9b4d48d</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <t>Static segments model the invariant parts except for the isolated 4-bit TCP header length.</t>
        <t>Resulting static segments:</t>
        <table anchor="ipv6-tcp-segments">
          <name>Static segments for example IPv6/TCP packet</name>
          <thead>
            <tr>
              <th align="left">Segment Offset</th>
              <th align="left">Segment Length</th>
              <th align="left">Segment Contents</th>
              <th align="left">Segment Payload</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">42</td>
              <td align="left">Version, Traffic Class, Flow Label, Next header, Hop limit, Source address, Destination address, Source port, Destination port</td>
              <td align="left">0x6004bcde067920010db885a3...</td>
            </tr>
            <tr>
              <td align="left">56</td>
              <td align="left">6</td>
              <td align="left">Urgent pointer, 2 No-Op TCP options, Timestamp option code and length</td>
              <td align="left">0x00000101080a</td>
            </tr>
          </tbody>
        </table>
        <t>Resulting TEMPLATE_ASSIGN capsule with client-allocated even context id is illustrated below:</t>
        <figure anchor="ipv6-tcp-template-assign">
          <name>TEMPLATE_ASSIGN Capsule for example IPv6/TCP packet</name>
          <artwork><![CDATA[
TEMPLATE_ASSIGN Capsule {
  Type (i) = 0x3ee3143f,
  Length (i) = 54,
  Context ID (i) = 6,
  Next Context ID (i) = 4,
  Static Segment {
    Segment Offset (i) = 0,
    Segment Length (i) = 42,
    Segment Payload = 0x6004bcde067920010db885a3000000008a2e0370733420010db8a42b000000007c3a143a15290050d475,
  },
  Static Segment {
    Segment Offset (i) = 56,
    Segment Length (i) = 6,
    Segment Payload = 0x00000101080a,
  }
}
]]></artwork>
        </figure>
        <t>The resulting processing context chain removes 50 bytes of repeated header material from packets that match the chain, reducing the space they require in QUIC DATAGRAM frames.</t>
        <t>The sender concatenates all variable regions in increasing offset order. Packets that do not match this template (for example packets with IPv6 extension headers or without TCP options) are sent using Context ID 0 or associated with a new context.</t>
        <t>Upon receiving the datagram with Context ID 6, proxy re-assembles the datagram by concatenating static and variable segments according to the offsets, re-calculates Payload Length and inserts it into IPv6 header and completes the TCP checksum using the sender-provided pseudo-header partial checksum.</t>
      </section>
      <section anchor="connect-ethernet-udp-over-ipv4-with-template-and-derived-fields">
        <name>CONNECT-ETHERNET: UDP over IPv4 with template and derived fields</name>
        <t>Original sample <xref target="UDP"/> over <xref target="IPv4"/> Ethernet frame layout is illustrated below.</t>
        <t>This frame is to be transmitted from the proxy to the client over CONNECT-ETHERNET.</t>
        <figure anchor="original-udp-ipv4-ethernet">
          <name>Example UDP over IPv4 Ethernet frame before optimization</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="640" width="576" viewBox="0 0 576 640" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,624" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,48" fill="none" stroke="black"/>
                <path d="M 80,240 L 80,288" fill="none" stroke="black"/>
                <path d="M 144,224 L 144,288" fill="none" stroke="black"/>
                <path d="M 144,336 L 144,384" fill="none" stroke="black"/>
                <path d="M 152,32 L 152,48" fill="none" stroke="black"/>
                <path d="M 152,144 L 152,192" fill="none" stroke="black"/>
                <path d="M 224,32 L 224,48" fill="none" stroke="black"/>
                <path d="M 280,224 L 280,384" fill="none" stroke="black"/>
                <path d="M 280,480 L 280,576" fill="none" stroke="black"/>
                <path d="M 296,32 L 296,48" fill="none" stroke="black"/>
                <path d="M 336,288 L 336,336" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,48" fill="none" stroke="black"/>
                <path d="M 416,224 L 416,240" fill="none" stroke="black"/>
                <path d="M 440,32 L 440,144" fill="none" stroke="black"/>
                <path d="M 552,224 L 552,624" fill="none" stroke="black"/>
                <path d="M 568,256 L 568,272" fill="none" stroke="black"/>
                <path d="M 568,432 L 568,464" fill="none" stroke="black"/>
                <path d="M 568,496 L 568,528" fill="none" stroke="black"/>
                <path d="M 568,592 L 568,624" fill="none" stroke="black"/>
                <path d="M 8,48 L 440,48" fill="none" stroke="black"/>
                <path d="M 8,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 8,144 L 440,144" fill="none" stroke="black"/>
                <path d="M 8,192 L 152,192" fill="none" stroke="black"/>
                <path d="M 8,240 L 552,240" fill="none" stroke="black"/>
                <path d="M 8,288 L 552,288" fill="none" stroke="black"/>
                <path d="M 8,336 L 552,336" fill="none" stroke="black"/>
                <path d="M 8,384 L 552,384" fill="none" stroke="black"/>
                <path d="M 8,432 L 552,432" fill="none" stroke="black"/>
                <path d="M 8,480 L 552,480" fill="none" stroke="black"/>
                <path d="M 8,528 L 552,528" fill="none" stroke="black"/>
                <path d="M 8,576 L 552,576" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="576,624 564,618.4 564,629.6" fill="black" transform="rotate(90,568,624)"/>
                <polygon class="arrowhead" points="576,496 564,490.4 564,501.6" fill="black" transform="rotate(270,568,496)"/>
                <polygon class="arrowhead" points="576,464 564,458.4 564,469.6" fill="black" transform="rotate(90,568,464)"/>
                <polygon class="arrowhead" points="576,256 564,250.4 564,261.6" fill="black" transform="rotate(270,568,256)"/>
                <g class="text">
                  <text x="16" y="36">0</text>
                  <text x="72" y="36">7</text>
                  <text x="88" y="36">8</text>
                  <text x="140" y="36">15</text>
                  <text x="164" y="36">16</text>
                  <text x="212" y="36">23</text>
                  <text x="236" y="36">24</text>
                  <text x="284" y="36">31</text>
                  <text x="308" y="36">32</text>
                  <text x="356" y="36">39</text>
                  <text x="380" y="36">40</text>
                  <text x="428" y="36">47</text>
                  <text x="176" y="68">Destination</text>
                  <text x="240" y="68">MAC</text>
                  <text x="288" y="68">address</text>
                  <text x="224" y="84">00:00:5E:00:53:01</text>
                  <text x="172" y="116">Source</text>
                  <text x="216" y="116">MAC</text>
                  <text x="264" y="116">address</text>
                  <text x="224" y="132">00:00:5E:00:53:02</text>
                  <text x="76" y="164">0x0800</text>
                  <text x="80" y="180">EtherType</text>
                  <text x="284" y="180">ETHERNET</text>
                  <text x="348" y="180">HEADER</text>
                  <text x="16" y="228">0</text>
                  <text x="136" y="228">7</text>
                  <text x="152" y="228">8</text>
                  <text x="268" y="228">15</text>
                  <text x="292" y="228">16</text>
                  <text x="404" y="228">23</text>
                  <text x="428" y="228">16</text>
                  <text x="540" y="228">31</text>
                  <text x="16" y="260">0</text>
                  <text x="32" y="260">1</text>
                  <text x="48" y="260">0</text>
                  <text x="64" y="260">0</text>
                  <text x="88" y="260">0</text>
                  <text x="104" y="260">1</text>
                  <text x="120" y="260">0</text>
                  <text x="136" y="260">1</text>
                  <text x="212" y="260">0x02</text>
                  <text x="412" y="260">0x04cc</text>
                  <text x="40" y="276">Version</text>
                  <text x="96" y="276">Hdr</text>
                  <text x="128" y="276">Len</text>
                  <text x="184" y="276">Traffic</text>
                  <text x="240" y="276">Class</text>
                  <text x="384" y="276">Total</text>
                  <text x="436" y="276">length</text>
                  <text x="568" y="292">I</text>
                  <text x="140" y="308">0x0000</text>
                  <text x="288" y="308">0</text>
                  <text x="304" y="308">1</text>
                  <text x="320" y="308">0</text>
                  <text x="344" y="308">0</text>
                  <text x="360" y="308">0</text>
                  <text x="376" y="308">0</text>
                  <text x="392" y="308">0</text>
                  <text x="408" y="308">0</text>
                  <text x="424" y="308">0</text>
                  <text x="440" y="308">0</text>
                  <text x="456" y="308">0</text>
                  <text x="472" y="308">0</text>
                  <text x="488" y="308">0</text>
                  <text x="504" y="308">0</text>
                  <text x="520" y="308">0</text>
                  <text x="536" y="308">0</text>
                  <text x="568" y="308">P</text>
                  <text x="140" y="324">Identification</text>
                  <text x="304" y="324">Flags</text>
                  <text x="412" y="324">Fragment</text>
                  <text x="476" y="324">offset</text>
                  <text x="568" y="340">H</text>
                  <text x="76" y="356">0x40</text>
                  <text x="212" y="356">0x11</text>
                  <text x="412" y="356">0xb21b</text>
                  <text x="568" y="356">E</text>
                  <text x="72" y="372">TTL</text>
                  <text x="212" y="372">Protocol</text>
                  <text x="380" y="372">Header</text>
                  <text x="444" y="372">checksum</text>
                  <text x="568" y="372">A</text>
                  <text x="568" y="388">D</text>
                  <text x="280" y="404">192.0.2.1</text>
                  <text x="568" y="404">E</text>
                  <text x="244" y="420">Source</text>
                  <text x="304" y="420">Address</text>
                  <text x="568" y="420">R</text>
                  <text x="280" y="452">192.0.2.2</text>
                  <text x="240" y="468">Destination</text>
                  <text x="320" y="468">Address</text>
                  <text x="140" y="500">0xc199</text>
                  <text x="412" y="500">0x1151</text>
                  <text x="124" y="516">Source</text>
                  <text x="172" y="516">port</text>
                  <text x="392" y="516">Destination</text>
                  <text x="460" y="516">port</text>
                  <text x="140" y="548">0x04b8</text>
                  <text x="412" y="548">0x72de</text>
                  <text x="568" y="548">U</text>
                  <text x="140" y="564">Length</text>
                  <text x="412" y="564">Checksum</text>
                  <text x="568" y="564">D</text>
                  <text x="568" y="580">P</text>
                  <text x="200" y="612">UDP</text>
                  <text x="248" y="612">payload</text>
                  <text x="304" y="612">(1200</text>
                  <text x="356" y="612">bytes)</text>
                  <text x="280" y="628">...</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
|0      7|8     15|16    23|24    31|32    39|40    47|
+--------+--------+--------+--------+--------+--------+
|               Destination MAC address               |
|                  00:00:5E:00:53:01                  |
+--------+--------+--------+--------+--------+--------+
|                 Source MAC address                  |
|                  00:00:5E:00:53:02                  |
+--------+--------+--------+--------+--------+--------+
|     0x0800      |
|    EtherType    |            ETHERNET HEADER
+-----------------+

|0              7|8             15|16            23|16            31|
+--------+-------+----------------+----------------+----------------+
|0 1 0 0 |0 1 0 1|      0x02      |             0x04cc              | ^
|Version |Hdr Len| Traffic Class  |          Total length           | |
+--------+-------+----------------+------+--------------------------+ I
|             0x0000              |0 1 0 |0 0 0 0 0 0 0 0 0 0 0 0 0 | P
|         Identification          |Flags |     Fragment offset      |
+----------------+----------------+------+--------------------------+ H
|      0x40      |      0x11      |             0xb21b              | E
|      TTL       |    Protocol    |         Header checksum         | A
+----------------+----------------+---------------------------------+ D
|                             192.0.2.1                             | E
|                          Source Address                           | R
+-------------------------------------------------------------------+ |
|                             192.0.2.2                             | |
|                       Destination Address                         | v
+---------------------------------+---------------------------------+
|             0xc199              |             0x1151              | ^
|           Source port           |        Destination port         | |
+---------------------------------+---------------------------------+ |
|             0x04b8              |             0x72de              | U
|             Length              |            Checksum             | D
+---------------------------------+---------------------------------+ P
|                                                                   | |
|                      UDP payload (1200 bytes)                     | |
|                                ...                                | v
]]></artwork>
          </artset>
        </figure>
        <t>This example assumes that the peer supports templates, IPv4 total length, IPv4 header checksum, UDP length in IPv4 packet and UDP checksum in IPv4 packet derived field. These capabilities were communicated using the following <tt>http-datagram-contexts</tt> HTTP field in client requesting CONNECT-ETHERNET extended CONNECT.</t>
        <figure anchor="fig-http-datagram-contexts-example-2">
          <name>http-datagram-contexts request example</name>
          <artwork><![CDATA[
http-datagram-contexts = max-templates=1, max-templates-segments=1, derived=(0 2 4 7), mtu=1500
]]></artwork>
        </figure>
        <t>Total length and header checksum in IPv4 header as well as length and checksum in UDP header can be derived by the peer, so these fields are removed before calculating static segments. Resulting context for the derived field is defined using DERIVED_ASSIGN capsule:</t>
        <figure anchor="ipv4-udp-ethernet-derived-assign">
          <name>DERIVED_ASSIGN Capsule for example IPv4/UDP ethernet frame</name>
          <artwork><![CDATA[
DERIVED_ASSIGN Capsule {
  Type (i) = 0x3ee31442,
  Length (i) = 6,
  Context ID (i) = 1,
  Next Context ID (i) = 0,
  Derived Field Type (i) = 0
  Derived Field Type (i) = 2
  Derived Field Type (i) = 4
  Derived Field Type (i) = 7
}
]]></artwork>
        </figure>
        <t>Table below illustrates fields present in Ethernet, IPv4 and UDP headers after derived fields were removed, their offsets in bits from the beginning of the frame and if they are likely to be static for most packets of a given traffic flow</t>
        <table anchor="ipv4-udp-ethernet-fields">
          <name>Ethernet, IPv4 and UDP header fields in example frame</name>
          <thead>
            <tr>
              <th align="left">Offset</th>
              <th align="left">Field name</th>
              <th align="left">Length</th>
              <th align="left">Value</th>
              <th align="left">Static</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Destination MAC address</td>
              <td align="left">48</td>
              <td align="left">00:00:5E:00:53:01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Source MAC address</td>
              <td align="left">48</td>
              <td align="left">00:00:5E:00:53:02</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">96</td>
              <td align="left">EtherType</td>
              <td align="left">16</td>
              <td align="left">0x0800</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">112</td>
              <td align="left">Version</td>
              <td align="left">4</td>
              <td align="left">0100b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">116</td>
              <td align="left">Header length</td>
              <td align="left">4</td>
              <td align="left">0101b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">120</td>
              <td align="left">Traffic Class</td>
              <td align="left">8</td>
              <td align="left">0x02</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">128</td>
              <td align="left">Identification</td>
              <td align="left">16</td>
              <td align="left">0x0000</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">144</td>
              <td align="left">Flags</td>
              <td align="left">3</td>
              <td align="left">010b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">147</td>
              <td align="left">Fragment offset</td>
              <td align="left">13</td>
              <td align="left">0000000000000b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">160</td>
              <td align="left">TTL</td>
              <td align="left">8</td>
              <td align="left">0x40</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">168</td>
              <td align="left">Protocol</td>
              <td align="left">8</td>
              <td align="left">0x11</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">176</td>
              <td align="left">Source address</td>
              <td align="left">32</td>
              <td align="left">192.0.2.1</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">208</td>
              <td align="left">Destination address</td>
              <td align="left">32</td>
              <td align="left">192.0.2.2</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">240</td>
              <td align="left">Source port</td>
              <td align="left">16</td>
              <td align="left">0xc199</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">256</td>
              <td align="left">Destination port</td>
              <td align="left">16</td>
              <td align="left">0x1151</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">272</td>
              <td align="left">UDP payload</td>
              <td align="left">9600</td>
              <td align="left">...</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <t>A single static segment model can be used for the initial part of the HTTP datagram after derived fields were removed:</t>
        <table anchor="ipv4-udp-segment">
          <name>Static segment for example Ethernet/IPv4/UDP frame</name>
          <thead>
            <tr>
              <th align="left">Segment Offset</th>
              <th align="left">Segment Length</th>
              <th align="left">Segment Contents</th>
              <th align="left">Segment Payload</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">34</td>
              <td align="left">Source MAC address, Destination MAC address, EtherType, Version, Header length and Traffic Class, Identification, Flags, Fragment offset, TTL, Protocol, Source address, Destination address, Source port and Destination port</td>
              <td align="left">0x00005E00530100005E00530208004502000040004011c0000201c0000202c1991151</td>
            </tr>
          </tbody>
        </table>
        <t>Resulting TEMPLATE_ASSIGN capsule with proxy-allocated odd Context ID is illustrated below:</t>
        <figure anchor="ipv4-udp-template-assign">
          <name>TEMPLATE_ASSIGN Capsule for example IPv4/UDP ethernet frame</name>
          <artwork><![CDATA[
TEMPLATE_ASSIGN Capsule {
  Type (i) = 0x3ee3143f,
  Length (i) = 38,
  Context ID (i) = 3,
  Next Context ID (i) = 1,
  Static Segment {
    Segment Offset (i) = 0,
    Segment Length (i) = 34,
    Segment Payload = 0x00005E00530100005E00530208004502000040004011c0000201c0000202c1991151,
  }
}
]]></artwork>
        </figure>
        <t>The resulting processing context chain removes 34 bytes of repeated header material from frames that match the chain, reducing the space they require in QUIC DATAGRAM frames.</t>
        <t>The sender concatenates all variable regions in increasing offset order.</t>
        <t>Upon receiving the datagram with Context ID 3, client re-assembles the datagram by appending variable segments to the static, re-calculates derived fields and inserts them at appropriate locations in the datagram.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification changes how HTTP Datagrams are reconstructed but does not weaken transport-layer integrity or confidentiality protections provided by the underlying HTTP mapping. All Capsules travel on the reliable control stream and inherit those protections.</t>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Processing contexts introduce receiver state and reconstruction work. An attacker could attempt to exhaust memory or CPU by creating excessive numbers of templates and static segments, purposely sending datagrams referencing not-yet-installed contexts and causing excessive buffering of unknown Context IDs.</t>
        <t>Implementations <bcp14>MUST</bcp14> enforce limits on number of active templates and static segments and restrict memory used for buffering datagrams with unknown contexts.</t>
      </section>
      <section anchor="amplification">
        <name>Amplification</name>
        <t>Derived fields and template reconstruction increase the size of the reconstructed packet relative to the received datagram payload. An attacker could exploit this to amplify processing cost and perform a denial-of-service attack.</t>
        <t>Endpoints <bcp14>MUST</bcp14> ensure that reconstructed packet size does not exceed the negotiated MTU and <bcp14>SHOULD</bcp14> apply rate limiting when expansion ratios are abnormally high.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-capsule-types-registration">
        <name>HTTP Capsule Types Registration</name>
        <t>This specification registers the following values in the "HTTP Capsule Types" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Capsule Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x3ee3143f</td>
              <td align="left">TEMPLATE_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x3ee31440</td>
              <td align="left">TEMPLATE_ACK</td>
            </tr>
            <tr>
              <td align="left">0x3ee31441</td>
              <td align="left">TEMPLATE_CLOSE</td>
            </tr>
            <tr>
              <td align="left">0x3ee31442</td>
              <td align="left">DERIVED_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x3ee31443</td>
              <td align="left">DERIVED_ACK</td>
            </tr>
            <tr>
              <td align="left">0x3ee31444</td>
              <td align="left">DERIVED_CLOSE</td>
            </tr>
            <tr>
              <td align="left">0x3ee31445</td>
              <td align="left">CHECKSUM_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x3ee31446</td>
              <td align="left">CHECKSUM_ACK</td>
            </tr>
            <tr>
              <td align="left">0x3ee31447</td>
              <td align="left">CHECKSUM_CLOSE</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl>
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent if this document is approved)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>MASQUE Working Group masque@ietf.org</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
      <section anchor="http-field-name-registration">
        <name>HTTP Field Name Registration</name>
        <t>This specification registers the following value in the "HTTP Field Name" registry:</t>
        <ul spacing="normal">
          <li>
            <t>Field Name: http-datagram-contexts</t>
          </li>
          <li>
            <t>Status: provisional (permanent if approved)</t>
          </li>
          <li>
            <t>Structured Type: Dictionary</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
          <li>
            <t>Comments: None</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-derived-fields">
        <name>HTTP Datagram Derived Field Types Registry</name>
        <t>IANA is requested to create a new registry titled "HTTP Datagram Derived Field Types". The registration policy is expert review as specified in <xref section="4.5" sectionFormat="of" target="IANA-POLICY"/>. This new registry governs the Derived Field types that appear in DERIVED_ASSIGN capsule and <tt>derived</tt> list of <tt>http-datagram-contexts</tt> dictionary.</t>
        <t>Registrations are expected to reference a specification that defines how the field is derived. Such specifications are expected to describe the sender behavior and receiver behavior for the Derived Field Type, including how the relevant packet or frame header is located, the offset and length of the field, how the field value is computed, and any conditions under which the Derived Field Type is not applicable.</t>
        <t>This new registry contains five columns:</t>
        <dl>
          <dt>Type:</dt>
          <dd>
            <t>A positive integer identifying the field type</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>A short name of the field</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>A description of the field</t>
          </dd>
          <dt>Protocols:</dt>
          <dd>
            <t>A list of HTTP Upgrade Tokens that the derived field type can apply</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>An optional reference defining the use of the entry.</t>
          </dd>
        </dl>
        <t>The registry's initial entries are as follows:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Protocols</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">ipv4-total-length</td>
              <td align="left">IPv4 Total Length field derived from reconstructed packet size</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv4-total-length"/></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">ipv6-payload-length</td>
              <td align="left">IPv6 Payload Length field derived from reconstructed packet size</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv6-payload-length"/></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">ipv4-udp-length</td>
              <td align="left">UDP Length derived from UDP header to end of IPv4 packet</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv4-udp-length"/></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">ipv6-udp-length</td>
              <td align="left">UDP Length derived from UDP header to end of IPv6 packet</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv6-udp-length"/></td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">ipv4-header-checksum</td>
              <td align="left">IPv4 header checksum computed over IPv4 header</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv4-header-checksum"/></td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">ipv4-tcp-checksum</td>
              <td align="left">TCP checksum computed over IPv4 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv4-tcp-checksum"/></td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">ipv6-tcp-checksum</td>
              <td align="left">TCP checksum computed over IPv6 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv6-tcp-checksum"/></td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">ipv4-udp-checksum</td>
              <td align="left">UDP checksum computed over IPv4 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv4-udp-checksum"/></td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">ipv6-udp-checksum</td>
              <td align="left">UDP checksum computed over IPv6 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">
                <xref target="derived-ipv6-udp-checksum"/></td>
            </tr>
            <tr>
              <td align="left">9</td>
              <td align="left">ethernet-fcs</td>
              <td align="left">Ethernet Frame Check Sequence computed over the reconstructed Ethernet frame</td>
              <td align="left">connect-ethernet</td>
              <td align="left">
                <xref target="derived-ethernet-fcs"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="HTTP-DATAGRAMS">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="CONNECT-ETHERNET">
          <front>
            <title>Proxying Ethernet Frames in HTTP</title>
            <author fullname="Alejandro Sedeño" initials="A." surname="Sedeño">
              <organization>Google LLC</organization>
            </author>
            <date day="16" month="October" year="2026"/>
            <abstract>
              <t>   This document specifies how to proxy Ethernet frames in HTTP.  This
   protocol is similar to IP proxying in HTTP, but for Layer 2 instead
   of Layer 3.  More specifically, this document defines a protocol that
   allows an HTTP client to create a tunnel to exchange Layer 2 Ethernet
   frames through an HTTP server with an attached physical or virtual
   Ethernet segment.  The protocol does not guarantee in-order frame
   delivery.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ethernet-18"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="INTERNET-CHECKSUM">
          <front>
            <title>Computing the Internet checksum</title>
            <author fullname="R.T. Braden" initials="R.T." surname="Braden"/>
            <author fullname="D.A. Borman" initials="D.A." surname="Borman"/>
            <author fullname="C. Partridge" initials="C." surname="Partridge"/>
            <date month="September" year="1988"/>
            <abstract>
              <t>This RFC summarizes techniques and algorithms for efficiently computing the Internet checksum. It is not a standard, but a set of useful implementation techniques.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1071"/>
          <seriesInfo name="DOI" value="10.17487/RFC1071"/>
        </reference>
        <reference anchor="STRUCTURED-HTTP">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IEEE802.3">
          <front>
            <title>IEEE Standard for Ethernet</title>
            <author>
              <organization/>
            </author>
            <date month="July" year="2022"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2022.9844436"/>
          <seriesInfo name="ISBN" value="[&quot;9781504487252&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="IEEE802.1Q">
          <front>
            <title>IEEE Standard for Local and Metropolitan Area Networks--Bridges and Bridged Networks</title>
            <author>
              <organization/>
            </author>
            <date month="December" year="2022"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2022.10004498"/>
          <seriesInfo name="ISBN" value="[&quot;9781504491884&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="LINUX-CHECKSUM-OFFLOAD" target="https://docs.kernel.org/networking/checksum-offloads.html">
          <front>
            <title>Checksum Offloads</title>
            <author>
              <organization>The Linux Kernel Development Community</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="LINUX-TUN-TAP" target="https://raw.githubusercontent.com/torvalds/linux/v7.2/include/uapi/linux/if_tun.h">
          <front>
            <title>Linux v7.2 TUN/TAP userspace API definitions</title>
            <author>
              <organization>The Linux Kernel Development Community</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DPLPMTUD">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="T. Jones" initials="T." surname="Jones"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <author fullname="I. Rüngeler" initials="I." surname="Rüngeler"/>
            <author fullname="T. Völker" initials="T." surname="Völker"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document specifies Datagram Packetization Layer Path MTU Discovery (DPLPMTUD). This is a robust method for Path MTU Discovery (PMTUD) for datagram Packetization Layers (PLs). It allows a PL, or a datagram application that uses a PL, to discover whether a network path can support the current size of datagram. This can be used to detect and reduce the message size when a sender encounters a packet black hole. It can also probe a network path to discover whether the maximum packet size can be increased. This provides functionality for datagram transports that is equivalent to the PLPMTUD specification for TCP, specified in RFC 4821, which it updates. It also updates the UDP Usage Guidelines to refer to this method for use with UDP datagrams and updates SCTP.</t>
              <t>The document provides implementation notes for incorporating Datagram PMTUD into IETF datagram transports or applications that use datagram transports.</t>
              <t>This specification updates RFC 4960, RFC 4821, RFC 6951, RFC 8085, and RFC 8261.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8899"/>
          <seriesInfo name="DOI" value="10.17487/RFC8899"/>
        </reference>
        <reference anchor="IPv4">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC791"/>
        </reference>
        <reference anchor="IPv6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="IPv6-JUMBO">
          <front>
            <title>IPv6 Jumbograms</title>
            <author fullname="D. Borman" initials="D." surname="Borman"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="August" year="1999"/>
            <abstract>
              <t>This document describes the IPv6 Jumbo Payload option, which provides the means of specifying such large payload lengths. It also describes the changes needed to TCP and UDP to make use of jumbograms. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2675"/>
          <seriesInfo name="DOI" value="10.17487/RFC2675"/>
        </reference>
        <reference anchor="UDP">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC768"/>
        </reference>
        <reference anchor="UDP-OPTIONS">
          <front>
            <title>Transport Options for UDP</title>
            <author fullname="J. Touch" initials="J." surname="Touch"/>
            <author fullname="C. Heard" initials="C." role="editor" surname="Heard"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>Transport protocols are extended through the use of transport header options. This document updates RFC 768 (UDP) by indicating the location, syntax, and semantics for UDP transport layer options within the surplus area after the end of the UDP user data but before the end of the IP datagram.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9868"/>
          <seriesInfo name="DOI" value="10.17487/RFC9868"/>
        </reference>
        <reference anchor="TCP">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="TCP-PERF">
          <front>
            <title>TCP Extensions for High Performance</title>
            <author fullname="D. Borman" initials="D." surname="Borman"/>
            <author fullname="B. Braden" initials="B." surname="Braden"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <author fullname="R. Scheffenegger" initials="R." role="editor" surname="Scheffenegger"/>
            <date month="September" year="2014"/>
            <abstract>
              <t>This document specifies a set of TCP extensions to improve performance over paths with a large bandwidth * delay product and to provide reliable operation over very high-speed paths. It defines the TCP Window Scale (WS) option and the TCP Timestamps (TS) option and their semantics. The Window Scale option is used to support larger receive windows, while the Timestamps option can be used for at least two distinct mechanisms, Protection Against Wrapped Sequences (PAWS) and Round-Trip Time Measurement (RTTM), that are also described herein.</t>
              <t>This document obsoletes RFC 1323 and describes changes from it.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7323"/>
          <seriesInfo name="DOI" value="10.17487/RFC7323"/>
        </reference>
        <reference anchor="IANA-POLICY">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
    </references>
    <?line 1139?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
HhdT/Hts2JnBsDv6zMii6rjMiunUKx/6S3rMtnejEsh2uwQy/H4es+3RZpfT
t25qxFXFu/ttrqpWoeV+Lis4nnd0WbmXhP8BPVb3cwFtd632tMEHlK5Wcq+3
6fTRJA2EhKGnJ3KXUz09NZY4SGsvOYYtpKSJvmQSdF34NJusS7x6eiBJarmt
3h72UrljUdtzuT/sVQRWbcVN7oHxrSYa9ipLP2bLRuEBqoNEoxclRw8TpU3p
Lizmfeb7npSngL1PzZqjNJEFLJginvE2sSB1xamB53oHt8zmDGVE1hKEjgpz
fCwEfoDqWIeMLt86I2vV5IrJ9BFX1qS6pSeRorM59gzY6uQ+wT3MYpUSMfk9
ldRN6xqlZ4QAFv+BP+Hw0sVUKeSZLOBAlQSkg5P35D/UzHkYwcJ1njmSis6a
DTLnSiaepthNVutyBcsEWb4SBDTlpk0lYXwKG9e7BmnEFuK1l8ap0JzUnjNT
4Dqrokg0CwUjMMO713THP1sC/ZlkHJ1CZcFtrpqUs+5sXJJAl8ulKrCMXGNn
ZZdJR1ZnqKvivd6HgQzKNwt64pXtlkLAXu1OytG8oWhho7SYIMy0WX8ogiNY
RKUgfGVXZkqTvvZJcsUShdYkSoFwLOFs9YpZDyuk5yibULd9rMIhlVN0RypK
CsJFytvq5JjjLSl9KctQdl7U7Et/ffaeJnD68u37V4eSI5/KWtFG4ySp8DYs
JmU/PhEfJibpeAmTprrrF/k5pSNMjvff7DfoFJanQRKgrIxrUryjWnmlbGKE
lmkxvSowj0mlKiGVD5pdP5BPy2sQUVRpdVvYnBsdK5agLuTzXvOSFBD78uD3
9s3QfXPw6u3pkX2H2oVvgrDvtt13bocj50XQHwZ3BrHq9uWO99Lt8an7hruU
mnxizsJQCjikJVooNX1XA9yifxjr1x5H8a3xlz2m/hVXi3uIKVvTJdlGZoz/
02KyJukqr5jxwSl6hLKpFEWnPs7clp3OAbEyIk7ACuZU43svOT46ewHvMB/B
pKYnr/dP//D+KPkT0Gqc7u/KYr0CblP9ZZ39Ns/qWb8ozzudN8AvYKp7oNMt
M4uSbOh4g4aOb8NHHx1ttx4u9pwXe0nc4gmNBK4bgGphiK2lDJZWQTnMidil
5TW8tSAO4NujYoUUFxnAREWGiC3OnNrr5PMPseKWwD6QAuTGcMv5Ojh7iUTt
KEBY4p0KyDaN+kArcdgdAs1rnk+uE/IFrLD+d5ld5tB7s8aTpqQY9Z9QUgqc
Ye/k7avjgz9T/Zfh1o5JN+TN7xxdE0tJee/NivPlcU5ckBFTyscdt9ISff0g
YPoAdLUitb3Vxj81u0exrHbFzSwoKgkgYH1U5bCtoKyPY1ymyfSTUywV6H3Z
HEQLqzmRRqD+cX09PxmQeaqmiuZOuslvG9WGhG+Zep2NekNdJ7jKjTpVmyin
BPKXa5IBaaqfrilwOcEag7xoElaB1eWi1kSs0HllUj1xyUCNV/JQxiRKmaHc
MCnm68USKSSdTKRW+wmnqbnMTIlRLcths74rigHZQkrB33HhQLLJugtG+Qd3
iALppOnUPgnaqumjkpaKjnQE368AF6dYVgE0Acen5nsnKEXZRIp3XodEHAQh
jumj8n2Kn1ytTta3rswKkOtcmwKCDMMfK2PjUqaUco0/KW8i4ET7HBuoHQA4
Fku0V5m5hVm23H87yN0bZSfQPNuoXzGT+uoCD9SL22WvL4gNSzhIvXzVNb8b
lf1LWP7Iq4Zx0xnyrMLqCTyvltT6v8jMGqUdbjpbCjGbLlssqSbXojMRP1+l
5Kp0Haf3hZSTu/ums61w+qa57HzdXHb8uYwULkFWbUWm0FPp5x/zc1ffDySN
2lmdJwarnZuPyRc/iDQygeb1U7U43huh3Xy4N50d3ah7TSh2H/brJrQTTuip
i8XOhDwf/y8KIS8r5E1n10XlO0/oe0IomBA6V9z0j+pSu0dCPZ8KNZIgbpyS
l40SZEsk2WM4pqhp+jlNqs7nPbZIZNPnD2bpvGJr6NvDt0lqL7T1O/8P7+mG
VWcLAQA=

-->

</rfc>
