<?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.34 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pardue-moq-qlog-moq-events-06" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title>MoQ qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-pardue-moq-qlog-moq-events-06"/>
    <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="March" day="16"/>
    <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" /
                    "subscribe_namespace"
]]></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>
        <t>If the publisher_priority is absent, it means that the object inherits the
Publisher Priority specified in the control message that established the subscription.</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>
        <t>If the publisher_priority is absent, it means that the object inherits the
Publisher Priority specified in the control message that established the subscription.</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 5 bits in the type value to convey
various properties. The <tt>subgroup_header_created</tt> event conveys these as
explicit fields, such as contains_end_of_group.</t>
        <t>If the publisher_priority is absent, it means that the subgroup inherits the
Publisher Priority specified in the control message that established the
subscription.</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_mode: uint8
    ? 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 5 bits in the type value to convey
various properties. The <tt>subgroup_header_created</tt> event conveys these as explicit
fields, such as contains_end_of_group.</t>
        <t>If the publisher_priority is absent, it means that the subgroup inherits the
Publisher Priority specified in the control message that established the
subscription.</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_mode: uint8
    ? 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
    object_id_delta: 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
    object_id_delta: 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>
        <t>The FETCH object in MoQT uses serialization flags to encode various
properties. The event conveys these as explicit fields, such as
end_of_unknown_range.</t>
        <figure anchor="fetchobjectcreated-def">
          <name>MOQTFetchObjectCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchObjectCreated = {
    stream_id: uint64
    datagram: bool
    end_of_nonexistent_range: bool
    end_of_unknown_range: bool
    ? subgroup_id_bits: uint8
    ? 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>
        <t>The FETCH object in MoQT uses serialization flags to encode various
properties. The event conveys these as explicit fields, such as
end_of_unknown_range.</t>
        <figure anchor="fetchobjectparsed-def">
          <name>MOQTFetchObjectParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchObjectParsed = {
    stream_id: uint64
    datagram: bool
    end_of_nonexistent_range: bool
    end_of_unknown_range: bool
    ? subgroup_id_bits: uint8
    ? 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 /
                          MOQTRequestUpdate /
                          MOQTUnsubscribe /
                          MOQTPublish /
                          MOQTPublishOk /
                          MOQTPublishDone /
                          MOQTFetch /
                          MOQTFetchOk /
                          MOQTFetchCancel /
                          MOQTTrackStatus /
                          MOQTPublishNamespace /
                          MOQTNamespace /
                          MOQTPublishNamespaceDone /
                          MOQTNamespaceDone /
                          MOQTPublishNamespaceCancel /
                          MOQTSubscribeNamespace

$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
  retry_interval: 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]
  ? track_extensions: [* MOQTExtensionHeader]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtrequestupdate">
          <name>MOQTRequestUpdate</name>
          <figure anchor="requestupdate-def">
            <name>MOQTRequestUpdate definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRequestUpdate = {
  type: "request_update"
  request_id: uint64
  existing_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]
  ? track_extensions: [* MOQTExtensionHeader]
}
]]></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
  number_of_parameters: uint64
  ? 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]
  ? track_extensions: [* MOQTExtensionHeader]
}
]]></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="moqtnamespace">
          <name>MOQTNamespace</name>
          <figure anchor="namespace-def">
            <name>MOQTNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTNamespace = {
  type: "namespace"
  track_namespace_suffix: [ *MOQTByteString]
}
]]></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"
  request_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtnamespacedone">
          <name>MOQTNamespaceDone</name>
          <figure anchor="namespacedone-def">
            <name>MOQTNamespaceDone definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTNamespaceDone = {
  type: "namespace_done"
  track_namespace_suffix: [ *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"
  request_id: uint64
  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]
  subscribe_options: $MOQTSubscribeOptions
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}

$MOQTSubscribeOptions /=  "publish" /
                          "namespace" /
                          "both"
]]></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="2" month="March" 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-17"/>
      </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 1239?>

<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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
+1nwfx1C7ykIgQAA

-->

</rfc>
