<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-marx-quic-qlog-datagram-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title abbrev="qlog Datagram extension">QUIC and HTTP/3 Datagram event definitions for qlog</title>
    <seriesInfo name="Internet-Draft" value="draft-marx-quic-qlog-datagram-00"/>
    <author fullname="Robin Marx">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <date year="2022" month="October" day="24"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>qlog</keyword>
    <keyword>datagram</keyword>
    <abstract>
      <t>This document describes qlog data type definitions for both the QUIC Datagram
Frame defined in <xref target="RFC9221"/> and the HTTP/3 Datagram Frame defined in
<xref target="RFC9297"/>. These data types are intended for use within event definitions
defined in <xref target="QLOG-QUIC"/> and <xref target="QLOG-HTTP3"/>.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rmarx.github.io/draft-marx-quic-qlog-datagram/draft-marx-quic-qlog-datagram.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-marx-quic-qlog-datagram/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        QUIC Working Group mailing list (<eref target="mailto:quic@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/quic/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rmarx/draft-marx-quic-qlog-datagram"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes qlog data type definitions for both the QUIC Datagram
Frame defined in <xref target="RFC9221"/> and the HTTP/3 Datagram Frame defined in
<xref target="RFC9297"/>. These data types are intended for use within event definitions
defined in <xref target="QLOG-QUIC"/> and <xref target="QLOG-HTTP3"/>.</t>
      <t>This document extends the <tt>$QuicFrame</tt> extension point defined in <xref target="QLOG-QUIC"/>
and the <tt>$HTTPFrame</tt> extension point defined in <xref target="QLOG-HTTP3"/>. It also defines
how to log a QUIC transport parameter for indicating QUIC datagram support, as
well as an HTTP/3 setting to indicate HTTP/3 datagram support.</t>
    </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>
      <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: data and RawInfo.</t>
    </section>
    <section anchor="quic-datagrams">
      <name>QUIC Datagrams</name>
      <t>qlog support for QUIC Datagram frames consists of two aspects:</t>
      <ul spacing="normal">
        <li>support for logging the max_datagram_frame_size QUIC transport parameter</li>
        <li>support for logging the type, length and contents of the DATAGRAM frame itself</li>
      </ul>
      <section anchor="maxdatagramframesize-transport-parameter">
        <name>max_datagram_frame_size transport parameter</name>
        <t>Support for the QUIC Datagram extension defined in <xref target="RFC9221"/> is signaled using the <tt>max_datagram_frame_size</tt> transport parameter, defined in <xref section="3" sectionFormat="of" target="RFC9221"/>.</t>
        <t>If utilized, this transport parameter <bcp14>MUST</bcp14> be logged as a field of the
<tt>transport:parameters_set</tt> event defined in <xref target="QLOG-QUIC"/>, more specifically:</t>
        <figure anchor="transport-parametersset-example">
          <name>TransportParametersSet extended with the max_datagram_frame_size parameter</name>
          <sourcecode type="cddl"><![CDATA[
TransportParametersSet = {
    ? max_datagram_frame_size: uint64
    * text => any
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quicdatagramframe-definition">
        <name>QUICDatagramFrame Definition</name>
        <t>This section describes a qlog data type that can be used to log the contents of
the QUIC DATAGRAM frame defined in <xref section="4" sectionFormat="of" target="RFC9221"/>.</t>
        <t>The <tt>$QuicFrame</tt> extension point defined in <xref target="QLOG-QUIC"/> is utilized to link
the QUICDatagramFrame type to the existing qlog data types.</t>
        <figure anchor="quicdatagramframe-def">
          <name>QUICDatagramFrame definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramFrame = {
    frame_type: "datagram"
    ? length: uint64
    ? raw: RawInfo
}

$QuicFrame /= QUICDatagramFrame
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="http3-datagrams">
      <name>HTTP/3 Datagrams</name>
      <t>qlog support for HTTP/3 Datagram frames consists of two aspects:</t>
      <ul spacing="normal">
        <li>support for logging the SETTINGS_H3_DATAGRAM HTTP/3 setting</li>
        <li>support for logging the type and contents of the HTTP/3 DATAGRAM frame itself</li>
      </ul>
      <section anchor="settingsh3datagram-setting">
        <name>SETTINGS_H3_DATAGRAM setting</name>
        <t>Support for the HTTP/3 Datagram extension defined in <xref target="RFC9297"/> is signaled using the <tt>SETTINGS_H3_DATAGRAM</tt> setting, defined in <xref section="2.1.1" sectionFormat="of" target="RFC9297"/>.</t>
        <t>If utilized, this setting <bcp14>MUST</bcp14> be logged as a field of the <tt>HTTPSetting</tt> data
type defined in <xref target="QLOG-HTTP3"/>, more specifically:</t>
        <figure anchor="http3datagramsetting-example">
          <name>HTTPSetting instance for SETTINGS_H3_DATAGRAM</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3DatagramSetting = {
    name: "SETTINGS_H3_DATAGRAM"
    value: uint16
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="httpdatagramframe-definition">
        <name>HTTPDatagramFrame Definition</name>
        <t>This section describes a qlog data type that can be used to log the contents of
the HTTP/3 DATAGRAM frame defined in <xref section="2" sectionFormat="of" target="RFC9297"/>.</t>
        <t>The <tt>$HTTPFrame</tt> extension point defined in <xref target="QLOG-HTTP3"/> is utilized to link
the HTTPDatagramFrame type to the existing qlog data types.</t>
        <figure anchor="httpdatagramframe-def">
          <name>HTTPDatagramFrame definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTPDatagramFrame = {
    frame_type: "datagram"
    quarter_stream_id: uint64
    ? raw: RawInfo
}

$HTTPFrame /= HTTPDatagramFrame
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>The security and privacy considerations discussed in <xref target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="QLOG-MAIN">
        <front>
          <title>Main logging schema for qlog</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>KU Leuven</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Facebook</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
            <organization>Protocol Labs</organization>
          </author>
          <date day="31" month="August" year="2022"/>
          <abstract>
            <t>   This document describes a high-level schema for a standardized
   logging format called qlog.  This format allows easy sharing of data
   and the creation of reusable visualization and debugging tools.  The
   high-level schema in this document is intended to be protocol-
   agnostic.  Separate documents specify how the format should be used
   for specific protocol data.  The schema is also format-agnostic, and
   can be represented in for example JSON, csv or protobuf.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-03"/>
      </reference>
      <reference anchor="QLOG-QUIC">
        <front>
          <title>QUIC event definitions for qlog</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>KU Leuven</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Facebook</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
            <organization>Protocol Labs</organization>
          </author>
          <date day="31" month="August" year="2022"/>
          <abstract>
            <t>   This document describes concrete qlog event definitions and their
   metadata for QUIC events.  These events can then be embedded in the
   higher level schema defined in [QLOG-MAIN].

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-02"/>
      </reference>
      <reference anchor="QLOG-HTTP3">
        <front>
          <title>HTTP/3 and QPACK qlog event definitions</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>KU Leuven</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Facebook</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
            <organization>Protocol Labs</organization>
          </author>
          <date day="31" month="August" year="2022"/>
          <abstract>
            <t>   This document describes concrete qlog event definitions and their
   metadata for HTTP/3 and QPACK-related events.  These events can then
   be embedded in the higher level schema defined in [QLOG-MAIN].

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-02"/>
      </reference>
      <reference anchor="RFC9221">
        <front>
          <title>An Unreliable Datagram Extension to QUIC</title>
          <author fullname="T. Pauly" initials="T." surname="Pauly">
            <organization/>
          </author>
          <author fullname="E. Kinnear" initials="E." surname="Kinnear">
            <organization/>
          </author>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi">
            <organization/>
          </author>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9221"/>
        <seriesInfo name="DOI" value="10.17487/RFC9221"/>
      </reference>
      <reference anchor="RFC9297">
        <front>
          <title>HTTP Datagrams and the Capsule Protocol</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi">
            <organization/>
          </author>
          <author fullname="L. Pardue" initials="L." surname="Pardue">
            <organization/>
          </author>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
            <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
            <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9297"/>
        <seriesInfo name="DOI" value="10.17487/RFC9297"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <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">
            <organization/>
          </author>
          <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">
            <organization/>
          </author>
          <author fullname="C. Vigano" initials="C." surname="Vigano">
            <organization/>
          </author>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <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>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
R6LwDq0p3pAEJT4a9AZoIJfEe9Lfj1fqhEkVAAA=

-->

</rfc>
