<?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.6.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-h3-events-07" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>HTTP/3 qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-07"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="04"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes concrete qlog event definitions and their metadata for
HTTP/3-related events. These events can then be embedded in the higher
level schema defined in <xref target="QLOG-MAIN"/>.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
      <t>Concrete examples of integrations of this schema in
various programming languages can be found at
<eref target="https://github.com/quiclog/qlog/">https://github.com/quiclog/qlog/</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes the values of the qlog name ("category" + "event") and
"data" fields and their semantics for the HTTP/3 protocol <xref target="RFC9114"/> and some
of extensions (see <xref target="EXTENDED-CONNECT"/>, <xref target="H3_PRIORITIZATION"/>
and <xref target="H3-DATAGRAM"/>).</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</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>
        <t>The event and data structure definitions in ths document are expressed
in the Concise Data Definition Language <xref target="CDDL"/> and its
extensions described in <xref target="QLOG-MAIN"/>.</t>
        <t>The following fields from <xref target="QLOG-MAIN"/> are imported and used: name, category,
type, data, group_id, protocol_type, importance, RawInfo, and time-related
fields.</t>
        <t>As is the case for <xref target="QLOG-MAIN"/>, the qlog schema definitions in this document
are intentionally agnostic to serialization formats. The choice of format is an
implementation decision.</t>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This document describes how HTTP/3 can be expressed in qlog using the schema
defined in <xref target="QLOG-MAIN"/>. HTTP/3 events are defined with a category, a name (the
concatenation of "category" and "event"), an "importance", an optional
"trigger", and "data" fields.</t>
      <t>Some data fields use complex datastructures. These are represented as enums or
re-usable definitions, which are grouped together on the bottom of this document
for clarity.</t>
      <t>When any event from this document is included in a qlog trace, the
"protocol_type" qlog array field <bcp14>MUST</bcp14> contain an entry with the value "HTTP3".</t>
      <section anchor="usage-with-quic">
        <name>Usage with QUIC</name>
        <t>The events described in this document can be used with or without logging the
related QUIC events defined in <xref target="QLOG-QUIC"/>. If used with QUIC events, the QUIC
document takes precedence in terms of recommended filenames and trace separation
setups.</t>
        <t>If used without QUIC events, it is recommended that the implementation assign a
globally unique identifier to each HTTP/3 connection. This ID can then be used as
the value of the qlog "group_id" field, as well as the qlog filename or file
identifier, potentially suffixed by the vantagepoint type (For example,
abcd1234_server.qlog would contain the server-side trace of the connection with
GUID abcd1234).</t>
      </section>
    </section>
    <section anchor="http3-event-overview">
      <name>HTTP/3 Event Overview</name>
      <t>This document defines events in two categories, written as lowercase to follow
convention: h3 (<xref target="h3-ev"/>).</t>
      <t>As described in <xref section="3.4.2" sectionFormat="of" target="QLOG-MAIN"/>, the qlog "name" field is the
concatenation of category and type.</t>
      <t><xref target="h3-events"/> summarizes the name value of each event type that is defined
in this specification.</t>
      <table anchor="h3-events">
        <name>HTTP/3 Events</name>
        <thead>
          <tr>
            <th align="left">Name value</th>
            <th align="left">Importance</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">h3:parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">h3:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">h3:stream_type_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-streamtypeset"/></td>
          </tr>
          <tr>
            <td align="left">h3:priority_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-priorityupdated"/></td>
          </tr>
          <tr>
            <td align="left">h3:frame_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-framecreated"/></td>
          </tr>
          <tr>
            <td align="left">h3:frame_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-frameparsed"/></td>
          </tr>
          <tr>
            <td align="left">h3:datagram_created</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">h3:datagram_parsed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">h3:push_resolved</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="h3-pushresolved"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="h3-ev">
      <name>HTTP/3 Events</name>
      <t>HTTP/3 events extend the <tt>$ProtocolEventData</tt> extension point defined in <xref target="QLOG-MAIN"/>.</t>
      <figure anchor="h3-events-def">
        <name>H3EventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
H3EventData = H3ParametersSet /
              H3ParametersRestored /
              H3StreamTypeSet /
              H3PriorityUpdated /
              H3FrameCreated /
              H3FrameParsed /
              H3DatagramCreated /
              H3DatagramParsed /
              H3PushResolved

