<?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-quic-events-12" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>QUIC event definitions for qlog</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-12"/>
    <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="2025" month="October" day="20"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes a qlog event schema containing concrete qlog event
definitions and their metadata for the core QUIC protocol and selected
extensions.</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>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a qlog event schema (<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>)
containing concrete events for the core QUIC protocol (see
<xref target="QUIC-TRANSPORT"/>, <xref target="QUIC-RECOVERY"/>, and
<xref target="QUIC-TLS"/>) and some of its extensions (see
<xref target="QUIC-DATAGRAM"/> and <xref target="GREASEBIT"/>).</t>
      <t>The event namespace with identifier <tt>quic</tt> is defined; see <xref target="schema-def"/>. In
this namespace multiple events derive from the qlog abstract Event class
(<xref section="7" sectionFormat="of" target="QLOG-MAIN"/>), each extending the "data" field and defining their
"name" field values and semantics. Some event data fields use complex data
types. These are represented as enums or re-usable definitions, which are
grouped together on the bottom of this document for clarity.</t>
      <section anchor="use-of-group-ids">
        <name>Use of group IDs</name>
        <t>When the qlog <tt>group_id</tt> field is used, it is recommended to use QUIC's Original
Destination Connection ID (ODCID, the CID chosen by the client when first
contacting the server), as this is the only value that does not change over the
course of the connection and can be used to link more advanced QUIC packets (e.g.,
Retry, Version Negotiation) to a given connection. Similarly, the ODCID should be
used 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 ODCID abcd1234).</t>
      </section>
      <section anchor="raw-packet-and-frame-information">
        <name>Raw packet and frame information</name>
        <t>QUIC packets always include an AEAD authentication tag at the end. In general,
the length of the AEAD tag depends on the TLS cipher suite, although all cipher
suites used in QUIC v1 use a 16 byte tag. For the purposes of calculating the
lengths in fields of type RawInfo (as defined in <xref target="QLOG-MAIN"/>) related to QUIC
packets, the AEAD tag is regarded as a trailer with a fixed size of 16 bytes.</t>
      </section>
      <section anchor="handling-unknown-connections">
        <name>Events not belonging to a single connection</name>
        <t>A single qlog event trace is typically associated with a single QUIC connection.
However, for several types of events (for example, a <xref target="quic-packetdropped"/>
event with trigger value of <tt>connection_unknown</tt>), it can be impossible to tie
them to a specific QUIC connection, especially on the server.</t>
        <t>There are various ways to handle these events, each making certain tradeoffs
between file size overhead, flexibility, ease of use, or ease of
implementation. Some options include:</t>
        <ul spacing="normal">
          <li>Log them in a separate endpoint-wide trace (or use a special <tt>group_id</tt> value)
not associated with a single connection.</li>
          <li>Log them in the most recently used trace.</li>
          <li>Use additional heuristics for connection identification (for example use the
four-tuple in addition to the Connection ID).</li>
          <li>Buffer events until they can be assigned to a connection (for example for
version negotiation and retry events).</li>
        </ul>
      </section>
      <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, namespace,
type, data, tuple, group_id, RawInfo, and time-related fields.</t>
        <t>Events are defined with an importance level as described in <xref section="8.3" sectionFormat="of" target="QLOG-MAIN"/>.</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="schema-def">
      <name>Event Schema Definition</name>
      <t>This document describes how the core QUIC protocol and selected extensions can
be expressed in qlog using a newly defined event schema. Per the requirements in
<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document registers the <tt>quic</tt> namespace. The
event schema URI is <tt>urn:ietf:params:qlog:events:quic</tt>.</t>
      <section removeInRFC="true" anchor="draft-event-schema-identification">
        <name>Draft Event Schema Identification</name>
        <t>Only implementations of the final, published RFC can use the events belonging to
the event schema with the URI <tt>urn:ietf:params:qlog:events:quic</tt>. Until such an
RFC exists, implementations <bcp14>MUST NOT</bcp14> identify themselves using this URI.</t>
        <t>Implementations of draft versions of the event schema <bcp14>MUST</bcp14> append the string
"-" and the corresponding draft number to the URI. For example, draft 07 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:quic-07</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="quic-event-overview">
      <name>QUIC Event Overview</name>
      <t><xref target="quic-events"/> summarizes the name value of each event type that is defined in
this specification.</t>
      <table anchor="quic-events">
        <name>QUIC 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">quic:server_listening</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-serverlistening"/></td>
          </tr>
          <tr>
            <td align="left">quic:connection_started</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-connectionstarted"/></td>
          </tr>
          <tr>
            <td align="left">quic:connection_closed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-connectionclosed"/></td>
          </tr>
          <tr>
            <td align="left">quic:connection_id_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-connectionidupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:spin_bit_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-spinbitupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:connection_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-connectionstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:tuple_assigned</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-tupleassigned"/></td>
          </tr>
          <tr>
            <td align="left">quic:mtu_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-mtuupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:version_information</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-versioninformation"/></td>
          </tr>
          <tr>
            <td align="left">quic:alpn_information</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-alpninformation"/></td>
          </tr>
          <tr>
            <td align="left">quic:parameters_set</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">quic:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_sent</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-packetsent"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_received</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-packetreceived"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_dropped</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-packetdropped"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_buffered</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-packetbuffered"/></td>
          </tr>
          <tr>
            <td align="left">quic:packets_acked</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-packetsacked"/></td>
          </tr>
          <tr>
            <td align="left">quic:udp_datagrams_sent</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-udpdatagramssent"/></td>
          </tr>
          <tr>
            <td align="left">quic:udp_datagrams_received</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-udpdatagramsreceived"/></td>
          </tr>
          <tr>
            <td align="left">quic:udp_datagram_dropped</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-udpdatagramdropped"/></td>
          </tr>
          <tr>
            <td align="left">quic:stream_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-streamstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:frames_processed</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-framesprocessed"/></td>
          </tr>
          <tr>
            <td align="left">quic:stream_data_moved</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-streamdatamoved"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagram_data_moved</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-datagramdatamoved"/></td>
          </tr>
          <tr>
            <td align="left">quic:connection_data_blocked_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-connectiondatablockedupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:stream_data_blocked_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-streamdatablockedupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagram_data_blocked_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-datagramdatablockedupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:migration_state_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-migrationstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:timer_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-timerupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:key_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-keyupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:key_discarded</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-keydiscarded"/></td>
          </tr>
          <tr>
            <td align="left">quic:recovery_parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-recoveryparametersset"/></td>
          </tr>
          <tr>
            <td align="left">quic:recovery_metrics_updated</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-recoverymetricsupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:congestion_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-congestionstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_lost</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-packetlost"/></td>
          </tr>
          <tr>
            <td align="left">quic:marked_for_retransmit</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-markedforretransmit"/></td>
          </tr>
          <tr>
            <td align="left">quic:ecn_state_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-ecnstateupdated"/></td>
          </tr>
        </tbody>
      </table>
      <t>QUIC events extend the <tt>$ProtocolEventData</tt> extension point defined in
<xref target="QLOG-MAIN"/>. Additionally, they allow for direct extensibility by their use of
per-event extension points via the <tt>$$</tt> CDDL "group socket" syntax, as also
described in <xref target="QLOG-MAIN"/>.</t>
      <figure anchor="quicevent-data-def">
        <name>QuicEventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
QuicEventData = QUICServerListening /
                QUICConnectionStarted /
                QUICConnectionClosed /
                QUICConnectionIDUpdated /
                QUICSpinBitUpdated /
                QUICConnectionStateUpdated /
                QUICTupleAssigned /
                QUICMTUUpdated /
                QUICVersionInformation /
                QUICALPNInformation /
                QUICParametersSet /
                QUICParametersRestored /
                QUICPacketSent /
                QUICPacketReceived /
                QUICPacketDropped /
                QUICPacketBuffered /
                QUICPacketsAcked /
                QUICUDPDatagramsSent /
                QUICUDPDatagramsReceived /
                QUICUDPDatagramDropped /
                QUICStreamStateUpdated /
                QUICFramesProcessed /
                QUICStreamDataMoved /
                QUICDatagramDataMoved /
                QUICConnectionDataBlockedUpdated /
                QUICStreamDataBlockedUpdated /
                QUICDatagramDataBlockedUpdated /
                QUICMigrationStateUpdated /
                QUICTimerUpdated /
                QUICKeyUpdated /
                QUICKeyDiscarded /
                QUICRecoveryParametersSet /
                QUICRecoveryMetricsUpdated /
                QUICCongestionStateUpdated /
                QUICPacketLost /
                QUICMarkedForRetransmit /
                QUICECNStateUpdated

$ProtocolEventData /= QuicEventData
]]></sourcecode>
      </figure>
      <t>The concrete QUIC event types are further defined below, their type identifier
is the heading name. The subdivisions in sections on Connectivity, Security,
Transport and Recovery are purely for readability.</t>
    </section>
    <section anchor="conn-ev">
      <name>Connectivity events</name>
      <section anchor="quic-serverlistening">
        <name>server_listening</name>
        <t>Emitted when the server starts accepting connections. It has Extra importance
level.</t>
        <figure anchor="quic-serverlistening-def">
          <name>QUICServerListening definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICServerListening = {
    ? ip_v4: IPAddress
    ? port_v4: uint16
    ? ip_v6: IPAddress
    ? port_v6: uint16

    ; the server will always answer client initials with a retry
    ; (no 1-RTT connection setups by choice)
    ? retry_required: bool

    * $$quic-serverlistening-extension
}
]]></sourcecode>
        </figure>
        <t>Some QUIC stacks do not handle sockets directly and are thus unable to log
IP and/or port information.</t>
      </section>
      <section anchor="quic-connectionstarted">
        <name>connection_started</name>
        <t>The <tt>connection_started</tt> event is used for both attempting (client-perspective)
and accepting (server-perspective) new connections. Note that while there is
overlap with the <tt>connection_state_updated</tt> event, this event is separate event
in order to capture additional data that can be useful to log. It has Base
importance level.</t>
        <figure anchor="quic-connectionstarted-def">
          <name>QUICConnectionStarted definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICConnectionStarted = {
    local: TupleEndpointInfo
    remote: TupleEndpointInfo

    * $$quic-connectionstarted-extension
}
]]></sourcecode>
        </figure>
        <t>Some QUIC stacks do not handle sockets directly and are thus unable to log
IP and/or port information.</t>
      </section>
      <section anchor="quic-connectionclosed">
        <name>connection_closed</name>
        <t>The <tt>connection_closed</tt> event is used for logging when a connection was closed,
typically when an error or timeout occurred. It has Base importance level.</t>
        <t>Note that this event has overlap with the <tt>connection_state_updated</tt> event, as
well as the CONNECTION_CLOSE frame. However, in practice, when analyzing large
deployments, it can be useful to have a single event representing a
<tt>connection_closed</tt> event, which also includes an additional reason field to
provide more information. Furthermore, it is useful to log closures due to
timeouts or explicit application actions (such as racing multiple connections
and aborting the slowest), which are difficult to reflect using the other
options.</t>
        <t>The <tt>connection_closed</tt> event is intended to be logged either when the local
endpoint silently discards the connection due to an idle timeout, when a
CONNECTION_CLOSE frame is sent (the connection enters the 'closing' state on the
sender side), when a CONNECTION_CLOSE frame is received (the connection enters
the 'draining' state on the receiver side) or when a Stateless Reset packet is
received (the connection is discarded at the receiver side).
Connectivity-related updates after this point (e.g., exiting a 'closing' or
'draining' state), should be logged using the <tt>connection_state_updated</tt> event
instead.</t>
        <t>In QUIC there are two main connection-closing error categories: connection and
application errors. They have well-defined error codes and semantics. Next to
these however, there can be internal errors that occur that may or may not get
mapped to the official error codes in implementation-specific ways. As such,
multiple error codes can be set on the same event to reflect this, and more
fine-grained internal error codes can be reflected in the internal_code field.</t>
        <t>If the error code does not map to a known error string, the connection_error or
