<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pardue-moq-qlog-moq-events-04" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>MoQ qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-pardue-moq-qlog-moq-events-04"/>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <author fullname="Mathis Engelbart">
      <organization>Technical University of Munich</organization>
      <address>
        <email>mathis.engelbart@gmail.com</email>
      </address>
    </author>
    <author fullname="Aman Sharma">
      <organization>Meta</organization>
      <address>
        <email>amsharma@meta.com</email>
      </address>
    </author>
    <date year="2026" month="January" day="07"/>
    <area/>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>hi fidelity</keyword>
    <abstract>
      <?line 48?>

<t>This document defines a qlog event schema containing concrete events for MoQ.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://LPardue.github.io/draft-pardue-moq-qlog-moq-events/draft-pardue-moq-qlog-moq-events.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-pardue-moq-qlog-moq-events/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC  mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/LPardue/draft-pardue-moq-qlog-moq-events"/>.</t>
    </note>
  </front>
  <middle>
    <?line 53?>

<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 Media over QUIC Transport <xref target="MOQT"/>.</t>
      <t>The event namespace with identifier <tt>moqt</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.</t>
      <t><xref target="events-table"/> summarizes the name value of each event type that is defined in
this specification. 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>
      <table anchor="events-table">
        <name>MOQT 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">moqt:control_message_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="controlmessagecreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:control_message_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="controlmessageparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:stream_type_set</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="streamtypeset"/></td>
          </tr>
          <tr>
            <td align="left">moqt:object_datagram_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="objectdatagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:object_datagram_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="objectdatagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_header_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupheadercreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_header_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupheaderparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_object_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupobjectcreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_object_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupobjectparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_header_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchheadercreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_header_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchheaderparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_object_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchobjectcreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_object_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchobjectparsed"/></td>
          </tr>
        </tbody>
      </table>
      <section anchor="usage-with-quic">
        <name>Usage with QUIC</name>
        <t>The events described in this document can be used with or without logging the
related QUIC events defined in <xref target="QLOG-QUIC"/>. If used with QUIC events, the QUIC
document takes precedence in terms of recommended filenames and trace separation
setups.</t>
        <t>If used without QUIC events, it is recommended that the implementation assign a
globally unique identifier to each MOQT session. This ID can then be used as the
value of the qlog "group_id" field, as well as the qlog filename or file
identifier, potentially suffixed by the vantagepoint type (For example,
abcd1234_server.qlog would contain the server-side trace of the connection with
GUID abcd1234).</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>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, 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 anchor="schema-def">
      <name>Event Schema Definition</name>
      <t>This document describes how the MOQT protocol is expressed in qlog with an event
schema. Per the requirements in <xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document
registers the <tt>moqt</tt> namespace. The event schema URI is
<tt>urn:ietf:params:qlog:events:moqt</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:moqt</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 99 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:moqt-99</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="moqt-events">
      <name>MOQT Events</name>
      <t>MOQT 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="moqt-events-def">
        <name>MOQTEventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
MOQTEventData = MOQTControlMessageCreated /
                MOQTControlMessageParsed /
                MOQTStreamTypeSet /
                MOQTObjectDatagramCreated /
                MOQTObjectDatagramParsed /
                MOQTSubgroupHeaderCreated /
                MOQTSubgroupHeaderParsed /
                MOQTSubgroupObjectCreated /
                MOQTSubgroupObjectParsed /
                MOQTFetchHeaderCreated /
                MOQTFetchHeaderParsed /
                MOQTFetchObjectCreated /
                MOQTFetchObjectParsed

$ProtocolEventData /= MOQTEventData
]]></sourcecode>
      </figure>
      <t>MOQT events are logged when a certain condition happens at the application
layer, and there isn't always a one to one mapping between HTTP and QUIC events.
The exchange of data between the HTTP and QUIC layer is logged via the
"stream_data_moved" and "datagram_data_moved" events in <xref target="QLOG-QUIC"/>.</t>
      <t>The concrete MOQT event types are further defined below, their type identifier