$ProtocolEventData /= H3EventData
]]></sourcecode>
      </figure>
      <t>HTTP events are logged when a certain condition happens at the application
layer, and there isn't always a one to one mapping between HTTP and QUIC events.
The exchange of data between the HTTP and QUIC layer is logged via the
"stream_data_moved" and "datagram_data_moved" events in <xref target="QLOG-QUIC"/>.</t>
      <section anchor="h3-parametersset">
        <name>parameters_set</name>
        <t>The <tt>parameters_set</tt> event contains HTTP/3 and QPACK-level settings, mostly
those received from the HTTP/3 SETTINGS frame. It has Base importance level; see
<xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>All these parameters are typically set once and never change. However, they
might be set at different times during the connection, therefore a qlog can have
multiple instances of <tt>parameters_set</tt> with different fields set.</t>
        <t>The "owner" field reflects how Settings are exchanged on a connection. Sent
settings have the value "local" and received settings have the value
"received".</t>
        <t>As a reminder the CDDL unwrap operator (~), see <xref target="RFC8610"/>), copies the fields
from the referenced type (H3Parameters) into the target type directly, extending the
target with the unwrapped fields.</t>
        <figure anchor="h3-parametersset-def">
          <name>H3ParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
H3ParametersSet = {
    ? owner: Owner
    ~H3Parameters

    ; qlog-specific
    ; indicates whether this implementation waits for a SETTINGS
    ; frame before processing requests
    ? waits_for_settings: bool
}

H3Parameters = {
    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint16

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint16

    ; additional settings for grease and extensions
    * text => uint64
}
]]></sourcecode>
        </figure>
        <t>The <tt>parameters_set</tt> event can contain any number of unspecified fields. This
allows for representation of reserved settings (aka GREASE) or ad-hoc support
for extension settings that do not have a related qlog schema definition.</t>
      </section>
      <section anchor="h3-parametersrestored">
        <name>parameters_restored</name>
        <t>When using QUIC 0-RTT, HTTP/3 clients are expected to remember and reuse the
server's SETTINGs from the previous connection. The <tt>parameters_restored</tt> event
is used to indicate which HTTP/3 settings were restored and to which values when
utilizing 0-RTT. It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <figure anchor="h3-parametersrestored-def">
          <name>H3ParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
H3ParametersRestored = {
    ~H3Parameters
}
]]></sourcecode>
        </figure>
        <t>The <tt>parameters_restored</tt> event can contain any number of unspecified fields. This
allows for representation of reserved settings (aka GREASE) or ad-hoc support
for extension settings that do not have a related qlog schema definition.</t>
      </section>
      <section anchor="h3-streamtypeset">
        <name>stream_type_set</name>
        <t>The <tt>stream_type_set</tt> event conveys when a HTTP/3 stream type becomes known; see
Sections <xref target="RFC9114" section="6.1" sectionFormat="bare"/> and <xref target="RFC9114" section="6.2" sectionFormat="bare"/> of <xref target="RFC9114"/>. It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>Client bidirectional streams always have a stream_type value of "request".
Server bidirectional streams have no defined use, although extensions could
change that.</t>
        <t>Unidirectional streams in either direction begin with with a variable-length