application_error value of "unknown" type can be used and the raw value captured
in the error_code field; a numerical value without variable-length integer
encoding.</t>
        <figure anchor="quic-connectionclosed-def">
          <name>QUICConnectionClosed definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICConnectionClosed = {

    ; which side closed the connection
    ? initiator: Initiator
    ? connection_error: $TransportError /
                        CryptoError
    ? application_error: $ApplicationError

    ; if connection_error or application_error === "unknown"
    ? error_code: uint64

    ? internal_code: uint64
    ? reason: text
    ? trigger:
        "idle_timeout" /
        "application" /
        "error" /
        "version_mismatch" /
        ; when received from peer
        "stateless_reset" /
        "aborted" /
        ; when it is unclear what triggered the CONNECTION_CLOSE
        "unspecified"

    * $$quic-connectionclosed-extension
}
]]></sourcecode>
        </figure>
        <t>Loggers <bcp14>SHOULD</bcp14> use the most descriptive trigger for a <tt>connection_closed</tt> event
that they are able to deduce. This is often clear at the peer closing the
connection (and sending the CONNECTION_CLOSE), but can sometimes be more opaque
at the receiving end.</t>
      </section>
      <section anchor="quic-connectionidupdated">
        <name>connection_id_updated</name>
        <t>The <tt>connection_id_updated</tt> event is emitted when either party updates their
current Connection ID. As this typically happens only sparingly over the course
of a connection, using this event is more efficient than logging the observed
CID with each and every <tt>packet_sent</tt> or <tt>packet_received</tt> events. It has Base
importance level.</t>
        <t>The <tt>connection_id_updated</tt> event is viewed from the perspective of the endpoint
applying the new ID. As such, when the endpoint receives a new connection ID
from the peer, the initiator field will be "remote". When the endpoint updates its
own connection ID, the initiator field will be "local".</t>
        <figure anchor="quic-connectionidupdated-def">
          <name>QUICConnectionIDUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICConnectionIDUpdated = {
    initiator: Initiator
    ? old: ConnectionID
    ? new: ConnectionID

    * $$quic-connectionidupdated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-spinbitupdated">
        <name>spin_bit_updated</name>
        <t>The <tt>spin_bit_updated</tt> event conveys information about the QUIC latency spin
bit; see <xref section="17.4" sectionFormat="of" target="QUIC-TRANSPORT"/>. The event is emitted when the spin
bit changes value, it <bcp14>SHOULD NOT</bcp14> be emitted if the spin bit is set without
changing its value. It has Base importance level.</t>
        <figure anchor="quic-spinbitupdated-def">
          <name>QUICSpinBitUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICSpinBitUpdated = {
    state: bool

    * $$quic-spinbitupdated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-connectionstateupdated">
        <name>connection_state_updated</name>
        <t>The <tt>connection_state_updated</tt> event is used to track progress through QUIC's
complex handshake and connection close procedures. It has Base importance
level.</t>
        <t><xref target="QUIC-TRANSPORT"/> does not contain an exhaustive flow diagram with possible
connection states nor their transitions (though some are explicitly mentioned,
like the 'closing' and 'draining' states). As such, this document
<strong>non-exhaustively</strong> defines those states that are most likely to be useful for
debugging QUIC connections.</t>
        <t>QUIC implementations <bcp14>SHOULD</bcp14> mainly log the simplified BaseConnectionStates,
adding the more fine-grained GranularConnectionStates when more in-depth
debugging is required. Tools <bcp14>SHOULD</bcp14> be able to deal with both types equally.</t>
        <figure anchor="quic-connectionstateupdated-def">
          <name>QUICConnectionStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICConnectionStateUpdated = {
    ? old: $ConnectionState
    new: $ConnectionState

    * $$quic-connectionstateupdated-extension
}

BaseConnectionStates =
    ; Initial packet sent/received
    "attempted" /

    ; Handshake packet sent/received
    "handshake_started" /

    ; Both sent a TLS Finished message
    ; and verified the peer's TLS Finished message
    ; 1-RTT packets can be sent
    ; RFC 9001 Section 4.1.1
    "handshake_complete" /

    ; CONNECTION_CLOSE sent/received,
    ; stateless reset received or idle timeout
    "closed"

GranularConnectionStates =
    ; RFC 9000 Section 8.1
    ; client sent Handshake packet OR
    ; client used connection ID chosen by the server OR
    ; client used valid address validation token
    "peer_validated" /

    ; 1-RTT data can be sent by the server,
    ; but handshake is not done yet
    ; (server has sent TLS Finished; sometimes called 0.5 RTT data)
    "early_write" /

    ; HANDSHAKE_DONE sent/received.
    ; RFC 9001 Section 4.1.2
    "handshake_confirmed" /

    ; CONNECTION_CLOSE sent
    "closing" /

    ; CONNECTION_CLOSE received
    "draining" /

    ; draining or closing period done, connection state discarded
    "closed"

$ConnectionState /= BaseConnectionStates / GranularConnectionStates
]]></sourcecode>
        </figure>
        <t>The <tt>connection_state_changed</tt> event has some overlap with the
<tt>connection_closed</tt> and <tt>connection_started</tt> events, and the handling of various
frames (for example in a <tt>packet_received</tt> event). Still, it can be useful to
log these logical state transitions separately, especially if they map to an
internal implementation state machine, to explicitly track progress. As such,
implementations are allowed to use other ConnectionState values that adhere more
closely to their internal logic. Tools <bcp14>SHOULD</bcp14> be able to deal with these custom
states in a similar way to the pre-defined states in this document.</t>
      </section>
      <section anchor="quic-tupleassigned">
        <name>tuple_assigned</name>
        <t>Importance: Base</t>
        <t>This event is used to associate a single TupleID's value with other parameters
that describe a unique network tuple.</t>
        <t>As described in <xref target="QLOG-MAIN"/>, each qlog event can be linked to a single network
tuple by means of the top-level "tuple" field, whose value is a TupleID. However,
since it can be cumbersome to encode additional tuple metadata (such as IP
addresses or Connection IDs) directly into the TupleID, this event allows such an
association to happen separately. As such, TupleIDs can be short and unique, and
can even be updated to be associated with new metadata as the connection's state
evolves.</t>
        <t>Definition:</t>
        <figure anchor="quic-tupleassigned-def">
          <name>QUICTupleAssigned definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICTupleAssigned = {
    tuple_id: TupleID

    ; the information for traffic going towards the remote receiver
    ? tuple_remote: TupleEndpointInfo

    ; the information for traffic coming in at the local endpoint
    ? tuple_local: TupleEndpointInfo

    * $$quic-tupleassigned-extension
}
]]></sourcecode>
        </figure>
        <t>Choosing the different <tt>tuple_id</tt> values is left up to the implementation. Some
options include using a uniquely incrementing integer, using the (first)
Destination Connection ID associated with a tuple (or its sequence number), or
using (a hash of) the two endpoint IP addresses.</t>
        <t>It is important to note that the empty string ("") is a valid TupleID and that
it is the default assigned to events that do not explicitly set a "tuple" field.
Put differently, the initial tuple of a QUIC connection on which the handshake
occurs (see also <xref target="quic-connectionstarted"/>) is implicitly associated with the
TupleID with value "". Associating metadata with this default tuple is possible by
logging the QUICTupleAssigned event with a value of "" for the <tt>tuple_id</tt> field.</t>
        <t>As the usage of TupleIDs and their metadata can evolve over time, multiple
QUICTupleAssigned events can be emitted for each unique TupleID. The latest
event contains the most up-to-date information for that TupleID. As such, the
first time a TupleID is seen in a QUICTupleAssigned event, it is an indication
that the TupleID is created. Subsequent occurrences indicate the TupleID is
updated, while a final occurrence with both <tt>tuple_local</tt> and <tt>tuple_remote</tt>
fields omitted implicitly indicates the TupleID has been abandoned.</t>
      </section>
      <section anchor="quic-mtuupdated">
        <name>mtu_updated</name>
        <t>The <tt>mtu_updated</tt> event indicates that the estimated Path MTU was updated. This
happens as part of the Path MTU discovery process. It has Extra importance
level.</t>
        <figure anchor="quic-mtuupdated-def">
          <name>QUICMTUUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICMTUUpdated = {
    ? old: uint32
    new: uint32

    ; at some point, MTU discovery stops, as a "good enough"
    ; packet size has been found
    ? done: bool .default false

    * $$quic-mtuupdated-extension
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="quic-ev">
      <name>Transport events</name>
      <section anchor="quic-versioninformation">
        <name>version_information</name>
        <t>The <tt>version_information</tt> event supports QUIC version negotiation; see <xref section="6" sectionFormat="of" target="QUIC-TRANSPORT"/>. It has Core importance level.</t>
        <t>QUIC endpoints each have their own list of QUIC versions they support. The
client uses the most likely version in their first initial. If the server does
not support that version, it replies with a Version Negotiation packet, which
contains its supported versions. From this, the client selects a version. The
<tt>version_information</tt> event aggregates all this information in a single event
type. It also allows logging of supported versions at an endpoint without actual
version negotiation needing to happen.</t>
        <figure anchor="quic-versioninformation-def">
          <name>QUICVersionInformation definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICVersionInformation = {
    ? server_versions: [+ QuicVersion]
    ? client_versions: [+ QuicVersion]
    ? chosen_version: QuicVersion

    * $$quic-versioninformation-extension
}
]]></sourcecode>
        </figure>
        <t>Intended use:</t>
        <ul spacing="normal">
          <li>When sending an initial, the client logs this event with <tt>client_versions</tt> and
<tt>chosen_version</tt> set</li>
          <li>Upon receiving a client initial with a supported version, the server logs this
event with <tt>server_versions</tt> and <tt>chosen_version</tt> set</li>
          <li>Upon receiving a client initial with an unsupported version, the server logs
this event with <tt>server_versions</tt> set and <tt>client_versions</tt> to the
single-element array containing the client's attempted version. The absence of
chosen_version implies no overlap was found</li>
          <li>Upon receiving a version negotiation packet from the server, the client logs
this event with <tt>client_versions</tt> set and <tt>server_versions</tt> to the versions in
the version negotiation packet and chosen_version to the version it will use
for the next initial packet. If the client receives a set of <tt>server_versions</tt>
with no viable overlap with its own supported versions, this event should be
logged without the <tt>chosen_version</tt> set</li>
        </ul>
      </section>
      <section anchor="quic-alpninformation">
        <name>alpn_information</name>
        <t>The <tt>alpn_information</tt> event supports Application-Layer Protocol Negotiation
(ALPN) over the QUIC transport; see <xref target="RFC7301"/> and <xref section="7.4" sectionFormat="of" target="QUIC-TRANSPORT"/>. It has Core importance level.</t>
        <t>QUIC endpoints are configured with a list of supported ALPN identifiers. Clients send the list in a TLS ClientHello, and servers match against their list. On success, a single ALPN identifier is chosen and sent back in a TLS ServerHello. If no match is found, the connection is closed.</t>
        <t>ALPN identifiers are byte sequences, that may be possible to present as UTF-8.
