<?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-06" 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-06"/>
    <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>Protocol Labs</organization>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="January" day="05"/>
    <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>
      </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-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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
jF4AAA==

-->

</rfc>
