<?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.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pardue-moq-qlog-moq-events-05" 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-05"/>
    <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="February" day="04"/>
    <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: uint16
    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: uint16
    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="moqtlocation">
        <name>MOQTLocation</name>
        <t>A Location, as defined in <xref section="1.4.1" sectionFormat="of" target="MOQT"/></t>
        <figure anchor="moqtlocation-def">
          <name>MOQTLocation definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTLocation = {
  group: uint64
  object: uint64
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtsubscriptionfilter">
        <name>MOQTSubscriptionFilter</name>
        <t>A Subscription Filter, as defined in <xref section="5.1.2" sectionFormat="of" target="MOQT"/></t>
        <figure anchor="moqtsubscriptionfilter-def">
          <name>MOQTSubscriptionFilter definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubscriptionFilter = {
  filter_type: uint64
  ? start_location: MOQTLocation
  ? end_group: uint64
}
]]></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 /
                            MOQTPathSetupParameter /
                            MOQTMaxRequestIdSetupParameter /
                            MOQTMaxAuthTokenCacheSizeSetupParameter /
                            MOQTAuthorizationTokenSetupParameter /
                            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="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="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="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 /
                      MOQTPublisherPriorityParameter /
                      MOQTSubscriberPriorityParameter /
                      MOQTGroupOrderParameter /
                      MOQTSubscriptionFilterParameter /
                      MOQTExpiresParameter /
                      MOQTLargestObjectParameter /
                      MOQTForwardParameter /
                      MOQTDynamicGroupsParameter /
                      MOQTNewGroupRequestParameter /
                      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="moqtpublisherpriorityparameter">
          <name>MOQTPublisherPriorityParameter</name>
          <figure anchor="moqtpublisherpriorityparameter-def">
            <name>MOQTPublisherPriorityParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublisherPriorityParameter = {
  name: "publisher_priority"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscriberpriorityparameter">
          <name>MOQTSubscriberPriorityParameter</name>
          <figure anchor="moqtsubscriberpriorityparameter-def">
            <name>MOQTSubscriberPriorityParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscriberPriorityParameter = {
  name: "subscriber_priority"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtgrouporderparameter">
          <name>MOQTGroupOrderParameter</name>
          <figure anchor="moqtgrouporderparameter-def">
            <name>MOQTGroupOrderParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTGroupOrderParameter = {
  name: "group_order"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscriptionfilterparameter">
          <name>MOQTSubscriptionFilterParameter</name>
          <figure anchor="moqtsubscriptionfilterparameter-def">
            <name>MOQTSubscriptionFilterParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscriptionFilterParameter = {
  name: "subscription_filter"
  value: MOQTSubscriptionFilter
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtexpiresparameter">
          <name>MOQTExpiresParameter</name>
          <figure anchor="moqtexpiresparameter-def">
            <name>MOQTExpiresParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTExpiresParameter = {
  name: "expires"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtlargestobjectparameter">
          <name>MOQTLargestObjectParameter</name>
          <figure anchor="moqtlargestobjectparameter-def">
            <name>MOQTLargestObjectParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTLargestObjectParameter = {
  name: "largest_object"
  value: MOQTLocation
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtforwardparameter">
          <name>MOQTForwardParameter</name>
          <figure anchor="moqtforwardparameter-def">
            <name>MOQTForwardParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTForwardParameter = {
  name: "forward"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtdynamicgroupsparameter">
          <name>MOQTDynamicGroupsParameter</name>
          <figure anchor="moqtdynamicgroupsparameter-def">
            <name>MOQTDynamicGroupsParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTDynamicGroupsParameter = {
  name: "dynamic_groups"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtnewgrouprequestparameter">
          <name>MOQTNewGroupRequestParameter</name>
          <figure anchor="moqtnewgrouprequestparameter-def">
            <name>MOQTNewGroupRequestParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTNewGroupRequestParameter = {
  name: "new_group_request"
  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="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 /
                          MOQTRequestOk /
                          MOQTRequestError /
                          MOQTSubscribe /
                          MOQTSubscribeOk /
                          MOQTSubscribeUpdate /
                          MOQTUnsubscribe /
                          MOQTPublish /
                          MOQTPublishOk /
                          MOQTPublishDone /
                          MOQTFetch /
                          MOQTFetchOk /
                          MOQTFetchCancel /
                          MOQTTrackStatus /
                          MOQTPublishNamespace /
                          MOQTPublishNamespaceDone /
                          MOQTPublishNamespaceCancel /
                          MOQTSubscribeNamespace /
                          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_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"
  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"
  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="moqtrequestok">
          <name>MOQTRequestOk</name>
          <figure anchor="requestok-def">
            <name>MOQTRequestOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRequestOk = {
  type: "request_ok"
  request_id: uint64
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtrequesterror">
          <name>MOQTRequestError</name>
          <figure anchor="requesterror-def">
            <name>MOQTRequestError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRequestError = {
  type: "request_error"
  request_id: uint64
  error_code: uint64
  ? reason: text
  ? reason_bytes: hexstring
}
]]></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
  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
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></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
  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="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
  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
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></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="moqtfetch">
          <name>MOQTFetch</name>
          <figure anchor="fetch-def">
            <name>MOQTFetch definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFetch = {
  type: "fetch"
  request_id: uint64
  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
  end_of_track: uint8
  end_location: MOQTLocation
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></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
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></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="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="moqtunsubscribenamespace">
          <name>MOQTUnsubscribeNamespace</name>
          <figure anchor="unsubscribenamespace-def">
            <name>MOQTUnsubscribeNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTUnsubscribeNamespace = {
  type: "unsubscribe_namespace"
  request_id: uint64
}
]]></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="13" month="January" year="2026"/>
          <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-16"/>
      </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 1197?>

<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:
H4sIAAAAAAAAA+0923LbRrLv+Io5dKpO4iLpVeJkY+46jizJtlKSpejysJVK
USA4JBGBAIMBTCmK8y37LefLTnfP4DKDGQB04nM2VfGDRQI9M909fZ8LR6OR
l4VZxCdscJp8z36OkiXj73icsTlfhHGYhUksBl7gZ3yZpPcTFsaLxPPmSRD7
a2g1T/1FNtr46Tzno3Xy8wh7oA/Uixj97UtP5LN1KAT0lN1voM3x0dUrxh4x
PxIJjBvGc77h8F+cDYZswOdhlqShH+GX4/2X8CdJ4dPF1auBF+frGU8n3hzw
mXgB4MZjkYsJy9Kce+8m7AvPT7kPvQ68bZLeLtMk3yBt0KvPzt7xlH1/fXww
8G75PbyfTzw2YquQLcI5j8Ls3gOkc+iZMWdLxiQVA/y49sMIPgK934Y8W4yT
dImP/TRYweNVlm3E5MkThMJH4Ts+LsCe4IMnszTZCv4E2j/BdsswW+UzaHly
Thx90sVebBQBL0RWG041HsvexmHS2U0nwHiVraOB5/l5tkpS5BoMzNgijyIp
Byd54AsmB6ZXQKIfh7/4KEATdhAl+XwBTJAvueRbhI2+pf/l0OMgWTf7PvWz
VSjYUbzk0cxPM0v/VzxYxWHgR+w6Bi6nAuaSJQt2msPTVX3MNXU25kVn3y7x
uX3g/bUfs8uVn659y5inPPPrPftrQaDfruEFdejFCXzPAKGJB5Dfn5y9Hp3u
H7+dULPj0SFJw+jnPAwUw/0wHolgBT2WDVDqnA3ok5wiz0PVrMbzRqMR82ci
S/0g87wrZCGobb4ulZsL5tc1Xg7MQKsywCOMl/gxSHnGJYBg0D8DMzFWva/D
+TzinveIHcdZmszzADmzw1CfPjxccmrEvsbpKjn0/v1nXhcepJhJoZjsKvVj
sUnSjD08/Nfp2fdXz0t+oRxnxev378fIDdUXw5kG6Qs424K6sBDNULgIodcb
aJbdMKSFSJj/gwnOoXeJ/AieQl9AukfiWXW0zqMs3EQltnOewpSwRZqsWQYD
Ex+KmWFHhEYQ+UJ4NX783eTHkHE/WDF+l4GtRKZgVwMwhP4AzBeP5syP58pq
x0vAiYdgNhGr4v07P8pxIgBMAAFAZyCAFw8PylRn/izi798zka/Xfhr+ArA4
BnYh2yJKEgnCGe0gQPhZjUfgHyQ7xIYHwMeAlGXMLpN1wXFEWWIkWC44TO4a
mHUnn2OfYsxgfuANmouUb1L4HGfQN1gYMM9rgQ4h5aNcIMJ1RzVk2xXoOzaU
BhwaZcmSAxkpA6bCX2+WZBlMBJCSaXKKMgWzkILlAKb8yt5WZDv//cqO1yhT
fgzT/itjhyUq7Ffv18moxz8NSm8CXTCUwQlqQppEUxAw4S/5FHTBR36UWBwk
KS+/PDwoeAWuoGFinR2C9RVVf10dSuh6fyDK3F9PcfKmgmdNNhn9SXiaa57V
O0pmP4H8T1EUlin02EWphC/ALZSaHXZRqndooTSfkWBNV9wHve5EsICX4BYE
zQ67ENQ7bEFQUd4XQQnehqDqsC+CEryJ4IJnwcrBPlt/BO9kn9abgVpHby7U
7IxzduZknNZbX9QaXHuYsEd1+8woXH8+QA8nfYcYvAcX/Ihdo25KL4YOsebk
0DqLIA1nZJ8NuxdAjDPjaInnsjHYQfyb5BkDR7VUrgYMcUT8IGdbdlsYfcC/
jFbIKy5qPdaaDMmlEH4lBpl/C64GzHzAwfuCJUUceYp2fgF2HvzDGtODOTiN
iJObJR+G7pODJwNmkZPxwJbkG/Ro9cGRDG38kNxVvVtyYYhWiI4IUaL+wN2I
cAl/vGWUzPwoumcQTf4M/qAWJGSJ9Ig0HYJTloPuC4Y4PiTeQscVg31yqV7p
TctwYCB1LJwrZz1E0C2PItVEQhUMwDnCz16FyZBtkgy/EKIiXyzCOxhwdk+t
34G3R8udhIXf/vQV9MHvfCR56PmzYL73+RdPwXqnEFGNabRtkkPUoMIw6ka+
HQkYVrFf0QBAsQpckOne62ugvuj0szGGiAdJjDOAbpqmr/KVQooqpGQMczIB
Sdf15RWmf/iXvT2jzxdHMI0XR4f4+fLN/slJ+cFTEJdvzq5PDqtPVcuDs9PT
o7eHsjE8Zdojb3C6/y94g1gNzs6vjs/e7p8MmpqCUQXM9wwFFORzgxEpTqmn
adfLg/P/+ffeU4xCL14dfL639wz0WH75eu/vT+HLFiRCjpbEMFfyK3Dx3vM3
G+6n2AvMIkjPJswgSSZZEKtkGzOIYzhw8/EPyJkfJ+yfs2Cz9/Qb9QAJ1h4W
PNMeEs+aTxqNJRMtjyzDlNzUnhuc1vHd/5f2veB77eE/X0RgXdho7+sX33j1
mJ0CXYwWIY6AnCNPtSBQTpwxb/wOw0hQQU+JMohjEEKMeYj91OK2Ez9e5mhI
YcoODg9PnuO8fbX3N5g3HDaERItCcEFDaTOvTKCM11WSsUiiKNmiDVURL2UB
GiThF1IcyWUQj6ZiQnH3sEorhh7q7ZAIH7LCXAzZhb89hsRPClQWrvlIWWpP
jgiISDdB4xQWm+wyWKewil8jYC6ZG4OoMkMbfwHq7uk07gu0pmQCfMEpiNaI
G1bGS+V8jZmqqZhHrIgzaSfIkvnLOBGQqaDmgfkB86YScCaTXZksMPCcoTRH
8jFi5ceeYdHnkJOQhUaDJBOvS4lVTQIeHtUSvGbiLHkjGOgj0UaWf5MmWRIk
EQ5bihqSJw2pYjZJryd7H7NzdB/QQcohi08JS2Fw3MgBhwa3Ur4MBVgiOQEq
Xy0FRjJGy7evL44BQ+8mT+MJZsYT9J1rMUEsJ9JBTqiXMUUUh1gV0vl0rByO
zOsgOgHEIQcP43QRPB9gFQ6jkTO0azrvReEqgM9+BN4qn0WhWAGXQMHIUWIu
mFUhy4xHSSyjj8TLTEqIpfgUSepBD7sGtCPwi5gdxh6Oye+AeRgQGHgWlrRw
8+RB14JH7zgmrDIegmmAkTHWaFJJxTRGVaga3Rr6NAZae9RZdKxZikn7YDSQ
akwuNQUx2iQy2Zd9yvInqoIifczqblxBPXtWZLdVjAX4lrHCvKSiJ/tGz57d
KHtWVTlqQRAYRR4tcIw4AXO7WID8FrEHxVqlgJPi1UJXz6MvasplbUMK8yfn
SqUIEK30DSsNL5OBTK3moNtetj+fh4UJkb4VPSpoLBqoOSATZEVvsxALvypQ
ClMSQzBzG4hz5JQZowr2LvQVjp/cMPQRKnpjIglueTZg4h7E4Y7cNta4vVYv
8dtvv7FgPo+IEyWx7Dmx6UAm3qcy8T5QKckTjxn/mrDnMuGwg15S/n0F/uQS
snU7zBllIocqE24fWodtH1qlh28oB2vvVoft1a3EpF+3Era121eYk/VBtQbY
3WEfJGuAskPPa6oEeyLFpHyA0kQpI6mtyhtBTepZY9W6csVkdRrdV5EOGvW6
pqKfxuQQIwnMb3wW8JTShAANFnW5IvsGsDK5gm9R4TYi/x4zFmXq0OeL+L/B
ckRb/x4rxUlMkTb+WUM7NFYznm05jPTm6uqcGtaSurGMDe+CFQRvFARQdFg0
wdH1ZjQ+2itFg9Job6AKWdh8in5tLu3xoKwf1d8oXjSSX2kpy5p1xTdZ3STm
LfKUipKFCUNvtx0qE0QJWmVfPRVhYdkCWYE2GAahkip1rupyiEoQ5ZCb+WBz
fYEWa5X6QhVp0cdCnPIOkze/tI/VqgGAq9hYhVDAR2DifYZ5H6S9ECNCsPUm
2QItKaEqam+IKjD/HkTPKWSbnEqvmCyp+i0VL8AiXl+9Gn2NZXNIYufSmfkB
JOMJrulBopqGSY513iBBYsXQ25KEIF7bkCJlX86xX9BdkC1MuodVgFatPagw
umyTbUHQNjKipIB5wm5kLzfsU3QXhPBnJAfqxRSZIuC176343YhwBXKlE2dl
xZq++FtiofhszMxQQWVTtBqQQfjti8xDkZfsH7JZnjFIkwhglsjKTAwAMjhz
FYUfHtnLv1IqbxzNbpSEYvy6DrOsptiyQcVswVSbsXecgZYLWcgyMwmlBjUb
A3Nmdobfi/AE1QjNlo5+00fafeJz9kB2VGlwCAlUDt76q6f09AXgFC+zlXy4
9xU9VCNM2CfNblUrmL5JkWF59Owx++QTMq5WLo9Ki+m9122xHdwwzXbSKhaq
Sp+jfG/OvKoiOiZevt1p3mWT/4hpV072/3nWJUOsk24FbJ1uRVJjts3FFchP
teUTNb8GWDGxAZbdwKmqWZV1SgKVbmaGhVAwg7dxso3BRmUeTu1L9BqWqdVm
RI8ii6l4waAjnk7YGf5pmZ0awmoyqg4NrmsEa+z2jIYYEbGBYv7AElvhv4Gx
6OKEq68uDMqp1bEx5lRnSmMyXQtcD4/sS1lqch3NXNqLbu/s5XdHB1fTw/2r
/dcX+6eF3Hs1+806FFmbbXs+UMw6VoNvp34U+kKb5KJOZeilosd4XtQE0ukG
ogBciZWvv1atyolXUyKmdf0uO2+ATdgPj2WcXLyRkfqPOjYCHHMu7Jhu/Pso
8eeVWcC3kKxOk8VUbRWaJUlkyK11Tq3mwg5pyJZ9CjplrHQP1sVNh4S1u4cO
AVOO4nfIl2Hf/xKvbvFqcUZWwFbhcjojx/o3OCXrSnfhnOzN3NGHclEzvgzV
epHvXV6/fH1xdn0+fXO0f3h0wfpasmLfTlFWfTb+vFnIRjTNASTbMEQ5TcBt
5gL85N7n0m+qzTS4/kfhf5G5eJBibSAXDtU2lk7aCwct8ymf6seQKIeZqt8P
VdFSFCtxYloXDLncSTXEYpxwXtTkSz2oiq+pyNTjoaWVl8hpGLMzTE+3ISZR
oQrUKGGaV6XXlAN7IdWTvGhEB9ZCT3vAtqOa13DfQdGtbFT6RWpXLu9MVSJn
VT6rvFu1zw5pxg1WdnXqX2nbrftCHNrXbdubqub1tOkfTY86tIUZ2uL9mbWl
V3bz51WWFk9lBWxVlU5PZeznqVRF37lj6orerMVTqQallIPofUh8ba9gdyW4
O062PTD6OIGPHtrYu/yQ0MguWdpktoqWDumQLX0WOoWrYYa1fVwO0eqqwDQl
q28FpkWwehZO/pIry0T2EKt2i6VNQUOorDsjHx5ZNkAqgbI12C2kfnV0dfBm
13jaFDDLIlm7eOGCMBeauOjMb5JsZb0FzGC8BbV2tpeK3NwoamP6x4ykXDzu
pcG7sLhFuBtQbRw+L/a4OljccMSW/bMak/u6YIKuWcmaFHu7cXgX52s1hLsZ
yPbY689sPptT65avVodsmZZ28dI12OaHLeD9ZUtXXm9X0eqlvH9JVj/J6jJc
bS65OSeGWMmlEtonQQsLjf3K1dbO8uSStrmxvrEeU99q+4RcwJXrI5Wk0HeQ
jEGUBL62djHATXYZr1YgaIWlTpFs21AMHPMkUZsuvH1WfB7KbZ61zftFbWxv
/HS8Rycnoen794YgF+2V/KpksJxEye/ygb4CGqm25kSUfVqxh8gJ907R+vyr
MMqQY/us/pTJx26SvhzvUcHPTlJzAEXcgr6o5amSRAiBMz/NpgU1E53HpDWQ
Keuc0RkhaiPKQSzhoomTnTl44OEc9+xxYgxK5ZKDJISBWlDTAOrH9GhPBe5P
UxvYSHrV/rVq24/c8UbGTkmz3KIn93aIfEPnLavNJFLIaVRWDivq5vAfVMux
4+bH93gIYCRPR6z9DfuUj5fjIfvu8uytEq7PPBthTwp7+phlgCF7/g12ZvId
22yKNg2e6z3W+GHwXpMeXCfVWwpagcR3+3RWGiyviax1rbH4hy3P/Wy1c6NT
/+5CBn3H8w9pjOheJbc8PvCDFb8Mf+E796Iolvuzqa+du9D3yOzc/DqmdWxT
MRwy45hBTWpm8F6XnMaGOpsQmPr6qE0kDKFyCY4Ucnk0feAXQHgFAGnMhGTf
EPoSrF36XUPayWjKp0GBRYA15Dfwvh1vhGhH2TKGHVu3YhhYt2iQhv3av5tW
+VWNDqu5B2hl8Wc8nLfT1IKBk7YuvW0S2anpDWpRiqYZNpkG2GYqoFEPwrEd
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
MCBzewAA

-->

</rfc>