The <tt>ALPNIdentifier</tt>` type supports either format. Implementations <bcp14>SHOULD</bcp14> log at
least one format, but <bcp14>MAY</bcp14> log both or none.</t>
        <figure anchor="quic-alpninformation-def">
          <name>QUICALPNInformation definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICALPNInformation = {
    ? server_alpns: [* ALPNIdentifier]
    ? client_alpns: [* ALPNIdentifier]
    ? chosen_alpn: ALPNIdentifier

    * $$quic-alpninformation-extension
}

ALPNIdentifier = {
  ? byte_value: hexstring
  ? string_value: text
}
]]></sourcecode>
        </figure>
        <t>Intended use:</t>
        <ul spacing="normal">
          <li>When sending an initial, the client logs this event with <tt>client_alpns</tt> set</li>
          <li>When receiving an initial with a supported alpn, the server logs this event
with <tt>server_alpns</tt> set, <tt>client_alpns</tt> equalling the client-provided list,
and chosen_alpn to the value it will send back to the client.</li>
          <li>When receiving an initial with an alpn, the client logs this event with
<tt>chosen_alpn</tt> to the received value.</li>
          <li>Alternatively, a client can choose to not log the first event, but wait for
the receipt of the server initial to log this event with both <tt>client_alpns</tt>
and <tt>chosen_alpn</tt> set.</li>
        </ul>
      </section>
      <section anchor="quic-parametersset">
        <name>parameters_set</name>
        <t>The <tt>parameters_set</tt> event groups settings from several different sources
(transport parameters, TLS ciphers, etc.) into a single event. This is done to
minimize the amount of events and to decouple conceptual setting impacts from
their underlying mechanism for easier high-level reasoning. The event has Core
importance level.</t>
        <t>Most of these settings are typically set once and never change. However, they
are usually set at different times during the connection, so there will
regularly be several instances of this event with different fields set.</t>
        <t>Note that some settings have two variations (one set locally, one requested by
the remote peer). This is reflected in the <tt>initiator</tt> field. As such, this
field <bcp14>MUST</bcp14> be correct for all settings included a single event instance. If the
settings from two sides are required, they <bcp14>MUST</bcp14> be logged as two separate event
instances. If the local peer decides to change its behavior based on remote
peer's settings, a new event type can be used to reflect the outcome.</t>
        <t>By default, each setting is assumed to either be absent (has an <tt>undefined</tt>
value) or have its default value (if it exists) at the start of the connection.
Subsequently, each setting's value in a <tt>parameters_set</tt> event supersedes the
previous value of that parameter if present. If a setting does not appear in a
given <tt>parameters_set</tt> event, its value is unchanged.</t>
        <t>Implementations are not required to recognize, process or support every
setting/parameter received in all situations. For example, QUIC implementations
<bcp14>MUST</bcp14> discard transport parameters that they do not understand <xref section="7.4.2" sectionFormat="of" target="QUIC-TRANSPORT"/>. The <tt>unknown_parameters</tt> field can be used to log the raw
values of any unknown parameters (e.g., GREASE, private extensions, peer-side
experimentation).</t>
        <t>In the case of connection resumption and 0-RTT, some of the server's parameters
are stored up-front at the client and used for the initial connection startup.
They are later updated with the server's reply. In these cases, utilize the
separate <tt>parameters_restored</tt> event to indicate the initial values, and this
event to indicate the updated values, as normal.</t>
        <figure anchor="quic-parametersset-def">
          <name>QUICParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICParametersSet = {
    ? initiator: Initiator

    ; true if valid session ticket was received
    ? resumption_allowed: bool

    ; true if early data extension was enabled on the TLS layer
    ? early_data_enabled: bool

    ; e.g., "AES_128_GCM_SHA256"
    ? tls_cipher: text

    ; RFC9000
    ? original_destination_connection_id: ConnectionID
    ? initial_source_connection_id: ConnectionID
    ? retry_source_connection_id: ConnectionID
    ? stateless_reset_token: StatelessResetToken
    ? disable_active_migration: bool
    ? max_idle_timeout: uint64
    ? max_udp_payload_size: uint64
    ? ack_delay_exponent: uint64
    ? max_ack_delay: uint64
    ? active_connection_id_limit: uint64
    ? initial_max_data: uint64
    ? initial_max_stream_data_bidi_local: uint64
    ? initial_max_stream_data_bidi_remote: uint64
    ? initial_max_stream_data_uni: uint64
    ? initial_max_streams_bidi: uint64
    ? initial_max_streams_uni: uint64
    ? preferred_address: PreferredAddress
    ? unknown_parameters: [* UnknownParameter]

    ; RFC9221
    ? max_datagram_frame_size: uint64

    ; RFC9287
    ; true if present, absent or false if extension not negotiated
    ? grease_quic_bit: bool

    * $$quic-parametersset-extension
}

PreferredAddress = {
    ? ip_v4: IPAddress
    ? port_v4: uint16
    ? ip_v6: IPAddress
    ? port_v6: uint16
    connection_id: ConnectionID
    stateless_reset_token: StatelessResetToken
}

UnknownParameter = {
    id: uint64
    ? value: hexstring
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-parametersrestored">
        <name>parameters_restored</name>
        <t>When using QUIC 0-RTT, clients are expected to remember and restore the server's
transport parameters from the previous connection. The <tt>parameters_restored</tt>
event is used to indicate which parameters were restored and to which values
when utilizing 0-RTT. It has Base importance level.</t>
        <t>Note that not all transport parameters should be restored (many are even
prohibited from being re-utilized). The ones listed here are the ones expected
to be useful for correct 0-RTT usage.</t>
        <figure anchor="quic-parametersrestored-def">
          <name>QUICParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICParametersRestored = {

    ; RFC9000
    ? disable_active_migration: bool
    ? max_idle_timeout: uint64
    ? max_udp_payload_size: uint64
    ? active_connection_id_limit: uint64
    ? initial_max_data: uint64
    ? initial_max_stream_data_bidi_local: uint64
    ? initial_max_stream_data_bidi_remote: uint64,
    ? initial_max_stream_data_uni: uint64
    ? initial_max_streams_bidi: uint64
    ? initial_max_streams_uni: uint64

    ; RFC9221
    ? max_datagram_frame_size: uint64

    ; RFC9287
    ; can only be restored at the client.
    ; servers MUST NOT restore this parameter!
    ? grease_quic_bit: bool

    * $$quic-parametersrestored-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-packetsent">
        <name>packet_sent</name>
        <t>The <tt>packet_sent</tt> event indicates a QUIC-level packet was sent. It has Core
importance level.</t>
        <figure anchor="quic-packetsent-def">
          <name>QUICPacketSent definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketSent = {
    header: PacketHeader
    ? frames: [* $QuicFrame]

    ; only if header.packet_type === "stateless_reset"
    ; is always 128 bits in length.
    ? stateless_reset_token: StatelessResetToken

    ; only if header.packet_type === "version_negotiation"
    ? supported_versions: [+ QuicVersion]
    ? raw: RawInfo
    ? datagram_id: uint32
    ? is_mtu_probe_packet: bool .default false

    ? trigger:
      ; RFC 9002 Section 6.1.1
      "retransmit_reordered" /
      ; RFC 9002 Section 6.1.2
      "retransmit_timeout" /
      ; RFC 9002 Section 6.2.4
      "pto_probe" /
      ; RFC 9002 6.2.3
      "retransmit_crypto" /
      ; needed for some CCs to figure out bandwidth allocations
      ; when there are no normal sends
      "cc_bandwidth_probe"

    * $$quic-packetsent-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>encryption_level</tt> and <tt>packet_number_space</tt> are not logged explicitly:
the <tt>header.packet_type</tt> specifies this by inference (assuming correct
implementation)</t>
        <t>The <tt>datagram_id</tt> field is used to track packet coalescing, see
<xref target="quic-udpdatagramssent"/>.</t>
      </section>
      <section anchor="quic-packetreceived">
        <name>packet_received</name>
        <t>The <tt>packet_received</tt> event indicates a QUIC-level packet was received. It has
Core importance level.</t>
        <figure anchor="quic-packetreceived-def">
          <name>QUICPacketReceived definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketReceived = {
    header: PacketHeader
    ? frames: [* $QuicFrame]

    ; only if header.packet_type === "stateless_reset"
    ; Is always 128 bits in length.
    ? stateless_reset_token: StatelessResetToken

    ; only if header.packet_type === "version_negotiation"
    ? supported_versions: [+ QuicVersion]
    ? raw: RawInfo
    ? datagram_id: uint32

    ? trigger:
        ; if packet was buffered because it couldn't be
        ; decrypted before
        "keys_available"

    * $$quic-packetreceived-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>encryption_level</tt> and <tt>packet_number_space</tt> are not logged explicitly: the
<tt>header.packet_type</tt> specifies this by inference (assuming correct
implementation).</t>
        <t>The <tt>datagram_id</tt> field is used to track packet coalescing, see
<xref target="quic-udpdatagramssent"/>.</t>
      </section>
      <section anchor="quic-packetdropped">
        <name>packet_dropped</name>
        <t>The <tt>packet_dropped</tt> event indicates a QUIC-level packet was dropped. It has
Base importance level.</t>
        <t>The trigger field indicates a general reason category for dropping the packet,
while the details field can contain additional implementation-specific
information.</t>
        <figure anchor="quic-packetdropped-def">
          <name>QUICPacketDropped definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketDropped = {

    ; Primarily packet_type should be filled here,
    ; as other fields might not be decrypteable or parseable
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? details: {* text => any}
    ? trigger:
        "internal_error" /
        "rejected" /
        "unsupported" /
        "invalid" /
        "duplicate" /
        "connection_unknown" /
        "decryption_failure" /
        "key_unavailable" /
        "general"

    * $$quic-packetdropped-extension
}
]]></sourcecode>
        </figure>
        <t>Some example situations for each of the trigger categories include:</t>
        <ul spacing="normal">
          <li>
            <tt>internal_error</tt>: not initialized, out of memory</li>
          <li>
            <tt>rejected</tt>: limits reached, DDoS protection, unwilling to track more paths, duplicate packet</li>
          <li>
            <tt>unsupported</tt>: unknown or unsupported version. See also <xref target="handling-unknown-connections"/>.</li>
          <li>
            <tt>invalid</tt>: packet parsing or validation error</li>
          <li>
            <tt>duplicate</tt>: duplicate packet</li>
          <li>
            <tt>connection_unknown</tt>: packet does not relate to a known connection or Connection ID</li>
          <li>
            <tt>decryption_failure</tt>: decryption failed</li>
          <li>
            <tt>key_unavailable</tt>: decryption key was unavailable</li>
          <li>
            <tt>general</tt>: situations not clearly covered in the other categories</li>
        </ul>
        <t>The <tt>datagram_id</tt> field is used to track packet coalescing, see
<xref target="quic-udpdatagramssent"/>.</t>
      </section>
      <section anchor="quic-packetbuffered">
        <name>packet_buffered</name>
        <t>The <tt>packet_buffered</tt> event is emitted when a packet is buffered because it
cannot be processed yet. Typically, this is because the packet cannot be parsed
yet, and thus only the full packet contents can be logged when it was parsed in
a <tt>packet_received</tt> event. The event has Base importance level.</t>
        <figure anchor="quic-packetbuffered-def">
          <name>QUICPacketBuffered definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketBuffered = {

    ; primarily packet_type should be filled here as other elements
    ; might not be available yet
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? trigger:
        ; indicates the parser cannot keep up, temporarily buffers
        ; packet for later processing
        "backpressure" /
        ; if packet cannot be decrypted because the proper keys were
        ; not yet available
        "keys_unavailable"

    * $$quic-packetbuffered-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>datagram_id</tt> field is used to track packet coalescing, see
<xref target="quic-udpdatagramssent"/>.</t>
      </section>
      <section anchor="quic-packetsacked">
        <name>packets_acked</name>
        <t>The <tt>packets_acked</tt> event is emitted when a (group of) sent packet(s) is
acknowledged by the remote peer <em>for the first time</em>. It has Extra importance
level.</t>
        <t>This information could also be deduced from the contents of received ACK frames.
However, ACK frames require additional processing logic to determine when a
given packet is acknowledged for the first time, as QUIC uses ACK ranges which
can include repeated ACKs. Additionally, this event can be used by
implementations that do not log frame contents.</t>
        <figure anchor="quic-packetsacked-def">
          <name>QUICPacketsAcked definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketsAcked = {
    ? packet_number_space: $PacketNumberSpace
    ? packet_numbers: [+ uint64]

    * $$quic-packetsacked-extension
}
]]></sourcecode>
        </figure>
        <t>If <tt>packet_number_space</tt> is omitted, it assumes the default value of
<tt>application_data</tt>, as this is by far the most prevalent packet
number space a typical QUIC connection will use.</t>
      </section>
      <section anchor="quic-udpdatagramssent">
        <name>udp_datagrams_sent</name>
        <t>The <tt>datagrams_sent</tt> event indicates when one or more UDP-level datagrams are
passed to the underlying network socket. This is useful for determining how QUIC
packet buffers are drained to the OS. The event has Extra importance level.</t>
        <figure anchor="quic-udpdatagramssent-def">
          <name>QUICUDPDatagramsSent definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICUDPDatagramsSent = {

    ; to support passing multiple at once
    ? count: uint16

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: [+ RawInfo]

    ; ECN bits in the IP header
    ; if not set, defaults to the value used on the last
    ; QUICDatagramsSent event
    ? ecn: [+ ECN]

    ? datagram_ids: [+ uint32]

    * $$quic-udpdatagramssent-extension
}
]]></sourcecode>
        </figure>
        <t>Since QUIC implementations rarely control UDP logic directly, the raw data
excludes UDP-level headers in all RawInfo fields.</t>
        <t>Multiple QUIC packets can be coalesced in a single UDP datagram, especially
during the handshake (see <xref section="12.2" sectionFormat="of" target="QUIC-TRANSPORT"/>). However, neither
QUIC nor UDP themselves provide an explicit mechanism to track this behaviour.
To make it possible for implementations to track coalescing across packet-level
and datagram-level qlog events, this document defines a qlog-specific mechanism
for tracking coalescing across packet-level and datagram-level qlog events: a
"datagram identifier" carried in <tt>datagram_id</tt> fields. qlog implementations that
want to track coalescing can use this mechanism, where multiple events sharing
the same <tt>datagram_id</tt> indicate they were coalesced in the same UDP datagram.
The selection of specific and locally-unique <tt>datagram_id</tt> values is an
implementation choice.</t>
      </section>
      <section anchor="quic-udpdatagramsreceived">
        <name>udp_datagrams_received</name>
        <t>When one or more UDP-level datagrams are received from the socket. This is
useful for determining how datagrams are passed to the user space stack from the
OS. The event has Extra importance level.</t>
        <figure anchor="quic-udpdatagramsreceived-def">
          <name>QUICUDPDatagramsReceived definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICUDPDatagramsReceived = {

    ; to support passing multiple at once
    ? count: uint16

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: [+ RawInfo]

    ; ECN bits in the IP header
    ; if not set, defaults to the value on the last
    ; QUICDatagramsReceived event
    ? ecn: [+ ECN]

    ? datagram_ids: [+ uint32]

    * $$quic-udpdatagramsreceived-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>datagram_ids</tt> field is used to track packet coalescing, see
<xref target="quic-udpdatagramssent"/>.</t>
      </section>
      <section anchor="quic-udpdatagramdropped">
        <name>udp_datagram_dropped</name>
        <t>When a UDP-level datagram is dropped. This is typically done if it does not
contain a valid QUIC packet. If it does, but the QUIC packet is dropped for
other reasons, the <tt>packet_dropped</tt> event (<xref target="quic-packetdropped"/>) should be
used instead. The event has Extra importance level.</t>
        <figure anchor="quic-udpdatagramdropped-def">
          <name>QUICUDPDatagramDropped definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICUDPDatagramDropped = {

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: RawInfo

    * $$quic-udpdatagramdropped-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-streamstateupdated">
        <name>stream_state_updated</name>
        <t>The <tt>stream_state_updated</tt> event is emitted whenever the internal state of a
QUIC stream is updated; see <xref section="3" sectionFormat="of" target="QUIC-TRANSPORT"/>. Most of this can be
inferred from several types of frames going over the wire, but it's often easier
to have explicit signals for these state changes. The event has Base importance
level.</t>
        <t>While QUIC stream IDs encode the type of stream, (see <xref section="2.1" sectionFormat="of" target="QUIC-TRANSPORT"/>), the optional <tt>stream_type</tt> field can be used to provide a
more-accessible form of the information.</t>
        <t><xref section="3" sectionFormat="of" target="QUIC-TRANSPORT"/> describes streams in terms of their send and
receive components, with a state machine for each. The <tt>stream_side</tt> field is
used to indicate which side's state is updated in the logged event. In case both
sides of the stream change state at the same time (for example both become
<tt>closed</tt>), two separate events with different <tt>stream_side</tt> fields <bcp14>SHOULD</bcp14> be
logged.</t>
        <t>In cases where it is useful to know which side of the connection initiated a
state change (for example, closed due to either RESET_STREAM or STOP_SENDING),
this can be reflected using the <tt>trigger</tt> field.</t>
        <figure anchor="quic-streamstateupdated-def">
          <name>QUICStreamStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
StreamType = "unidirectional" /
             "bidirectional"

QUICStreamStateUpdated = {
    stream_id: uint64
    ? stream_type: StreamType
    ? old: $StreamState
    new: $StreamState
    stream_side: "sending" /
                 "receiving"
    ? trigger:
      ; stream state change was initiated by a local action
      "local" /
      ; stream state change was initiated by a remote action
      "remote"

    * $$quic-streamstateupdated-extension
}

BaseStreamStates =  "idle" /
                    "open" /
                    "closed"

GranularStreamStates =
    ; bidirectional stream states, RFC 9000 Section 3.4.
    "half_closed_local" /
    "half_closed_remote" /
    ; sending-side stream states, RFC 9000 Section 3.1.
    "ready" /
    "send" /
    "data_sent" /
    "reset_sent" /
    "reset_received" /
    ; receive-side stream states, RFC 9000 Section 3.2.
    "receive" /
    "size_known" /
    "data_read" /
    "reset_read" /
    ; both-side states
    "data_received" /
    ; qlog-defined: memory actually freed
    "destroyed"

$StreamState /= BaseStreamStates / GranularStreamStates
]]></sourcecode>
        </figure>
        <t>QUIC implementations <bcp14>SHOULD</bcp14> mainly log the simplified BaseStreamStates instead
of the more fine-grained GranularStreamStates. These latter ones are mainly for
more in-depth debugging. Tools <bcp14>SHOULD</bcp14> be able to deal with both types equally.</t>
      </section>
      <section anchor="quic-framesprocessed">
        <name>frames_processed</name>
        <t>The <tt>frame_processed</tt> event is intended to prevent a large proliferation of
specific purpose events (e.g., <tt>packets_acknowledged</tt>, <tt>flow_control_updated</tt>,
<tt>stream_data_received</tt>). It has Extra importance level.</t>
        <t>Implementations have the opportunity to (selectively) log this type of
signal without having to log packet-level details (e.g., in <tt>packet_received</tt>).
Since for almost all cases, the effects of applying a frame to the internal state
of an implementation can be inferred from that frame's contents, these events
are aggregated into this single <tt>frames_processed</tt> event.</t>
        <t>The <tt>frame_processed</tt> event can be used to signal internal state change not
resulting directly from the actual "parsing" of a frame (e.g., the frame could
have been parsed, data put into a buffer, then later processed, then logged with
this event).</t>
        <t>The <tt>packet_received</tt> event can convey all constituent frames. It is not
expected that the <tt>frames_processed</tt> event will also be used for a redundant
purpose. Rather, implementations can use this event to avoid having to log full
packets or to convey extra information about when frames are processed (for
example, if frame processing is deferred for any reason).</t>
        <t>Note that for some events, this approach will lose some information (e.g., for which
encryption level are packets being acknowledged?). If this information is
important, the <tt>packet_received</tt> event can be used instead.</t>
        <t>In some implementations, it can be difficult to log frames directly, even when
using <tt>packet_sent</tt> and <tt>packet_received</tt> events. For these cases, the
<tt>frames_processed</tt> event also contains the <tt>packet_numbers</tt> field, which can be
used to more explicitly link this event to the <tt>packet_sent</tt>/<tt>received events</tt>.
The field is an array, which supports using a single <tt>frames_processed</tt> event
for multiple frames received over multiple packets. To map between frames and
packets, the position and order of entries in the <tt>frames</tt> and <tt>packet_numbers</tt>
is used. If the optional <tt>packet_numbers</tt> field is used, each frame <bcp14>MUST</bcp14> have a
corresponding packet number at the same index.</t>
        <figure anchor="quic-framesprocessed-def">
          <name>QUICFramesProcessed definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICFramesProcessed = {
    frames: [* $QuicFrame]
    ? packet_numbers: [* uint64]

    * $$quic-framesprocessed-extension
}
]]></sourcecode>
        </figure>
        <t>For example, an instance of the <tt>frames_processed</tt> event that represents four
STREAM frames received over two packets would have the fields serialized as:</t>
        <artwork><![CDATA[
"frames":[
  {"frame_type":"stream","stream_id":0,"offset":0,"raw":{"length":500}},
  {"frame_type":"stream","stream_id":0,"offset":500,"raw":{"length":200}},
  {"frame_type":"stream","stream_id":1,"offset":0,"raw":{"length":300}},
  {"frame_type":"stream","stream_id":1,"offset":300,"raw":{"length":50}}
  ],
"packet_numbers":[
  1,
  1,
  2,
  2
]
]]></artwork>
      </section>
      <section anchor="quic-streamdatamoved">
        <name>stream_data_moved</name>
        <t>The <tt>stream_data_moved</tt> event is used to indicate when QUIC stream data moves
between the different layers. This helps make clear the flow of data, how long
data remains in various buffers, and the overheads introduced by individual
layers. The event has Base importance level.</t>
        <t>The <tt>raw.length</tt> field is used to reflect how many bytes were moved. As this
event relates to stream data only, there are no packet or frame headers and the
<tt>raw.length</tt> field <bcp14>MUST</bcp14> reflect that.</t>
        <t>For example, it can be useful to understand when data moves from an
application protocol (e.g., HTTP) to QUIC stream buffers and vice versa.</t>
        <t>The <tt>stream_data_moved</tt> event can provide insight into whether received data on
a QUIC stream is moved to the application protocol immediately (for example per
received packet) or in larger batches (for example, all QUIC packets are
processed first and afterwards the application layer reads from the streams with
newly available data). This can help identify bottlenecks, flow control issues,
or scheduling problems.</t>
        <t>The <tt>additional_info</tt> field supports optional logging of information related to
the stream state. For example, an application layer that moves data into
transport and simultaneously ends the stream, can log <tt>fin_set</tt>. As another
example, a transport layer that has received an instruction to reset a stream
can indicate this to the application layer using <tt>reset_stream</tt>. In both cases,
the <tt>raw.length</tt> field can be omitted or have a zero value.</t>
        <t>This event is only for data in QUIC streams. For data in QUIC Datagram Frames,
see the <tt>datagram_data_moved</tt> event defined in <xref target="quic-datagramdatamoved"/>.</t>
        <figure anchor="quic-streamdatamoved-def">
          <name>QUICStreamDataMoved definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICStreamDataMoved = {
    ? stream_id: uint64
    ? offset: uint64

    ? from: $DataLocation
    ? to: $DataLocation

    ? additional_info: $DataMovedAdditionalInfo

    ? raw: RawInfo

    * $$quic-streamdatamoved-extension
}

$DataLocation /=  "application" /
                  "transport" /
                  "network"

$DataMovedAdditionalInfo /= "fin_set" /
                            "stream_reset"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-datagramdatamoved">
        <name>datagram_data_moved</name>
        <t>The <tt>datagram_data_moved</tt> event is used to indicate when QUIC Datagram Frame
data (see <xref target="RFC9221"/>) moves between the different layers. This helps make
clear the flow of data, how long data remains in various buffers, and the
overheads introduced by individual layers. The event has Base importance level.</t>
        <t>The <tt>raw.length</tt> field is used to reflect how many bytes were moved. As this
event relates to datagram data only, there are no packet or frame headers and
the <tt>raw.length</tt> field <bcp14>MUST</bcp14> reflect that.</t>
        <t>For example, passing from the application protocol (e.g., WebTransport) to QUIC
Datagram Frame buffers and vice versa.</t>
        <t>The <tt>datagram_data_moved</tt> event can provide insight into whether received data
in a QUIC Datagram Frame is moved to the application protocol immediately (for
example per received packet) or in larger batches (for example, all QUIC packets
are processed first and afterwards the application layer reads all Datagrams at
once). This can help identify bottlenecks, flow control issues, or scheduling
problems.</t>
        <t>This event is only for data in QUIC Datagram Frames. For data in QUIC streams,
see the <tt>stream_data_moved</tt> event defined in <xref target="quic-streamdatamoved"/>.</t>
        <figure anchor="quic-datagramdatamoved-def">
          <name>QUICDatagramDataMoved definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramDataMoved = {
    ? from: $DataLocation
    ? to: $DataLocation
    ? raw: RawInfo

    * $$quic-datagramdatamoved-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-connectiondatablockedupdated">
        <name>connection_data_blocked_updated</name>
        <t>The <tt>connection_blocked_updated</tt> event is used to indicate when the QUIC
connection becomes blocked or unblocked for sending data. When a connection is
"blocked", data can't be sent in streams and/or datagrams until the blocking
reason has been resolved. The event has Extra importance level.</t>
        <t>Use the <tt>stream_blocked_updated</tt> or <tt>datagram_blocked_updated</tt> event to provide
more fine-grained information for individual data types.</t>
        <figure anchor="quic-connectiondatablockedupdated-def">
          <name>QUICConnectionDataBlockedUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICConnectionDataBlockedUpdated = {
    ? old: $BlockedState
    new: $BlockedState

    ? reason: $BlockedReason
}

$BlockedState /= "blocked" /
               "unblocked"

$BlockedReason /= "scheduling" /
                  "pacing" /
                  "amplification_protection" /
                  "congestion_control" /
                  "connection_flow_control" /
                  "stream_flow_control" /
                  "stream_id" /
                  "application"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-streamdatablockedupdated">
        <name>stream_data_blocked_updated</name>
        <t>The <tt>stream_data_blocked_updated</tt> event is used to indicate when a QUIC stream
becomes blocked or unblocked for sending. The event has Extra importance level.</t>
        <figure anchor="quic-streamdatablockedupdated-def">
          <name>QUICStreamDataBlockedUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICStreamDataBlockedUpdated = {
    ? old: $BlockedState
    new: $BlockedState

    stream_id: uint64

    ? reason: $BlockedReason
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-datagramdatablockedupdated">
        <name>datagram_data_blocked_updated</name>
        <t>The <tt>datagram_data_blocked_updated</tt> event is used to indicate when QUIC
datagrames becomes blocked or unblocked for sending. The event has Extra
importance level.</t>
        <figure anchor="quic-datagramdatablockedupdated-def">
          <name>QUICDatagramDataBlockedUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramDataBlockedUpdated = {
    ? old: $BlockedState
    new: $BlockedState

    ? reason: $BlockedReason
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-migrationstateupdated">
        <name>migration_state_updated</name>
        <t>Use to provide additional information when attempting (client-side) connection
migration. While most details of the QUIC connection migration process can be
inferred by observing the PATH_CHALLENGE and PATH_RESPONSE frames, in
combination with the QUICTupleAssigned event, it can be useful to explicitly log
the progression of the migration and potentially made decisions in a single
location/event. The event has Extra importance level.</t>
        <t>Generally speaking, connection migration goes through two phases: a probing
phase (which is not always needed/present), and a migration phase (which can be
abandoned upon error).</t>
        <t>Implementations that log per-path information in a QUICMigrationStateUpdated,
<bcp14>SHOULD</bcp14> also emit QUICTupleAssigned events, to serve as a ground-truth source of
information.</t>
        <t>Definition:</t>
        <figure anchor="quic-migrationstateupdated-def">
          <name>QUICMigrationStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICMigrationStateUpdated = {
    ? old: MigrationState
    new: MigrationState

    ? tuple_id: TupleID

    ; the information for traffic going towards the remote receiver
    ? tuple_remote: TupleEndpointInfo

    ; the information for traffic coming in at the local endpoint
    ? tuple_local: TupleEndpointInfo

    * $$quic-migrationstateupdated-extension
}

; Note that MigrationState does not describe a full state machine
; These entries are not necessarily chronological,
; nor will they always all appear during
; a connection migration attempt.
MigrationState =
    ; probing packets are sent, migration not initiated yet
    "probing_started" /
    ; did not get reply to probing packets,
    ; discarding path as an option
    "probing_abandoned" /
    ; received reply to probing packets, path is migration candidate
    "probing_successful" /
    ; non-probing packets are sent, attempting migration
    "migration_started" /
    ; something went wrong during the migration, abandoning attempt
    "migration_abandoned" /
    ; new path is now fully used, old path is discarded
    "migration_complete"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-timerupdated">
        <name>timer_updated</name>
        <t>The <tt>timer_updated</tt> event is emitted when a timer changes state. It has Extra
importance level.</t>
        <t>The three main event types are:</t>
        <ul spacing="normal">
          <li>set: the timer is set with a delta timeout for when it will trigger next</li>
          <li>expired: when the timer effectively expires after the delta timeout</li>
          <li>cancelled: when a timer is cancelled</li>
        </ul>
        <t>In order to indicate an active timer's timeout update, a new <tt>set</tt> event is used.</t>
        <t>QUICTimerUpdated events with the <tt>timer_type</tt> set to <tt>ack</tt>or <tt>pto</tt> indicate
changes to the individual timeouts defined by RFC 9002: the threshold loss
detection timeout (see <xref section="6.1.2" sectionFormat="of" target="QUIC-RECOVERY"/>) and the probe timeout
(see <xref section="6.2" sectionFormat="of" target="QUIC-RECOVERY"/>). Those set to <tt>loss_timeout</tt> represent
changes to the multi-modal loss detection timer (see <xref section="3" sectionFormat="of" target="QUIC-RECOVERY"/>).</t>
        <t>The QUIC protocol conceptually employs a variety of timers, but their usage can
be implementation-dependent. Implementers can add additional fields to this
event if needed via <tt>$$quic-timerupdated-extension</tt> or specify other/additional
timer types via <tt>$TimerType</tt>.</t>
        <figure anchor="quic-timerupdated-def">
          <name>QUICTimerUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
; a non-exhaustive list of typically employed timers
$TimerType /= "ack" /
              "pto" /
              "loss_timeout" /
              "path_validation" /
              "handshake_timeout" /
              "idle_timeout"

QUICTimerUpdated = {
    ? timer_type: $TimerType

    ; to disambiguate in case there are multiple timers
    ; of the same type
    ? timer_id: uint64

    ; if used for recovery timers, this can be useful information
    ? packet_number_space: $PacketNumberSpace
    event_type: "set" /
                "expired" /
                "cancelled"

    ; if event_type === "set": delta time is in ms from
    ; this event's timestamp until when the timer should trigger
    ? delta: float32

    * $$quic-timerupdated-extension
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sec-ev">
      <name>Security Events</name>
      <section anchor="quic-keyupdated">
        <name>key_updated</name>
        <t>The <tt>key_updated</tt> event has Base importance level.</t>
        <figure anchor="quic-keyupdated-def">
          <name>QUICKeyUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICKeyUpdated = {
    key_type: $KeyType
    ? old: hexstring
    ? new: hexstring

    ; needed for 1RTT key updates
    ? key_phase: uint64
    ? trigger:
        ; (e.g., initial, handshake and 0-RTT keys
        ; are generated by TLS)
        "tls" /
        "remote_update" /
        "local_update"

    * $$quic-keyupdated-extension
}
]]></sourcecode>
        </figure>
        <t>Note that the key_phase is the full value of the key phase (as indicated by
@M and @N in Figure 9 of <xref target="QUIC-TLS"/>). The key phase bit used on
the packet header is the least significant bit of the key phase.</t>
      </section>
      <section anchor="quic-keydiscarded">
        <name>key_discarded</name>
        <t>The <tt>key_discarded</tt> event has Base importance level.</t>
        <figure anchor="quic-keydiscarded-def">
          <name>QUICKeyDiscarded definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICKeyDiscarded = {
    key_type: $KeyType
    ? key: hexstring

    ; needed for 1RTT key updates
    ? key_phase: uint64
    ? trigger:
        ; (e.g., initial, handshake and 0-RTT keys
        ; are generated by TLS)
        "tls" /
        "remote_update" /
        "local_update"

    * $$quic-keydiscarded-extension
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="rec-ev">
      <name>Recovery events</name>
      <t>Most of the events in this category are kept generic to support different
recovery approaches and various congestion control algorithms. Tool creators
<bcp14>SHOULD</bcp14> make an effort to support and visualize even unknown data in these events
(e.g., plot unknown congestion states by name on a timeline visualization).</t>
      <section anchor="quic-recoveryparametersset">
        <name>recovery_parameters_set</name>
        <t>The <tt>recovery_parameters_set</tt> event groups initial parameters from both loss
detection and congestion control into a single event. It has Base importance
level.</t>
        <t>All these settings are typically set once and never change. Implementation that
do, for some reason, change these parameters during execution, <bcp14>MAY</bcp14> emit the
<tt>recovery_parameters_set</tt> event more than once.</t>
        <figure anchor="quic-recoveryparametersset-def">
          <name>QUICRecoveryParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICRecoveryParametersSet = {

    ; Loss detection, see RFC 9002 Appendix A.2
    ; in amount of packets
    ? reordering_threshold: uint16

    ; as RTT multiplier
    ? time_threshold: float32

    ; in ms
    timer_granularity: uint16

    ; in ms
    ? initial_rtt:float32

    ; congestion control, see RFC 9002 Appendix B.2
    ; in bytes. Note that this could be updated after pmtud
    ? max_datagram_size: uint32

    ; in bytes
    ? initial_congestion_window: uint64

    ; Note that this could change when max_datagram_size changes
    ; in bytes
    ? minimum_congestion_window: uint64
    ? loss_reduction_factor: float32

    ; as PTO multiplier
    ? persistent_congestion_threshold: uint16

    * $$quic-recoveryparametersset-extension
}
]]></sourcecode>
        </figure>
        <t>Additionally, this event can contain any number of unspecified fields to support
different recovery approaches.</t>
      </section>
      <section anchor="quic-recoverymetricsupdated">
        <name>recovery_metrics_updated</name>
        <t>The <tt>recovery_metrics_updated</tt> event is emitted when one or more of the observable
recovery metrics changes value. It has Core importance level.</t>
        <t>This event <bcp14>SHOULD</bcp14> group all possible metric updates that happen at or around the
same time in a single event (e.g., if <tt>min_rtt</tt> and <tt>smoothed_rtt</tt> change at the
same time, they should be bundled in a single <tt>recovery_metrics_updated</tt> entry,
rather than split out into two). Consequently, a <tt>recovery_metrics_updated</tt>
event is only guaranteed to contain at least one of the listed metrics.</t>
        <figure anchor="quic-recoverymetricsupdated-def">
          <name>QUICRecoveryMetricsUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICRecoveryMetricsUpdated = {

    ; Loss detection, see RFC 9002 Appendix A.3
    ; all following rtt fields are expressed in ms
    ? min_rtt: float32
    ? smoothed_rtt: float32
    ? latest_rtt: float32
    ? rtt_variance: float32
    ? pto_count: uint16

    ; Congestion control, see RFC 9002 Appendix B.2.
    ; in bytes
    ? congestion_window: uint64
    ? bytes_in_flight: uint64

    ; in bytes
    ? ssthresh: uint64

    ; qlog defined
    ; sum of all packet number spaces
    ? packets_in_flight: uint64

    ; in bits per second
    ? pacing_rate: uint64

    * $$quic-recoverymetricsupdated-extension
}
]]></sourcecode>
        </figure>
        <t>In order to make logging easier, implementations <bcp14>MAY</bcp14> log values even if they are
the same as previously reported values (e.g., two subsequent
QUICRecoveryMetricsUpdated entries can both report the exact same value for
<tt>min_rtt</tt>). However, applications <bcp14>SHOULD</bcp14> try to log only actual updates to
values.</t>
        <t>Additionally, the <tt>recovery_metrics_updated</tt> event can contain any number of
unspecified fields to support different recovery approaches.</t>
      </section>
      <section anchor="quic-congestionstateupdated">
        <name>congestion_state_updated</name>
        <t>The <tt>congestion_state_updated</tt> event indicates when the congestion controller
enters a significant new state and changes its behaviour. It has Base importance
level.</t>
        <t>The values of the event's fields are intentionally unspecified here in order to
support different Congestion Control algorithms, as these typically have
different states and even different implementations of these states across
stacks. For example, for the algorithm defined in the QUIC Recovery RFC
("enhanced" New Reno), the following states are used: Slow Start, Congestion
Avoidance, Application Limited and Recovery. Similarly, states can be triggered
by a variety of events, including detection of Persistent Congestion or receipt
of ECN markings.</t>
        <figure anchor="quic-congestionstateupdated-def">
          <name>QUICCongestionStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICCongestionStateUpdated = {
    ? old: text
    new: text
    ? trigger: text

    * $$quic-congestionstateupdated-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>trigger</tt> field <bcp14>SHOULD</bcp14> be logged if there are multiple ways in which a state
change can occur but <bcp14>MAY</bcp14> be omitted if a given state can only be due to a single
event occurring (for example Slow Start is often exited only when ssthresh is
exceeded).</t>
      </section>
      <section anchor="quic-packetlost">
        <name>packet_lost</name>
        <t>The <tt>packet_lost</tt> event is emitted when a packet is deemed lost by loss
detection. It has Core importance level.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> to populate the optional <tt>trigger</tt> field in order to help
disambiguate among the various possible causes of a loss declaration.</t>
        <figure anchor="quic-packetlost-def">
          <name>QUICPacketLost definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketLost = {

    ; should include at least the packet_type and packet_number
    ? header: PacketHeader

    ; not all implementations will keep track of full
    ; packets, so these are optional
    ? frames: [* $QuicFrame]
    ? is_mtu_probe_packet: bool .default false
    ? trigger:
        "reordering_threshold" /
        "time_threshold" /
        ; RFC 9002 Section 6.2.4 paragraph 6, MAY
        "pto_expired"

    * $$quic-packetlost-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-markedforretransmit">
        <name>marked_for_retransmit</name>
        <t>The <tt>marked_for_retransmit</tt> event indicates which data was marked for
retransmission upon detection of packet loss (see <tt>packet_lost</tt>). It has Extra
importance level.</t>
        <t>Similar to the reasoning for the <tt>frames_processed</tt> event,
in order to keep the amount of different events low, this signal is grouped into
in a single event based on existing QUIC frame definitions for all types of
retransmittable data.</t>
        <t>Implementations retransmitting full packets or frames directly can just log the
constituent frames of the lost packet here (or do away with this event and use the
contents of the <tt>packet_lost</tt> event instead). Conversely, implementations that have
more complex logic (e.g., marking ranges in a stream's data buffer as in-flight),
or that do not track sent frames in full (e.g., only stream offset + length), can
translate their internal behaviour into the appropriate frame instance here even
if that frame was never or will never be put on the wire.</t>
        <t>Much of this data can be inferred if implementations log <tt>packet_sent</tt> events
(e.g., looking at overlapping stream data offsets and length, one can determine
when data was retransmitted).</t>
        <figure anchor="quic-markedforretransmit-def">
          <name>QUICMarkedForRetransmit definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICMarkedForRetransmit = {
    frames: [+ $QuicFrame]

    * $$quic-markedforretransmit-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-ecnstateupdated">
        <name>ecn_state_updated</name>
        <t>The <tt>ecn_state_updated</tt> event indicates a progression in the ECN state machine
as described in section A.4 of <xref target="QUIC-TRANSPORT"/>. It has Extra importance
level.</t>
        <figure anchor="quic-ecnstateupdated-def">
          <name>QUICECNStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICECNStateUpdated = {
   ? old: ECNState
    new: ECNState

    * $$quic-ecnstateupdated-extension
}

ECNState =
  ; ECN testing in progress
  "testing" /
  ; ECN state unknown, waiting for acknowledgements
  ; for testing packets
  "unknown" /
  ; ECN testing failed
  "failed" /
  ; testing was successful
  "capable"
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="quic-data-type-definitions">
      <name>QUIC data type definitions</name>
      <section anchor="quicversion">
        <name>QuicVersion</name>
        <figure anchor="quicversion-def">
          <name>QuicVersion definition</name>
          <sourcecode type="cddl"><![CDATA[
QuicVersion = hexstring
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectionid">
        <name>ConnectionID</name>
        <figure anchor="connectionid-def">
          <name>ConnectionID definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectionID = hexstring
]]></sourcecode>
        </figure>
      </section>
      <section anchor="initiator">
        <name>Initiator</name>
        <figure anchor="initiator-def">
          <name>Initiator definition</name>
          <sourcecode type="cddl"><![CDATA[
Initiator = "local" /
            "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ipaddress">
        <name>IPAddress</name>
        <figure anchor="ipaddress-def">
          <name>IPAddress definition</name>
          <sourcecode type="cddl"><![CDATA[
; an IPAddress can either be a "human readable" form
; (e.g., "127.0.0.1" for v4 or
; "2001:0db8:85a3:0000:0000:8a2e:0370:7334" for v6) or
; use a raw byte-form (as the string forms can be ambiguous).
; Additionally, a hash-based or redacted representation
; can be used if needed for privacy or security reasons.
IPAddress = text /
            hexstring
]]></sourcecode>
        </figure>
      </section>
      <section anchor="tupleendpointinfo">
        <name>TupleEndpointInfo</name>
        <t>TupleEndpointInfo indicates a single half/direction of a four-tuple. A full tuple
is comprised of two halves. Firstly: the server sends to the remote client IP
+ port using a specific destination Connection ID. Secondly: the client sends to
the remote server IP + port using a different destination Connection ID.</t>
        <t>As such, structures logging tuple information <bcp14>SHOULD</bcp14> include two different
TupleEndpointInfo instances, one for each half of the tuple.</t>
        <figure anchor="tupleendpointinfo-def">
          <name>TupleEndpointInfo definition</name>
          <sourcecode type="cddl"><![CDATA[
TupleEndpointInfo = {
    ? ip_v4: IPAddress
    ? port_v4: uint16
    ? ip_v6: IPAddress
    ? port_v6: uint16

    ; Even though usually only a single ConnectionID
    ; is associated with a given tuple/path at a time,
    ; there are situations where there can be an overlap
    ; or a need to keep track of previous ConnectionIDs
    ? connection_ids: [+ ConnectionID]

    * $$quic-tupleendpointinfo-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packettype">
        <name>PacketType</name>
        <figure anchor="packettype-def">
          <name>PacketType definition</name>
          <sourcecode type="cddl"><![CDATA[
$PacketType /=  "initial" /
                "handshake" /
                "0RTT" /
                "1RTT" /
                "retry" /
                "version_negotiation" /
                "stateless_reset" /
                "unknown"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packetnumberspace">
        <name>PacketNumberSpace</name>
        <figure anchor="packetnumberspace-def">
          <name>PacketNumberSpace definition</name>
          <sourcecode type="cddl"><![CDATA[
$PacketNumberSpace /= "initial" /
                      "handshake" /
                      "application_data"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packetheader">
        <name>PacketHeader</name>
        <t>If the <tt>packet_type</tt> numerical value does not map to a known <tt>$PacketType</tt>
string, the <tt>packet_type</tt> value of "unknown" can be used and the raw value
captured in the <tt>packet_type_bytes</tt> field; a numerical value without
variable-length integer encoding.</t>
        <t>The fixed and reserved bits are omitted here because they must be 0; see
<xref target="QUIC-TRANSPORT"/>. If these bits have an invalid value, the raw values can be
captured in the <tt>raw.data</tt> field of the event logging the PacketHeader.</t>
        <t>QUIC extensions that do utilize these bits are expected to create new events
(analogous to <tt>spin_bit_updated</tt>) or use qlog extension mechanisms to reflect
that usage.</t>
        <t>For long header packets of type initial, handshake, and 0RTT, the length field
of the packet header is logged in the qlog <tt>raw.length</tt> field, and the value
signifies the length of the packet number plus the payload.</t>
        <figure anchor="packetheader-def">
          <name>PacketHeader definition</name>
          <sourcecode type="cddl"><![CDATA[
PacketHeader = {
    packet_type: $PacketType

    ; only if packet_type === "unknown"
    ? packet_type_bytes: uint64

    ; only if packet_type === "1RTT"
    ? spin_bit: bool

    ; only if packet_type === "1RTT", and if the key phase was
    ; determined from the key_phase_bit
    ? key_phase: uint64

    ; only if packet_type === "1RTT", and if key_phase is not set
    ? key_phase_bit: bool

    ; only if packet_type === "initial" || "handshake" || "0RTT" ||
    ;                         "1RTT"
    ? packet_number_length: uint8

    ; only if packet_type === "initial" || "handshake" || "0RTT" ||
    ;                         "1RTT"
    ? packet_number: uint64

    ; only if packet_type === "initial" || "retry"
    ? token: Token

    ; only if packet_type === "initial" || "handshake" || "0RTT"
    ; Signifies length of the packet_number plus the payload
    ? length: uint16

    ; only if present in the header.
    ; if correctly using transport:connection_id_updated events,
    ; dcid can be skipped for 1RTT packets
    ? version: QuicVersion
    ? scil: uint8
    ? dcil: uint8
    ? scid: ConnectionID
    ? dcid: ConnectionID

    * $$quic-packetheader-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="token">
        <name>Token</name>
        <figure anchor="token-def">
          <name>Token definition</name>
          <sourcecode type="cddl"><![CDATA[
Token = {
    ? type: $TokenType

    ; decoded fields included in the token
    ; (typically: peer's IP address, creation time)
    ? details: {
      * text => any
    }
    ? raw: RawInfo

    * $$quic-token-extension
}

$TokenType /= "retry" /
              "resumption"
]]></sourcecode>
        </figure>
        <t>The token carried in an Initial packet can either be a retry token from a Retry
packet, or one originally provided by the server in a NEW_TOKEN frame used when
resuming a connection (e.g., for address validation purposes). Retry and
resumption tokens typically contain encoded metadata to check the token's
validity when it is used, but this metadata and its format is implementation
specific. For that, <tt>Token</tt> includes a general-purpose <tt>details</tt> field.</t>
      </section>
      <section anchor="stateless-reset-token">
        <name>Stateless Reset Token</name>
        <figure anchor="stateless-reset-token-def">
          <name>Stateless Reset Token definition</name>
          <sourcecode type="cddl"><![CDATA[
StatelessResetToken = hexstring .size 16
]]></sourcecode>
        </figure>
        <t>The stateless reset token is carried in stateless reset packets, in transport
parameters and in NEW_CONNECTION_ID frames.</t>
      </section>
      <section anchor="keytype">
        <name>KeyType</name>
        <figure anchor="keytype-def">
          <name>KeyType definition</name>
          <sourcecode type="cddl"><![CDATA[
$KeyType /= "server_initial_secret" /
            "client_initial_secret" /
            "server_handshake_secret" /
            "client_handshake_secret" /
            "server_0rtt_secret" /
            "client_0rtt_secret" /
            "server_1rtt_secret" /
            "client_1rtt_secret"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ecn">
        <name>ECN</name>
        <figure anchor="ecn-def">
          <name>ECN definition</name>
          <sourcecode type="cddl"><![CDATA[
ECN = "Not-ECT" / "ECT(1)" / "ECT(0)" / "CE"
]]></sourcecode>
        </figure>
        <t>The ECN bits carried in the IP header.</t>
      </section>
      <section anchor="quic-frames">
        <name>QUIC Frames</name>
        <t>The generic <tt>$QuicFrame</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional QUIC frame types.</t>
        <figure anchor="quicframe-def">
          <name>QuicFrame type socket definition</name>
          <artwork><![CDATA[
; The QuicFrame is any key-value map (e.g., JSON object)
$QuicFrame /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The QUIC frame types defined in this document are as follows:</t>
        <figure anchor="quicbaseframe-def">
          <name>QuicBaseFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
QuicBaseFrames =  PaddingFrame /
                  PingFrame /
                  AckFrame /
                  ResetStreamFrame /
                  StopSendingFrame /
                  CryptoFrame /
                  NewTokenFrame /
                  StreamFrame /
                  MaxDataFrame /
                  MaxStreamDataFrame /
                  MaxStreamsFrame /
                  DataBlockedFrame /
                  StreamDataBlockedFrame /
                  StreamsBlockedFrame /
                  NewConnectionIDFrame /
                  RetireConnectionIDFrame /
                  PathChallengeFrame /
                  PathResponseFrame /
                  ConnectionCloseFrame /
                  HandshakeDoneFrame /
                  UnknownFrame /
                  DatagramFrame

$QuicFrame /= QuicBaseFrames
]]></sourcecode>
        </figure>
        <section anchor="paddingframe">
          <name>PaddingFrame</name>
          <t>In QUIC, PADDING frames are simply identified as a single byte of value 0. As
such, each padding byte could be theoretically interpreted and logged as an
individual PaddingFrame.</t>
          <t>However, as this leads to heavy logging overhead, implementations <bcp14>SHOULD</bcp14> instead
emit just a single PaddingFrame and set the <tt>raw.payload_length</tt> property to the
amount of PADDING bytes/frames included in the packet.</t>
          <figure anchor="paddingframe-def">
            <name>PaddingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PaddingFrame = {
    frame_type: "padding"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pingframe">
          <name>PingFrame</name>
          <figure anchor="pingframe-def">
            <name>PingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PingFrame = {
    frame_type: "ping"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ackframe">
          <name>AckFrame</name>
          <figure anchor="ackframe-def">
            <name>AckFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
; either a single number (e.g., [1]) or two numbers (e.g., [1,2]).
; For two numbers:
; the first number is "from": lowest packet number in interval
; the second number is "to": up to and including the highest
; packet number in the interval
AckRange = [1*2 uint64]

AckFrame = {
    frame_type: "ack"

    ; in ms
    ? ack_delay: float32

    ; e.g., looks like [[1,2],[4,5], [7], [10,22]] serialized
    ? acked_ranges: [+ AckRange]

    ; ECN (explicit congestion notification) related fields
    ; (not always present)
    ? ect1: uint64
    ? ect0: uint64
    ? ce: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
          <t>Note that the packet ranges in AckFrame.acked_ranges do not necessarily have to be
ordered (e.g., [[5,9],[1,4]] is a valid value).</t>
          <t>Note that the two numbers in the packet range can be the same (e.g., [120,120] means
that packet with number 120 was ACKed). However, in that case, implementers <bcp14>SHOULD</bcp14>
log [120] instead and tools <bcp14>MUST</bcp14> be able to deal with both notations.</t>
        </section>
        <section anchor="resetstreamframe">
          <name>ResetStreamFrame</name>
          <t>If the error numerical value does not map to a known ApplicationError string,
the error value of "unknown" can be used and the raw value captured in the
error_code field; a numerical value without variable-length integer encoding.</t>
          <figure anchor="resetstreamframe-def">
            <name>ResetStreamFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
ResetStreamFrame = {
    frame_type: "reset_stream"
    stream_id: uint64
    error: $ApplicationError

    ; if error_code === "unknown"
    ? error_code: uint64

    ; in bytes
    final_size: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="stopsendingframe">
          <name>StopSendingFrame</name>
          <t>If the error numerical value does not map to a known ApplicationError string,
the error value of "unknown" can be used and the raw value captured in the
error_code field; a numerical value without variable-length integer encoding.</t>
          <figure anchor="stopsendingframe-def">
            <name>StopSendingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StopSendingFrame = {
    frame_type: "stop_sending"
    stream_id: uint64
    error: $ApplicationError

    ; if error_code === "unknown"
    ? error_code: uint64

    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cryptoframe">
          <name>CryptoFrame</name>
          <t>The length field of the Crypto frame <bcp14>MUST</bcp14> be logged in the qlog <tt>raw.length</tt>
field. The other sub-fields of the <tt>raw</tt> field are optional.</t>
          <figure anchor="cryptoframe-def">
            <name>CryptoFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
CryptoFrame = {
    frame_type: "crypto"
    offset: uint64
    raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="newtokenframe">
          <name>NewTokenFrame</name>
          <figure anchor="newtokenframe-def">
            <name>NewTokenFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
NewTokenFrame = {
  frame_type: "new_token"
  token: Token
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamframe">
          <name>StreamFrame</name>
          <t>If the stream frame contains a length field, it <bcp14>MUST</bcp14> be logged in the qlog
<tt>raw.length</tt> field. If it does not, the implementation <bcp14>MAY</bcp14> calculate the actual
frame byte length itself and log that in <tt>raw.length</tt> if necessary.</t>
          <figure anchor="streamframe-def">
            <name>StreamFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamFrame = {
    frame_type: "stream"
    stream_id: uint64
    ? offset: uint64 .default 0
    ? fin: bool .default false
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxdataframe">
          <name>MaxDataFrame</name>
          <figure anchor="maxdataframe-def">
            <name>MaxDataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxDataFrame = {
  frame_type: "max_data"
  maximum: uint64
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxstreamdataframe">
          <name>MaxStreamDataFrame</name>
          <figure anchor="maxstreamdataframe-def">
            <name>MaxStreamDataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxStreamDataFrame = {
  frame_type: "max_stream_data"
  stream_id: uint64
  maximum: uint64
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxstreamsframe">
          <name>MaxStreamsFrame</name>
          <figure anchor="maxstreamsframe-def">
            <name>MaxStreamsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxStreamsFrame = {
  frame_type: "max_streams"
  stream_type: StreamType
  maximum: uint64
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="datablockedframe">
          <name>DataBlockedFrame</name>
          <figure anchor="datablockedframe-def">
            <name>DataBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
DataBlockedFrame = {
  frame_type: "data_blocked"
  limit: uint64
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamdatablockedframe">
          <name>StreamDataBlockedFrame</name>
          <figure anchor="streamdatablockedframe-def">
            <name>StreamDataBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamDataBlockedFrame = {
  frame_type: "stream_data_blocked"
  stream_id: uint64
  limit: uint64
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamsblockedframe">
          <name>StreamsBlockedFrame</name>
          <figure anchor="streamsblockedframe-def">
            <name>StreamsBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamsBlockedFrame = {
  frame_type: "streams_blocked"
  stream_type: StreamType
  limit: uint64
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="newconnectionidframe">
          <name>NewConnectionIDFrame</name>
          <figure anchor="newconnectionidframe-def">
            <name>NewConnectionIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
NewConnectionIDFrame = {
  frame_type: "new_connection_id"
  sequence_number: uint64
  retire_prior_to: uint64

  ; mainly used if e.g., for privacy reasons the full
  ; connection_id cannot be logged
  ? connection_id_length: uint8
  connection_id: ConnectionID
  ? stateless_reset_token: StatelessResetToken
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="retireconnectionidframe">
          <name>RetireConnectionIDFrame</name>
          <figure anchor="retireconnectionid-def">
            <name>RetireConnectionIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
RetireConnectionIDFrame = {
  frame_type: "retire_connection_id"
  sequence_number: uint64
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pathchallengeframe">
          <name>PathChallengeFrame</name>
          <figure anchor="pathchallengeframe-def">
            <name>PathChallengeFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PathChallengeFrame = {
  frame_type: "path_challenge"

  ; always 64 bits
  ? data: hexstring
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pathresponseframe">
          <name>PathResponseFrame</name>
          <figure anchor="pathresponseframe-def">
            <name>PathResponseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PathResponseFrame = {
  frame_type: "path_response"

  ; always 64 bits
  ? data: hexstring
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="connectioncloseframe">
          <name>ConnectionCloseFrame</name>
          <t>An endpoint that receives unknown error codes can record it in the error_code
field using the numerical value without variable-length integer encoding.</t>
          <t>When the connection is closed due a connection-level error, the
<tt>trigger_frame_type</tt> field can be used to log the frame that triggered the
error. For known frame types, the appropriate string value is used in the error field. For
unknown frame types, the error field has the value "unknown" and the numerical
value without variable-length integer encoding can be logged in error_code.</t>
          <t>The CONNECTION_CLOSE reason phrase is a byte sequences. It is likely that this
sequence is presentable as UTF-8, in which case it can be logged in the <tt>reason</tt>
field. The <tt>reason_bytes</tt> field supports logging the raw bytes, which can be useful
when the value is not UTF-8 or when an endpoint does not want to decode it.
Implementations <bcp14>SHOULD</bcp14> log at least one format, but <bcp14>MAY</bcp14> log both or none.</t>
          <figure anchor="connectioncloseframe-def">
            <name>ConnectionCloseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
ErrorSpace = "transport" /
             "application"

ConnectionCloseFrame = {
    frame_type: "connection_close"
    ? error_space: ErrorSpace
    ? error: $TransportError / CryptoError /
             $ApplicationError

    ; only if error_code === "unknown"
    ? error_code: uint64

    ? reason: text
    ? reason_bytes: hexstring

    ; when error_space === "transport"
    ? trigger_frame_type: uint64 /
                          text
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="handshakedoneframe">
          <name>HandshakeDoneFrame</name>
          <figure anchor="handshakedoneframe-def">
            <name>HandshakeDoneFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HandshakeDoneFrame = {
  frame_type: "handshake_done"
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="unknownframe">
          <name>UnknownFrame</name>
          <t>The frame_type_bytes field is the numerical value without variable-length
integer encoding.</t>
          <figure anchor="unknownframe-def">
            <name>UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
UnknownFrame = {
    frame_type: "unknown"
    frame_type_bytes: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="datagramframe">
          <name>DatagramFrame</name>
          <t>The QUIC DATAGRAM frame is defined in <xref section="4" sectionFormat="of" target="RFC9221"/>.</t>
          <t>If the datagram frame contains a length field, it <bcp14>MUST</bcp14> be logged in the qlog
<tt>raw.length</tt> field. If it does not, the implementation <bcp14>MAY</bcp14> calculate the actual
datagram byte length itself and log that in <tt>raw.length</tt> if necessary.</t>
          <figure anchor="datagramframe-def">
            <name>DatagramFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
DatagramFrame = {
    frame_type: "datagram"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="transporterror">
          <name>TransportError</name>
          <t>The generic <tt>$TransportError</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional Transport errors.</t>
          <figure anchor="transporterror-def">
            <name>TransportError definition</name>
            <sourcecode type="cddl"><![CDATA[
$TransportError /= "no_error" /
                 "internal_error" /
                 "connection_refused" /
                 "flow_control_error" /
                 "stream_limit_error" /
                 "stream_state_error" /
                 "final_size_error" /
                 "frame_encoding_error" /
                 "transport_parameter_error" /
                 "connection_id_limit_error" /
                 "protocol_violation" /
                 "invalid_token" /
                 "application_error" /
                 "crypto_buffer_exceeded" /
                 "key_update_error" /
                 "aead_limit_reached" /
                 "no_viable_path" /
                 "unknown"
                 ; there is no value to reflect CRYPTO_ERROR
                 ; use the CryptoError type instead
]]></sourcecode>
          </figure>
        </section>
        <section anchor="applicationerror">
          <name>ApplicationError</name>
          <t>By definition, an application error is defined by the application-level
protocol running on top of QUIC (e.g., HTTP/3).</t>
          <t>As such, it cannot be defined here completely. It is instead defined as a CDDL
"type socket" extension point, with a single "unknown" value.</t>
          <figure anchor="applicationerror-def">
            <name>ApplicationError definition</name>
            <sourcecode type="cddl"><![CDATA[
$ApplicationError /= "unknown"
]]></sourcecode>
          </figure>
          <t>Application-level qlog definitions that wish to define new ApplicationError
strings <bcp14>MUST</bcp14> do so by extending the $ApplicationError socket as such:</t>
          <artwork><![CDATA[
$ApplicationError /= "new_error_name" /
                     "another_new_error_name"
]]></artwork>
        </section>
        <section anchor="cryptoerror">
          <name>CryptoError</name>
          <t>These errors are defined in the TLS document as "A TLS alert is turned into a QUIC
connection error by converting the one-byte alert description into a QUIC error
code. The alert description is added to 0x100 to produce a QUIC error code from
the range reserved for CRYPTO_ERROR."</t>
          <t>This approach maps badly to a pre-defined enum. As such, the crypto_error
string is defined as having a dynamic component here, which should include the
hex-encoded and zero-padded value of the TLS alert description.</t>
          <figure anchor="cryptoerror-def">
            <name>CryptoError definition</name>
            <sourcecode type="cddl"><![CDATA[
; all strings from "crypto_error_0x100" to "crypto_error_0x1ff"
CryptoError = text .regexp "crypto_error_0x1[0-9a-f][0-9a-f]"
]]></sourcecode>
          </figure>
        </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>This document registers a new entry in the "qlog event schema URIs" registry (created in <xref section="15" sectionFormat="of" target="QLOG-MAIN"/>):</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:quic</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>quic</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>server_listening,
connection_started,
connection_closed,
connection_id_updated,
spin_bit_updated,
connection_state_updated,
tuple_assigned,
mtu_updated,
version_information,
alpn_information,
parameters_set,
parameters_restored,
packet_sent,
packet_received,
packet_dropped,
packet_buffered,
packets_acked,
udp_datagrams_sent,
udp_datagrams_received,
udp_datagram_dropped,
stream_state_updated,
frames_processed,
stream_data_moved,
datagram_data_moved,
migration_state_updated,
key_updated,
key_discarded,
recovery_parameters_set,
recovery_metrics_updated,
congestion_state_updated,
timer_updated,
packet_lost,
marked_for_retransmit,
ecn_state_updated</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions related to the QUIC transport protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="QLOG-MAIN">
          <front>
            <title>qlog: Structured Logging for Network Protocols</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">
         </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   qlog provides extensible structured logging for network protocols,
   allowing for easy sharing of data that benefits common debug and
   analysis methods and tooling.  This document describes key concepts
   of qlog: formats, files, traces, events, and extension points.  This
   definition includes the high-level log file schemas, and generic
   event schemas.  Requirements and guidelines for creating protocol-
   specific event schemas are also presented.  All schemas are defined
   independent of serialization format, allowing logs to be represented
   in various 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-12"/>
        </reference>
        <reference anchor="QUIC-TRANSPORT">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="QUIC-RECOVERY">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="QUIC-TLS">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="QUIC-DATAGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="GREASEBIT">
          <front>
            <title>Greasing the QUIC Bit</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes a method for negotiating the ability to send an arbitrary value for the second-most significant bit in QUIC packets.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9287"/>
          <seriesInfo name="DOI" value="10.17487/RFC9287"/>
        </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="RFC9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </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, Christian Huitema, Hugo Landau, Will Hawkins, Mathis Engelbart, Kazuho
Oku, and Jonathan Lennox 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-qlog-quic-events-11">
        <name>Since draft-ietf-qlog-quic-events-11:</name>
        <ul spacing="normal">
          <li>Updated several fields to be uint64 per QUIC spec</li>
          <li>Renamed error and error_code fields and logic (#473)</li>
          <li>Clarified parameters_set usage (#493)</li>
          <li>Replaced all length fields with raw.length (#495)</li>
          <li>Change loss_timer_updated to timer_updated (#496)</li>
          <li>Renamed path_assigned to tuple_assigned (#491)</li>
          <li>Reworked stream_state_updated (#497)</li>
          <li>Renamed owner to initiator (#498)</li>
          <li>Split up flags in PacketHeader (#478)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-09">
        <name>Since draft-ietf-qlog-quic-events-09:</name>
        <ul spacing="normal">
          <li>Several editorial changes</li>
          <li>Reworked QUICConnectionStarted to use PathEndpointInfo (#453)</li>
          <li>Consistent use of RawInfo and _bytes fields to log raw data (#450)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-08">
        <name>Since draft-ietf-qlog-quic-events-08:</name>
        <ul spacing="normal">
          <li>Removed individual categories and put every event in the single <tt>quic</tt> event
schema namespace. Major change (#439)</li>
          <li>Renamed <tt>recovery:metrics_updated</tt> to <tt>quic:recovery_metrics_updated</tt> and
<tt>recovery:parameters_set</tt> to <tt>quic:recovery_parameters_set</tt> (#439)</li>
          <li>Added <tt>unknown_parameters</tt> field to <tt>parameters_set</tt> (#438)</li>
          <li>Added extra parameters to <tt>parameters_restored</tt> (#441)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-07">
        <name>Since draft-ietf-qlog-quic-events-07:</name>
        <ul spacing="normal">
          <li>TODO (we forgot...)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-06">
        <name>Since draft-ietf-qlog-quic-events-06:</name>
        <ul spacing="normal">
          <li>Added PathAssigned and MigrationStateUpdated events (#336)</li>
          <li>Added extension points to parameters_set and parameters_restored (#400)</li>
          <li>Removed error_code_value from connection_closed (#386, #392)</li>
          <li>Renamed generation to key_phase for key_updated and key_discarded (#390)</li>
          <li>Removed retry_token from packet_sent and packet_received (#389)</li>
          <li>Updated ALPN handling (#385)</li>
          <li>Added key_unavailable trigger to packet_dropped (#381)</li>
          <li>Updated several uint32 to uint64</li>
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#402, #404, #394, #393)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-05">
        <name>Since draft-ietf-qlog-quic-events-05:</name>
        <ul spacing="normal">
          <li>SecurityKeyUpdated: the new key is no longer mandatory to log (#294)</li>
          <li>Added ECN related events and metadata (#263)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-04">
        <name>Since draft-ietf-qlog-quic-events-04:</name>
        <ul spacing="normal">
          <li>Updated guidance on logging events across connections (#279)</li>
          <li>Renamed 'transport' category to 'quic' (#302)</li>
          <li>Added support for multiple packet numbers in 'quic:frames_processed' (#307)</li>
          <li>Added definitions for RFC9287 (QUIC GREASE Bit extension) (#311)</li>
          <li>Added definitions for RFC9221 (QUIC Datagram Frame extension) (#310)</li>
          <li>(Temporarily) removed definitions for connection migration events (#317)</li>
          <li>Editorial and formatting changes (#298, #299, #304, #306, #327)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-03">
        <name>Since draft-ietf-qlog-quic-events-03:</name>
        <ul spacing="normal">
          <li>Ensured consistent use of RawInfo to indicate raw wire bytes (#243)</li>
          <li>Renamed UnknownFrame:raw_frame_type to :frame_type_value (#54)</li>
          <li>Renamed ConnectionCloseFrame:raw_error_code to :error_code_value (#54)</li>
          <li>Changed triggers for packet_dropped (#278)</li>
          <li>Added entries to TransportError enum (#285)</li>
          <li>Changed minimum_congestion_window to uint64 (#288)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-02">
        <name>Since draft-ietf-qlog-quic-events-02:</name>
        <ul spacing="normal">
          <li>Renamed key_retired to key_discarded (#185)</li>
          <li>Added fields and events for DPLPMTUD (#135)</li>
          <li>Made packet_number optional in PacketHeader (#244)</li>
          <li>Removed connection_retried event placeholder (#255)</li>
          <li>Changed QuicFrame 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-qlog-quic-events-01">
        <name>Since draft-ietf-qlog-quic-events-01:</name>
        <ul spacing="normal">
          <li>Added Stateless Reset Token type (#122)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-00">
        <name>Since draft-ietf-qlog-quic-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>
          <li>Changed to/from value options of the <tt>data_moved</tt> event</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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
gocKe2/ZEiwNo2tGX3iEw5W4LwAuMO9k39Xb1PaJgQmzFP2e/XrGrTckLG3c
iox83gCZAwwcKEOWgB4GPJzXsDs7BzXToBS1+pxsYMBwAKBEKbuQOvV06IwB
z34Vk/af4lNoACpQbuq5T9JZzUOjrxa7QaW2zqUmzcIKl9AV0Gys+jK02gbu
k30VyXNS2lSsHpO8DM4Y0MsYVzCbmX4SOzPzijyg2DHG5WrR7kUD8SdfVmbq
vL1aV+jKKayjjjLs+XuJ3+mhulEctT0qSTyYkpbgCq7MFWoUFnVh43gjPSfj
imk0BDKjyqjHgNHShLFyEHBg1S0C8qyoqgjDXsVIJosJIocoma2J2jk/Pnzz
++PzP6JeXo34lOrVbHHj89aPkS8quOQXrRPnovlxr6w/S7hS8nkazIsJ2TGr
KvanX+rkD7By8iT7QPFGUWNwBl1WtKou1xZDQziCG1ysqJ40UJW0XhFLiCPY
oEUsjYbZ1hFuouvQWw5dqNFdOXfrSaJGG3kqYMpdxlz8bsTHVZPfTzVt712W
xFdCZt0rbqkraZ3Y5XnF2aAe2+4j3hm+l9wXwSEGqly5YhRSwJyKQN4my4oA
XauQ2nBP3hmU92g3ItsXaXIAXptajZ6Xjtg8dc+87SPAsyObDq6lhUmIsKYX
N019r+UWWj7PXj+Q98yqnABsTI0PgsfNkmLCJObL2laMP57sDH+ngWDkOW1D
g3iwUGNAwdHGixZrW2EBKwN4bnSUyDIOh9fm2LYh4Q5Bmiy512F57AnebX1n
UGbPWYDtVfLxoqOUg4jZmT+eS5VB2V9jPxC8CjRovhAVboDxJZ5X6IMGe2P/
Q7RaJCYXruFO269NKMd7rQLC7AFNIKtjaAzwH4Aljhmnf3xUpeNBeseCPKUH
9Ck1PArotNPo6gFGRE+C+TldheCM3Qkow9swJs0t24oPSZSxDw0jZLKG72Ft
CcxkyFPU4io4CgmMgdm/JSWciUeQEq02mYmpFUY52JxP8FJxmkSJMrt8dbFt
3vfqWRXkLEWJSDbRe0MijL4IIMOeRDdcOG0CqHB23ocJK+kg2Jp9otD5W8lA
6BTXoyYqe1NwHVN6ysv1u9e0R787xVvzA+ds/xq/+/iRI2lfXQhFdbu5BjZK
8vuwfoPtvmzu1XlwLWOUrkmBjpWcs7oxpR0DxobndQDZPHNB2Tz8LcB8ZEbZ
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
bkaCO/T/AU+iMReeZAEA

-->

</rfc>