integer type. Where the type is not known, the stream_type value of "unknown"
type can be used and the value captured in the stream_type_value field; a
numerical value without variable-length integer encoding.</t>
        <figure anchor="h3-streamtypeset-def">
          <name>H3StreamTypeSet definition</name>
          <sourcecode type="cddl"><![CDATA[
H3StreamTypeSet = {
    ? owner: Owner
    stream_id: uint64
    stream_type: H3StreamType

    ; only when stream_type === "unknown"
    ? stream_type_value: uint64

    ; only when stream_type === "push"
    ? associated_push_id: uint64
}

H3StreamType =  "request" /
                  "control" /
                  "push" /
                  "reserved" /
                  "unknown" /
                  "qpack_encode" /
                  "qpack_decode"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-priorityupdated">
        <name>priority_updated</name>
        <t>Emitted when the priority of a request stream or push stream is initialized or
updated through mechanisms defined in <xref target="RFC9218"/>. For example, the priority
can be updated through signals received from client and/or server (e.g., in
HTTP/3 HEADERS or PRIORITY_UPDATE frames) or it can be changed or overridden due
to local policies. The event has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <figure anchor="h3-priorityupdated-def">
          <name>H3PriorityUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
H3PriorityUpdated = {
    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    ? old: H3Priority
    new: H3Priority
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-framecreated">
        <name>frame_created</name>
        <t>The <tt>frame_created</tt> event is emitted when the HTTP/3 framing actually happens.
It has Core importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event does not necessarily coincide with HTTP/3 data getting passed to the
QUIC layer. For that, see the <tt>stream_data_moved</tt> event in <xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-framecreated-def">
          <name>H3FrameCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
H3FrameCreated = {
    stream_id: uint64
    ? length: uint64
    frame: $H3Frame
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-frameparsed">
        <name>frame_parsed</name>
        <t>The <tt>frame_parsed</tt> event is emitted when the HTTP/3 frame is parsed. It has Core
importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event is not necessarily the same as when the HTTP/3 data is actually
received on the QUIC layer. For that, see the <tt>stream_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-frameparsed-def">
          <name>H3FrameParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
H3FrameParsed = {
    stream_id: uint64
    ? length: uint64
    frame: $H3Frame
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
        <t>HTTP/3 DATA frames can have arbitrarily large lengths to reduce frame header
overhead. As such, DATA frames can span multiple QUIC packets. In this case, the
frame_parsed event is emitted once for the frame header, and further streamed
data is indicated using the stream_data_moved event.</t>
      </section>
      <section anchor="h3-datagramcreated">
        <name>datagram_created</name>
        <t>The <tt>datagram_created</tt> event is emitted when an HTTP/3 Datagram is created (see
<xref target="RFC9297"/>). It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event does not necessarily coincide with the HTTP/3 Datagram getting passed
to the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramcreated-def">
          <name>H3DatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
H3DatagramCreated = {
    quarter_stream_id: uint64
    ? datagram: $H3Datagram
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramparsed">
        <name>datagram_parsed</name>
        <t>The <tt>datagram_parsed</tt> event is emitted when the HTTP/3 Datagram is parsed (see
<xref target="RFC9297"/>). It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event is not necessarily the same as when the HTTP/3 Datagram is actually
received on the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramparsed-def">
          <name>H3DatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
H3DatagramParsed = {
    quarter_stream_id: uint64
    ? datagram: $H3Datagram
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-pushresolved">
        <name>push_resolved</name>
        <t>The <tt>push_resolved</tt> event is emitted when a pushed resource (<xref section="4.6" sectionFormat="of" target="RFC9114"/>) is successfully claimed (used) or, conversely, abandoned (rejected)
by the application on top of HTTP/3 (e.g., the web browser). This event provides
additional context that can is aid debugging issues related to server push. It
has Extra importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <figure anchor="h3-pushresolved-def">
          <name>H3PushResolved definition</name>
          <sourcecode type="cddl"><![CDATA[
H3PushResolved = {
    ? push_id: uint64

    ; in case this is logged from a place that does not have access
    ; to the push_id
    ? stream_id: uint64
    decision: H3PushDecision
}

H3PushDecision = "claimed" /
                   "abandoned"
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="http3-data-field-definitions">
      <name>HTTP/3 Data Field Definitions</name>
      <t>The following data field definitions can be used in HTTP/3 events.</t>
      <section anchor="owner">
        <name>Owner</name>
        <figure anchor="owner-def">
          <name>Owner definition</name>
          <sourcecode type="cddl"><![CDATA[
Owner = "local" /
        "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3frame">
        <name>H3Frame</name>
        <t>The generic <tt>$H3Frame</tt> is defined here as a CDDL extension point (a "socket"
or "plug"). It can be extended to support additional HTTP/3 frame types.</t>
        <figure anchor="h3-frame-def">
          <name>H3Frame plug definition</name>
          <sourcecode type="cddl"><![CDATA[
; The H3Frame is any key-value map (e.g., JSON object)
$H3Frame /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <t>The HTTP/3 frame types defined in this document are as follows:</t>
        <figure anchor="h3baseframe-def">
          <name>H3BaseFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
H3BaseFrames = H3DataFrame /
               H3HeadersFrame /
               H3CancelPushFrame /
               H3SettingsFrame /
               H3PushPromiseFrame /
               H3GoawayFrame /
               H3MaxPushIDFrame /
               H3ReservedFrame /
               H3UnknownFrame

$H3Frame /= H3BaseFrames
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3datagram">
        <name>H3Datagram</name>
        <t>The generic <tt>$H3Datagram</tt> is defined here as a CDDL extension point (a "socket"
or "plug"). It can be extended to support additional HTTP/3 datagram types. This
document intentionally does not define any specific HTTP/3 Datagram types.</t>
        <figure anchor="h3-datagram-def">
          <name>H3Datagram plug definition</name>
          <sourcecode type="cddl"><![CDATA[
; The H3Datagram is any key-value map (e.g., JSON object)
$H3Datagram /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <section anchor="h3dataframe">
          <name>H3DataFrame</name>
          <figure anchor="h3dataframe-def">
            <name>H3DataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3DataFrame = {
    frame_type: "data"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3headersframe">
          <name>H3HeadersFrame</name>
          <t>This represents an <em>uncompressed</em>, plaintext HTTP Headers frame (e.g., no QPACK
compression is applied).</t>
          <t>For example:</t>
          <figure anchor="h3-headersframe-ex">
            <name>H3HeadersFrame example</name>
            <artwork><![CDATA[
headers: [
  {
    "name": ":path",
    "value": "/"
  },
  {
    "name": ":method",
    "value": "GET"
  },
  {
    "name": ":authority",
    "value": "127.0.0.1:4433"
  },
  {
    "name": ":scheme",
    "value": "https"
  }
]
]]></artwork>
          </figure>
          <figure anchor="h3-headersframe-def">
            <name>H3HeadersFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3HeadersFrame = {
    frame_type: "headers"
    headers: [* H3HTTPField]
}
]]></sourcecode>
          </figure>
          <figure anchor="h3field-def">
            <name>H3HTTPField definition</name>
            <sourcecode type="cddl"><![CDATA[
H3HTTPField = {
    name: text
    ? value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3cancelpushframe">
          <name>H3CancelPushFrame</name>
          <figure anchor="h3-cancelpushframe-def">
            <name>H3CancelPushFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3CancelPushFrame = {
    frame_type: "cancel_push"
    push_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3settingsframe">
          <name>H3SettingsFrame</name>
          <figure anchor="h3settingsframe-def">
            <name>H3SettingsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3SettingsFrame = {
    frame_type: "settings"
    settings: [* H3Setting]
}

H3Setting = {
    name: text
    value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3pushpromiseframe">
          <name>H3PushPromiseFrame</name>
          <figure anchor="h3pushpromiseframe-def">
            <name>H3PushPromiseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3PushPromiseFrame = {
    frame_type: "push_promise"
    push_id: uint64
    headers: [* H3HTTPField]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3goawayframe">
          <name>H3GoAwayFrame</name>
          <figure anchor="h3goawayframe-def">
            <name>H3GoawayFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3GoawayFrame = {
    frame_type: "goaway"

    ; Either stream_id or push_id.
    ; This is implicit from the sender of the frame
    id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3maxpushidframe">
          <name>H3MaxPushIDFrame</name>
          <figure anchor="h3maxpushidframe-def">
            <name>H3MaxPushIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3MaxPushIDFrame = {
    frame_type: "max_push_id"
    push_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3priorityupdateframe">
          <name>H3PriorityUpdateFrame</name>
          <t>The PRIORITY_UPDATE frame is defined in <xref target="RFC9218"/>.</t>
          <figure anchor="h3priorityupdateframe-def">
            <name>h3priorityupdateframe definition</name>
            <sourcecode type="cddl"><![CDATA[
H3PriorityUpdateFrame = {
    frame_type: "priority_update"

    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    priority_field_value: H3Priority
}

; The priority value in ASCII text, encoded using Structured Fields
; Example: u=5, i
H3Priority = text
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3reservedframe">
          <name>H3ReservedFrame</name>
          <figure anchor="h3reservedframe-def">
            <name>H3ReservedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3ReservedFrame = {
    frame_type: "reserved"
    ? length: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3unknownframe">
          <name>H3UnknownFrame</name>
          <t>The frame_type_value field is the numerical value without variable-length
integer encoding.</t>
          <figure anchor="h3unknownframe-def">
            <name>UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3UnknownFrame = {
    frame_type: "unknown"
    frame_type_value: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3applicationerror">
          <name>H3ApplicationError</name>
          <figure anchor="h3-applicationerror-def">
            <name>H3ApplicationError definition</name>
            <sourcecode type="cddl"><![CDATA[
H3ApplicationError = "http_no_error" /
                       "http_general_protocol_error" /
                       "http_internal_error" /
                       "http_stream_creation_error" /
                       "http_closed_critical_stream" /
                       "http_frame_unexpected" /
                       "http_frame_error" /
                       "http_excessive_load" /
                       "http_id_error" /
                       "http_settings_error" /
                       "http_missing_settings" /
                       "http_request_rejected" /
                       "http_request_cancelled" /
                       "http_request_incomplete" /
                       "http_early_response" /
                       "http_connect_error" /
                       "http_version_fallback"
]]></sourcecode>
          </figure>
          <t>The H3ApplicationError defines the general $ApplicationError
definition in the qlog QUIC definition, see <xref target="QLOG-QUIC"/>.</t>
          <sourcecode type="cddl"><![CDATA[
; ensure HTTP errors are properly validate in QUIC events as well
; e.g., QUIC's ConnectionClose Frame
$ApplicationError /= H3ApplicationError
]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>The security and privacy considerations discussed in <xref target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>There are no IANA considerations.</t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="QLOG-MAIN">
          <front>
            <title>Main logging schema for qlog</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
              <organization>Protocol Labs</organization>
            </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document defines qlog, an extensible high-level schema for a
   standardized logging format.  It allows easy sharing of data,
   benefitting common debug and analysis methods and tooling.  The high-
   level schema is independent of protocol; separate documents extend
   qlog for protocol-specific data.  The schema is also independent of
   serialization format, allowing logs to be represented in many ways
   such as JSON, CSV, or protobuf.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-07"/>
        </reference>
        <reference anchor="QLOG-QUIC">
          <front>
            <title>QUIC event definitions for qlog</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
              <organization>Protocol Labs</organization>
            </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document describes concrete qlog event definitions and their
   metadata for QUIC events.  These events can then be embedded in the
   higher level schema defined in [QLOG-MAIN].

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-06"/>
        </reference>
        <reference anchor="EXTENDED-CONNECT">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="H3_PRIORITIZATION">
          <front>
            <title>Extensible Prioritization Scheme for HTTP</title>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document describes a scheme that allows an HTTP client to communicate its preferences for how the upstream server prioritizes responses to its requests, and also allows a server to hint to a downstream intermediary how its responses should be prioritized when they are forwarded. This document defines the Priority header field for communicating the initial priority in an HTTP version-independent manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing responses. These share a common format structure that is designed to provide future extensibility.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9218"/>
          <seriesInfo name="DOI" value="10.17487/RFC9218"/>
        </reference>
        <reference anchor="H3-DATAGRAM">
          <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="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="CDDL">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC9218">
          <front>
            <title>Extensible Prioritization Scheme for HTTP</title>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document describes a scheme that allows an HTTP client to communicate its preferences for how the upstream server prioritizes responses to its requests, and also allows a server to hint to a downstream intermediary how its responses should be prioritized when they are forwarded. This document defines the Priority header field for communicating the initial priority in an HTTP version-independent manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing responses. These share a common format structure that is designed to provide future extensibility.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9218"/>
          <seriesInfo name="DOI" value="10.17487/RFC9218"/>
        </reference>
        <reference anchor="RFC9297">
          <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, and Christian Huitema for their feedback and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-06">
        <name>Since draft-ietf-quic-qlog-h3-events-06:</name>
        <ul spacing="normal">
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#402)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-05">
        <name>Since draft-ietf-quic-qlog-h3-events-05:</name>
        <ul spacing="normal">
          <li>Removed all qpack event definitions (#335)</li>
          <li>Various editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-04">
        <name>Since draft-ietf-quic-qlog-h3-events-04:</name>
        <ul spacing="normal">
          <li>Renamed 'http' category to 'h3' (#300)</li>
          <li>H3HTTPField.value is now optional (#296)</li>
          <li>Added definitions for RFC9297 (HTTP/3 Datagram extension) (#310)</li>
          <li>Added definitions for RFC9218 (HTTP Extensible Prioritizations extension) (#312)</li>
          <li>Added definitions for RFC9220 (Extended Connect extension) (#325)</li>
          <li>Editorial and formatting changes (#298, #258, #299, #304, #327)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-03">
        <name>Since draft-ietf-quic-qlog-h3-events-03:</name>
        <ul spacing="normal">
          <li>Ensured consistent use of RawInfo to indicate raw wire bytes (#243)</li>
          <li>Changed HTTPStreamTypeSet:raw_stream_type to stream_type_value (#54)</li>
          <li>Changed HTTPUnknownFrame:raw_frame_type to frame_type_value (#54)</li>
          <li>Renamed max_header_list_size to max_field_section_size (#282)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-02">
        <name>Since draft-ietf-quic-qlog-h3-events-02:</name>
        <ul spacing="normal">
          <li>Renamed HTTPStreamType data to request (#222)</li>
          <li>Added HTTPStreamType value unknown (#227)</li>
          <li>Added HTTPUnknownFrame (#224)</li>
          <li>Replaced old and new fields with stream_type in HTTPStreamTypeSet (#240)</li>
          <li>Changed HTTPFrame to a CDDL plug type (#257)</li>
          <li>Moved data definitions out of the appendix into separate sections</li>
          <li>Added overview Table of Contents</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-01">
        <name>Since draft-ietf-quic-qlog-h3-events-01:</name>
        <ul spacing="normal">
          <li>No changes - new draft to prevent expiration</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-00">
        <name>Since draft-ietf-quic-qlog-h3-events-00:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-02">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Split QUIC and HTTP/3 events into two separate documents</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to the main
schema document.</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-01">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-01:</name>
        <t>Major changes:</t>
        <ul spacing="normal">
          <li>Moved data_moved from http to transport. Also made the "from" and "to" fields
flexible strings instead of an enum (#111,#65)</li>
          <li>Moved packet_type fields to PacketHeader. Moved packet_size field out of
PacketHeader to RawInfo:length (#40)</li>
          <li>Made events that need to log packet_type and packet_number use a header field
instead of logging these fields individually</li>
          <li>Added support for logging retry, stateless reset and initial tokens (#94,#86,#117)</li>
          <li>Moved separate general event categories into a single category "generic" (#47)</li>
          <li>Added "transport:connection_closed" event (#43,#85,#78,#49)</li>
          <li>Added version_information and alpn_information events (#85,#75,#28)</li>
          <li>Added parameters_restored events to help clarify 0-RTT behaviour (#88)</li>
        </ul>
        <t>Smaller changes:</t>
        <ul spacing="normal">
          <li>Merged loss_timer events into one loss_timer_updated event</li>
          <li>Field data types are now strongly defined (#10,#39,#36,#115)</li>
          <li>Renamed qpack instruction_received and instruction_sent to instruction_created
and instruction_parsed (#114)</li>
          <li>Updated qpack:dynamic_table_updated.update_type. It now has the value "inserted"
instead of "added" (#113)</li>
          <li>Updated qpack:dynamic_table_updated. It now has an "owner" field to
differentiate encoder vs decoder state (#112)</li>
          <li>Removed push_allowed from http:parameters_set (#110)</li>
          <li>Removed explicit trigger field indications from events, since this was moved to
be a generic property of the "data" field (#80)</li>
          <li>Updated transport:connection_id_updated to be more in line with other similar
events. Also dropped importance from Core to Base (#45)</li>
          <li>Added length property to PaddingFrame (#34)</li>
          <li>Added packet_number field to transport:frames_processed (#74)</li>
          <li>Added a way to generically log packet header flags (first 8 bits) to
PacketHeader</li>
          <li>Added additional guidance on which events to log in which situations (#53)</li>
          <li>Added "simulation:scenario" event to help indicate simulation details</li>
          <li>Added "packets_acked" event (#107)</li>
          <li>Added "datagram_ids" to the datagram_X and packet_X events to allow tracking of
coalesced QUIC packets (#91)</li>
          <li>Extended connection_state_updated with more fine-grained states (#49)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-00">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-00:</name>
        <ul spacing="normal">
          <li>Event and category names are now all lowercase</li>
          <li>Added many new events and their definitions</li>
          <li>"type" fields have been made more specific (especially important for PacketType
fields, which are now called packet_type instead of type)</li>
          <li>Events are given an importance indicator (issue #22)</li>
          <li>Event names are more consistent and use past tense (issue #21)</li>
          <li>Triggers have been redefined as properties of the "data" field and updated for most events (issue #23)</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