is the heading name.</t>
      <t>Some MOQT messages include a reason phrase that can provide additional
information in the format of a byte sequences. However, these sequences are not
guaranteed to be presentable as UTF-8. In order to accomodate various encodings,
where the wire image of a message includes a reason phrase, the MOQT qlog event
type, includes two option fields: <tt>reason</tt> (for UTF-8) and <tt>reason_bytes</tt> (a
hex-encoded string representing raw bytes). Implementations <bcp14>SHOULD</bcp14> log at least
one format, but <bcp14>MAY</bcp14> log both or none.</t>
      <section anchor="controlmessagecreated">
        <name>control_message_created</name>
        <t>The <tt>control_message_created</tt> event is emitted when a control message is created.
It has Core importance level.</t>
        <t>The definition of control message content is in <xref target="moqtcontrolmessage"/>.</t>
        <figure anchor="moqt-controlmessagecreated-def">
          <name>MOQTControlMessageCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTControlMessageCreated = {
    stream_id: uint64
    ? length: uint64
    message: $MOQTControlMessage
    ? raw: RawInfo

    * $$moqt-controlmessagecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="controlmessageparsed">
        <name>control_message_parsed</name>
        <t>The <tt>control_message_parsed</tt> event is emitted when a control message is parsed.
It has Core importance level.</t>
        <t>The definition of control message content is in <xref target="moqtcontrolmessage"/>.</t>
        <figure anchor="controlmessageparsed-def">
          <name>MOQTControlMessageParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTControlMessageParsed = {
    stream_id: uint64
    ? length: uint64
    message: $MOQTControlMessage
    ? raw: RawInfo

    * $$moqt-controlmessageparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="streamtypeset">
        <name>stream_type_set</name>
        <t>The <tt>stream_type_set</tt> event conveys when a MOQT stream type becomes known. It
has Base importance level.</t>
        <figure anchor="streamtypeset-def">
          <name>MOQTStreamTypeSet definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTStreamTypeSet = {
    ? owner: Owner
    stream_id: uint64
    stream_type: $MOQTStreamType

    * $$moqt-streamtypeset-extension
}

$MOQTStreamType /=  "control" /
                    "subgroup_header" /
                    "fetch_header"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="objectdatagramcreated">
        <name>object_datagram_created</name>
        <t>The <tt>object_datagram_created</tt> event is emitted when the OBJECT_DATAGRAM message
is created. It has Core importance level.</t>
        <figure anchor="objectdatagramcreated-def">
          <name>MOQTObjectDatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTObjectDatagramCreated = {
    track_alias: uint64
    group_id: uint64
    ? object_id: uint64
    publisher_priority: uint8
    ? extension_headers_length: uint64
    ? extension_headers: [* MOQTExtensionHeader]
    ? object_status: uint64
    ? object_payload: RawInfo
    end_of_group: bool

    * $$moqt-objectdatagramcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="objectdatagramparsed">
        <name>object_datagram_parsed</name>
        <t>The <tt>object_datagram_parsed</tt> event is emitted when the OBJECT_DATAGRAM message
is parsed. It has Core importance level.</t>
        <figure anchor="objectdatagramparsed-def">
          <name>MOQTObjectDatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTObjectDatagramParsed = {
    track_alias: uint64
    group_id: uint64
    ? object_id: uint64
    publisher_priority: uint8
    ? extension_headers_length: uint64
    ? extension_headers: [* MOQTExtensionHeader]
    ? object_status: uint64
    ? object_payload: RawInfo
    end_of_group: bool

    * $$moqt-objectdatagramparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupheadercreated">
        <name>subgroup_header_created</name>
        <t>The <tt>subgroup_header_created</tt> event is emitted when a stream begins and a
SUBGROUP_HEADER is created. It has Core importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>The SUBGROUP_HEADER object in MoQT uses 12 type values to encode various
properties. The <tt>subgroup_header_created</tt> event conveys these as explicit
fields, such as contains_end_of_group.</t>
        <t>If the subgroup_id is the object_id of the first object, the subgroup_id is
omitted. Otherwise, it is included with the relevant value.</t>
        <figure anchor="subgroupheadercreated-def">
          <name>MOQTSubgroupHeaderCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupHeaderCreated = {
    stream_id: uint64
    track_alias: uint64
    group_id: uint64
    ? subgroup_id: uint64
    publisher_priority: uint8
    contains_end_of_group: bool
    extensions_present: bool

    * $$moqt-subgroupheadercreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupheaderparsed">
        <name>subgroup_header_parsed</name>
        <t>The <tt>subgroup_header_parsed</tt> event is emitted when the SUBGROUP_HEADER is
parsed. It has Core importance level.</t>
        <t>The SUBGROUP_HEADER object in MoQT uses 12 type values to encode various
properties. The event conveys these as explicit fields, such as
contains_end_of_group.</t>
        <t>If the subgroup_id is the object_id of the first object, the subgroup_id is
omitted. Otherwise, it is included with the relevant value.</t>
        <figure anchor="subgroupheaderparsed-def">
          <name>MOQTSubgroupHeaderParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupHeaderParsed = {
    stream_id: uint64
    track_alias: uint64
    group_id: uint64
    ? subgroup_id: uint64
    publisher_priority: uint8
    contains_end_of_group: bool
    extensions_present: bool

    * $$moqt-subgroupheaderparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupobjectcreated">
        <name>subgroup_object_created</name>
        <t>The <tt>subgroup_object_created</tt> event is emitted when a subgroup object is
created. It has Core importance level.</t>
        <figure anchor="subgroupobjectcreated-def">
          <name>MOQTSubgroupObjectCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupObjectCreated = {
    stream_id: uint64
    ? group_id: uint64
    ? subgroup_id: uint64
    object_id: uint64
    extension_headers_length: uint64
    ? extension_headers: [* MOQTExtensionHeader]
    object_payload_length: uint64
    ? object_status: uint64
    ? object_payload: RawInfo

    * $$moqt-subgroupobjectcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupobjectparsed">
        <name>subgroup_object_parsed</name>
        <t>The <tt>subgroup_object_parsed</tt> event is emitted when a subgroup object is parsed.
It has Core importance level.</t>
        <figure anchor="subgroupobjectparsed-def">
          <name>MOQTSubgroupObjectParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupObjectParsed = {
    stream_id: uint64
    ? group_id: uint64
    ? subgroup_id: uint64
    object_id: uint64
    extension_headers_length: uint64
    ? extension_headers: [* MOQTExtensionHeader]
    object_payload_length: uint64
    ? object_status: uint64
    ? object_payload: RawInfo

    * $$moqt-subgroupobjectparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchheadercreated">
        <name>fetch_header_created</name>
        <t>The <tt>fetch_header_created</tt> event is emitted when a stream begins and a
FETCH_HEADER is created. It has Core importance level.</t>
        <figure anchor="fetchheadercreated-def">
          <name>MOQTFetchHeaderCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchHeaderCreated = {
    stream_id: uint64
    request_id: uint64

    * $$moqt-fetchheadercreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchheaderparsed">
        <name>fetch_header_parsed</name>
        <t>The <tt>fetch_header_parsed</tt> event is emitted when the SUBGROUP_HEADER is
parsed. It has Core importance level.</t>
        <figure anchor="fetchheaderparsedd-def">
          <name>MOQTFetchHeaderParsed   definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchHeaderParsed = {
    stream_id: uint64
    request_id: uint64

    * $$moqt-fetchheaderparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchobjectcreated">
        <name>fetch_object_created</name>
        <t>The <tt>fetch_object_created</tt> event is emitted when a fetch object is created. It
has Core importance level.</t>
        <figure anchor="fetchobjectcreated-def">
          <name>MOQTFetchObjectCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchObjectCreated = {
    stream_id: uint64
    group_id: uint64
    subgroup_id: uint64
    object_id: uint64
    publisher_priority: uint8
    extension_headers_length: uint64
    ? extension_headers: [* MOQTExtensionHeader]
    object_payload_length: uint64
    ? object_status: uint64
    ? object_payload: RawInfo

    * $$moqt-fetchobjectcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchobjectparsed">
        <name>fetch_object_parsed</name>
        <t>The <tt>fetch_object_parsed</tt> event is emitted when a fetch object is parsed. It has
Core importance level.</t>
        <figure anchor="fetchobjectparsed-def">
          <name>MOQTFetchObjectParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchObjectParsed = {
    stream_id: uint64
    group_id: uint64
    subgroup_id: uint64
    object_id: uint64
    publisher_priority: uint8
    extension_headers_length: uint64
    ? extension_headers: [* MOQTExtensionHeader]
    object_payload_length: uint64
    ? object_status: uint64
    ? object_payload: RawInfo

    * $$moqt-fetchobjectparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="moqt-data-type-definitions">
      <name>MOQT Data Type Definitions</name>
      <t>The following data type definitions can be used in MOQT events.</t>
      <section anchor="owner">
        <name>Owner</name>
        <figure anchor="owner-def">
          <name>Owner definition</name>
          <sourcecode type="cddl"><![CDATA[
Owner = "local" /
        "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtsetupparameter">
        <name>MOQTSetupParameter</name>
        <t>The generic $MOQTSetupParameter is defined here as a CDDL "type socket"
extension point. It can be extended to support additional MOQT Setup Parameters.</t>
        <figure anchor="moqtsetupparameter-def">
          <name>MOQTSetupParameter type socket definition</name>
          <sourcecode type="cddl"><![CDATA[
; The MOQTSetupParameter is any key-value map (e.g., JSON object)
$MOQTSetupParameter /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <figure anchor="moqtbasesetupparameters-def">
          <name>MOQTBaseSetupParameters definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTBaseSetupParameters /=  MOQTAuthoritySetupParameter /
                            MOQTAuthorizationTokenSetupParameter /
                            MOQTPathSetupParameter /
                            MOQTMaxRequestIdSetupParameter /
                            MOQTMaxAuthTokenCacheSizeSetupParameter /
                            MOQTImplementationSetupParameter /
                            MOQTUnknownSetupParameter

$MOQTSetupParameter /= MOQTBaseSetupParameters
]]></sourcecode>
        </figure>
        <section anchor="moqtauthoritysetupparameter">
          <name>MOQTAuthoritySetupParameter</name>
          <figure anchor="moqtauthoritysetupparameter-def">
            <name>MOQTAuthoritySetupParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTAuthoritySetupParameter = {
  name: "authority"
  value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtauthorizationtokensetupparameter">
          <name>MOQTAuthorizationTokenSetupParameter</name>
          <figure anchor="moqtauthorizationtokensetupparameter-def">
            <name>MOQTAuthorizationTokenSetupParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTAuthorizationTokenSetupParameter = {
  name: "authorization_token"
  alias_type: $MOQTAliasType
  ? token_alias: uint64
  ? token_type: uint64
  ? token_value: RawInfo
}

$MOQTAliasType /=  "delete" /
                   "register" /
                   "use_alias" /
                   "use_value"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpathsetupparameter">
          <name>MOQTPathSetupParameter</name>
          <figure anchor="moqtpathsetupparameter-def">
            <name>MOQTPathSetupParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPathSetupParameter = {
  name: "path"
  value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtmaxrequestidsetupparameter">
          <name>MOQTMaxRequestIdSetupParameter</name>
          <figure anchor="moqtmaxsubscribeidsetupparameter-def">
            <name>MOQTMaxRequestIdSetupParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTMaxRequestIdSetupParameter = {
  name: "max_request_id"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtmaxauthtokencachesizesetupparameter">
          <name>MOQTMaxAuthTokenCacheSizeSetupParameter</name>
          <figure anchor="moqtmaxauthtokencachesizesetupparameter-def">
            <name>MOQTMaxAuthTokenCacheSizeSetupParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTMaxAuthTokenCacheSizeSetupParameter = {
  name: "max_auth_token_cache_size"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtimplementationsetupparameter">
          <name>MOQTImplementationSetupParameter</name>
          <figure anchor="moqtimplementationsetupparameter-def">
            <name>MOQTImplementationSetupParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTImplementationSetupParameter = {
  name: "implementation"
  value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtunknownsetupparameter">
          <name>MOQTUnknownSetupParameter</name>
          <figure anchor="moqtunknownsetupparameter-def">
            <name>MOQTUnknownSetupParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTUnknownSetupParameter = {
  name:"unknown"
  name_bytes: uint64
  ? length: uint64
  ? value: uint64
  ? value_bytes: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="moqtparameter">
        <name>MOQTParameter</name>
        <t>The generic $MOQTParameter is defined here as a CDDL "type socket" extension
point. It can be extended to support additional MOQT Parameters.</t>
        <figure anchor="moqtparameter-def">
          <name>MOQTParameter type socket definition</name>
          <sourcecode type="cddl"><![CDATA[
; The MOQTParameter is any key-value map (e.g., JSON object)
$MOQTParameter /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <figure anchor="moqtbaseparameters-def">
          <name>MOQTBaseParameters definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTBaseParameters /= MOQTAuthorizationTokenParameter /
                      MOQTDeliveryTimeoutParameter /
                      MOQTMaxCacheDurationParameter /
                      MOQTUnknownParameter

$MOQTParameter /= MOQTBaseParameters
]]></sourcecode>
        </figure>
        <section anchor="moqtauthorizationtokenparameter">
          <name>MOQTAuthorizationTokenParameter</name>
          <figure anchor="moqtauthorizationTokenparameter-def">
            <name>MOQTAuthorizationTokenParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTAuthorizationTokenParameter = {
  name: "authorization_token"
  alias_type: uint64
  ? token_alias: uint64
  ? token_type: uint64
  ? token_value: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtdeliverytimeoutparameter">
          <name>MOQTDeliveryTimeoutParameter</name>
          <figure anchor="moqtdeliverytimeoutparameter-def">
            <name>MOQTDeliveryTimeoutParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTDeliveryTimeoutParameter = {
  name: "delivery_timeout"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtmaxcachedurationparameter">
          <name>MOQTMaxCacheDurationParameter</name>
          <figure anchor="moqtmaxcachedurationparameter-def">
            <name>MOQTMaxCacheDurationParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTMaxCacheDurationParameter = {
  name: "max_cache_duration"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtunknownparameter">
          <name>MOQTUnknownParameter</name>
          <figure anchor="moqtunknownparameter-def">
            <name>MOQTUnknownParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTUnknownParameter = {
  name:"unknown"
  name_bytes: uint64
  ? length: uint64
  ? value: uint64
  ? value_bytes: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="moqtbytestring">
        <name>MOQTByteString</name>
        <t>The MOQTByteString type allows representing MOQT bytestrings, such as the value
of a Track or Track Namespace tuple field, using two different encodings. The
<tt>value</tt> field can be used for bytestrings that can be encoded in UTF-8. The
<tt>value_bytes</tt> field can be used for bytestrings of any type by using the
<tt>hexstring</tt> encoding.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> populate one of either the <tt>value</tt> or <tt>value_bytes</tt>
field. Populating both fields is redundant.</t>
        <figure anchor="MOQTByteString-def">
          <name>MOQTByteString definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTByteString = {
  ? value: text
  ? value_bytes: hexstring
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtlocation">
        <name>MOQTLocation</name>
        <t>A Location, as defined in <xref section="1.3.1" sectionFormat="of" target="MOQT"/></t>
        <figure anchor="moqtlocation-def">
          <sourcecode type="cddl"><![CDATA[
MOQTLocation = {
  group: uint64
  object: uint64
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtcontrolmessage">
        <name>MOQTControlMessage</name>
        <t>The generic <tt>$MOQTControlMessage</tt> is defined here as a CDDL "type socket" extension point.
It can be extended to support additional MOQT control message types.</t>
        <figure anchor="control-message-def">
          <name>MOQTControlMessage type socket definition</name>
          <artwork><![CDATA[
; The MOQTControlMessage is any key-value map (e.g., JSON object)
$MOQTControlMessage /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The MOQT control message types defined in this document are as follows:</t>
        <figure anchor="moqtbasecontrolmessage-def">
          <name>MOQTBaseControlMessages definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTBaseControlMessages = MOQTClientSetupMessage /
                          MOQTServerSetupMessage /
                          MOQTGoaway /
                          MOQTMaxRequestId /
                          MOQTRequestsBlocked /
                          MOQTSubscribe /
                          MOQTSubscribeOk /
                          MOQTSubscribeError /
                          MOQTSubscribeUpdate /
                          MOQTUnsubscribe /
                          MOQTPublishDone /
                          MOQTPublish /
                          MOQTPublishOk /
                          MOQTPublishError /
                          MOQTFetch /
                          MOQTFetchOk /
                          MOQTFetchError /
                          MOQTFetchCancel /
                          MOQTTrackStatus /
                          MOQTTrackStatusOk /
                          MOQTTrackStatusError /
                          MOQTPublishNamespace /
                          MOQTPublishNamespaceOk /
                          MOQTPublishNamespaceError /
                          MOQTPublishNamespaceDone /
                          MOQTPublishNamespaceCancel /
                          MOQTSubscribeNamespace /
                          MOQTSubscribeNamespaceOk /
                          MOQTSubscribeNamespaceError /
                          MOQTUnsubscribeNamespace

$MOQTControlMessage /= MOQTBaseControlMessages
]]></sourcecode>
        </figure>
        <section anchor="moqtclientsetupmessage">
          <name>MOQTClientSetupMessage</name>
          <figure anchor="clientsetup-def">
            <name>MOQTClientSetupMessage definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTClientSetupMessage = {
  type: "client_setup"
  number_of_supported_versions: uint64
  supported_versions: [* uint64]
  number_of_parameters: uint64
  ? setup_parameters: [* $MOQTSetupParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtserversetupmessage">
          <name>MOQTServerSetupMessage</name>
          <figure anchor="serversetup-def">
            <name>MOQTServerSetupMessage definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTServerSetupMessage = {
  type: "server_setup"
  selected_version: uint64
  number_of_parameters: uint64
  ? setup_parameters: [* $MOQTSetupParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtgoaway">
          <name>MOQTGoaway</name>
          <figure anchor="goaway-def">
            <name>MOQTGoaway definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTGoaway = {
  type: "goaway"
  ? length: uint64
  new_session_uri: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtmaxrequestid">
          <name>MOQTMaxRequestId</name>
          <figure anchor="maxsubscribeid-def">
            <name>MOQTMaxRequestId definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTMaxRequestId = {
  type: "max_request_id"
  request_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtrequestsblocked">
          <name>MOQTRequestsBlocked</name>
          <figure anchor="subscribesblocked-def">
            <name>MOQTRequestsBlocked definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRequestsBlocked = {
  type: "requests_blocked"
  maximum_request_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribe">
          <name>MOQTSubscribe</name>
          <figure anchor="subscribe-def">
            <name>MOQTSubscribe definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribe = {
  type: "subscribe"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  subscriber_priority: uint8
  group_order: uint8
  forward: uint8
  filter_type: uint64
  ? start_location: MOQTLocation
  ? end_group: uint64
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribeok">
          <name>MOQTSubscribeOk</name>
          <figure anchor="subscribeok-def">
            <name>MOQTSubscribeOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeOk = {
  type: "subscribe_ok"
  request_id: uint64
  track_alias: uint64
  expires: uint64
  group_order: uint8
  content_exists: uint8
  ? largest_location: MOQTLocation
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribeerror">
          <name>MOQTSubscribeError</name>
          <figure anchor="subscribeerror-def">
            <name>MOQTSubscribeError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeError = {
  type: "subscribe_error"
  request_id: uint64
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribeupdate">
          <name>MOQTSubscribeUpdate</name>
          <figure anchor="subscribeupdate-def">
            <name>MOQTSubscribeUpdate definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeUpdate = {
  type: "subscribe_update"
  request_id: uint64
  subscription_request_id: uint64
  start_location: MOQTLocation
  end_group: uint64
  subscriber_priority: uint8
  forward: uint8
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtunsubscribe">
          <name>MOQTUnsubscribe</name>
          <figure anchor="unsubscribe-def">
            <name>MOQTUnsubscribe definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTUnsubscribe = {
  type: "unsubscribe"
  request_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishdone">
          <name>MOQTPublishDone</name>
          <figure anchor="publishdone-def">
            <name>MOQTPublishDone definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishDone = {
  type: "publish_done"
  request_id: uint64
  status_code: uint64
  stream_count: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublish">
          <name>MOQTPublish</name>
          <figure anchor="publish-def">
            <name>MOQTPublish definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublish = {
  type: "publish"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  track_alias: uint64
  group_order: uint8
  content_exists: uint8
  ? largest: MOQTLocation
  forward: uint8
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishok">
          <name>MOQTPublishOk</name>
          <figure anchor="publishok-def">
            <name>MOQTPublishOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishOk = {
  type: "publish_ok"
  request_id: uint64
  forward: uint8
  subscriber_priority: uint8
  group_order: uint8
  filter_type: uint64
  ? start: MOQTLocation
  ? end_group: uint64
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublisherror">
          <name>MOQTPublishError</name>
          <figure anchor="publisherror-def">
            <name>MOQTPublishError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishError = {
  type: "publish_error"
  request_id: uint64
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtfetch">
          <name>MOQTFetch</name>
          <figure anchor="fetch-def">
            <name>MOQTFetch definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFetch = {
  type: "fetch"
  request_id: uint64
  subscriber_priority: uint8
  group_order: uint8
  fetch_type: $MOQTFetchType
  ? standalone_fetch: $MOQTStandaloneFetch
  ? joining_fetch: $MOQTJoiningFetch
  ? parameters: [* $MOQTParameter]
}

$MOQTStandaloneFetch = {
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  start_location: MOQTLocation
  end_location: MOQTLocation
}

$MOQTJoiningFetch = {
  joining_request_id: uint64
  joining_start: uint64
}

$MOQTFetchType /=  "standalone" /
                   "absolute_joining" /
                   "relative_joining"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtfetchok">
          <name>MOQTFetchOk</name>
          <figure anchor="fetchok-def">
            <name>MOQTFetchOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFetchOk = {
  type: "fetch_ok"
  request_id: uint64
  group_order: uint8
  end_of_track: uint8
  end_location: MOQTLocation
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtfetcherror">
          <name>MOQTFetchError</name>
          <figure anchor="fetcherror-def">
            <name>MOQTFetchError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFetchError = {
  type: "fetch_error"
  request_id: uint64
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtfetchcancel">
          <name>MOQTFetchCancel</name>
          <figure anchor="fetchcancel-def">
            <name>MOQTFetchCancel definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFetchCancel = {
  type: "fetch_cancel"
  request_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqttrackstatus">
          <name>MOQTTrackStatus</name>
          <figure anchor="trackstatus-def">
            <name>MOQTTrackStatus definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTTrackStatus = {
  type: "track_status"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  subscriber_priority: uint8
  group_order: uint8
  forward: uint8
  filter_type: uint64
  ? start_location: MOQTLocation
  ? end_group: uint64
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqttrackstatusok">
          <name>MOQTTrackStatusOk</name>
          <figure anchor="trackstatusok-def">
            <name>MOQTTrackStatusOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTTrackStatusOk = {
  type: "track_status_ok"
  request_id: uint64
  track_alias: uint64
  expires: uint64
  group_order: uint8
  content_exists: uint8
  ? largest_location: MOQTLocation
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqttrackstatuserror">
          <name>MOQTTrackStatusError</name>
          <figure anchor="trackstatuserror-def">
            <name>MOQTTrackStatusError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTTrackStatusError = {
  type: "track_status_error"
  request_id: uint64
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishnamespace">
          <name>MOQTPublishNamespace</name>
          <figure anchor="publishnamespace-def">
            <name>MOQTPublishNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishNamespace = {
  type: "publish_namespace"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishnamespaceok">
          <name>MOQTPublishNamespaceOk</name>
          <figure anchor="publishnamespaceok-def">
            <name>MOQTPublishNamespaceOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishNamespaceOk = {
  type: "publish_namespace_ok"
  request_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishnamespaceerror">
          <name>MOQTPublishNamespaceError</name>
          <figure anchor="publishnamespaceerror-def">
            <name>MOQTPublishNamespaceError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishNamespaceError = {
  type: "publish_namespace_error"
  request_id: uint64
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishnamespacedone">
          <name>MOQTPublishNamespaceDone</name>
          <figure anchor="publishnamespacedone-def">
            <name>MOQTPublishNamespaceDone definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishNamespaceDone = {
  type: "publish_namespace_done"
  track_namespace: [ *MOQTByteString]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishnamespacecancel">
          <name>MOQTPublishNamespaceCancel</name>
          <figure anchor="publishnamespacecancel-def">
            <name>MOQTPublishNamespaceCancel definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishNamespaceCancel = {
  type: "publish_namespace_cancel"
  track_namespace: [ *MOQTByteString]
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribenamespace">
          <name>MOQTSubscribeNamespace</name>
          <figure anchor="subscribenamespace-def">
            <name>MOQTSubscribeNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeNamespace = {
  type: "subscribe_namespace"
  request_id: uint64
  track_namespace_prefix: [ *MOQTByteString]
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribenamespaceok">
          <name>MOQTSubscribeNamespaceOk</name>
          <figure anchor="subscribenamespaceok">
            <name>MOQTSubscribeNamespaceOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeNamespaceOk = {
  type: "subscribe_namespace_ok"
  request_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribenamespaceerror">
          <name>MOQTSubscribeNamespaceError</name>
          <figure anchor="subscribenamespaceerror-def">
            <name>MOQTSubscribeNamespaceError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeNamespaceError = {
  type: "subscribe_namespace_error"
  request_id: uint64
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtunsubscribenamespace">
          <name>MOQTUnsubscribeNamespace</name>
          <figure anchor="unsubscribenamespace-def">
            <name>MOQTUnsubscribeNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTUnsubscribeNamespace = {
  type: "unsubscribe_namespace"
  track_namespace_prefix: [ *MOQTByteString]
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="moqtextensionheader">
        <name>MOQTExtensionHeader</name>
        <figure anchor="extensionheader-def">
          <name>Extension Header definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTExtensionHeader = {
  header_type: uint64
  ? header_value: uint64
  ? header_length: uint64
  ? payload: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security 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:moqt</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>moqt</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>control_message_created,
control_message_parsed,
stream_type_set,
object_datagram_created,
object_datagram_parsed,
subgroup_header_created,
subgroup_header_parsed,
subgroup_object_created,
subgroup_object_parsed,
fetch_header_created,
fetch_header_parsed,
fetch_object_created,
fetch_object_parsed</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions related to the MOQT protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-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="20" month="October" 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-13"/>
      </reference>
      <reference anchor="QLOG-QUIC">
        <front>
          <title>QUIC event definitions for qlog</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Meta</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="20" month="October" year="2025"/>
          <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.

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-quic-events-12"/>
      </reference>
      <reference anchor="MOQT">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <author fullname="Ian Swett" initials="I." surname="Swett">
            <organization>Google</organization>
          </author>
          <author fullname="Alan Frindell" initials="A." surname="Frindell">
            <organization>Meta</organization>
          </author>
          <date day="20" month="October" year="2025"/>
          <abstract>
            <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-15"/>
      </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>
    </references>
    <?line 1219?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Lorenzo Miniero, Sujay Patel, and Aman Sharm for feedback and contributions to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
2f8CTBZFRFt9AAA=

-->

</rfc>
